From 39be33451a2c27a31d2615da117e555004a1fcb3 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 10 Sep 2019 08:12:06 +0000 Subject: [PATCH] DataBeam : - aggiunta gestione ingombri di testa o coda per tagli doppi generici con lama. --- LuaLibs/FacesBySaw.lua | 15 +++++++++---- LuaLibs/ProcessDoubleCut.lua | 7 ++++-- LuaLibs/ProcessLapJoint.lua | 42 ++++++++++++++++++------------------ 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index dcbcff8..b04fa8f 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -16,7 +16,7 @@ local BD = require( 'BeamData') local ML = require( 'MachiningLib') --------------------------------------------------------------------- -function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, sCutName) +function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutName) -- recupero l'ingombro del grezzo di appartenenza local b3Raw = EgtGetRawPartBBox( nRawId) -- ingombro del pezzo @@ -120,16 +120,23 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, sCutName) end end end - return true else -- lavoro la prima faccia local bOk, sErr = BL.MakeOneFaceBySaw( Proc.Id, 0, sCutting, dSawDiam, vtRef[1], nil, dCutExtra, BD.CUT_SIC, 0, 0, nil, b3Raw) if not bOk then return bOk, sErr end -- lavoro seconda faccia bOk, sErr = BL.MakeOneFaceBySaw( Proc.Id, 1, sCutting, dSawDiam, vtRef[2], nil, dCutExtra, BD.CUT_SIC, 0, 0, nil, b3Raw) - if not bOk then return bOk, sErr end - return true + if not bOk then + return bOk, sErr + end end + -- eventuale segnalazione ingombro di testa o coda + if Proc.Head then + BL.UpdateHCING( nRawId, b3Raw:getMax():getX() - dOvmHead - Proc.Box:getMin():getX()) + elseif Proc.Tail then + BL.UpdateTCING( nRawId, Proc.Box:getMax():getX() - b3Raw:getMin():getX()) + end + return true end --------------------------------------------------------------------- diff --git a/LuaLibs/ProcessDoubleCut.lua b/LuaLibs/ProcessDoubleCut.lua index 681310f..31dcb58 100644 --- a/LuaLibs/ProcessDoubleCut.lua +++ b/LuaLibs/ProcessDoubleCut.lua @@ -1,4 +1,4 @@ --- ProcessDrill.lua by Egaltech s.r.l. 2019/09/04 +-- ProcessDrill.lua by Egaltech s.r.l. 2019/09/09 -- Gestione calcolo doppi tagli di lama per Travi -- Tabella per definizione modulo @@ -184,7 +184,10 @@ function ProcessDoubleCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) end -- altrimenti, tagli diretti delle facce else - return Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, EgtIf( bHead, 'HeadSide', 'TailSide')) + local bOk, sErr = Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, EgtIf( bHead, 'HeadSide', 'TailSide')) + if not bOk then + return bOk, sErr + end end end -- eventuale segnalazione ingombro di testa o coda diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 32fad5b..c018e23 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -1,4 +1,4 @@ --- ProcessLapJoint.lua by Egaltech s.r.l. 2019/08/29 +-- ProcessLapJoint.lua by Egaltech s.r.l. 2019/09/09 -- Gestione calcolo mezzo-legno per Travi -- Tabella per definizione modulo @@ -207,15 +207,15 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId) -- dati delle facce local ptC = {} local vtN = {} - ptC[0], vtN[0] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) - ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT) + ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) + ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT) -- dati medi - local ptM = ( ptC[0] + ptC[1]) / 2 + local ptM = ( ptC[1] + ptC[2]) / 2 -- verifico non siano orientate verso il basso local bFaceOk = {} - bFaceOk[0] = ( vtN[0]:getZ() >= BD.NZ_MINB) bFaceOk[1] = ( vtN[1]:getZ() >= BD.NZ_MINB) - if not bFaceOk[0] and not bFaceOk[1] then + bFaceOk[2] = ( vtN[2]:getZ() >= BD.NZ_MINB) + if not bFaceOk[1] and not bFaceOk[2] then local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' LapJoint from bottom impossible' EgtOutLog( sErr) return false, sErr @@ -223,29 +223,29 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId) -- scelta faccia da lavorare local nFacInd -- se entrambe possibili - if bFaceOk[0] and bFaceOk[1] then + if bFaceOk[1] and bFaceOk[2] then -- se in testa o coda, scelgo quella con la normale più parallela all'asse trave if Proc.Head or Proc.Tail then - if vtN[0]:getZ() < BD.NZ_MINA then + if vtN[1]:getZ() < BD.NZ_MINA then nFacInd = 1 - elseif vtN[1]:getZ() < BD.NZ_MINA then + elseif vtN[2]:getZ() < BD.NZ_MINA then nFacInd = 0 else - nFacInd = EgtIf( abs( vtN[0]:getX()) > abs( vtN[1]:getX()), 0, 1) + nFacInd = EgtIf( abs( vtN[1]:getX()) > abs( vtN[2]:getX()), 0, 1) end -- altrimenti, scelgo quella con la normale più perpendicolare all'asse trave (se uguali, quella verso X+) else - if abs( abs( vtN[0]:getX()) - abs( vtN[1]:getX())) < GEO.EPS_SMALL then + if abs( abs( vtN[1]:getX()) - abs( vtN[2]:getX())) < GEO.EPS_SMALL then if ptM:getX() > b3Raw:getCenter():getX() then - nFacInd = EgtIf( vtN[0]:getX() > vtN[1]:getX(), 0, 1) + nFacInd = EgtIf( vtN[1]:getX() > vtN[2]:getX(), 0, 1) else - nFacInd = EgtIf( vtN[0]:getX() < vtN[1]:getX(), 0, 1) + nFacInd = EgtIf( vtN[1]:getX() < vtN[2]:getX(), 0, 1) end else - nFacInd = EgtIf( abs( vtN[0]:getX()) < abs( vtN[1]:getX()), 0, 1) + nFacInd = EgtIf( abs( vtN[1]:getX()) < abs( vtN[2]:getX()), 0, 1) end end - elseif bFaceOk[0] then + elseif bFaceOk[1] then nFacInd = 0 else nFacInd = 1 @@ -269,11 +269,11 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId) -- aggiungo geometria EgtSetMachiningGeometry( {{ Proc.Id, nFacInd}}) -- imposto uso faccia e lato correzione - if vtN[nOthInd]:getX() > 0.1 then + if vtN[nOthInd+1]:getX() > 0.1 then EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_LEFT) - elseif vtN[nOthInd]:getX() < -0.1 then + elseif vtN[nOthInd+1]:getX() < -0.1 then EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_RIGHT) - elseif vtN[nOthInd]:getZ() < -0.1 then + elseif vtN[nOthInd+1]:getZ() < -0.1 then EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_TOP) else EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_DOWN) @@ -281,7 +281,7 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId) -- imposto lato di correzione EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) -- imposto posizione braccio porta testa - if vtN[nFacInd]:getY() < GEO.EPS_SMALL then + if vtN[nFacInd+1]:getY() < GEO.EPS_SMALL then EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM) else EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP) @@ -608,7 +608,7 @@ end --------------------------------------------------------------------- -- Applicazione della lavorazione --------------------------------------------------------------------- -function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId) +function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) -- limiti di fresatura semplice local MAX_MILL_LIN = 80 local MAX_MILL_VOL = ( 80 * 240 * 20) / 2 @@ -676,7 +676,7 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId) return MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId) -- altrimenti, con lama else - return Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, 'HeadSide') + return Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, 'HeadSide') end -- tre o più facce else