Compare commits

..

4 Commits

Author SHA1 Message Date
Emmanuele Sassi 9cb0a58005 - verifica uso etichette 2026-06-25 15:40:32 +02:00
luca.mazzoleni 765af0e268 - commento in STR0007 2026-06-23 18:18:33 +02:00
luca.mazzoleni 3e74e7f1e2 - in tutte le strategie di base accorciamento percorsi corretto (non funzionava in caso di utensile che entra più del raggio)
- piccole correzioni e migliorie varie
2026-06-23 17:49:33 +02:00
luca.mazzoleni c56c5f4522 Merge branch 'Messages' into develop 2026-06-23 13:09:54 +02:00
6 changed files with 74 additions and 47 deletions
+14 -13
View File
@@ -20,14 +20,7 @@ local function GetExtraAddLengthInclinedSides( Face, Edge)
return 0, 0 return 0, 0
end end
local nPreviousEdgeIndex = Edge.id + 1 - 1 local nPreviousEdgeIndex, nNextEdgeIndex = BeamLib.GetAdjacentIndices( Edge.id + 1, #Face.Edges)
if nPreviousEdgeIndex < 1 then
nPreviousEdgeIndex = #Face.Edges
end
local nNextEdgeIndex = Edge.id + 1 + 1
if nNextEdgeIndex > #Face.Edges then
nNextEdgeIndex = 1
end
local vtEdgePrevious = Face.Edges[nPreviousEdgeIndex].vtEdge local vtEdgePrevious = Face.Edges[nPreviousEdgeIndex].vtEdge
local vtEdgeNext = Face.Edges[nNextEdgeIndex].vtEdge local vtEdgeNext = Face.Edges[nNextEdgeIndex].vtEdge
@@ -99,6 +92,14 @@ local function CalculateLeadInOutLength( ptToolCenter, vtNFace, b3Box, vtLeadInO
end end
-------------------------------------------------------------------------------------------------------------
local function GetToolAddLength( dToolDiameter, dDepthToMachine)
local dCheckDepth = min( dToolDiameter / 2, dDepthToMachine)
local dToolAddLength = sqrt( dCheckDepth * dToolDiameter - dCheckDepth * dCheckDepth)
return dToolAddLength
end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalParameters) function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalParameters)
@@ -118,7 +119,7 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalPa
local bIsEndClosed = not Edge.bIsEndOpen local bIsEndClosed = not Edge.bIsEndOpen
-- accorciamento per lati chiusi -- accorciamento per lati chiusi
LeadInOut.dToolMarkLength = sqrt( dDepthToMachine * Tool.dDiameter - dDepthToMachine * dDepthToMachine) LeadInOut.dToolAddLength = GetToolAddLength( Tool.dDiameter, dDepthToMachine)
LeadInOut.dExtraAddLengthStart, LeadInOut.dExtraAddLengthEnd = GetExtraAddLengthInclinedSides( Face, Edge) LeadInOut.dExtraAddLengthStart, LeadInOut.dExtraAddLengthEnd = GetExtraAddLengthInclinedSides( Face, Edge)
-- allungamento per faccia singola (aperta in tutte le direzioni) -- allungamento per faccia singola (aperta in tutte le direzioni)
LeadInOut.dAddedLengthOpenFace = BeamData.CUT_EXTRA LeadInOut.dAddedLengthOpenFace = BeamData.CUT_EXTRA
@@ -140,14 +141,14 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalPa
-- calcolo allungamenti / accorciamenti -- calcolo allungamenti / accorciamenti
if bIsStartClosed and bIsEndClosed then if bIsStartClosed and bIsEndClosed then
LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthStart LeadIn.dStartAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthStart
LeadOut.dEndAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthEnd LeadOut.dEndAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthEnd
elseif bIsStartClosed then elseif bIsStartClosed then
LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthStart LeadIn.dStartAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthStart
-- eventuale correzione per accorciamento maggiore di larghezza tasca -- eventuale correzione per accorciamento maggiore di larghezza tasca
LeadOut.dEndAddLength = max( -LeadIn.dStartAddLength - Edge.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) LeadOut.dEndAddLength = max( -LeadIn.dStartAddLength - Edge.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
elseif bIsEndClosed then elseif bIsEndClosed then
LeadOut.dEndAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthEnd LeadOut.dEndAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthEnd
-- eventuale correzione per accorciamento maggiore di larghezza tasca -- eventuale correzione per accorciamento maggiore di larghezza tasca
LeadIn.dStartAddLength = max( -LeadOut.dEndAddLength - Edge.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) LeadIn.dStartAddLength = max( -LeadOut.dEndAddLength - Edge.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
else else
+32 -15
View File
@@ -191,6 +191,19 @@ local Parts = {}
-- ciclo su pezzi per aggiungerli al nesting -- ciclo su pezzi per aggiungerli al nesting
local dTotLen = 0 local dTotLen = 0
for nPartId, nCount in pairs( PARTLIST) do for nPartId, nCount in pairs( PARTLIST) do
-- verifico se usa etichette
local sTagList = EgtGetInfo( nPartId, 'LuxTagList')
if sTagList and #sTagList then
local TagTypeList = EgtSplitString( sTagList, ';')
local UnusedTagList = EgtSplitString( TagTypeList[1], ',')
if #UnusedTagList < nCount then
NEST.ERR = 12
NEST.MSG = 'Errore! Tentativo di nestare piu\' pezzi delle etichette disponibili!'
WriteErrToLogFile( NEST.ERR, NEST.MSG)
PostErrView( NEST.ERR, NEST.MSG)
end
end
-- recupero lunghezza pezzo -- recupero lunghezza pezzo
local Len = EgtGetInfo( nPartId, "L", 'd') local Len = EgtGetInfo( nPartId, "L", 'd')
local DispLen = EgtIf( Len <= 1000, 2000, 0) --EgtIf( Len <= 2000, max( 2000, 6000 - Len), 0) local DispLen = EgtIf( Len <= 1000, 2000, 0) --EgtIf( Len <= 2000, max( 2000, 6000 - Len), 0)
@@ -500,22 +513,26 @@ for nMachineIndex = 1, #NEST.MACHINELIST do
end end
end end
local nAssignedTagIndex = #UnusedTagList local nAssignedTagIndex = #UnusedTagList
local sAssignedTag = UnusedTagList[nAssignedTagIndex] if nAssignedTagIndex == 0 then
-- creo stringa per info etichette aggiornata EgtOutLog( 'Errore! Etichetta per pezzo non trovata dopo nesting!')
local sNewTagList = ''
for nUnusedTagIndex = 1, nAssignedTagIndex - 1 do
sNewTagList = sNewTagList .. UnusedTagList[nUnusedTagIndex] .. EgtIf( nUnusedTagIndex < nAssignedTagIndex - 1, ',', '')
end
sNewTagList = sNewTagList .. ';' .. UnusedTagList[nAssignedTagIndex] .. EgtIf( #UsedTagList > 0, ',', '')
for nUsedTagIndex = 1, #UsedTagList do
sNewTagList = sNewTagList .. UsedTagList[nUsedTagIndex] .. EgtIf( nUsedTagIndex < #UsedTagList, ',', '')
end
-- assegno etichetta a nuovo duplo
EgtSetInfo( nPartDuploId, 'LuxTag', sAssignedTag)
if #NEST.MACHINELIST == 1 then
EgtSetInfo( CurrPart.PartId, 'LuxTagList', sNewTagList)
else else
EgtSetInfo( CurrPart.PartId, 'LuxTagList' .. nMachineIndex, sNewTagList) local sAssignedTag = UnusedTagList[nAssignedTagIndex]
-- creo stringa per info etichette aggiornata
local sNewTagList = ''
for nUnusedTagIndex = 1, nAssignedTagIndex - 1 do
sNewTagList = sNewTagList .. UnusedTagList[nUnusedTagIndex] .. EgtIf( nUnusedTagIndex < nAssignedTagIndex - 1, ',', '')
end
sNewTagList = sNewTagList .. ';' .. UnusedTagList[nAssignedTagIndex] .. EgtIf( #UsedTagList > 0, ',', '')
for nUsedTagIndex = 1, #UsedTagList do
sNewTagList = sNewTagList .. UsedTagList[nUsedTagIndex] .. EgtIf( nUsedTagIndex < #UsedTagList, ',', '')
end
-- assegno etichetta a nuovo duplo
EgtSetInfo( nPartDuploId, 'LuxTag', sAssignedTag)
if #NEST.MACHINELIST == 1 then
EgtSetInfo( CurrPart.PartId, 'LuxTagList', sNewTagList)
else
EgtSetInfo( CurrPart.PartId, 'LuxTagList' .. nMachineIndex, sNewTagList)
end
end end
end end
end end
+1
View File
@@ -30,6 +30,7 @@ local function GetSCC( Machining)
end end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
-- TODO l'utensile non viene scelto correttamente in base alla dimensione della geometria da lavorare!
function GetMortiseStrategy( Proc, Part) function GetMortiseStrategy( Proc, Part)
local Machining = {} local Machining = {}
Machining.Milling = {} Machining.Milling = {}
+4 -4
View File
@@ -607,7 +607,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
end end
local bStartLeft = MachiningLib.StartsLeftSide( Cutting) local bStartLeft = MachiningLib.StartsLeftSide( Cutting)
local dAddLengthLeftSide = Cutting.LeadOut.dEndAddLength local dAddLengthLeftSide = Cutting.LeadOut.dEndAddLength
local dAddLengthToReduce = sqrt( Cutting.dDepthToMachine * TOOLS[Cutting.nToolIndex].dDiameter - Cutting.dDepthToMachine * Cutting.dDepthToMachine) local dToolAddLength = sqrt( Cutting.dDepthToMachine * TOOLS[Cutting.nToolIndex].dDiameter - Cutting.dDepthToMachine * Cutting.dDepthToMachine)
if bStartLeft then if bStartLeft then
dAddLengthLeftSide = Cutting.LeadIn.dStartAddLength dAddLengthLeftSide = Cutting.LeadIn.dStartAddLength
end end
@@ -618,15 +618,15 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
else else
Cutting.bIsApplicable = false Cutting.bIsApplicable = false
end end
elseif dAddLengthLeftSide + dAddLengthToReduce > dExtendAfterTail then elseif dAddLengthLeftSide + dToolAddLength > dExtendAfterTail then
if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then
Cutting.sStage = 'AfterTail' Cutting.sStage = 'AfterTail'
Cutting.bMoveAfterSplit = true Cutting.bMoveAfterSplit = true
else else
if bStartLeft then if bStartLeft then
Cutting.LeadIn.dStartAddLength = - dAddLengthToReduce + dExtendAfterTail Cutting.LeadIn.dStartAddLength = - dToolAddLength + dExtendAfterTail
else else
Cutting.LeadOut.dEndAddLength = - dAddLengthToReduce + dExtendAfterTail Cutting.LeadOut.dEndAddLength = - dToolAddLength + dExtendAfterTail
end end
end end
end end
+6 -6
View File
@@ -17,8 +17,8 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, sSideToMachine, dLe
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) -- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
-- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi -- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi
local dAddLengthToReduce = 0 local dToolAddLength = 0
dAddLengthToReduce = TOOLS[Machining.nToolIndex].dDiameter / 2 dToolAddLength = TOOLS[Machining.nToolIndex].dDiameter / 2
if Machining.bInvert then if Machining.bInvert then
Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed
@@ -29,16 +29,16 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, sSideToMachine, dLe
LeadIn.dStartAddLength = 0 LeadIn.dStartAddLength = 0
LeadOut.dEndAddLength = 0 LeadOut.dEndAddLength = 0
if sSideToMachine == 'End' then if sSideToMachine == 'End' then
LeadIn.dStartAddLength = dAddLengthToReduce + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength LeadIn.dStartAddLength = dToolAddLength + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength
elseif Machining.bIsStartClosed then elseif Machining.bIsStartClosed then
LeadIn.dStartAddLength = -dAddLengthToReduce LeadIn.dStartAddLength = -dToolAddLength
else else
LeadIn.dStartAddLength = BeamData.CUT_EXTRA LeadIn.dStartAddLength = BeamData.CUT_EXTRA
end end
if sSideToMachine == 'Start' then if sSideToMachine == 'Start' then
LeadOut.dEndAddLength = dAddLengthToReduce + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength LeadOut.dEndAddLength = dToolAddLength + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength
elseif Machining.bIsEndClosed then elseif Machining.bIsEndClosed then
LeadOut.dEndAddLength = -dAddLengthToReduce LeadOut.dEndAddLength = -dToolAddLength
else else
LeadOut.dEndAddLength = BeamData.CUT_EXTRA LeadOut.dEndAddLength = BeamData.CUT_EXTRA
end end
+17 -9
View File
@@ -58,11 +58,19 @@ local function GetLeadInOutType( Machining)
end end
local function GetToolAddLength( dToolDiameter, dDepthToMachine)
local dCheckDepth = min( dToolDiameter / 2, dDepthToMachine)
local dToolAddLength = sqrt( dCheckDepth * dToolDiameter - dCheckDepth * dCheckDepth)
return dToolAddLength
end
local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature) local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature)
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) -- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
-- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi -- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi
local dAddLengthToReduce = sqrt( Machining.dDepthToMachine * TOOLS[Machining.nToolIndex].dDiameter - Machining.dDepthToMachine * Machining.dDepthToMachine) local dToolAddLength = GetToolAddLength( TOOLS[Machining.nToolIndex].dDiameter, Machining.dDepthToMachine)
if Machining.bInvert then if Machining.bInvert then
Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed
@@ -106,14 +114,14 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature)
LeadIn.dCompLength = 0 LeadIn.dCompLength = 0
LeadOut.dCompLength = 0 LeadOut.dCompLength = 0
if Machining.bIsStartClosed and Machining.bIsEndClosed then if Machining.bIsStartClosed and Machining.bIsEndClosed then
LeadIn.dStartAddLength = -dAddLengthToReduce LeadIn.dStartAddLength = -dToolAddLength
LeadOut.dEndAddLength = -dAddLengthToReduce LeadOut.dEndAddLength = -dToolAddLength
elseif Machining.bIsStartClosed then elseif Machining.bIsStartClosed then
LeadIn.dStartAddLength = -dAddLengthToReduce LeadIn.dStartAddLength = -dToolAddLength
-- eventuale correzione per accorciamento maggiore di larghezza tasca -- eventuale correzione per accorciamento maggiore di larghezza tasca
LeadOut.dEndAddLength = max( -LeadIn.dStartAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) LeadOut.dEndAddLength = max( -LeadIn.dStartAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
elseif Machining.bIsEndClosed then elseif Machining.bIsEndClosed then
LeadOut.dEndAddLength = -dAddLengthToReduce LeadOut.dEndAddLength = -dToolAddLength
-- eventuale correzione per accorciamento maggiore di larghezza tasca -- eventuale correzione per accorciamento maggiore di larghezza tasca
LeadIn.dStartAddLength = max( -LeadOut.dEndAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) LeadIn.dStartAddLength = max( -LeadOut.dEndAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
else else
@@ -421,7 +429,7 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara
end end
local bStartLeft = MachiningLib.StartsLeftSide( Milling) local bStartLeft = MachiningLib.StartsLeftSide( Milling)
local dAddLengthLeftSide = Milling.LeadOut.dEndAddLength local dAddLengthLeftSide = Milling.LeadOut.dEndAddLength
local dAddLengthToReduce = sqrt( Milling.dDepthToMachine * TOOLS[Milling.nToolIndex].dDiameter - Milling.dDepthToMachine * Milling.dDepthToMachine) local dToolAddLength = sqrt( Milling.dDepthToMachine * TOOLS[Milling.nToolIndex].dDiameter - Milling.dDepthToMachine * Milling.dDepthToMachine)
if bStartLeft then if bStartLeft then
dAddLengthLeftSide = Milling.LeadIn.dStartAddLength dAddLengthLeftSide = Milling.LeadIn.dStartAddLength
end end
@@ -431,14 +439,14 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara
else else
Milling.bIsApplicable = false Milling.bIsApplicable = false
end end
elseif dAddLengthLeftSide + dAddLengthToReduce > dExtendAfterTail then elseif dAddLengthLeftSide + dToolAddLength > dExtendAfterTail then
if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then
Milling.sStage = 'AfterTail' Milling.sStage = 'AfterTail'
else else
if bStartLeft then if bStartLeft then
Milling.LeadIn.dStartAddLength = - dAddLengthToReduce + dExtendAfterTail Milling.LeadIn.dStartAddLength = - dToolAddLength + dExtendAfterTail
else else
Milling.LeadOut.dEndAddLength = - dAddLengthToReduce + dExtendAfterTail Milling.LeadOut.dEndAddLength = - dToolAddLength + dExtendAfterTail
end end
end end
end end