diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 115e329..0c4569d 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -35,6 +35,7 @@ -- 2022/08/01 Tolleranza su sezione portata a 0.1 mm (100 * GEO.EPS_SMALL). -- 2022/08/08 Modifica per macchine senza BD.MAX_WIDTH2 e BD.MAX_HEIGHT2. -- 2022/08/18 Aggiunta gestione macchine con testa da sotto con lama da sotto disabilitata. +-- 2022/09/21 Nella funzione di ordinamento il foro del birdsmouth viene sempre fatto prima della lavorazione stessa -- Tabella per definizione modulo local BeamExec = {} @@ -258,6 +259,9 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT) local nDo = EgtGetInfo( ProcId, 'DO', 'i') or 1 local nCutId = EgtGetInfo( EgtGetParent( EgtGetParent( ProcId)), 'CUTID', 'i') or 0 local nTaskId = EgtGetInfo( ProcId, 'TASKID', 'i') or 0 + -- leggo se ci sono feature collegate + local nAddAdjId = EgtGetInfo( ProcId, 'ADJID', 'i') + local nAddMainId = EgtGetInfo( ProcId, 'MAINID', 'i') if nGrp and nPrc and nDo == 1 then local Proc = {} Proc.Id = ProcId @@ -270,6 +274,12 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT) Proc.Fce = 0 Proc.CutId = nCutId Proc.TaskId = nTaskId + -- se ci sono feature collegate ne scrivo il riferimento nella Proc + if nAddAdjId then + Proc.AdjId = Proc.Id + nAddAdjId + elseif nAddMainId then + Proc.MainId = Proc.Id + nAddMainId + end Proc.Box = EgtGetBBoxGlob( ProcId, GDB_BB.STANDARD) if Proc.Box and not Proc.Box:isEmpty() then Proc.Head = IsHeadFeature( Proc, b3Raw, dCurrOvmH) @@ -670,6 +680,14 @@ local function OrderFeatures( vProc, b3Raw) if B1.Head ~= B2.Head then return B1.Head end + -- se primo è foro di un birdsmouth e secondo è il suo birdsmouth, il foro va sempre prima + if Drill.Identify(B1) and LapJoint.Identify(B2) and B1.MainId == B2.Id then + return true + end + -- se primo è birdsmouth e secondo è il suo foro, il birdsmouth va sempre dopo + if LapJoint.Identify(B1) and Drill.Identify(B2) and B1.AdjId == B2.Id then + return false + end -- se entrambi tenoni e si intersecano, metto prima tenone vero e poi base tenone if ( Tenon.Identify( B1) or DtTenon.Identify( B1)) and ( Tenon.Identify( B2) or DtTenon.Identify( B2)) and B1.Box:getMin():getX() < B2.Box:getMax():getX() + 100 * GEO.EPS_SMALL and B2.Box:getMin():getX() < B1.Box:getMax():getX() + 100 * GEO.EPS_SMALL then