- in lapjoint primo implemento di MakeBySawPlusChain, da completare

- in BeamExec -> collect si scrive l'id della feature btl
This commit is contained in:
luca.mazzoleni
2024-03-15 09:09:08 +01:00
parent 4b7c533ae3
commit 653557a23d
3 changed files with 169 additions and 0 deletions
+166
View File
@@ -172,6 +172,7 @@ local function AssignQIdent( Proc)
Q_ANTISPLINT_TYPE = ''
Q_MAX_ELEVATION = 'Q10'
Q_STAIRCASE = ''
Q_SAW_PLUS_CHAIN = ''
if ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 16 then
Q_FORCE_BLADE = 'Q01' -- i
@@ -4580,6 +4581,153 @@ local function MakeTunnelByChainSaw( Proc, sSawing, nLundIdFace, vtOrtho, dWorkD
return true
end
---------------------------------------------------------------------
local function MakeBySawPlusChain( Proc, sTopologyLongName, b3Raw)
if sTopologyLongName == 'Pocket-Blind-RightAngles-Parallel-5' then
-- se tasca su faccia sotto la strategia non è applicabile (la sega a catena in generale non può lavorare da sotto)
if Proc.AffectedFaces.Bottom then
local sErr = 'Feature '.. Proc.FeatureId .. ': Strategy not applicable - pocket on bottom face'
return false, sErr
end
-- faccia da lavorare, la stessa per lama e motosega
do
Proc.Pocket = {}
-- faccia di fondo
local vBottomFace = Topology.GetFacesWithGivenAdjacencyNumber( Proc, Proc.vAdj, 4)
Proc.Pocket.BottomFace = {}
Proc.Pocket.BottomFace.Id = vBottomFace[1]
Proc.Pocket.BottomFace.Width = Proc.Face[ Proc.Pocket.BottomFace.Id + 1].Width
Proc.Pocket.BottomFace.Height = Proc.Face[ Proc.Pocket.BottomFace.Id + 1].Height
Proc.Pocket.BottomFace.Elevation = Proc.Face[ Proc.Pocket.BottomFace.Id + 1].Elevation
Proc.Pocket.BottomFace.vtN = Proc.Face[ Proc.Pocket.BottomFace.Id + 1].VtN
if Proc.Pocket.BottomFace.Height > Proc.Pocket.BottomFace.Width then
Proc.Pocket.BottomFace.Width, Proc.Pocket.BottomFace.Height = Proc.Pocket.BottomFace.Height, Proc.Pocket.BottomFace.Width
end
-- facce adiacenti a quella di fondo
local vFacesAdjacentToBottom = EgtSurfTmFacetAdjacencies( Proc.Id, Proc.Pocket.BottomFace.Id)[1]
-- si cerca la faccia adiacente a quella di fondo sul lato lungo
local dMaxLen = 0
for i = 1, #vFacesAdjacentToBottom do
local _, ptP1, ptP2 = EgtSurfTmFacetsContact( Proc.Id, Proc.Pocket.BottomFace.Id, vFacesAdjacentToBottom[i], GDB_ID.ROOT)
local dLen = dist( ptP1, ptP2)
if dLen > dMaxLen then
Proc.Pocket.FaceToMachine = vFacesAdjacentToBottom[i]
dMaxLen = dLen
end
end
end
-- caratteristiche della tasca
Proc.Pocket.Width = Proc.Pocket.BottomFace.Width
Proc.Pocket.Height = Proc.Pocket.BottomFace.Height
Proc.Pocket.Depth = Proc.Pocket.BottomFace.Elevation
Proc.Pocket.Direction = Proc.Pocket.BottomFace.vtN
-- lavorazione di lama e relativi dati
local Cutting = {}
Cutting.Tool = {}
Cutting.Name, Cutting.IsDownHead = ML.FindCutting( 'HeadSide')
Cutting.Tool.Diameter = 0
Cutting.Tool.Thickness = 0
Cutting.Tool.MaxDepth = 0
if EgtMdbSetCurrMachining( Cutting.Name) then
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
Cutting.Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or Cutting.Tool.Diameter
Cutting.Tool.Thickness = EgtTdbGetCurrToolParam(MCH_TP.THICK) or Cutting.Tool.Thickness
Cutting.Tool.MaxDepth = EgtTdbGetCurrToolMaxDepth() or Cutting.Tool.MaxDepth
end
end
-- lavorazione di sega a catena e relativi dati
local Chainsawing = {}
Chainsawing.Tool = {}
Chainsawing.Name, Chainsawing.IsDownHead = ML.FindSawing( 'Sawing')
Chainsawing.Tool.Length = 0
Chainsawing.Tool.Width = 0
Chainsawing.Tool.MaxMat = 0
Chainsawing.Tool.Thickness = 0
Chainsawing.Tool.CornerRadius = 0
if EgtMdbSetCurrMachining( Chainsawing.Name) then
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
Chainsawing.Tool.Length = EgtTdbGetCurrToolParam( MCH_TP.LEN) or Chainsawing.Tool.Length
Chainsawing.Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or Chainsawing.Tool.MaxMat
Chainsawing.Tool.Width = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or Chainsawing.Tool.Width
Chainsawing.Tool.Thickness = EgtTdbGetCurrToolParam( MCH_TP.THICK) or Chainsawing.Tool.Thickness
Chainsawing.Tool.CornerRadius = EgtTdbGetCurrToolParam( MCH_TP.CORNRAD) or Chainsawing.Tool.CornerRadius
end
end
-- se tasca più stretta della lama la strategia non è applicabile
if Cutting.Tool.Diameter > Proc.Pocket.Width - 10 * GEO.EPS_SMALL then
local sErr = 'Feature '.. Proc.FeatureId .. ': Strategy not applicable - pocket too narrow for saw blade diameter'
return false, sErr
end
-- se tasca più stretta della sega a catena la strategia non è applicabile
if Chainsawing.Tool.Width > Proc.Pocket.Width - 10 * GEO.EPS_SMALL then
local sErr = 'Feature '.. Proc.FeatureId .. ': Strategy not applicable - pocket too narrow for chainsaw width'
return false, sErr
end
-- se tasca meno spessa della lama la strategia non è applicabile
if Cutting.Tool.Thickness > Proc.Pocket.Height - 10 * GEO.EPS_SMALL then
local sErr = 'Feature '.. Proc.FeatureId .. ': Strategy not applicable - pocket too narrow for saw blade thickness'
return false, sErr
end
-- se tasca meno spessa della sega a catena la strategia non è applicabile
if Chainsawing.Tool.Thickness > Proc.Pocket.Height - 10 * GEO.EPS_SMALL then
local sErr = 'Feature '.. Proc.FeatureId .. ': Strategy not applicable - pocket too narrow for chainsaw thickness'
return false, sErr
end
-- parametri della lavorazione con lama
-- profondità e offset radiale
if Cutting.Tool.MaxDepth > Proc.Pocket.Depth - 10 * GEO.EPS_SMALL then
Cutting.Depth = Proc.Pocket.Depth
Cutting.RadialOffset = 0
else
Cutting.Depth = Cutting.Tool.MaxDepth
Cutting.RadialOffset = Proc.Pocket.Depth - Cutting.Depth
end
-- faceuse
Cutting.Direction = Proc.Pocket.Direction
-- approccio e retrazione
Cutting.LeadIn = {}
Cutting.LeadOut = {}
Cutting.LeadIn.Type = MCH_MILL_LI.LINEAR
Cutting.LeadOut.Type = MCH_MILL_LI.LINEAR
Cutting.LeadIn.StartAddLength = -sqrt( Cutting.Depth * Cutting.Tool.Diameter - Cutting.Depth * Cutting.Depth)
Cutting.LeadOut.StartAddLength = -sqrt( Cutting.Depth * Cutting.Tool.Diameter - Cutting.Depth * Cutting.Depth)
Cutting.LeadIn.TangentDistance = 0
Cutting.LeadOut.TangentDistance = 0
Cutting.LeadIn.PerpDistance = 1
Cutting.LeadOut.PerpDistance = 1
Cutting.LeadIn.Elevation = 0
Cutting.LeadOut.Elevation = 0
Cutting.LeadIn.CompLength = 0
Cutting.LeadOut.CompLength = 0
-- lavorazione con lama
local bOk, sErr = Fbs.MakeOne( Proc.Id, Proc.Pocket.FaceToMachine, Cutting.Name, Cutting.Tool.Diameter, Cutting.Direction, 2, Cutting.RadialOffset, BD.CUT_SIC, 0, -Cutting.LeadIn.StartAddLength, -Cutting.LeadOut.StartAddLength, sNotes, b3Raw)
return bOk, sErr
elseif sTopologyLongName == 'Groove-Through-RightAngles-Parallel-3' then
return
elseif sTopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' then
return
else
local sErr = 'Feature '.. Proc.FeatureId .. ' : Strategy not implemented for topology ' .. sTopologyLongName
return false, sErr
end
end
---------------------------------------------------------------------
local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePart, bPrevBhSideMill, bAllWithEndCap)
if not BD.MAXDIAM_POCK_CORNER then
@@ -4602,6 +4750,24 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
EgtOutLog( sErr)
return false, sErr
end
-- rimuovere true or!!!!!!
if true or EgtGetInfo( Proc.Id, Q_SAW_PLUS_CHAIN, 'i') == 1 then --TEST
local bOk
local sErr
bOk, sErr = MakeBySawPlusChain( Proc, Proc.TopologyLongName, b3Raw)
return bOk, sErr
end
local bClosedOrthoFaces
local nFacInd, dFacElev, nFacInd2, dFacElev2
local nBottomFace