diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index b6f27e3..0477f19 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1,4 +1,4 @@ --- BeamExec.lua by Egaltech s.r.l. 2020/12/296 +-- BeamExec.lua by Egaltech s.r.l. 2020/12/29 -- 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. diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index eff6de8..95fc73f 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -1,4 +1,4 @@ --- MachiningLib.lua by Egaltech s.r.l. 2020/11/06 +-- MachiningLib.lua by Egaltech s.r.l. 2020/11/13 -- Libreria ricerca lavorazioni per Travi -- Tabella per definizione modulo @@ -112,7 +112,7 @@ function MachiningLib.FindDrilling( dDiam, dDepth, bDown) local dMaxToolLength = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) local dToolDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) local dDiamTh = EgtTdbGetCurrToolThDiam() - local dFreeLen = dMaxToolLength + local dFreeLen = dTMaxDepth if dTDiam < dDiam - 10 * GEO.EPS_SMALL then if not dDepth or dTMaxDepth > dDepth - GEO.EPS_SMALL then return Drilling.Name, Drilling.Type, dTMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dFreeLen diff --git a/LuaLibs/ProcessCut.lua b/LuaLibs/ProcessCut.lua index b3bb7c5..b3fe568 100644 --- a/LuaLibs/ProcessCut.lua +++ b/LuaLibs/ProcessCut.lua @@ -1,4 +1,4 @@ --- ProcessCut.lua by Egaltech s.r.l. 2020/12/09 +-- ProcessCut.lua by Egaltech s.r.l. 2021/01/13 -- Gestione calcolo singoli tagli di lama per Travi -- Tabella per definizione modulo @@ -8,6 +8,7 @@ local ProcessCut = {} require( 'EgtBase') local BL = require( 'BeamLib') local DC = require( 'DiceCut') +local LongCut = require( 'ProcessLongCut') EgtOutLog( ' ProcessCut started', 1) @@ -195,21 +196,42 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom) local bFillTail -- se pezzo ancora attaccato alla trave, per non rovinare quello successivo if not BL.IsSplittedPartPhase( nPhase) then - -- se non da sotto e praticamente orizzontale ( inclinazione inferiore a 11.5deg) - if not bDownCut and vtN:getZ() > 0.98 then - -- se la faccia occupa tutta la trave in X e Y e non interessa la faccia inferiore, si fanno partire i tagli a cubetti dalla testa - if abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getX() - b3Solid:getMax():getX()) < 10*GEO.EPS_SMALL and - abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL and - b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then - bFillAreaPiece = true + -- se non da sotto + if not bDownCut then + -- se praticamente orizzontale ( inclinazione inferiore a 11.5deg) + if vtN:getZ() > 0.98 then + -- se la faccia occupa tutta la trave in X e Y e non interessa la faccia inferiore, si fanno partire i tagli a cubetti dalla testa + if abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getX() - b3Solid:getMax():getX()) < 10*GEO.EPS_SMALL and + abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL and + b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then + bFillAreaPiece = true + end + -- se praticamente verticale di fianco ( inclinazione inferiore a 11.5deg) + elseif abs( vtN:getY()) > 0.98 then + -- se la faccia occupa tutta la trave in X e Z e non interessa la faccia inferiore, do errore + if abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getX() - b3Solid:getMax():getX()) < 10*GEO.EPS_SMALL and + abs( Proc.Box:getMin():getZ() - b3Solid:getMin():getZ()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getZ() - b3Solid:getMax():getZ()) < 10*GEO.EPS_SMALL then + local sErr = 'Error : Impossible to machine by orientation (on side)' + EgtOutLog( sErr) + return false, sErr + end end - end - -- se non da sotto e quasi orizzontale ( inclinazione inferiore a 30) - if not bDownCut and vtN:getZ() > 0.866 then - -- se la faccia termina davanti o dietro la trave e arriva in coda e non interessa la faccia inferiore, forzo il taglio a cubetti a partire dal davanti - if ( abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL or abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL) and - abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then - bFillTail = true + -- se quasi orizzontale ( inclinazione inferiore a 30) + if vtN:getZ() > 0.866 then + -- se la faccia termina davanti o dietro la trave e arriva in coda e non interessa la faccia inferiore, forzo il taglio a cubetti a partire dal davanti + if ( abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL or abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL) and + abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then + bFillTail = true + end + -- se verticale quasi completamente di fianco ( inclinazione inferiore a 30) + elseif abs( vtN:getY()) > 0.866 then + -- se la faccia termina davanti o dietro la trave e arriva in coda e non interessa la faccia inferiore, forzo il taglio a cubetti a partire dal davanti + if ( abs( Proc.Box:getMin():getZ() - b3Solid:getMin():getZ()) < 10*GEO.EPS_SMALL or abs( Proc.Box:getMax():getZ() - b3Solid:getMax():getZ()) < 10*GEO.EPS_SMALL) and + abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL then + local sErr = 'Error : Impossible to machine by orientation (on side)' + EgtOutLog( sErr) + return false, sErr + end end end end @@ -231,6 +253,11 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom) if Proc.CutFront then return true end + -- se ho il parametro Q04 = 1 e il taglio copre la lunghezza della trave allora lancio il processo dell'L10 + local nAsLongCut = EgtGetInfo( Proc.Id, 'Q04', 'd') or 0 + if nAsLongCut == 1 and bFillAreaPiece then + return LongCut.Make( Proc, nPhase, nRawId, nPartId, true) + end -- se vero taglio, eventuale inserimento smussi if Proc.Prc == 10 then local bOkc, sErrC = MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) @@ -381,7 +408,9 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom) dExtraCut = BD.CUT_EXTRA end end - local bOk, sErr = BL.MakeOneFaceBySaw( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dNzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, nil, b3Raw) + local dVzLimDwnUp = dNzLimDwnUp + if not BD.C_SIMM and vtN:getZ() > 0.707 then dVzLimDwnUp = -0.708 end + local bOk, sErr = BL.MakeOneFaceBySaw( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, nil, b3Raw) if not bOk then return bOk, sErr end @@ -434,16 +463,20 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom) if Proc.Box:getDimZ() > dMinHIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinHIng then if Proc.Head then local dOffs = b3Raw:getMax():getX() - dOvmHead - Proc.Box:getMin():getX() - if abs( vtN:getZ()) > 0.5 then + if vtN:getZ() > 0.5 then dOffs = dOffs - 0.6 * Proc.Box:getDimX() + elseif vtN:getZ() < -0.5 then + dOffs = dOffs - 0.2 * Proc.Box:getDimX() elseif ( abs( vtN:getY()) > 0.9 and vtN:getZ() > 0.2) then dOffs = dOffs - 0.3 * Proc.Box:getDimX() end BL.UpdateHCING( nRawId, dOffs) elseif Proc.Tail then local dOffs = Proc.Box:getMax():getX() - b3Solid:getMin():getX() - if abs( vtN:getZ()) > 0.5 then + if vtN:getZ() > 0.5 then dOffs = dOffs - 0.6 * Proc.Box:getDimX() + elseif vtN:getZ() < -0.5 then + dOffs = dOffs - 0.2 * Proc.Box:getDimX() elseif ( abs( vtN:getY()) > 0.9 and vtN:getZ() > 0.2) then dOffs = dOffs - 0.3 * Proc.Box:getDimX() end diff --git a/LuaLibs/ProcessDrill.lua b/LuaLibs/ProcessDrill.lua index 3008681..33eab90 100644 --- a/LuaLibs/ProcessDrill.lua +++ b/LuaLibs/ProcessDrill.lua @@ -1,4 +1,4 @@ --- ProcessDrill.lua by Egaltech s.r.l. 2020/12/29 +-- ProcessDrill.lua by Egaltech s.r.l. 2021/01/13 -- Gestione calcolo forature per Travi -- Tabella per definizione modulo @@ -290,6 +290,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) sDrilling = sDrilling2 nType = nType2 dMaxDepth = dMaxDepth2 + dToolDiam = dToolDiam2 dDiamTh = dDiamTh2 dToolFreeLen = dToolFreeLen2 dDepth = dDepth2 @@ -313,13 +314,14 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) local dSubL1 = 0 local dSubL2 = 0 local dSubL3 = 0 + local dDeltaRad = ( Proc.Diam - dToolDiam) / 2 -- se foro non su testa o coda e inclinato, limito il massimo affondamento local bInvertFcse = ( bToInvert and Proc.Flg ~= -2) if ( not bInvertFcse and Proc.Fcs ~= 5 and Proc.Fcs ~= 6) or ( bInvertFcse and Proc.Fce ~= 5 and Proc.Fce ~= 6) then local CosB = abs( vtExtr:getX()) if CosB < BD.DRILL_VX_MAX then local TgA = CosB / sqrt( 1 - CosB * CosB) - dSubL1 = ( dDiamTh / 2 + 2) * TgA + dSubL1 = ( dDiamTh / 2 + dDeltaRad + 2) * TgA else dMaxDepth = 0 end @@ -329,7 +331,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) local CosB = abs( vtExtr:getZ()) if CosB < BD.DRILL_VX_MAX then local TgA = CosB / sqrt( 1 - CosB * CosB) - dSubL2 = ( dDiamTh / 2 + 2) * TgA + dSubL2 = ( dDiamTh / 2 + dDeltaRad + 2) * TgA else dMaxDepth = 0 end @@ -339,7 +341,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) local CosB = abs( vtExtr:getY()) if CosB < BD.DRILL_VX_MAX then local TgA = CosB / sqrt( 1 - CosB * CosB) - dSubL3 = ( dDiamTh / 2 + 2) * TgA + dSubL3 = ( dDiamTh / 2 + dDeltaRad + 2) * TgA else dMaxDepth = 0 end diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index fe45fc6..fc6af69 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -1,4 +1,4 @@ --- ProcessLapJoint.lua by Egaltech s.r.l. 2020/12/10 +-- ProcessLapJoint.lua by Egaltech s.r.l. 2021/01/13 -- Gestione calcolo mezzo-legno per Travi -- 2019/10/08 Agg. gestione OpenPocket. @@ -185,7 +185,7 @@ local function VerifySawChain( Proc, dMinDim, dMaxDim, vtOrtho) dSawCornerRad = EgtTdbGetCurrToolParam( MCH_TP.CORNRAD) or dSawCornerRad dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth end - if dSawThick <= dMinDim and dSawWidth <= dMaxDim then + if dSawThick < dMinDim + 10 * GEO.EPS_SMALL and dSawWidth < dMaxDim + 10 * GEO.EPS_SMALL then bUseSawChain = true end end diff --git a/LuaLibs/ProcessLongCut.lua b/LuaLibs/ProcessLongCut.lua index 6424b78..e7d7483 100644 --- a/LuaLibs/ProcessLongCut.lua +++ b/LuaLibs/ProcessLongCut.lua @@ -1,4 +1,4 @@ --- ProcessLongCut.lua by Egaltech s.r.l. 2020/10/09 +-- ProcessLongCut.lua by Egaltech s.r.l. 2021/01/11 -- Gestione calcolo taglio longitudinale per Travi -- Tabella per definizione modulo @@ -143,7 +143,7 @@ end --------------------------------------------------------------------- -- Applicazione della lavorazione -function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId) +function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade) -- recupero l'ingombro del grezzo di appartenenza local b3Raw = EgtGetRawPartBBox( nRawId) local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) @@ -187,7 +187,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId) -- fino al punto più vicino della faccia laterale (prima l'arretramento era sempre del rggio utensile). -- Questo viene fatto se Q07=1 o fresa da sotto ---------------------------------------------------------------------------------------------------------------------------------------- - local bUseBlade = ( EgtGetInfo( Proc.Id, 'Q05', 'i') == 1) + local bUseBlade = ( EgtGetInfo( Proc.Id, 'Q05', 'i') == 1) or bCustUseBlade local nUseMillOnSide = EgtGetInfo( Proc.Id, 'Q07', 'i') or 0 -- se entrambe i Q sono attivi, disabilito lama if nUseMillOnSide > 0 then bUseBlade = false end