diff --git a/BatchProcess.lua b/BatchProcess.lua index efa8a94..50d5902 100644 --- a/BatchProcess.lua +++ b/BatchProcess.lua @@ -1,4 +1,4 @@ --- BatchProcess.lua by Egaltech s.r.l. 2021/03/08 +-- BatchProcess.lua by Egaltech s.r.l. 2021/04/09 -- Gestione calcolo batch disposizione e lavorazioni per Pareti -- 2020/07/24 Nuvola di punti riferita allo Zero Tavola. -- 2020/10/28 Corretto spostamento pezzi per rotazioni (0 o 180) e inversioni( 0, 90, 180, o 270). @@ -6,7 +6,7 @@ -- 2021/03/05 Aggiunta gestione altri angoli di inversione e rotazione combinati. -- 2021/03/06 La creazione del file ori si fa solo alla fine se non ci sono stati errori o se edit. -- 2021/03/08 Aggiunta gestione lavorazione su macchine per travi. - +-- 2021/04/09 Corretto spostamento pezzi per rotazioni e inversioni. -- Intestazioni require( 'EgtBase') @@ -311,8 +311,6 @@ if bToProcess then vWall[i].PosX = vWall[i].PosX - vWall[i].Box:getDimX() if abs( dRotAng - 0) < GEO.EPS_ANG_SMALL then vWall[i].PosZ = vWall[i].PosZ - vWall[i].Box:getDimY() - elseif abs( dRotAng - 180) < GEO.EPS_ANG_SMALL or abs( dRotAng + 180) < GEO.EPS_ANG_SMALL then - vWall[i].PosX = vWall[i].PosX + vWall[i].Box:getDimX() elseif abs( dRotAng - 270) < GEO.EPS_ANG_SMALL or abs( dRotAng + 90) < GEO.EPS_ANG_SMALL then vWall[i].PosX = vWall[i].PosX + vWall[i].Box:getDimX() elseif abs( dRotAng - 90) < GEO.EPS_ANG_SMALL or abs( dRotAng + 270) < GEO.EPS_ANG_SMALL then diff --git a/LuaLibs/WProcessLapJoint.lua b/LuaLibs/WProcessLapJoint.lua index a530e1a..314f4be 100644 --- a/LuaLibs/WProcessLapJoint.lua +++ b/LuaLibs/WProcessLapJoint.lua @@ -1,4 +1,4 @@ --- WProcessLapJoint.lua by Egaltech s.r.l. 2021/04/06 +-- WProcessLapJoint.lua by Egaltech s.r.l. 2021/04/09 -- Gestione calcolo mezzo-legno per Pareti -- Tabella per definizione modulo @@ -1215,8 +1215,8 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw) local dStep = EgtGetMachiningParam( MCH_MP.STEP) if dStep < GEO.EPS_SMALL then dStep = dMaxMat end local nStep = ceil( ( dThick - dMaxMat) / dStep) - dStep = ( dThick - dMaxMat) / nStep - local dMaxElev = ( nStep + 1) * dStep - GEO.EPS_SMALL + dStep = ( dThick - dMaxMat) / max( nStep, 1) + local dMaxElev = max( ( nStep + 1) * dStep - GEO.EPS_SMALL, 0) EgtSetMachiningParam( MCH_MP.STEP, dStep) EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dMaxElev, 3) .. ';') -- eseguo @@ -1391,6 +1391,15 @@ local function MakeTwoFaces( Proc, nRawId, b3Raw) if not bAdj then return false, 'Feature with two faces not adjacentes' end + -- se equivalente ad un contorno + if abs( ptP1:getZ() - ptP2:getZ()) > 0.9 * b3Raw:getDimZ() then + -- verifico ordinamento (esterno a destra) + if ( vtN[1] ^ ( ptP1 - ptC[1])) * Z_AX() < 0 then + EgtSurfTmSwapFacets( Proc.Id, 0, 1) + end + -- applico lavorazione di contorno libero + return FreeContour.Make( Proc, nRawId, b3Raw) + end -- versore della linea di intersezione local vtX = ptP2 - ptP1 ; vtX:normalize() -- larghezza delle facce ortogonalmente all'intersezione @@ -1488,7 +1497,7 @@ local function MakeMoreFaces( Proc, nRawId, b3Raw) if Proc.Fct >= 3 and vtN:getZ() < WD.NZ_MINA then -- fresatura (se definita) local sMilling, _, dMaxMat, dDiam = WM.FindMilling( 'SideGroove') - if sMilling and dElev < dDiam / 2 - 30 and dMaxMat <= min( dH, dV) + 10 * GEO.EPS_SMALL then + if sMilling and dElev < dDiam / 2 - 30 and dMaxMat <= min( dH, dV) + 20 * GEO.EPS_SMALL then return MakeSideGrooveByMill( Proc, nFacInd, nRawId, b3Raw) -- altrimenti sega a catena else diff --git a/Process.lua b/Process.lua index 6a7241a..6f96367 100644 --- a/Process.lua +++ b/Process.lua @@ -1,4 +1,4 @@ --- Process.lua by Egaltech s.r.l. 2020/12/09 +-- Process.lua by Egaltech s.r.l. 2021/04/09 -- Gestione calcolo disposizione e lavorazioni per Pareti -- Si opera sulla macchina corrente -- 2020/12/09 Come per BatchProcess.lua si gestiscono anche rotazioni di inversione con valori negativi. @@ -141,8 +141,6 @@ local function MyProcessInputData() vWall[i].PosX = vWall[i].PosX - vWall[i].Box:getDimX() if abs( dRotAng - 0) < GEO.EPS_ANG_SMALL then vWall[i].PosZ = vWall[i].PosZ - vWall[i].Box:getDimY() - elseif abs( dRotAng - 180) < GEO.EPS_ANG_SMALL or abs( dRotAng + 180) < GEO.EPS_ANG_SMALL then - vWall[i].PosX = vWall[i].PosX + vWall[i].Box:getDimX() elseif abs( dRotAng - 270) < GEO.EPS_ANG_SMALL or abs( dRotAng + 90) < GEO.EPS_ANG_SMALL then vWall[i].PosX = vWall[i].PosX + vWall[i].Box:getDimX() elseif abs( dRotAng - 90) < GEO.EPS_ANG_SMALL or abs( dRotAng + 270) < GEO.EPS_ANG_SMALL then