diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index cbd0f55..52b215e 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1,4 +1,4 @@ --- BeamExec.lua by Egaltech s.r.l. 2021/12/15 +-- BeamExec.lua by Egaltech s.r.l. 2021/12/20 -- Libreria esecuzione lavorazioni per Travi -- 2019/07/11 Aggiunta gestione stato rotazione di feature per TS3. -- 2019/09/04 Corretto controllo feature di testa e coda con sovramateriale di testa elevato. @@ -24,6 +24,7 @@ -- 2021/07/13 Aggiunta gestione posizionamento pezzo TR/BR per macchine con carico a destra e scarico a sinistra. -- 2021/11/27 House mortise sempre prima di (dt)mortise, house tenon sempre dopo (dt)tenon. -- 2021/12/15 Corretta CompareFeature (risultato deve essere simmetrico scambiando le feature). +-- 2021/12/20 Ulteriore correzione a CompareFeature (caso con entrambe senza geometria). -- Tabella per definizione modulo local BeamExec = {} @@ -461,6 +462,10 @@ local function OrderFeatures( vProc, b3Raw) if B2.Flg == 0 and B1.Flg ~= 0 then return true end + -- se entrambi disabilitati seguo l'Id + if B1.Flg == 0 and B2.Flg == 0 then + return ( B1.Id < B2.Id) + end -- se primo è intestazione va sempre prima if Hcut.Identify( B1) then return true @@ -493,7 +498,7 @@ local function OrderFeatures( vProc, b3Raw) not ( LapJoint.Identify( B2) or Mortise.Identify( B2) or DtMortise.Identify( B2)) then return false end - -- se entrambi di testa e secondo è scasso o mortasa va lasciato dopo + -- se entrambi di testa e secondo è scasso o mortasa e primo no va lasciato dopo if B1.Head and B2.Head and ( LapJoint.Identify( B2) or Mortise.Identify( B2) or DtMortise.Identify( B2)) and not ( LapJoint.Identify( B1) or Mortise.Identify( B1) or DtMortise.Identify( B1)) then return true @@ -506,12 +511,14 @@ local function OrderFeatures( vProc, b3Raw) if B2.Tail and ( Split.Identify( B1) or not B1.Tail) then return true end - -- se primo è scasso o mortasa di coda, sempre dopo tutto - if B1.Tail and ( LapJoint.Identify( B1) or Mortise.Identify( B1) or DtMortise.Identify( B1)) then + -- se primo è scasso o mortasa di coda e secondo no, sempre dopo + if B1.Tail and ( LapJoint.Identify( B1) or Mortise.Identify( B1) or DtMortise.Identify( B1)) and + not ( B2.Tail and ( LapJoint.Identify( B2) or Mortise.Identify( B2) or DtMortise.Identify( B2))) then return false end - -- se secondo è scasso o mortasa di coda, sempre dopo tutto - if B2.Tail and ( LapJoint.Identify( B2) or Mortise.Identify( B2) or DtMortise.Identify( B2)) then + -- se secondo è scasso o mortasa di coda e primo no, va lasciato dopo + if B2.Tail and ( LapJoint.Identify( B2) or Mortise.Identify( B2) or DtMortise.Identify( B2)) and + not ( B1.Tail and ( LapJoint.Identify( B1) or Mortise.Identify( B1) or DtMortise.Identify( B1))) then return true end -- se primo è taglio longitudinale completo o altra lav. lunga, dopo tutte le altre feature non di coda @@ -567,7 +574,7 @@ local function OrderFeatures( vProc, b3Raw) elseif abs( B1.Box:getCenter():getZ() - B2.Box:getCenter():getZ()) > 0.1 * ( B1.Box:getDimZ() + B2.Box:getDimZ()) then return B1.Box:getCenter():getZ() > B2.Box:getCenter():getZ() else - return B1.Box:getCenter():getX() > B2.Box:getCenter():getX() + return ( B1.Id < B2.Id) end end