From 69f9669a5c94337d50fae3bc04752701a97753ad Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 15 Oct 2025 08:26:27 +0200 Subject: [PATCH] Prime modifiche nuova gestione tagli testa e coda --- LuaLibs/BasicCustomerStrategies.lua | 10 ++++++++-- LuaLibs/BeamExec.lua | 12 +++++------- LuaLibs/FeatureLib.lua | 18 +++++++++++++++-- Strategies/AvailableStrategyList.json | 28 +++++++-------------------- Strategies/Strategies.ini | 4 ---- 5 files changed, 36 insertions(+), 36 deletions(-) diff --git a/LuaLibs/BasicCustomerStrategies.lua b/LuaLibs/BasicCustomerStrategies.lua index debcff6..ebb9f66 100644 --- a/LuaLibs/BasicCustomerStrategies.lua +++ b/LuaLibs/BasicCustomerStrategies.lua @@ -79,7 +79,13 @@ local function GetStrategies_Essetre( Proc) --------------------------------------------------------------------- -- Feature : Cut (1-10) elseif ID.IsCut( Proc) then - Strategies = { { sStrategyId = 'STR0002'}, { sStrategyId = 'STR0005'}} + if Proc.Topology.sName == 'Cut-1-Through' then + Strategies = { { sStrategyId = 'STR0002'}, { sStrategyId = 'STR0005'}} + elseif Proc.Topology.sName == 'HeadCut' then + Strategies = { { sStrategyId = 'HEADCUT'}} + elseif Proc.Topology.sName == 'TailCut' then + Strategies = { { sStrategyId = 'TAILCUT'}} + end --------------------------------------------------------------------- -- Feature : Longitudinal Cut (0-10) elseif ID.IsLongitudinalCut( Proc) then @@ -434,7 +440,7 @@ end local function GetParameters_Essetre( Proc, sStrategyIdToGet) local Parameters = {} --###---###---###---###---###---###---###---###---###---###---###---###---###-- - -- Feature : HeadCut (1-340) + -- Feature : HeadCut if ID.IsHeadCut( Proc) then -- Per Essetre non esiste il taglio di testa, quindi si leggono le variabili Q sul processing che coincide con il taglio di testa if sStrategyIdToGet == 'HEADCUT' then diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 88e3414..ad08c21 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -789,8 +789,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part) -- non si controlla la feature con se stessa o se feature disabilitata if i ~= j and ProcB.nFlg ~= 0 then -- verifico se il taglio può essere saltato perchè è nella stessa posizione del taglio di testa - if ID.IsHeadCut( Proc) and ProcB.Topology.sFamily == 'Cut' and - AreSameVectorApprox( ProcB.Faces[1].vtN, X_AX()) and abs( ProcB.Faces[1].ptCenter:getX() - Part.b3Part:getMax():getX()) < 10 * GEO.EPS_SMALL then + if ID.IsHeadCut( Proc) and ProcB.Topology.sFamily == 'HeadCut' then if not Proc.SlaveProcIndexes then Proc.SlaveProcIndexes = {} end @@ -799,8 +798,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part) ProcB.nFlg = 0 end -- verifico se il taglio può essere saltato perchè è nella stessa posizione del taglio di coda - if ID.IsTailCut( Proc) and ProcB.Topology.sFamily == 'Cut' and - AreSameVectorApprox( ProcB.Faces[1].vtN, -X_AX()) and abs( ProcB.Faces[1].ptCenter:getX() - Part.b3Part:getMin():getX()) < 10 * GEO.EPS_SMALL then + if ID.IsTailCut( Proc) and ProcB.Topology.sFamily == 'TailCut' then if not Proc.SlaveProcIndexes then Proc.SlaveProcIndexes = {} end @@ -947,10 +945,10 @@ local function CalculateStrategies( vProcSingleRot, Part) -- si leggono allora eventuali parametri di default scritti come info sulla feature if Proc.AvailableStrategies.bIsBasicStrategy then -- si recuperano eventuali parametri custom - for i = 1, #Proc.AvailableStrategies do + for j = 1, #Proc.AvailableStrategies do -- essendo una strategia basic, la lista dei parametri custom dovrebbe essere sempre vuota. Si leggono ora - if not Proc.AvailableStrategies[i].ParameterList then - Proc.AvailableStrategies[i].ParameterList = BCS.GetParametersFromBasicCustomerStrategies( Proc, Proc.AvailableStrategies[i].sStrategyId) + if not Proc.AvailableStrategies[j].ParameterList then + Proc.AvailableStrategies[j].ParameterList = BCS.GetParametersFromBasicCustomerStrategies( Proc, Proc.AvailableStrategies[j].sStrategyId) end end -- si riprocessano le strategie dopo che sono stati letti i parametri diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index 178cb25..dc863f5 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -176,7 +176,16 @@ function FeatureLib.ClassifyTopology( Proc, Part) local sFamily local bIsThrough - if Proc.nFct == 1 and ( bIsFeatureCuttingEntireSection or bIsFeatureCuttingEntireLength) then + + -- caso speciale taglio di testa + if Proc.nFct == 1 and AreSameVectorApprox( Proc.Faces[1].vtN, X_AX()) and abs( Proc.Faces[1].ptCenter:getX() - Part.b3Part:getMax():getX()) < 10 * GEO.EPS_SMALL then + sFamily = 'HeadCut' + bIsThrough = true + -- caso speciale taglio di coda + elseif Proc.nFct == 1 and AreSameVectorApprox( Proc.Faces[1].vtN, -X_AX()) and abs( Proc.Faces[1].ptCenter:getX() - Part.b3Part:getMin():getX()) < 10 * GEO.EPS_SMALL then + sFamily = 'TailCut' + bIsThrough = true + elseif Proc.nFct == 1 and ( bIsFeatureCuttingEntireSection or bIsFeatureCuttingEntireLength) then sFamily = 'Cut' bIsThrough = true elseif Proc.nFct == 1 then @@ -227,7 +236,12 @@ function FeatureLib.ClassifyTopology( Proc, Part) FeatureTopology.sFamily = sFamily FeatureTopology.bIsThrough = bIsThrough FeatureTopology.bAllRightAngles = bAllRightAngles - FeatureTopology.sName = GetTopologyName( sFamily, Proc.nFct, bIsThrough) + -- caso speciale taglio testa e coda + if FeatureTopology.sFamily == 'HeadCut' or FeatureTopology.sFamily == 'TailCut' then + FeatureTopology.sName = FeatureTopology.sFamily + else + FeatureTopology.sName = GetTopologyName( sFamily, Proc.nFct, bIsThrough) + end FeatureTopology.AdjacencyMatrix = vAdj -- feature che necessita di essere catalogata, ma non si capisce come else diff --git a/Strategies/AvailableStrategyList.json b/Strategies/AvailableStrategyList.json index 885806c..c1f2e46 100644 --- a/Strategies/AvailableStrategyList.json +++ b/Strategies/AvailableStrategyList.json @@ -5,8 +5,14 @@ "nPrc": 10, "nGrp": 1, "TopologyList" : [ - { "sName": "Feature", + { "sName": "Cut-1-Through", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ] + }, + { "sName": "HeadCut", + "StrategyList" : [ { "sStrategyId": "HEADCUT" } ] + }, + { "sName": "TailCut", + "StrategyList" : [ { "sStrategyId": "TAILCUT" } ] } ] }, @@ -696,26 +702,6 @@ } ] }, - { - "sName":"HeadCut", - "nPrc": 340, - "nGrp": 1, - "TopologyList" : [ - { "sName": "Feature", - "StrategyList" : [ { "sStrategyId": "HEADCUT" } ] - } - ] - }, - { - "sName":"TailCut", - "nPrc": 350, - "nGrp": 1, - "TopologyList" : [ - { "sName": "Feature", - "StrategyList" : [ { "sStrategyId": "TAILCUT" } ] - } - ] - }, { "sName":"Variant", "nPrc": 900, diff --git a/Strategies/Strategies.ini b/Strategies/Strategies.ini index 4c6baa0..fac84cb 100644 --- a/Strategies/Strategies.ini +++ b/Strategies/Strategies.ini @@ -149,10 +149,6 @@ STR0015 = Profilo arcuato (Head Cambered Profile) 251,0,Feature, ; Feature : Aperture 252,0,Feature, -; Feature : HEADCUT -340,0,Feature,HEADCUT -; Feature : TAILCUT -350,0,Feature,TAILCUT ; Feature : Variant 900,0,Feature, ; Feature Decor