From 9f6a89d5ae896eb687f404c2061b59ae91fe32a8 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Mon, 12 Jan 2026 18:56:16 +0100 Subject: [PATCH 1/6] - in STR0006 e STR0007 gestito allungamento percorso LeadIn/Out per test finecorsa --- Strategies/Standard/STR0001/STR0001.lua | 7 +++++++ Strategies/Standard/STR0006/STR0006.lua | 7 +++++++ Strategies/Standard/STR0007/STR0007.lua | 2 ++ 3 files changed, 16 insertions(+) diff --git a/Strategies/Standard/STR0001/STR0001.lua b/Strategies/Standard/STR0001/STR0001.lua index 860dc6e..46681eb 100644 --- a/Strategies/Standard/STR0001/STR0001.lua +++ b/Strategies/Standard/STR0001/STR0001.lua @@ -187,8 +187,15 @@ local function GetTenonStrategy( Proc, Part) -- test finecorsa sulla passata più esterna: se extracorsa, la lavorazione non è fattibile -- TODO sostituire con applicazione della lavorazione? + -- TODO funzione per allungare il percorso?????? local idGeomMaxOffset = EgtCopyGlob( Proc.FeatureInfo.idAddAuxGeom, Part.idTempGroup) EgtOffsetCurve( idGeomMaxOffset, Machining.Milling.AuxiliaryData.Clones[1].dRadialOffset + TOOLS[Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2, Part.idTempGroup) + local vtCurveStart = EgtSV( idGeomMaxOffset, GDB_ID.ROOT) + local vtCurveEnd = EgtEV( idGeomMaxOffset, GDB_ID.ROOT) + local ptCurveStart = EgtSP( idGeomMaxOffset, GDB_ID.ROOT) + -vtCurveStart * Machining.Milling.LeadIn.dTangentDistance + ( Proc.FeatureInfo.vtTenonN ^ -vtCurveStart) * Machining.Milling.LeadIn.dPerpDistance + local ptCurveEnd = EgtEP( idGeomMaxOffset, GDB_ID.ROOT) + vtCurveEnd * Machining.Milling.LeadOut.dTangentDistance + ( vtCurveEnd ^ Proc.FeatureInfo.vtTenonN) * Machining.Milling.LeadOut.dPerpDistance + EgtAddCurveCompoArcTg( idGeomMaxOffset, ptCurveStart, false, GDB_RT.GLOB) + EgtAddCurveCompoArcTg( idGeomMaxOffset, ptCurveEnd, true, GDB_RT.GLOB) local bOutOfStroke = PreSimulationLib.CheckOutOfStrokeFromGeometry( idGeomMaxOffset, Proc.FeatureInfo.vtTenonN, Machining.Milling.nSCC, TOOLS[Machining.Milling.ToolInfo.nToolIndex]) if bOutOfStroke then Machining.Milling.bIsApplicable = false diff --git a/Strategies/Standard/STR0006/STR0006.lua b/Strategies/Standard/STR0006/STR0006.lua index afbbf21..ed3ccb0 100644 --- a/Strategies/Standard/STR0006/STR0006.lua +++ b/Strategies/Standard/STR0006/STR0006.lua @@ -163,8 +163,15 @@ local function GetTenonStrategy( Proc, Part) -- test finecorsa sulla passata più esterna: se extracorsa, la lavorazione non è fattibile -- TODO sostituire con applicazione della lavorazione? + -- TODO funzione per allungare il percorso?????? local idGeomMaxOffset = EgtCopyGlob( Proc.FeatureInfo.idAddAuxGeom, Part.idTempGroup) EgtOffsetCurve( idGeomMaxOffset, Machining.Milling.AuxiliaryData.Clones[1].dRadialOffset + TOOLS[Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2, Part.idTempGroup) + local vtCurveStart = EgtSV( idGeomMaxOffset, GDB_ID.ROOT) + local vtCurveEnd = EgtEV( idGeomMaxOffset, GDB_ID.ROOT) + local ptCurveStart = EgtSP( idGeomMaxOffset, GDB_ID.ROOT) + -vtCurveStart * Machining.Milling.LeadIn.dTangentDistance + ( Proc.FeatureInfo.vtTenonN ^ -vtCurveStart) * Machining.Milling.LeadIn.dPerpDistance + local ptCurveEnd = EgtEP( idGeomMaxOffset, GDB_ID.ROOT) + vtCurveEnd * Machining.Milling.LeadOut.dTangentDistance + ( vtCurveEnd ^ Proc.FeatureInfo.vtTenonN) * Machining.Milling.LeadOut.dPerpDistance + EgtAddCurveCompoArcTg( idGeomMaxOffset, ptCurveStart, false, GDB_RT.GLOB) + EgtAddCurveCompoArcTg( idGeomMaxOffset, ptCurveEnd, true, GDB_RT.GLOB) local bOutOfStroke = PreSimulationLib.CheckOutOfStrokeFromGeometry( idGeomMaxOffset, Proc.FeatureInfo.vtTenonN, Machining.Milling.nSCC, TOOLS[Machining.Milling.ToolInfo.nToolIndex]) if bOutOfStroke then Machining.Milling.bIsApplicable = false diff --git a/Strategies/Standard/STR0007/STR0007.lua b/Strategies/Standard/STR0007/STR0007.lua index 5fecf2d..65d423c 100644 --- a/Strategies/Standard/STR0007/STR0007.lua +++ b/Strategies/Standard/STR0007/STR0007.lua @@ -187,6 +187,7 @@ function GetMortiseStrategy( Proc, Part) -- test finecorsa sulla passata più esterna: se extracorsa, la lavorazione non è fattibile local idGeomMaxOffset = EgtCopyGlob( Proc.FeatureInfo.idAddAuxGeom, Part.idTempGroup) + -- TODO funzione per allungare il percorso?????? EgtAddCurveCompoLineTg( idGeomMaxOffset, Machining.Milling.LeadIn.dTangentDistance, false) EgtAddCurveCompoLineTg( idGeomMaxOffset, Machining.Milling.LeadOut.dTangentDistance, true) EgtOffsetCurve( idGeomMaxOffset, Machining.Milling.AuxiliaryData.Clones[1].dRadialOffset + TOOLS[Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2, Part.idTempGroup) @@ -388,6 +389,7 @@ function GetMortiseAntiSplint( Proc, Part, ToolInfo) local idGeomOffset = EgtCopyGlob( nId1, Part.idTempGroup) EgtOffsetCurve( idGeomOffset, EgtIf( AntiSplint.bInvert, -TOOLS[ToolInfo.nToolIndex].dDiameter / 2, TOOLS[ToolInfo.nToolIndex].dDiameter / 2), Part.idTempGroup) -- trasformo arco in una curva compo per poi allungarla in direzione tangente + -- TODO funzione per allungare il percorso?????? idGeomOffset = EgtCurveCompo( Part.idTempGroup, idGeomOffset) EgtAddCurveCompoLineTg( idGeomOffset, AntiSplint.LeadIn.dTangentDistance, false) EgtAddCurveCompoLineTg( idGeomOffset, AntiSplint.LeadOut.dTangentDistance, true) From d3bf4659236df53b0048ea328da1e8e4467c2b0a Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 13 Jan 2026 09:11:38 +0100 Subject: [PATCH 2/6] STR0002 e STR0010 non vengono eseguite se ostacolano il pinzaggio --- Strategies/Standard/STR0002/STR0002.lua | 8 ++++++++ Strategies/Standard/STR0010/STR0010.lua | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index e1c1f8a..94c9153 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -494,12 +494,20 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Result = {} Strategy.Result.dTimeToMachine = 0 + -- se la lavorazione ostacola il pinzaggio, non posso farla if not IsTopologyOk( Proc) then local sErr = 'Feature '.. Proc.idFeature .. ' : strategy ' .. StrategyLib.Config.sStrategyId .. ' not implemented' EgtOutLog( sErr) Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sErr) return false, Strategy.Result end + -- se la lavorazione ostacola il pinzaggio, non posso farla, serve una lavorazioen che lasci il testimone + if MachiningLib.IsFeatureHinderingClamping( Proc, Part) then + local sErr = 'Feature '.. Proc.idFeature .. ' : strategy ' .. StrategyLib.Config.sStrategyId .. ' not applicable ( Feature hinders clamping)' + EgtOutLog( sErr) + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sErr) + return false, Strategy.Result + end local bAreAllMachiningsAdded = true local dFeatureVolume = Proc.dVolume diff --git a/Strategies/Standard/STR0010/STR0010.lua b/Strategies/Standard/STR0010/STR0010.lua index 48efe24..15ee988 100644 --- a/Strategies/Standard/STR0010/STR0010.lua +++ b/Strategies/Standard/STR0010/STR0010.lua @@ -187,6 +187,14 @@ function STR0010.Make( bAddMachining, Proc, Part, CustomParameters) end end + -- se la lavorazione ostacola il pinzaggio, non posso farla, serve una lavorazioen che lasci il testimone + if MachiningLib.IsFeatureHinderingClamping( Proc, Part) then + local sErr = 'Feature '.. Proc.idFeature .. ' : strategy ' .. StrategyLib.Config.sStrategyId .. ' not applicable ( Feature hinders clamping)' + EgtOutLog( sErr) + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sErr) + return false, Strategy.Result + end + -- volume della feature local dFeatureVolume = Proc.dVolume From 1e4e75115c26cfcefeb54db746b173af3b883f16 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 13 Jan 2026 09:24:13 +0100 Subject: [PATCH 3/6] - in STR0010 corretta scelta lato nel caso 2 facce --- Strategies/Standard/STR0010/STR0010.lua | 34 ++++++++++++------------- StrategyLibs/BLADEKEEPWASTE.lua | 1 - 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Strategies/Standard/STR0010/STR0010.lua b/Strategies/Standard/STR0010/STR0010.lua index 48efe24..78521dd 100644 --- a/Strategies/Standard/STR0010/STR0010.lua +++ b/Strategies/Standard/STR0010/STR0010.lua @@ -112,31 +112,31 @@ local function IsPositionOK( Proc, Part) end ------------------------------------------------------------------------------------------------------------- --- TODO da sistemare -local function GetBottomFaceEdge( Proc, nIndexFace) +-- contemplate max 2 facce +local function GetBottomFaceEdge( Proc, Face) local Edge = {} -- si lavora la bottom longitudinalmente if Proc.nFct == 1 or Proc.Topology.sFamily == 'DoubleBevel' then local BottomEdgesSorted = {} - for i = 1, #Proc.MainFaces.BottomFaces[nIndexFace].Edges do - table.insert( BottomEdgesSorted, Proc.MainFaces.BottomFaces[nIndexFace].Edges[i]) + for i = 1, #Face.Edges do + table.insert( BottomEdgesSorted, Face.Edges[i]) end table.sort( BottomEdgesSorted, CompareEdges) + Edge = BottomEdgesSorted[1] - -- edge in comune tra le due facce - elseif Proc.nFct == 2 then - if nIndexFace == 1 then - Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.LongEdges[1] - elseif nIndexFace == 2 then - Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.BottomEdge - end + + -- si lavora il lato in comune tra le due facce else - if nIndexFace == 1 then - Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.LongEdges[1] - elseif nIndexFace == 2 then - Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.BottomEdge + -- ricerca lato in comune + local nCommonEdge + for i = 1, #Face.Edges do + if Face.Edges[i].idAdjacentFace > -1 then + nCommonEdge = i + end end + + Edge = Face.Edges[nCommonEdge] end return Edge @@ -208,7 +208,7 @@ function STR0010.Make( bAddMachining, Proc, Part, CustomParameters) local bAreAllMachiningsAdded = true local Milling = {} local OptionalParametersFaceByMill = { nStepType = MCH_MILL_ST.ONEWAY, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail} - local EdgeToMachine = GetBottomFaceEdge( Proc, 1) + local EdgeToMachine = GetBottomFaceEdge( Proc, Proc.MainFaces.BottomFaces[1]) if EdgeToMachine.bIsOpen then OptionalParametersFaceByMill.dDepthToMachine = EdgeToMachine.dElevation + BeamData.CUT_EXTRA end @@ -224,7 +224,7 @@ function STR0010.Make( bAddMachining, Proc, Part, CustomParameters) if dAngleBetweenFaces >= -91 then Milling = {} OptionalParametersFaceByMill = { nStepType = MCH_MILL_ST.ONEWAY, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail} - EdgeToMachine = GetBottomFaceEdge( Proc, 2) + EdgeToMachine = GetBottomFaceEdge( Proc, Proc.MainFaces.BottomFaces[2]) if EdgeToMachine.bIsOpen then OptionalParametersFaceByMill.dDepthToMachine = EdgeToMachine.dElevation + BeamData.CUT_EXTRA end diff --git a/StrategyLibs/BLADEKEEPWASTE.lua b/StrategyLibs/BLADEKEEPWASTE.lua index 5324037..4997299 100644 --- a/StrategyLibs/BLADEKEEPWASTE.lua +++ b/StrategyLibs/BLADEKEEPWASTE.lua @@ -121,7 +121,6 @@ end function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) -- TODO verificare funzionamento con lama da sotto -- TODO scelta utensile è corretto lasciarla a FaceByBlade? - -- attenzione perchè se l'inclinazione della faccia la fa finire oltre lo spigolo questo riduce il massimo (come calcolare????) local Result = {} local Machinings = {} From 90f06cb7ec3042f960896e2cb7ce30535ef58cc8 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 13 Jan 2026 13:04:03 +0100 Subject: [PATCH 4/6] =?UTF-8?q?Gestione=20feature=20non=20lavorata=20perch?= =?UTF-8?q?=C3=A9=20slave=20di=20un'altra.=20Per=20ora=20gestito=20il=20ca?= =?UTF-8?q?so=20speciale=20dei=20tagli=20in=20testa=20e=20coda?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BatchProcessNew.lua | 3 +-- LuaLibs/BeamExec.lua | 51 ++++++++++++++++++++++++++------------------ 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index d2de1a1..55fe4ed 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -775,8 +775,7 @@ if bToProcess then end end - -- se scarico a caduta (-101, -102) le lavorazioni dopo separazione vanno disattivate - + -- TODO: se scarico a caduta (-101, -102) le lavorazioni dopo separazione vanno disattivate. Scrivere info feature incompleta su quelle feature -- Salvo il progetto EgtSaveFile( sNgeFile) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 8fe4516..7a7340a 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -617,6 +617,7 @@ local function CollectFeatures( Part, dRotIndex) local nDo = EgtGetInfo( ProcId, 'DO', 'i') or 1 if nGrp and nPrc and nDo == 1 then local Proc = {} + Proc.isVirtualProc = nInd == 1 -- feature non presente in lista originale BTL ma aggiunta da automatismo Proc.idPart = Part.id Proc.idRaw = Part.idRaw Proc.nIndexPartInParts = Part.nIndexInParts @@ -783,8 +784,8 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part) local ProcB = vProcSingleRot[j] -- non si controlla la feature con se stessa o se feature disabilitata if i ~= j and ProcB.nFlg ~= 0 then - -- verifico se il taglio aggiunto manualmente può essere saltato perchè nella stessa posizione c'è un altro taglio di testa - if ID.IsHeadCut( Proc) and ( ID.IsHeadCut( ProcB) and EgtGetInfo( ProcB.id, 'HEAD_ADD_CUT', 'i') == 1) then + -- se entrambi tagli di testa, si tiene sempre il primo ( ma non quello aggiunto dall'automatismo) + if ( ID.IsHeadCut( Proc) and not EgtGetInfo( Proc.id, 'HEAD_ADD_CUT', 'i')) and ID.IsHeadCut( ProcB) then if not Proc.SlaveProcIndexes then Proc.SlaveProcIndexes = {} end @@ -792,8 +793,8 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part) ProcB.nIndexMasterProc = i ProcB.nFlg = 0 end - -- verifico se il taglio aggiunto manualmente può essere saltato perchè nella stessa posizione c'è un altro taglio di coda - if ID.IsTailCut( Proc) and ( ID.IsTailCut( ProcB) and EgtGetInfo( ProcB.id, 'HEAD_ADD_CUT', 'i') == 1) then + -- se entrambi tagli di coda, si tiene sempre il primo ( ma non quello aggiunto dall'automatismo) + if ( ID.IsTailCut( Proc) and not EgtGetInfo( Proc.id, 'HEAD_ADD_CUT', 'i')) and ID.IsTailCut( ProcB) then if not Proc.SlaveProcIndexes then Proc.SlaveProcIndexes = {} end @@ -1071,6 +1072,7 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters) local dCompletionIndex local dCompositeRating local sInfo + local sApplyInfo if not OptionalParameters then OptionalParameters = {} @@ -1078,13 +1080,20 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters) local nRotation = OptionalParameters.nRotation or 1 if Proc.nIndexMasterProc then + -- se è una feature non presente in elenco ed è saltata perchè lavorata da un'altra feature, non si fa passare dai RESULT. + -- se non avesse una master associata, allora risulterà come messaggio su pezzo + if Proc.isVirtualProc then + return + end local ChosenStrategyTable = PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nIndexRotation][Proc.nIndexMasterProc].ChosenStrategy if ChosenStrategyTable then sStrategyId = ChosenStrategyTable.sStrategyId sStatus = ChosenStrategyTable.Result.sStatus dCompletionIndex = ChosenStrategyTable.Result.dCompletionIndex dCompositeRating = ChosenStrategyTable.Result.dCompositeRating - sInfo = ChosenStrategyTable.Result.sInfo + -- all'indice nIndexMasterProc si toglie -2 perchè son presenti tagli testa e coda, e -1 perché elenco zero-based + -- TODO sarebbe più bello assegnare un nome o un identificativo. L'indice così ricavato non è molto sicuro. + sApplyInfo = 'Skipped. Feature machined: ' .. EgtNumToString( Proc.nIndexMasterProc - 2 - 1) end elseif Proc.ChosenStrategy then sStrategyId = Proc.ChosenStrategy.sStrategyId @@ -1108,7 +1117,8 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters) sStatus = sStatus, dCompletionIndex = dCompletionIndex, dCompositeRating = dCompositeRating, - sInfo = sInfo + sInfo = sInfo, + sApplyInfo = sApplyInfo } } -- scrivo le strategie disponibili solo se ne esistono @@ -1330,7 +1340,6 @@ local function GetBestCombination( ListToCompare, Part) end end end - end end end @@ -1448,14 +1457,14 @@ local function GetCombinationListFromMatrix( ProcessingsOnPart, PartInfo) -- ciclo su tutte le feature, ad eccezione dei tagli testa/coda che dipendono dal risultato delle altre -- tagli testa e coda vengono aggiunti sempre alla fine for nProc = 1, #ProcessingsOnPart.Rotation[1] do - if not ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) and not ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then - -- Si controlla sempre la rotazione 1 perchè la dipendenza di una feature da un'altra non dipende dalla rotazione - -- se feature disattivata perchè eseguita da master a lei associata dichiaro comunque eseguita - if ProcessingsOnPart.Rotation[1][nProc].nFlg == 0 and ProcessingsOnPart.Rotation[1][nProc].nIndexMasterProc then - ProcessingsOnPart.Rotation[1][nProc].nIndexRotation = nUnloadPos - table.insert( SingleCombination.Rot0, ProcessingsOnPart.Rotation[1][nProc]) - SingleCombination.nComplete = SingleCombination.nComplete + 1 - else + -- Si controlla sempre la rotazione 1 perchè la dipendenza di una feature da un'altra non dipende dalla rotazione + -- se feature disattivata perchè eseguita da master a lei associata dichiaro comunque eseguita + if ProcessingsOnPart.Rotation[1][nProc].nFlg == 0 and ProcessingsOnPart.Rotation[1][nProc].nIndexMasterProc then + ProcessingsOnPart.Rotation[1][nProc].nIndexRotation = nUnloadPos + table.insert( SingleCombination.Rot0, ProcessingsOnPart.Rotation[1][nProc]) + SingleCombination.nComplete = SingleCombination.nComplete + 1 + else + if not ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) and not ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then -- ciclo sulle rotazioni local nNextRot = nUnloadPos local nOffsetIndex = EgtIf( SingleCombination.bPartInCombiIsInverted, 4, 0) @@ -1506,12 +1515,12 @@ local function GetCombinationListFromMatrix( ProcessingsOnPart, PartInfo) table.insert( SingleCombination.Rot0, ProcessingsOnPart.Rotation[nUnloadPos+nOffsetIndex][nProc]) SingleCombination.nNotExecute = SingleCombination.nNotExecute + 1 end - end - else - if ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) then - SingleCombination.nIndexHeadCutInVProc = nProc - elseif ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then - SingleCombination.nIndexTailCutInVProc = nProc + else + if ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) then + SingleCombination.nIndexHeadCutInVProc = nProc + elseif ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then + SingleCombination.nIndexTailCutInVProc = nProc + end end end end From d3a92849440b4978db6b08d95d2e1d925051e0a6 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 13 Jan 2026 13:15:34 +0100 Subject: [PATCH 5/6] =?UTF-8?q?Piccoal=20correzione.=20C'era=20gi=C3=A0=20?= =?UTF-8?q?il=20parametro=20'idFeature'=20sulla=20Proc=20che=20indica=20l'?= =?UTF-8?q?indice=20della=20feature=20nella=20lista=20del=20BeamWall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/BeamExec.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 7a7340a..97a81ad 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1091,9 +1091,8 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters) sStatus = ChosenStrategyTable.Result.sStatus dCompletionIndex = ChosenStrategyTable.Result.dCompletionIndex dCompositeRating = ChosenStrategyTable.Result.dCompositeRating - -- all'indice nIndexMasterProc si toglie -2 perchè son presenti tagli testa e coda, e -1 perché elenco zero-based - -- TODO sarebbe più bello assegnare un nome o un identificativo. L'indice così ricavato non è molto sicuro. - sApplyInfo = 'Skipped. Feature machined: ' .. EgtNumToString( Proc.nIndexMasterProc - 2 - 1) + local idFeature = PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nIndexRotation][Proc.nIndexMasterProc].idFeature + sApplyInfo = 'Skipped. Feature machined: ' .. EgtNumToString( idFeature) end elseif Proc.ChosenStrategy then sStrategyId = Proc.ChosenStrategy.sStrategyId From 5554977011fa16b5260ff3e91caa003c3af13a3b Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 13 Jan 2026 13:35:00 +0100 Subject: [PATCH 6/6] ripristinata STR0010 vecchia --- Strategies/Standard/STR0010/STR0010.lua | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Strategies/Standard/STR0010/STR0010.lua b/Strategies/Standard/STR0010/STR0010.lua index c1c4f32..15ee988 100644 --- a/Strategies/Standard/STR0010/STR0010.lua +++ b/Strategies/Standard/STR0010/STR0010.lua @@ -112,31 +112,31 @@ local function IsPositionOK( Proc, Part) end ------------------------------------------------------------------------------------------------------------- --- contemplate max 2 facce -local function GetBottomFaceEdge( Proc, Face) +-- TODO da sistemare +local function GetBottomFaceEdge( Proc, nIndexFace) local Edge = {} -- si lavora la bottom longitudinalmente if Proc.nFct == 1 or Proc.Topology.sFamily == 'DoubleBevel' then local BottomEdgesSorted = {} - for i = 1, #Face.Edges do - table.insert( BottomEdgesSorted, Face.Edges[i]) + for i = 1, #Proc.MainFaces.BottomFaces[nIndexFace].Edges do + table.insert( BottomEdgesSorted, Proc.MainFaces.BottomFaces[nIndexFace].Edges[i]) end table.sort( BottomEdgesSorted, CompareEdges) - Edge = BottomEdgesSorted[1] - - -- si lavora il lato in comune tra le due facce - else - -- ricerca lato in comune - local nCommonEdge - for i = 1, #Face.Edges do - if Face.Edges[i].idAdjacentFace > -1 then - nCommonEdge = i - end + -- edge in comune tra le due facce + elseif Proc.nFct == 2 then + if nIndexFace == 1 then + Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.LongEdges[1] + elseif nIndexFace == 2 then + Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.BottomEdge + end + else + if nIndexFace == 1 then + Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.LongEdges[1] + elseif nIndexFace == 2 then + Edge = Proc.MainFaces.BottomFaces[nIndexFace].MainEdges.BottomEdge end - - Edge = Face.Edges[nCommonEdge] end return Edge @@ -216,7 +216,7 @@ function STR0010.Make( bAddMachining, Proc, Part, CustomParameters) local bAreAllMachiningsAdded = true local Milling = {} local OptionalParametersFaceByMill = { nStepType = MCH_MILL_ST.ONEWAY, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail} - local EdgeToMachine = GetBottomFaceEdge( Proc, Proc.MainFaces.BottomFaces[1]) + local EdgeToMachine = GetBottomFaceEdge( Proc, 1) if EdgeToMachine.bIsOpen then OptionalParametersFaceByMill.dDepthToMachine = EdgeToMachine.dElevation + BeamData.CUT_EXTRA end @@ -232,7 +232,7 @@ function STR0010.Make( bAddMachining, Proc, Part, CustomParameters) if dAngleBetweenFaces >= -91 then Milling = {} OptionalParametersFaceByMill = { nStepType = MCH_MILL_ST.ONEWAY, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail} - EdgeToMachine = GetBottomFaceEdge( Proc, Proc.MainFaces.BottomFaces[2]) + EdgeToMachine = GetBottomFaceEdge( Proc, 2) if EdgeToMachine.bIsOpen then OptionalParametersFaceByMill.dDepthToMachine = EdgeToMachine.dElevation + BeamData.CUT_EXTRA end