From 922a7ac846050c796486e8d3473b5ff95e0dd5b2 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 14 Apr 2026 07:57:59 +0200 Subject: [PATCH] Correzioni varie in strategie per gestire casi strani dove non vengono calcolate le MainFaces --- BatchProcessNew.lua | 1 + LuaLibs/MachiningLib.lua | 5 +++++ Strategies/Standard/STR0002/STR0002.lua | 4 ++++ Strategies/Standard/STR0003/STR0003.lua | 20 ++++++++++---------- Strategies/Standard/STR0004/STR0004.lua | 20 ++++++++++---------- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index e5f72ab..1fff59b 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -492,6 +492,7 @@ if bToProcess then return end + -- TODO in caso di "GEN_sPiecesLoadingPosition = FULL_PRE_ROTATION" bisogna controllare anche sezione ribaltata di 90° -- Verifico sezione barra non troppo grande if not BeamData.MAX_WIDTH2 or not BeamData.MAX_HEIGHT2 then if ( dRawW > BeamData.MAX_WIDTH + 10 * GEO.EPS_SMALL or dRawH > BeamData.MAX_HEIGHT + 10 * GEO.EPS_SMALL) then diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 8217ef6..59a174e 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -468,6 +468,11 @@ end function MachiningLib.FindMill( Proc, ToolSearchParameters) local ToolInfo = {} + -- direzione utensile e fipo fresa obbligatori, altrimenti si esce + if not ToolSearchParameters.vtToolDirection or not ToolSearchParameters.sMillShape then + return ToolInfo + end + local nBestToolIndex local dBestToolResidualDepth = 0 for i = 1, #TOOLS do diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index 297db4c..a0adee5 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -269,6 +269,8 @@ local function GetBestPocketingStrategy( Proc, Part) Milling.idProc = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.id Milling.dElevation = ( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation * 2) + BeamData.MILL_OVERLAP Milling.bMachAppliedToTunnelFace = true + else + ToolSearchParameters.vtToolDirection = nil end ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sPocketingList, 'Pocketing') Milling.ToolInfo = {} @@ -309,6 +311,8 @@ local function GetBestPocketingStrategy( Proc, Part) Milling.idFaceToMachine = Proc.MainFaces.SideFaces[1].id Milling.idProc = Proc.id Milling.dElevation = Proc.MainFaces.SideFaces[1].dElevation + else + ToolSearchParameters.vtToolDirection = nil end ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sPocketingList, 'Pocketing') Milling.ToolInfo = {} diff --git a/Strategies/Standard/STR0003/STR0003.lua b/Strategies/Standard/STR0003/STR0003.lua index 979e752..3b9265d 100644 --- a/Strategies/Standard/STR0003/STR0003.lua +++ b/Strategies/Standard/STR0003/STR0003.lua @@ -228,6 +228,16 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) bIsSplitFeature = true end + -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile + -- TODO riuniure a IsTopologyOk? + if not Proc.MainFaces + or not Proc.MainFaces.LongFaces[1] + or not Proc.MainFaces.LongFaces[1].MainEdges then + + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') + return false, Strategy.Result + end + -- altezza tasca local dPocketHeight = 0 if Proc.Topology.sFamily == 'Tunnel' then @@ -241,16 +251,6 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) dPocketHeight = Proc.MainFaces.BottomFaces[1].MainEdges.SideEdges[1].dLength end - -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile - -- TODO riuniure a IsTopologyOk? - if not Proc.MainFaces - or not Proc.MainFaces.LongFaces[1] - or not Proc.MainFaces.LongFaces[1].MainEdges then - - Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') - return false, Strategy.Result - end - -- riferimenti locali per leggibilità e performance local LongFace = Proc.MainFaces.LongFaces[1] local OppositeEdge1 = LongFace.MainEdges.OppositeEdges[1] diff --git a/Strategies/Standard/STR0004/STR0004.lua b/Strategies/Standard/STR0004/STR0004.lua index fd705a5..b67f076 100644 --- a/Strategies/Standard/STR0004/STR0004.lua +++ b/Strategies/Standard/STR0004/STR0004.lua @@ -132,6 +132,16 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) bIsSplitFeature = true end + -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile + -- TODO riuniure a IsTopologyOk? + if not Proc.MainFaces + or not Proc.MainFaces.LongFaces[1] + or not Proc.MainFaces.LongFaces[1].MainEdges then + + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') + return false, Strategy.Result + end + -- altezza tasca local dPocketHeight = 0 if Proc.Topology.sFamily == 'Tunnel' then @@ -145,16 +155,6 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) dPocketHeight = Proc.MainFaces.BottomFaces[1].MainEdges.SideEdges[1].dLength end - -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile - -- TODO riuniure a IsTopologyOk? - if not Proc.MainFaces - or not Proc.MainFaces.LongFaces[1] - or not Proc.MainFaces.LongFaces[1].MainEdges then - - Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') - return false, Strategy.Result - end - -- riferimenti locali per leggibilità e performance local LongFace = Proc.MainFaces.LongFaces[1] local OppositeEdge1 = LongFace.MainEdges.OppositeEdges[1]