From 9dff37f1f4730c3afd8ec90a91a0f95a1d07fbe4 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 4 Sep 2024 15:54:13 +0200 Subject: [PATCH] Gestione dipendenza foro-tasca in caso di fase con pezzo ribaltato --- LuaLibs/BeamExec.lua | 17 +++++++++++++++++ LuaLibs/ProcessDrill.lua | 15 ++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 4be9e8b..9d09d61 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -63,6 +63,7 @@ -- 2024/03/13 In CollectFeatures si scrive lunghezza foro su Proc e si controla se serve Predrill -- In OrderFeature, preforo sempre prima del foro -- 2024/04/11 In CollectFeatures aggiunta lettura info PRID, scritta in Proc.FeatureId +-- 2024/09/04 Gestione dipendenza foro-tasca in caso di fase con pezzo ribaltato -- Tabella per definizione modulo local BeamExec = {} @@ -1277,6 +1278,20 @@ local function ClassifyFeatures( vProc, b3Raw, Stats) vProc[nSplitting].Down = true bSomeDown = true end + + -- si cerca di riclassificare le feature che dipendono da altre (in caso siano su rotazioni diverse) + for i = 1, #vProc do + local Proc = vProc[i] + -- FORATURA + if Drill.Identify( Proc) and Proc.Dependency then + if Proc.Dependency.ExecBefore then + if Proc.Dependency.ExecBefore.Down then + local bMachiningSideChanged = Drill.Classify( Proc, b3Raw, 'DOWN') + end + end + end + end + return bAllOk, bSomeDown, bSomeSide, bSplitRot end @@ -2012,6 +2027,8 @@ function GetFeatureInfoAndDependency( vProc, b3Raw) -- verifico se feature tipo LapJoint è attraversata da almeno un foro if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove' or Mortise.Identify( Proc)) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then Proc.PassedByHole = true + ProcB.Dependency = {} + ProcB.Dependency.ExecBefore = Proc end -- verifico se feature tipo LapJoint è attraversata da almeno una mortasa a coda di rondine if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove') and DtMortise.SideIdentify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then diff --git a/LuaLibs/ProcessDrill.lua b/LuaLibs/ProcessDrill.lua index d79395b..fed7e24 100644 --- a/LuaLibs/ProcessDrill.lua +++ b/LuaLibs/ProcessDrill.lua @@ -22,6 +22,7 @@ -- 2023/11/06 Migliorata gestione dei fori con AngularTransmission. -- 2024/03/13 Aggiunta gestione Predrill -- 2024/03/18 Per Predrill corretta direzione estrusione per fori con direzione verso il basso +-- 2024/09/04 Gestione dipendenza foro-tasca in caso di fase con pezzo ribaltato -- Tabella per definizione modulo local ProcessDrill = {} @@ -213,7 +214,7 @@ end --------------------------------------------------------------------- -- Classificazione della feature -function ProcessDrill.Classify( Proc, b3Raw) +function ProcessDrill.Classify( Proc, b3Raw, sDownOrSideOrStd) -- recupero e verifico l'entità foro local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') or 0 if AuxId then AuxId = AuxId + Proc.Id end @@ -243,6 +244,18 @@ function ProcessDrill.Classify( Proc, b3Raw) local bOpen = ( Proc.Fce ~= 0) local bFaceDown = ( ptCen:getZ() < b3Raw:getMin():getZ() + 2 and (( not Proc.Head and not Proc.Tail) or (( BD.ROT90 or BD.DOWN_HEAD or BD.TURN) and abs( Proc.Flg) == 2))) local bAngTransm = ( BD.ANG_TRASM and ML.FindDrilling( dDiam, nil, nil, nil, nil, true) and AreSameOrOppositeVectorApprox( vtExtr, Z_AX())) + + -- se ci sono delle dipendenze da altre feature da rispettare + if sDownOrSideOrStd then + if sDownOrSideOrStd == 'DOWN' then + if vtExtr:getZ() < - BD.DRILL_VZ_MIN then + Proc.Down = true + return true + end + end + return false + end + -- verifico se il foro è sotto e quindi va spostato o sopra o sul fianco if (( vtExtr:getZ() < BD.DRILL_VZ_MIN or bFaceDown) and ( not bOpen or Proc.Flg ~= 1)) then if not bOpen then