From b1c422b56360a86802086bf897336f903a351fe2 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 17 Jun 2019 07:50:48 +0000 Subject: [PATCH] DataBeam : - unificate Pocket e Notch con LapJoint - correzioni varie. --- LuaLibs/BeamExec.lua | 29 ++++------- LuaLibs/DiceCut.lua | 9 ++-- LuaLibs/ProcessBirdsMouth.lua | 3 +- LuaLibs/ProcessCut.lua | 10 ++-- LuaLibs/ProcessFreeContour.lua | 16 +++--- LuaLibs/ProcessLapJoint.lua | 26 +++++++--- LuaLibs/ProcessPocket.lua | 89 ---------------------------------- LuaLibs/ProcessRoundArch.lua | 5 +- 8 files changed, 53 insertions(+), 134 deletions(-) delete mode 100644 LuaLibs/ProcessPocket.lua diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 1f0a26d..3a90887 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1,4 +1,4 @@ --- BeamExec.lua by Egaltech s.r.l. 2019/04/26 +-- BeamExec.lua by Egaltech s.r.l. 2019/06/14 -- Libreria esecuzione lavorazioni per Travi -- Tabella per definizione modulo @@ -45,8 +45,6 @@ _G.package.loaded.ProcessLapJoint = nil local LapJoint = require( 'ProcessLapJoint') _G.package.loaded.ProcessChamfer = nil local Chamfer = require( 'ProcessChamfer') -_G.package.loaded.ProcessPocket = nil -local Pocket = require( 'ProcessPocket') _G.package.loaded.ProcessDrill = nil local Drill = require( 'ProcessDrill') _G.package.loaded.ProcessTenon = nil @@ -343,6 +341,14 @@ local function OrderFeatures( vProc, b3Raw) if B2.Tail and ( Split.Identify( B1) or not B1.Tail) then return true end + -- se primo è taglio longitudinale completo, dopo tutte le altre feature non di coda + if abs( B1.Box:getDimX() - b3Raw:getDimX()) < 100 then + return B1.Box:getMin():getX() + 50 > B2.Box:getCenter():getX() + end + -- se secondo è taglio longitudinale completo, dopo tutte le altre feature non di coda + if abs( B2.Box:getDimX() - b3Raw:getDimX()) < 100 then + return B1.Box:getCenter():getX() > B2.Box:getMin():getX() + 50 + end -- se primo è foro e l'altro no, lo penalizzo if B1.Prc == 40 and B2.Prc ~= 40 then return B1.Box:getCenter():getX() > B2.Box:getMax():getX() + 100 @@ -363,14 +369,6 @@ local function OrderFeatures( vProc, b3Raw) return ( B1.Diam > B2.Diam) end end - -- se primo è taglio longitudinale completo, dopo tutte le altre feature non di coda - if abs( B1.Box:getDimX() - b3Raw:getDimX()) < 100.0 then - return B1.Box:getMin():getX() + 200.0 > B2.Box:getCenter():getX() - end - -- se secondo è taglio longitudinale completo, dopo tutte le altre feature non di coda - if abs( B2.Box:getDimX() - b3Raw:getDimX()) < 100.0 then - return B1.Box:getCenter():getX() > B2.Box:getMin():getX() + 200.0 - end -- se entrambi tenoni e si intersecano, metto prima tenone vero e poi base tenone if Tenon.Identify( B1) and Tenon.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 @@ -432,12 +430,9 @@ local function ClassifyFeatures( vProc, b3Raw) -- se mezzo-legno di testa elseif RidgeLap.Identify( Proc) then bOk, bDown = RidgeLap.Classify( Proc) - -- se mezzo-legno + -- se mezzo-legno, fessura, fessura frontale, notch, tasca elseif LapJoint.Identify( Proc) then bOk, bDown = LapJoint.Classify( Proc) - -- se tasca - elseif Pocket.Identify( Proc) then - bOk, bDown = Pocket.Classify( Proc) -- se foratura elseif Drill.Identify( Proc) then bOk, bDown = Drill.Classify( Proc, b3Raw) @@ -565,10 +560,6 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, b3 elseif Chamfer.Identify( Proc) then -- esecuzione smusso bOk, sErr = Chamfer.Make( Proc, nPhase, nRawId, nPartId) - -- se tasca ( 4-039-X) o ( 3/4-032-X) - elseif Pocket.Identify( Proc) then - -- esecuzione tasca - bOk, sErr = Pocket.Make( Proc, nPhase, nRawId, nPartId) -- se foratura ( 3/4-040-X) elseif Drill.Identify( Proc) then -- esecuzione foratura diff --git a/LuaLibs/DiceCut.lua b/LuaLibs/DiceCut.lua index 648f7e2..013068b 100644 --- a/LuaLibs/DiceCut.lua +++ b/LuaLibs/DiceCut.lua @@ -294,12 +294,12 @@ function DiceCut.GetDice( nParent, BBoxRawPart, ptCPlanes, vtNPlanes, bGetOrtoPl local dTolerance = 0 -- distanza di sicurezza per i tagli ortogonali local OffsetP = BD.MAX_DIM_DICE -- distanza tra i piani paralleli - local StepP = 10 -- numero massimo di piani paralleli da generare + local StepP = 20 -- numero massimo di piani paralleli da generare local OffsetO = BD.MAX_DIM_DICE -- distanza tra i piani ortogonali - local StepO = 10 -- numero massimo di piani ortogonali da generare + local StepO = 20 -- numero massimo di piani ortogonali da generare - -- se normali senza componenti in Y, uso per offset i limiti dei tagli di testa e coda - if abs( vtNPlanes:getY()) < 0.1 and ( not vtNBond or abs( vtNBond:getY()) < 0.1) then + -- se normali senza componenti in Y con faccia quasi verticale e trave non alta, uso per offset i limiti dei tagli di testa e coda + if abs( vtNPlanes:getY()) < 0.1 and vtNPlanes:getZ() < 0.7071 and ( not vtNBond or abs( vtNBond:getY()) < 0.1) and BBoxRawPart:getDimZ() < BD.MIN_DIM_HBEAM then --OffsetP = BD.MAX_DIM_HTCUT OffsetO = BD.MAX_DIM_HTCUT end @@ -360,6 +360,7 @@ function DiceCut.GetDice( nParent, BBoxRawPart, ptCPlanes, vtNPlanes, bGetOrtoPl -- calcolo la direzione dei piano ortogonali local vtO = VectorFromUprightOrtho( vtNInner) vtO:rotate( vtNInner, 90) + if abs( vtO:getY()) > abs( vtO:getX()) then vtO:rotate( vtNInner, 90) end -- calcolo le dimensioni dell'offset e se dove posizionare la prima faccia: -- CopyPlane: 0 => crea la prima faccia direttamente sul punto passato -- CopyPlane: 1 => crea la prima faccia e tutte le altre con l'offset passato diff --git a/LuaLibs/ProcessBirdsMouth.lua b/LuaLibs/ProcessBirdsMouth.lua index 81ce274..a4c69b6 100644 --- a/LuaLibs/ProcessBirdsMouth.lua +++ b/LuaLibs/ProcessBirdsMouth.lua @@ -59,7 +59,8 @@ function ProcessBirdsMouth.Classify( Proc) ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT) -- verifico se è lavorabile solo dal basso - local bDown = (( vtN[1]:getZ() < BD.NZ_MINB and vtN[2]:getZ() < BD.NZ_MINB) or vtN[1]:getZ() < BD.NZ_MINA or vtN[2]:getZ() < BD.NZ_MINA) + --local bDown = (( vtN[1]:getZ() < BD.NZ_MINB and vtN[2]:getZ() < BD.NZ_MINB) or vtN[1]:getZ() < BD.NZ_MINA or vtN[2]:getZ() < BD.NZ_MINA) + local bDown = ( vtN[1]:getZ() < BD.NZ_MINB and vtN[2]:getZ() < BD.NZ_MINB) return true, bDown -- se più di due facce else diff --git a/LuaLibs/ProcessCut.lua b/LuaLibs/ProcessCut.lua index 15a2543..2de0c4f 100644 --- a/LuaLibs/ProcessCut.lua +++ b/LuaLibs/ProcessCut.lua @@ -163,10 +163,12 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) 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()) + if abs( vtN:getY()) > GEO.EPS_SMALL or b3Raw:getDimZ() - Proc.Box:getDimZ() < BD.MIN_HEIGHT then + 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 end return true end diff --git a/LuaLibs/ProcessFreeContour.lua b/LuaLibs/ProcessFreeContour.lua index f888535..18969e8 100644 --- a/LuaLibs/ProcessFreeContour.lua +++ b/LuaLibs/ProcessFreeContour.lua @@ -1,4 +1,4 @@ --- ProcessFreeContour.lua by Egaltech s.r.l. 2019/04/13 +-- ProcessFreeContour.lua by Egaltech s.r.l. 2019/06/13 -- Gestione calcolo profilo libero per Travi -- Tabella per definizione modulo @@ -60,18 +60,20 @@ end --------------------------------------------------------------------- -- Classificazione della feature function ProcessFreeContour.Classify( Proc) - -- se di testa o coda, è indifferente alla posizione - if Proc.Head or Proc.Tail then + -- verifico se di tipo pocket + local bPocket = ( EgtGetInfo( Proc.Id, 'PCKT', 'i') == 1) + -- se non è pocket, è indifferente alla posizione + if not bPocket then return true, false end - -- è intermedia, devo verificare la normale del centro - local nMidFacet = Proc.Fct // 2 - local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nMidFacet, GDB_ID.ROOT) + -- è pocket, devo verificare la normale del piano di svuotatura (sempre ultima faccia) + local nFacet = Proc.Fct - 1 + local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacet, GDB_ID.ROOT) -- verifico sia una superficie if not vtN then return false end - -- verifico se la feature è lavorabile solo da sotto + -- verifico se la feature è lavorabile solo da sotto (tasca con normale verso il basso) local bDown = ( vtN:getZ() < - 0.1) return true, bDown end diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 1a1383f..496bdd5 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -1,4 +1,4 @@ --- ProcessLapJoint.lua by Egaltech s.r.l. 2019/04/26 +-- ProcessLapJoint.lua by Egaltech s.r.l. 2019/06/14 -- Gestione calcolo mezzo-legno per Travi -- Tabella per definizione modulo @@ -22,7 +22,9 @@ local ML = require( 'MachiningLib') function ProcessLapJoint.Identify( Proc) return ( (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 16) or (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 17) or - (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 30)) + (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 30) or + (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 32) or + ( Proc.Grp == 4 and Proc.Prc == 39)) end --------------------------------------------------------------------- @@ -32,14 +34,18 @@ function ProcessLapJoint.IsHeadFeature( Proc, b3Raw, dCurrOvmH) if Proc.Box:getMax():getX() < b3Raw:getMax():getX() - dCurrOvmH - BD.MAX_DIST_HTFEA then return false end - -- deve occupare la maggior parte dell'area - if Proc.Box:getDimY() > 0.75 * b3Raw:getDimY() or Proc.Box:getDimZ() > 0.75 * b3Raw:getDimZ() then + -- se una o due facce ora è sicuramente di testa + if Proc.Fct <= 2 then return true end -- deve avere la normale principale diretta verso la testa local nFacInd = BL.GetFaceWithMostAdj( Proc.Id) local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT) - if vtN:getX() > 0.5 then + if vtN:getX() < 0.5 then + return false + end + -- deve occupare la maggior parte dell'area + if Proc.Box:getDimY() > 0.75 * b3Raw:getDimY() or Proc.Box:getDimZ() > 0.75 * b3Raw:getDimZ() then return true end -- non è di testa @@ -53,14 +59,18 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw) if Proc.Box:getMin():getX() > b3Raw:getMin():getX() + BD.MAX_DIST_HTFEA then return false end - -- deve occupare la maggior parte dell'area - if Proc.Box:getDimY() > 0.75 * b3Raw:getDimY() or Proc.Box:getDimZ() > 0.75 * b3Raw:getDimZ() then + -- se una o due facce ora è sicuramente di coda + if Proc.Fct <= 2 then return true end -- deve avere la normale principale diretta verso la coda local nFacInd = BL.GetFaceWithMostAdj( Proc.Id) local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT) - if vtN:getX() < -0.5 then + if vtN:getX() > -0.5 then + return false + end + -- deve occupare la maggior parte dell'area + if Proc.Box:getDimY() > 0.75 * b3Raw:getDimY() or Proc.Box:getDimZ() > 0.75 * b3Raw:getDimZ() then return true end -- non è di coda diff --git a/LuaLibs/ProcessPocket.lua b/LuaLibs/ProcessPocket.lua deleted file mode 100644 index 8c2669e..0000000 --- a/LuaLibs/ProcessPocket.lua +++ /dev/null @@ -1,89 +0,0 @@ --- ProcessPocket.lua by Egaltech s.r.l. 2019/04/24 --- Gestione calcolo tasche per Travi - --- Tabella per definizione modulo -local ProcessPocket = {} - --- Include -require( 'EgtBase') -local BL = require( 'BeamLib') - -EgtOutLog( ' ProcessPocket started', 1) - --- Dati -local BD = require( 'BeamData') -local ML = require( 'MachiningLib') - ---------------------------------------------------------------------- --- Riconoscimento della feature -function ProcessPocket.Identify( Proc) - return ( ( Proc.Grp == 4 and Proc.Prc == 39) or - (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 32)) -end - ---------------------------------------------------------------------- --- Classificazione della feature -function ProcessPocket.Classify( Proc) - -- recupero la faccia con il maggior numero di adiacenze e più grande - local nFacInd = BL.GetFaceWithMostAdj( Proc.Id) - if not nFacInd then return false end - -- recupero i dati della faccia - local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT) - -- verifico se la mortasa è lavorabile solo da sotto - local bDown = ( vtN:getZ() < - 0.1) - return true, bDown -end - ---------------------------------------------------------------------- --- Applicazione della lavorazione -function ProcessPocket.Make( Proc, nPhase, nRawId, nPartId) - -- recupero la faccia con il maggior numero di adiacenze e più grande - local nFacInd = BL.GetFaceWithMostAdj( Proc.Id) - if not nFacInd then - local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' bottom face not found' - EgtOutLog( sErr) - return false, sErr - end - -- ne recupero i dati - local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT) - EgtOutLog( 'ptC=' .. tostring( ptC) ..' vtN=' .. tostring( vtN), 3) - -- verifico che la mortasa non sia orientata verso il basso (-5 deg) - if vtN:getZ() < - 0.1 then - local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' Pocket from bottom impossible' - EgtOutLog( sErr) - return false, sErr - end - -- recupero la lavorazione - local sPocketing = ML.FindPocketing( 'Mortise') - if not sPocketing then - local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' pocketing not found in library' - EgtOutLog( sErr) - return false, sErr - end - -- inserisco la lavorazione di svuotatura - local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - local nMchFId = EgtAddMachining( sName, sPocketing) - if not nMchFId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing - EgtOutLog( sErr) - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, nFacInd}}) - -- imposto posizione braccio porta testa - if vtN:getY() < GEO.EPS_SMALL then - EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM) - else - EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP) - end - -- eseguo - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - return true -end - ---------------------------------------------------------------------- -return ProcessPocket diff --git a/LuaLibs/ProcessRoundArch.lua b/LuaLibs/ProcessRoundArch.lua index c9f69b6..b68dc91 100644 --- a/LuaLibs/ProcessRoundArch.lua +++ b/LuaLibs/ProcessRoundArch.lua @@ -1,4 +1,4 @@ --- ProcessRoundArch.lua by Egaltech s.r.l. 2018/11/26 +-- ProcessRoundArch.lua by Egaltech s.r.l. 2019/06/13 -- Gestione calcolo archi per Travi -- Tabella per definizione modulo @@ -72,7 +72,8 @@ function ProcessRoundArch.Classify( Proc) return false end -- verifico se la feature è lavorabile solo da sotto - local bDown = ( vtN:getZ() < - 0.1) + --local bDown = ( vtN:getZ() < - 0.1) + local bDown = false return true, bDown end