diff --git a/.gitignore b/.gitignore index 8e23b4e..495bd51 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,3 @@ /bin/Images/*.png .vscode/settings.json bin/Images/.placeholder -bin/LuaLibs/.placeholder -bin/Images/.placeholder -bin/LuaLibs/.placeholder diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 68b8251..aa7a208 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -45,6 +45,7 @@ -- 2023/02/17 Nelle tasche in doppio, la distanza minima ammessa tra le feature è stata portata a 50. -- 2023/02/20 Ora le mortase a coda di rondine laterali sono sempre fatte prima dei tagli longitudinali. -- 2023/03/31 Corretto ordinamento per fori di coda da lasciare in coda. +-- 2023/07/31 Corretto errore nelle mortase in doppio. -- Tabella per definizione modulo local BeamExec = {} @@ -973,7 +974,7 @@ local function ClassifyFeatures( vProc, b3Raw, Stats) local bDownSideOnHeadOk = false if Proc.MachineBeforeIntersectingDrillings then - table.Insert ( vMachineBeforeIntersectingDrillingsId, Proc.Id) + table.insert( vMachineBeforeIntersectingDrillingsId, Proc.Id) end -- se senza geometria (già disabilitato) @@ -1505,11 +1506,11 @@ local function VerifyMortiseMirrored( Proc, vProc, b3Raw) local sPockType = 'Mortise' local sPocketing if Proc.Prc ~= 53 then - sPocketing = Mortise.VerifyMortiseOrPocket( Proc, dW, dMorH, nil, sPockType, false) + sPocketing = Mortise.VerifyMortiseOrPocket( Proc, dW, dMorH, nil, sPockType, false, true) end if not sPocketing then sPockType = 'Pocket' - sPocketing = Mortise.VerifyMortiseOrPocket( Proc, dW, dMorH, nil, sPockType, false) + sPocketing = Mortise.VerifyMortiseOrPocket( Proc, dW, dMorH, nil, sPockType, false, true) end if not sPocketing or not EgtMdbSetCurrMachining( sPocketing) then return diff --git a/LuaLibs/DiceCut.lua b/LuaLibs/DiceCut.lua index d07cfff..c8bb109 100644 --- a/LuaLibs/DiceCut.lua +++ b/LuaLibs/DiceCut.lua @@ -1,4 +1,4 @@ --- DiceCut.lua by Egaltech s.r.l. 2023/02/05 +-- DiceCut.lua by Egaltech s.r.l. 2023/06/29 -- Gestione dei piano paralleli nei tagli lunghi: equidistanziamento dei piani paralleli -- Tabella per definizione modulo @@ -473,7 +473,7 @@ function DiceCut.GetDice( nParent, BBoxRawPart, ptCPlanes, vtNPlanes, bGetOrtoPl if vtNInner:getZ() > -0.0175 or vtNInner:getZ() < dNzLimDwnUp or abs( vtNInner:getY()) > 0.8 then vtO:rotate( vtNInner, 90) -- se diretto troppo ortogonalmente all'asse trave e taglio non da sotto, lo ruoto ulteriormente - if ( abs( vtO:getY()) > 3 * abs( vtO:getX()) or BBoxRawPart:getDimZ() > 620) and vtNInner:getZ() > dNzLimDwnUp then + if ( abs( vtO:getY()) > 4 * abs( vtO:getX()) or BBoxRawPart:getDimZ() > 620) and vtNInner:getZ() > dNzLimDwnUp then vtO:rotate( vtNInner, 90) -- se faccia principale verso il basso (almeno -3deg), lo inverto per iniziare da sopra if vtNInner:getZ() < -0.05 then diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 4a66190..3b06698 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -184,7 +184,7 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw -- se la lama ruota in senso antiorario inverto la direzione di lavorazione, per avere rotazione lama opposta a avanzamento if bInvert == nil then if not BD.TURN then - if bIsSawCCW and not bDownUp then + if bIsSawCCW ~= bDownUp then bInvert = ( ptP2:getZ() < ptP1:getZ() + 100 * GEO.EPS_SMALL) else bInvert = ( ptP2:getZ() < ptP1:getZ() - 100 * GEO.EPS_SMALL) diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 2f217f4..c73ebef 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -7,6 +7,7 @@ -- 2022/12/28 Per FindMilling e FindDrilling possibilità di escludere la testa H2 dalla ricerca utensile. -- 2023/01/31 Per FindPocketing implementata la possibilità di escludere le teste H2 o H3 dalla ricerca utensile. -- 2023/03/13 Per FindPocketing implementata la scelta lavorazione da UUID dell'utensile. +-- 2023/07/28 Aggiunta gestione del tipo di foratura "Drill_AT". -- Tabella per definizione modulo local MachiningLib = {} @@ -179,7 +180,7 @@ end --------------------------------------------------------------------- function VerifyTool( MachiningType, sType, Params, bH2) if MachiningType == MCH_MY.DRILLING then - if EgtStartsWith( sType, 'Drill') or EgtStartsWith( sType, 'AngleDrill') then + if EgtStartsWith( sType, 'Drill') or EgtStartsWith( sType, 'Drill_AT') or EgtStartsWith( sType, 'AngleDrill') then return VerifyDrill( Params.Diam, Params.Depth, bH2) elseif EgtStartsWith( sType, 'Pocket') then return VerifyDrillPocket( Params.Diam, Params.Depth, bH2) @@ -216,7 +217,7 @@ end function ReturnParams( MachiningType, MachiningName, sType, ToolParams) if MachiningType == MCH_MY.DRILLING then local _, sOrigType = EgtEndsWith( sType, '_H2') - return MachiningName, sType, EgtIf( sOrigType == 'Drill' or sOrigType == 'AngleDrill' , ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen + return MachiningName, sType, EgtIf( sOrigType == 'Drill' or sOrigType == 'Drill_AT' or sOrigType == 'AngleDrill' , ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen elseif MachiningType == MCH_MY.SAWING then return MachiningName, ToolParams.H2 elseif MachiningType == MCH_MY.MILLING then @@ -382,9 +383,9 @@ function MachiningLib.FindCutting( sType, bTopHead, bDownHead) end --------------------------------------------------------------------- -function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2) - local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, 'Drill', { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2) - if not MachiningName or MachiningName == '' then +function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission) + local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Drill_AT', 'Drill'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2) + if ( not MachiningName or MachiningName == '') and not bAngleTransmission then MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, 'Pocket', { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead) end if MachiningName and MachiningName ~= '' then diff --git a/LuaLibs/ProcessCut.lua b/LuaLibs/ProcessCut.lua index 3c01e54..f8a8677 100644 --- a/LuaLibs/ProcessCut.lua +++ b/LuaLibs/ProcessCut.lua @@ -1,4 +1,4 @@ --- ProcessCut.lua by Egaltech s.r.l. 2023/04/05 +-- ProcessCut.lua by Egaltech s.r.l. 2023/08/01 -- Gestione calcolo singoli tagli di lama per Travi -- 2021/05/18 I due tagli con testa da sotto di un cubetto sono fatti di seguito. -- 2021/06/06 Correzioni per tagli con testa da sotto. @@ -19,6 +19,9 @@ -- 2022/09/23 Corretta la condizione per cui è richiesto l'aggiornamento del grezzo. -- 2023/01/26 Migliorata la direzione di lavoro della lama in alcuni casi in cui il truciolo veniva scaricato dal lato errato. -- 2023/06/19 Aggiunti tagli speciali per evitare il rischio che il cubetto rimanga appoggiato al motore. +-- 2023/08/01 Correzione su offset per taglio doppio di lato. +-- 2023/08/01 In caso di pezzi alti su macchina tipo PF i tagli doppi di lato non vengono usati, si usa il metodo standard. +-- 2023/09/12 In MakeFromTop abbassato a 590 mm il limite per convertire in LongCut. -- Tabella per definizione modulo local ProcessCut = {} @@ -173,7 +176,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch1Id, false) return false, sErr end -- Inserisco la lavorazione del lato opposto @@ -196,7 +199,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch2Id, false) return false, sErr end return true, nil @@ -247,14 +250,15 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b if bFromBottom == nil then bFromBottom = ( vtN:getZ() > 0.25 and b3Solid:getDimX() < BD.LEN_SHORT_PART and not Proc.AdvTail and vtN:getX() < 0 and abs( vtN:getY()) < 0.259) end + local dMinFeatureLengthForLongCut = 590.000 -- verifico se da considerare taglio lungo ( non da sotto, inclinato non più di 30deg, largo come la trave e abbastanza lungo) local bLongCut = ( not bDownCut and vtN:getZ() > 0.865 and Proc.Box:getDimY() > b3Solid:getDimY() - 10 * GEO.EPS_SMALL and - ( Proc.Box:getDimX() > 0.75 * b3Solid:getDimX() or Proc.Box:getDimX() > 600.000)) + ( Proc.Box:getDimX() > 0.75 * b3Solid:getDimX() or Proc.Box:getDimX() > dMinFeatureLengthForLongCut)) -- verifico se da considerare taglio lungo dal lato, solo per macchine tipo PF1250, inclinato non più di 30deg local bLongCutFromSide = ( not bDownCut and ( BD.C_SIMM and BD.DOWN_HEAD and ( abs(vtN:getY()) > 0.865) and Proc.Box:getDimZ() > b3Solid:getDimZ() - 10 * GEO.EPS_SMALL) and - ( Proc.Box:getDimX() > 0.75 * b3Solid:getDimX() or Proc.Box:getDimX() > 600.000)) + ( Proc.Box:getDimX() > 0.75 * b3Solid:getDimX() or Proc.Box:getDimX() > dMinFeatureLengthForLongCut)) -- se taglio lungo e Q04 = 1 allora lancio il processo dell'L10 local bNoDicing = EgtGetInfo( Proc.Id, 'Q04', 'i') == 1 if bNoDicing then @@ -399,12 +403,12 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b -- per caso speciale in cui c'è il rischio che il cubetto rimanga appoggiato sul motore, faccio solo i tagli perpendicolari seguiti da due tagli verticali laterali local bDangerousReliefCut = false - local frFace = BL.GetFaceHvRefDim( Proc.Id, 0) -- verifico che i tagli perpendicolari siano perpendicolari al lato più vicino a Z - local nFirstPerpendicularCut = ( #vCuts ~= 0 and ( vCuts[1][1] or vCuts[3][1])) + local nFirstPerpendicularCut = ( #vCuts > 0 and ( vCuts[1][1] or vCuts[3][1])) if nFirstPerpendicularCut then + local frFace = BL.GetFaceHvRefDim( Proc.Id, 0) local vtTemp = EgtSurfTmFacetNormVersor( nFirstPerpendicularCut, 0, GDB_ID.ROOT) ^ frFace:getVersX() - if #vCuts > 0 and not ( vtTemp:isSmall()) and not ( bDownCut or bFromBottom) and not bLongCut then + if not ( vtTemp:isSmall()) and not ( bDownCut or bFromBottom) and not bLongCut and ( not BD.C_SIMM or b3Raw:getDimZ() < BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL) then bDangerousReliefCut = true end end @@ -467,25 +471,35 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b end end end - local nCurrentParallelFace = EgtSurfTmBySewing( nAddGrpId, vCuts[i], false) - local _, dDiceFaceH = BL.GetFaceHvRefDim( nCurrentParallelFace or GDB_ID.NULL, 0, b3Raw) + local dDiceFaceMaxH = 0 + local dDiceFaceMinH = GEO.INFINITO + if ( i % 2) == 0 and bDangerousReliefCut then + for j = 1, #vCuts[i] do + local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][j], 0) + dDiceFaceMaxH = max( dDiceFaceMaxH, dDiceFaceH) + -- calcolo lato orizzontale minore ipotizzando sia un trapezio + local dDiceFaceH2 = ( 2 * EgtSurfArea( vCuts[i][j]) ) / dDiceFaceV - dDiceFaceH + dDiceFaceMinH = min( dDiceFaceMinH, dDiceFaceH2) + end + end -- caso speciale con rischio cubetto sul motore - if ( i % 2 == 0) and bDangerousReliefCut and ( dMaxDepth * 2 > dDiceFaceH + BD.CUT_EXTRA) then + if ( i % 2) == 0 and bDangerousReliefCut and ( dMaxDepth > dDiceFaceMaxH - 0.5 * dDiceFaceMinH + BD.CUT_EXTRA_MIN) then local bDoubleCut = false local dCutExtra = BD.CUT_EXTRA - if dMaxDepth < dDiceFaceH + BD.CUT_EXTRA then + if dMaxDepth < dDiceFaceMaxH + BD.CUT_EXTRA then bDoubleCut = true - dCutExtra = - 0.5 * b3Raw:getDimY() + BD.CUT_EXTRA + dCutExtra = - 0.5 * dDiceFaceMinH + BD.CUT_EXTRA_MIN end + local nSurfToCut = EgtSurfTmBySewing( nAddGrpId, vCuts[i], false) local nFaceUseCut1, nFaceUseCut2 = MCH_MILL_FU.ORTHO_BACK, MCH_MILL_FU.ORTHO_FRONT if Proc.Tail then nFaceUseCut1, nFaceUseCut2 = nFaceUseCut2, nFaceUseCut1 end if bDoubleCut then - local bOk, sErr = Fbs.MakeOne( nCurrentParallelFace, 0, sCutting, dSawDiam, nFaceUseCut1, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw, true) + local bOk, sErr = Fbs.MakeOne( nSurfToCut, 0, sCutting, dSawDiam, nFaceUseCut1, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw, true) if not bOk then return false, sErr end end - local bOk2, sErr2 = Fbs.MakeOne( nCurrentParallelFace, 0, sCutting, dSawDiam, nFaceUseCut2, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw) + local bOk2, sErr2 = Fbs.MakeOne( nSurfToCut, 0, sCutting, dSawDiam, nFaceUseCut2, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw) if not bOk2 then return false, sErr2 end -- caso standard else diff --git a/LuaLibs/ProcessDoubleCut.lua b/LuaLibs/ProcessDoubleCut.lua index d5289c7..fdf582c 100644 --- a/LuaLibs/ProcessDoubleCut.lua +++ b/LuaLibs/ProcessDoubleCut.lua @@ -161,7 +161,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch1Id, false) return false, sErr end -- Inserisco la lavorazione del lato opposto @@ -184,7 +184,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch2Id, false) return false, sErr end return true diff --git a/LuaLibs/ProcessDrill.lua b/LuaLibs/ProcessDrill.lua index 61f5964..05cf3a0 100644 --- a/LuaLibs/ProcessDrill.lua +++ b/LuaLibs/ProcessDrill.lua @@ -17,6 +17,7 @@ -- 2022/11/23 Aggiunta la gestione dei fori con angolo < 30 gradi, per i quali si usa la testa della macchina per accorciare l'utile di lavoro. -- 2022/12/28 Implementata gestione forature in doppio -- 2023/05/11 Se lavorazione in doppio e precedente no oppure di tipo diverso, forzo risalita a Zmax. +-- 2023/07/28 Aggiunta gestione rinvio 90deg solo per forature da sotto esattamente verticali. -- Tabella per definizione modulo local ProcessDrill = {} @@ -169,7 +170,12 @@ function ProcessDrill.Classify( Proc, b3Raw) -- verifico se il foro è sotto e quindi va spostato o sopra o sul fianco if (( vtExtr:getZ() < BD.DRILL_VZ_MIN or bFaceDown) and ( not bOpen or Proc.Flg ~= 1)) then if not bOpen then - return true, true, false + -- se da sotto e presente rinvio angolare verifico se c'è opportuna lavorazione + if BD.ANG_TRASM and ML.FindDrilling( dDiam, nil, nil, nil, nil, true) and AreOppositeVectorApprox( vtExtr, Z_AX()) then + return true, false, false + else + return true, true, false + end else return true, not ( BD.ROT90 or BD.DOWN_HEAD or BD.TURN), ( BD.ROT90 or BD.DOWN_HEAD or BD.TURN) end @@ -242,8 +248,10 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) local bOpen = ( Proc.Fcs ~= 0 and Proc.Fce ~= 0) -- verifico possibilità di foratura da sotto local bDownDrill = ( BD.TURN or ( BD.DOWN_HEAD and ML.FindDrilling( dDiam, nil, false, true))) + -- se presente rinvio angolare + local bDrillAngTrasm = ( BD.ANG_TRASM and AreOppositeVectorApprox( vtExtr, Z_AX()) and not bOpen) -- verifico che il foro non sia fattibile solo da sotto - local bToInvert = ( vtExtr:getZ() < BD.DRILL_VZ_MIN and not bDownDrill) + local bToInvert = ( vtExtr:getZ() < BD.DRILL_VZ_MIN and not bDownDrill) and not bDrillAngTrasm if bToInvert and ( not bOpen or Proc.Flg ~= 1) then local sErr = 'Error : drilling from bottom impossible' EgtOutLog( sErr) @@ -283,9 +291,9 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) end -- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante -- recupero la lavorazione - local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2) + local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm) if not sDrilling and dCheckDepth then - sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2) + sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm) if sDrilling then dCheckDepth = nil end end if not sDrilling then @@ -459,7 +467,9 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) end -- imposto posizione braccio porta testa local nSCC = MCH_SCC.NONE - if not BD.C_SIMM and not BD.TURN then + if bDrillAngTrasm then + nSCC = MCH_SCC.ADIR_NEAR + elseif not BD.C_SIMM and not BD.TURN then nSCC = MCH_SCC.ADIR_YM if AreSameVectorApprox( vtExtr, Z_AX()) then nSCC = MCH_SCC.ADIR_YM diff --git a/LuaLibs/ProcessFreeContour.lua b/LuaLibs/ProcessFreeContour.lua index 69d0089..aa65038 100644 --- a/LuaLibs/ProcessFreeContour.lua +++ b/LuaLibs/ProcessFreeContour.lua @@ -8,6 +8,7 @@ -- In MakeByMill se BeamData forza lettura codolo da Q questo viene sempre fatto indipendentemente dalle dimensioni della feature -- 2023/03/03 Corretta MakeByMark ( non definiti b3Raw e b3Aux ). -- 2023/06/21 In CalcSpecialAdd modificato l'angolo minimo da 5 a 15 deg. +-- 2023/07/28 In MakeByPocket aggiunta Q06 per specificare un eventuale offset radiale del contorno. -- Tabella per definizione modulo local ProcessFreeContour = {} @@ -27,6 +28,7 @@ local Q_DIM_STRIP = 'Q01' -- d local Q_DEPTH_CHAMFER = 'Q02' -- d local Q_OVERMAT_FOR_FINISH = 'Q03' -- d local Q_ONLY_CHAMFER = 'Q00' -- i +local Q_RADIAL_OFFSET = 'Q06' -- d, valido solo per pocket --------------------------------------------------------------------- -- Riconoscimento della feature @@ -773,6 +775,11 @@ local function MakeByPocket( Proc, nPhase, nRawId, nPartId, dOvmHead) EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) -- imposto elevazione EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dMaxDepth, 1) .. ';') + -- imposto eventuale offset radiale, se impostato dall'utente + local dRadialOffset = EgtGetInfo( Proc.Id, Q_RADIAL_OFFSET, 'd') or 0 + if abs( dRadialOffset) > 10 * GEO.EPS_SMALL then + EgtSetMachiningParam( MCH_MP.OFFSR, -dRadialOffset) + end -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() diff --git a/LuaLibs/ProcessHeadCut.lua b/LuaLibs/ProcessHeadCut.lua index 8a486cb..b20e046 100644 --- a/LuaLibs/ProcessHeadCut.lua +++ b/LuaLibs/ProcessHeadCut.lua @@ -7,6 +7,7 @@ -- 2022/11/02 Corretti accorciamenti per DoubleCut -- 2022/11/10 Corrette finiture lama per BigSection con trave alta -- 2023/04/20 Per travi alte aggiunti tagli orizzontali per ridurre le dimensioni degli scarti +-- 2023/08/02 Corretto calcolo allungamenti/accorciamenti pezzi alti per contemplare anche taglio singolo -- Tabella per definizione modulo local ProcessHeadCut = {} @@ -263,7 +264,9 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut else dCutExtra = - ( b3Raw:getDimY() - dMaxDepth) local dSawRad = dSawDiam / 2 - local dKL = dSawRad - dMaxDepth + b3Raw:getDimY() / 2 + BD.CUT_EXTRA_MIN + -- distanza in Y tra il centro della lama e l'intersezione tra la lama stessa e la massima Z della trave, + extra + -- se taglio doppio l'intersezione sarà in mezzeria, se taglio singolo sarà all'estremo opposto della trave + local dKL = dSawRad - dMaxDepth + EgtIf( bDoubleCut, b3Raw:getDimY() / 2 + BD.CUT_EXTRA_MIN, b3Raw:getDimY() + BD.CUT_EXTRA) if BD.C_SIMM then dAccEnd = sqrt( dSawRad * dSawRad - dKL * dKL) else diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index c2f2b82..018c618 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -1,4 +1,4 @@ --- ProcessLapJoint.lua by Egaltech s.r.l. 2023/06/06 +-- ProcessLapJoint.lua by Egaltech s.r.l. 2023/08/10 -- Gestione calcolo mezzo-legno per Travi -- 2019/10/08 Agg. gestione OpenPocket. -- 2021/01/24 Con sega a catena ora sempre impostato asse A. @@ -68,6 +68,13 @@ -- 2023/03/31 Correzione al calcolo della distanza di collisione nel caso in cui il gambo sia più piccolo dell'utensile. -- 2023/06/06 Limiti su svuotature tasche a L 4 facce come per L 3 facce. In svuotatura aggiunto recupero UserNotes da libreria per MaxOptSize. -- 2023/16/12 Corretto il recupero dati utensile che, in alcune funzioni, puntava all'utensile errato. +-- 2023/06/29 Se forzata lavorazione laterale permetto l'uso del truciolatore solo se non è una tasca chiusa. +-- 2023/07/19 Correzioni e modifiche ad antischeggia con lama (#1351). +-- 2023/08/01 Aggiunta gestione rinvio angolare solo per tasche 5 lati, da sotto e perfettamente verticali. +-- 2023/08/02 Piccola correzione al calcolo della distanza di sicurezza in base al gambo dell'utensile. +-- 2023/08/02 Corretto incremento della profondità pari al raggio utensile per tunnel con sega a catena. +-- 2023/08/10 Modificata scelta SCC per tasche in Y+/- in coda o quasi (anche per relativi antischeggia con lama). +-- 2023/09/12 In MakeByPockets gestito correttamente il ritorno nil di GetUShapeWidth. -- Tabella per definizione modulo local ProcessLapJoint = {} @@ -674,9 +681,9 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw) if dEndDist > BD.MAX_DIST_HTFEA then return false end - -- se lunga come trave, oppure non è trave corta e la sua lunghezza supera il massimo o il 70% della lunghezza della trave + -- se lunga come trave, oppure non è trave corta e la sua lunghezza supera il massimo o il 80% della lunghezza della trave if Proc.Box:getDimX() > b3Solid:getDimX() - 1 or - ( b3Solid:getDimX() > BD.LEN_SHORT_PART and Proc.Box:getDimX() > min( BD.MAX_LEN_HTFEA, 0.7 * b3Solid:getDimX())) then + ( b3Solid:getDimX() > BD.LEN_SHORT_PART and Proc.Box:getDimX() > min( BD.MAX_LEN_HTFEA, 0.8 * b3Solid:getDimX())) then return false end -- se una o due facce e interessa veramente la coda, allora di coda @@ -745,6 +752,13 @@ function ProcessLapJoint.Classify( Proc, b3Raw) return false end end + -- se è presente il rinvio angolare ed è una tasca cieca perfettamente verticale, da sotto, non ruoto + if BD.ANG_TRASM and Proc.Fct == 5 then + local vtNBottomFace = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT) + if AreOppositeVectorApprox( vtNBottomFace, Z_AX()) then + return true, false + end + end -- se è una feature scanalatura (con 5 facce) e non è stata riconosciuta come fessura, eseguo altre verifiche if Proc.Prc == 16 and Proc.Fct == 5 and not bClosedOrthoFaces then -- recupero gruppo per geometria addizionale @@ -3051,12 +3065,14 @@ local function MakeAntiSplintBySaw( Proc, nFacet, vtN, b3Raw, nFacInd, bReduceDe local dSawDiam = 400 local dSawThick = 0 local dMaxDepth = 0 + local bSawCCW = false if EgtMdbSetCurrMachining( sCutting) then local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID) if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then dSawDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dSawDiam dSawThick = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dSawThick dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth + bSawCCW = ( EgtTdbGetCurrToolParam( MCH_TP.SPEED) < 0) end end local dExtraOffs = 0 @@ -3081,8 +3097,10 @@ local function MakeAntiSplintBySaw( Proc, nFacet, vtN, b3Raw, nFacInd, bReduceDe end end -- eseguo il taglio - local dVzLimDwnUp = EgtIf( BD.TURN, -2, nil) - local bMadeASbyBld, sWarn, nIdMach = Fbs.MakeOne( Proc.Id, nFacet, sCutting, dSawDiam, vtN, dVzLimDwnUp, ( -0.5 + dExtraOffs), BD.CUT_SIC, 0, 0, 0, nil, b3Raw) + local vtNfac = EgtSurfTmFacetNormVersor( Proc.Id, nFacet, GDB_ID.ROOT) + local dVzLimDwnUp = EgtIf( BD.TURN, -2, BL.GetNzLimDownUp( b3Raw, vtNfac, vtN)) + local bInvert = ( bSawCCW ~= ( vtNfac:getZ() < dVzLimDwnUp)) + local bMadeASbyBld, sWarn, nIdMach = Fbs.MakeOne( Proc.Id, nFacet, sCutting, dSawDiam, vtN, dVzLimDwnUp, ( -0.5 + dExtraOffs), BD.CUT_SIC, 0, 0, 0, nil, b3Raw, bInvert) if bMadeASbyBld then sWarn = nil if not bReduceDepth and abs(dExtraOffs) > 0 then @@ -3093,7 +3111,7 @@ local function MakeAntiSplintBySaw( Proc, nFacet, vtN, b3Raw, nFacInd, bReduceDe end --------------------------------------------------------------------- -local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFind, nUseRoughTool, sMasterPocket, dPrevFaceElev, tDimAndRef, dAng, bOpenOutRaw) +local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFind, nUseRoughTool, sMasterPocket, dPrevFaceElev, tDimAndRef, dAng, bOpenOutRaw, bLapJointAngTrasm) -- calcolo l'elevazione dal punto medio local dElev @@ -3157,12 +3175,17 @@ local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFin EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT) -- imposto posizione braccio porta testa local nSCC = MCH_SCC.NONE - if not BD.C_SIMM and not BD.TURN then + if bLapJointAngTrasm then + nSCC = MCH_SCC.ADIR_NEAR + elseif not BD.C_SIMM and not BD.TURN then nSCC = MCH_SCC.ADIR_YM if AreSameVectorApprox( tvtN[2], Z_AX()) then nSCC = MCH_SCC.ADIR_YM elseif abs( tvtN[2]:getX()) < 0.1 then - nSCC = EgtIf( BL.IsPartFinalPhase( EgtGetCurrPhase()), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) + local bNearTail = ( Proc.Box:getMax():getX() < b3Solid:getCenter():getX() + 50 and + Proc.Box:getMax():getX() - b3Solid:getMin():getX() < 1000) + local bVeryShortPart = ( BD.LEN_VERY_SHORT_PART and b3Solid:getDimX() < BD.LEN_VERY_SHORT_PART) + nSCC = EgtIf( BL.IsPartFinalPhase( EgtGetCurrPhase()) or ( bNearTail and not bVeryShortPart), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) elseif tvtN[2]:getY() > 0.1 then nSCC = MCH_SCC.ADIR_YP end @@ -3514,7 +3537,7 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha -- se tre facce aumento il diametro di quanto possibile elseif Proc.Fct == 3 then local nFacInd = BL.GetFaceWithMostAdj( Proc.Id, nPartId, false) - local dWidth = GetUShapeWidth( Proc, nFacInd or -1) + local dWidth = GetUShapeWidth( Proc, nFacInd or -1) or dDimMin if dWidth > dDimMin then dDimMin = min( 2 * dDimMin, dWidth) end @@ -3970,7 +3993,7 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha end --------------------------------------------------------------------- -local function ManageAntiSplintBySaw( Proc, b3Raw, bIsU, vtN, nFacInd, sWarn, bMillDown, bReduceDepth) +local function ManageAntiSplintBySaw( Proc, b3Raw, b3Solid, bIsU, vtN, nFacInd, sWarn, bMillDown, bReduceDepth) local bMadeASbyBld = false local nNumFac = EgtIf( bIsU, 2, 1) @@ -4004,16 +4027,24 @@ local function ManageAntiSplintBySaw( Proc, b3Raw, bIsU, vtN, nFacInd, sWarn, bM if nIdMach then -- verifico se da invertire local bInvertMach = false - local dDepth = 0 if bIsU then -- prendo il vettore normale alla faccia local vtNFc = EgtSurfTmFacetNormVersor( Proc.Id, nFacet, GDB_ID.ROOT) if abs( vtN:getZ()) > 0.63 or abs( vtN:getY()) > 0.63 then -- se superficie principale parallela al piano XZ if nPrefSide == 0 then - -- se facce praticamente verticali || mandrino a destra + -- se facce praticamente verticali || if abs( vtNFc:getZ()) < 0.1 then - nPrefSide = 2 + -- se FAST, mandrino a destra o sinistra come svuotatura + if not BD.C_SIMM and not BD.TURN then + local bNearTail = ( Proc.Box:getMax():getX() < b3Solid:getCenter():getX() + 50 and + Proc.Box:getMax():getX() - b3Solid:getMin():getX() < 1000) + local bVeryShortPart = ( BD.LEN_VERY_SHORT_PART and b3Solid:getDimX() < BD.LEN_VERY_SHORT_PART) + nPrefSide = EgtIf( BL.IsPartFinalPhase( EgtGetCurrPhase()) or ( bNearTail and not bVeryShortPart), 1, 2) + -- altrimenti sempre a destra + else + nPrefSide = 2 + end -- se facce inclinate \\ allora mandrino a destra (per essere verso l'alto) elseif vtNFc:getX() * vtNFc:getZ() > 0 then nPrefSide = 2 @@ -4039,40 +4070,22 @@ local function ManageAntiSplintBySaw( Proc, b3Raw, bIsU, vtN, nFacInd, sWarn, bM -- eseguo inversione if bInvertMach then local bToolInvert = EgtGetMachiningParam( MCH_MP.TOOLINVERT) - local nWS = EgtGetMachiningParam( MCH_MP.WORKSIDE) - local nInvWS = EgtIf( nWS == MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT, MCH_MILL_WS.RIGHT) + local bInvert = EgtGetMachiningParam( MCH_MP.INVERT) local nFaceUse = EgtGetMachiningParam( MCH_MP.FACEUSE) local bOrtUp = ( nFaceUse >= MCH_MILL_FU.ORTUP_DOWN and nFaceUse <= MCH_MILL_FU.ORTUP_RIGHT) if not bOrtUp then -- assegno i parametri invertiti - EgtSetMachiningParam( MCH_MP.WORKSIDE, nInvWS) EgtSetMachiningParam( MCH_MP.TOOLINVERT, not bToolInvert) + EgtSetMachiningParam( MCH_MP.INVERT, not bInvert) -- setto l'offset pari allo spessore lama EgtSetMachiningParam( MCH_MP.OFFSL, -dSawThick) end end - -- per diminuire scheggiature su facce davanti - if nPrefSide == 2 then - local dSpeed = EgtGetMachiningParam( MCH_MP.SPEED) - if dSpeed < 0 and vtN:getY() < -0.996 then - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) - EgtSetMachiningParam( MCH_MP.INVERT, vtNFc:getX() > 0) - elseif dSpeed > 0 and vtN:getY() > 0.996 then - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) - EgtSetMachiningParam( MCH_MP.INVERT, vtNFc:getX() < 0) - elseif dSpeed < 0 and vtN:getZ() > 0.996 then - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) - EgtSetMachiningParam( MCH_MP.INVERT, vtNFc:getX() > 0) - elseif dSpeed > 0 and vtN:getZ() > 0.996 then - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) - EgtSetMachiningParam( MCH_MP.INVERT, vtNFc:getX() < 0) - end - end end -- posizione del braccio : se primo taglio la recupero, altrimenti la imposto if not nPrevSCC then nPrevSCC = EgtGetMachiningParam( MCH_MP.SCC) - else + elseif abs( vtN:getZ()) > 0.996 then EgtSetMachiningParam( MCH_MP.SCC, nPrevSCC) end -- rieseguo @@ -4638,13 +4651,12 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa dDepth = dDepth / 2 + BD.CUT_EXTRA end end - local dWorkDepth = dDepth - -- cerco di estendere il taglio considerando la parte arrotondata della lama + 1 + local dWorkDepth = dMaxMat + -- cerco di estendere il taglio considerando la parte arrotondata della lama if dMaxMat > dDepth + dSawCornerRad + 1 then dWorkDepth = dDepth + dSawCornerRad + 1 -- se massimo affondamento utensile inferiore alla profondità da lavorare, setto la profondità di lavoro e emetto warning elseif dMaxMat < dDepth then - dWorkDepth = dMaxMat sWarn = 'Warning : elevation bigger than max tool depth' EgtOutLog( sWarn) end @@ -4928,8 +4940,12 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa -- altrimenti lavorazione di svuotatura o contornatura else local bUseOtherFace + local bLapJointAngTrasm = false + -- se è presente il rinvio angolare ed è una tasca cieca perfettamente verticale, da sotto + if BD.ANG_TRASM and Proc.Fct == 5 and AreOppositeVectorApprox( vtN, Z_AX()) then + bLapJointAngTrasm = true -- se orientata verso il basso e non c'è testa da sotto, verifico l'alternativa - if vtN:getZ() < BD.NZ_MINA and not BD.DOWN_HEAD and nFacInd2 then + elseif vtN:getZ() < BD.NZ_MINA and not BD.DOWN_HEAD and nFacInd2 then ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd2, GDB_ID.ROOT) nFacInd, nFacInd2 = nFacInd2, nFacInd dFacElev, dFacElev2 = dFacElev2, dFacElev @@ -4937,7 +4953,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa end -- verifico non sia orientata verso il basso o ci sia una testa dal basso o la lavorazione sia dal lato. local bFaceDown = ( vtN:getZ() < BD.NZ_MINA) - if bFaceDown and not BD.DOWN_HEAD and not BD.TURN and not bForceSideMill then + if bFaceDown and not BD.DOWN_HEAD and not BD.TURN and not bForceSideMill and not bLapJointAngTrasm then local sErr = 'Error : LapJoint from bottom impossible' EgtOutLog( sErr) return false, sErr @@ -4986,6 +5002,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa local bMillDown = ( BD.DOWN_HEAD and vtN:getZ() < 0.342) -- settaggio voluto da Alessandro/Fabio (per fare angoli con fresa piccola) sMchFind = 'Pocket' + if bLapJointAngTrasm then sMchFind = 'Pocket_AT' end local dDiam = min( dH, dV) local bTailOnSide = ( Proc.Box:getMin():getX() - b3Solid:getMin():getX() < 0.1 and not Proc.Tail and not bAllWithEndCap) if ( Proc.Fct == 1) or (( Proc.Fct == 2 or Proc.Fct == 3) and bIsL) or ((( Proc.Fct == 3 and bIsU) or ( Proc.Fct == 4 and not bTailOnSide)) and bSinglePart) then @@ -5014,23 +5031,23 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa if bNewCheck and Proc.Prc == 20 and nUseRoughTool == 0 then -- verifico se forzato uso truciolatore nUseRT = EgtGetInfo( Proc.Id, Q_USE_ROUGH_TOOL, 'i') - if nUseRT and nUseRT ~= 0 then + if nUseRT and nUseRT ~= 0 then sMchFind = 'OpenPocket' nUseRoughTool = 1 end end - -- 03/12/2020 aggiunto controllo su feature 30 senza uso truciolatore - if bNewCheck and Proc.Prc == 30 and nUseRoughTool == 0 then + -- se è una tasca aperta e forzo lavorazione laterale, cerco il truciolatore (di norma il truciolatore è solo OpenPocket) + if bNewCheck and Proc.Prc == 30 and nUseRoughTool == 0 and Proc.Fct < 5 and not bClosedOrthoFaces then -- verifico se forzato uso truciolatore nUseRT = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') - if nUseRT and nUseRT ~= 0 then + if nUseRT and nUseRT ~= 0 then sMchFind = 'OpenPocket' nUseRoughTool = 1 end end -- se processo 20 e non sto usando il truciolatore if Proc.Prc == 20 and nUseRoughTool == 0 then - if nUseRT and nUseRT ~= 0 then + if nUseRT and nUseRT ~= 0 then sMchFind = 'OpenPocket' nUseRoughTool = 1 end @@ -5188,7 +5205,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa if nChamfer < 2 and nQAntisplintResult == 1 and (( bIsU or bIsL) and ( bPassThrou or bPassEdge)) and ( vtNOri:getZ() > -0.087 or BD.DOWN_HEAD or BD.TURN) then local bOk local bSawDown = ( bMillDown and not bMillUp) - bMadeASbyBld, bOk, sWarn = ManageAntiSplintBySaw( Proc, b3Raw, bIsU, vtNOri, nFacIndOri, sWarn, bSawDown, true) + bMadeASbyBld, bOk, sWarn = ManageAntiSplintBySaw( Proc, b3Raw, b3Solid, bIsU, vtNOri, nFacIndOri, sWarn, bSawDown, true) if not bOk then return false, sWarn end end -- in base al flag interno e al numero di facce e se ha forma ad U @@ -5427,7 +5444,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa if nChamfer < 2 and nQAntisplintResult == 1 and (( bIsU or bIsL) and ( bPassThrou or bPassEdge)) and ( vtNOri:getZ() > -0.087 or BD.DOWN_HEAD or BD.TURN) then local bOk local bSawDown = ( bMillDown and not bMillUp) - bMadeASbyBld, bOk, sWarn = ManageAntiSplintBySaw( Proc, b3Raw, bIsU, vtNOri, nFacIndOri, sWarn, bSawDown) + bMadeASbyBld, bOk, sWarn = ManageAntiSplintBySaw( Proc, b3Raw, b3Solid, bIsU, vtNOri, nFacIndOri, sWarn, bSawDown) if not bOk then return false, sWarn end end if nChamfer < 2 and nQAntisplintResult == 2 then @@ -5462,13 +5479,13 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa local dMachiningDepth = 0 -- se il gambo è più largo dell'utensile verifico se la lunghezza del gambo è maggiore della distanza di sicurezza calcolata local dShankLength = dToolTotalLength - dToolThLength - dMaxToolCutDepth - if ( dMaxToolCutDepth < dMaxToolMaterial + 10 * GEO.EPS_SMALL) and ( dShankLength > dCollSic + 10 * GEO.EPS_SMALL) then + if ( dMaxToolCutDepth < dMaxToolMaterial - 10 * GEO.EPS_SMALL) and ( dShankLength > dCollSic + 10 * GEO.EPS_SMALL) then dMachiningDepth = dFacElev + BD.COLL_SIC else dMachiningDepth = dFacElev + dCollSic end local bOk, sWarn2 - bOk, sWarn2, sTuuidPk, dDiamTool = MakePocket( Proc, nPartId, b3Solid, ptC, tvtNx, nFacInd, sMchFind, nUseRoughTool, sPocketing, dMachiningDepth, nil, nil, bAllWithEndCap) + bOk, sWarn2, sTuuidPk, dDiamTool = MakePocket( Proc, nPartId, b3Solid, ptC, tvtNx, nFacInd, sMchFind, nUseRoughTool, sPocketing, dMachiningDepth, nil, nil, bAllWithEndCap, bLapJointAngTrasm) if not bOk then return false, sWarn2 end if sWarn2 then if not sWarn then sWarn = '' end diff --git a/LuaLibs/ProcessLongCut.lua b/LuaLibs/ProcessLongCut.lua index e6cd8b7..e515674 100644 --- a/LuaLibs/ProcessLongCut.lua +++ b/LuaLibs/ProcessLongCut.lua @@ -1,4 +1,4 @@ --- ProcessLongCut.lua by Egaltech s.r.l. 2023/05/19 +-- ProcessLongCut.lua by Egaltech s.r.l. 2023/08/01 -- Gestione calcolo taglio longitudinale per Travi -- 2021/02/03 Corretto FaceUse con fresa orizzontale su taglio orizzontale. -- 2021/05/18 Possibile taglio con lama anche di fianco su macchina con testa da sotto. @@ -28,6 +28,7 @@ -- 2023/04/17 Gestione unificata SCC tramite funzione apposita GetSCC -- 2023/05/03 Corretto SCC in caso di asse utensile allineato con Z. -- 2023/05/19 Migliorato calcolo e verifica affondamento per lavorazione con lama con codolo in mezzo. +-- 2023/08/01 Ammesso uso lama da sotto fino a N +3deg in verticale. -- Tabella per definizione modulo local ProcessLongCut = {} @@ -694,8 +695,8 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus if ( nSide == -1 or abs(nSide) == 2) and vtN:getZ() <= -0.5 then bCanUseUnderBlade = true end - -- se faccia da sotto o di lato ma con versore Z sotto l'orizzontale abilito la lavorazione con lame mixate - if ( nSide == -1 or abs(nSide) == 2) and vtN:getZ() <= 0.0175 then + -- se faccia da sotto o di lato ma con versore Z sotto l'orizzontale abilito la lavorazione con lame mixate (limite 3 deg verso alto) + if ( nSide == -1 or abs(nSide) == 2) and vtN:getZ() <= 0.053 then bCanUseUnderBlade = true end -- se faccia da sopra o di lato ma con versore Z negativo verifico che abbia un angolo compatibile (28deg) per non avere extracorsa diff --git a/LuaLibs/ProcessMortise.lua b/LuaLibs/ProcessMortise.lua index a524dd4..a950d23 100644 --- a/LuaLibs/ProcessMortise.lua +++ b/LuaLibs/ProcessMortise.lua @@ -1,4 +1,4 @@ --- ProcessMortise.lua by Egaltech s.r.l. 2023/05/11 +-- ProcessMortise.lua by Egaltech s.r.l. 2023/08/10 -- Gestione calcolo mortase per Travi -- 2021/07/20 Aggiunta gestione rinvio angolare su FAST. -- 2021/12/01 Se frontale aggiungo taglio con Grp e Proc di vero taglio (per aggiornare ingombro di testa /coda). @@ -11,6 +11,8 @@ -- 2023/01/31 Creata la funzione ConvertToClosedCurve (parte della ProcessMortise.Make) e spostata in BeamLib. -- 2023/05/11 Se lavorazione in doppio e precedente no oppure di tipo diverso, forzo risalita a Zmax. -- 2023/06/27 Esclusa la ricerca lati aperti per le mortase passanti, per le quali il contorno finisce sulla faccia e il riconoscimento sbaglia. +-- 2023/07/21 Correzioni per mortise passanti con curva Aux che guarda in basso. +-- 2023/08/10 Modificata scelta SCC per tasche in Y+/- in coda o quasi. -- Tabella per definizione modulo local ProcessMortise = {} @@ -456,9 +458,9 @@ function ProcessMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) EgtOutLog( sErr) return false, sErr end - -- verifico se invertire versore estrusione geometria + -- verifico se invertire direzione utensile if bRevertSide then - EgtModifyCurveExtrusion( AuxId, -vtExtr, GDB_ID.ROOT) + EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) @@ -468,11 +470,14 @@ function ProcessMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) local nSCC = MCH_SCC.NONE if bPockAngTrasm then nSCC = MCH_SCC.ADIR_NEAR - elseif not BD.C_SIMM then - if abs( vtN:getX()) < GEO.EPS_SMALL and abs( vtN:getY()) < GEO.EPS_SMALL then + elseif not BD.C_SIMM and not BD.TURN then + if AreSameOrOppositeVectorApprox( vtN, Z_AX()) then nSCC = MCH_SCC.ADIR_YM - elseif abs( vtN:getX()) < GEO.EPS_SMALL then - nSCC = MCH_SCC.ADIR_XP + elseif abs( vtN:getX()) < 0.1 then + local bNearTail = ( Proc.Box:getMax():getX() < b3Solid:getCenter():getX() and + Proc.Box:getMax():getX() - b3Solid:getMin():getX() < 1000) + local bVeryShortPart = ( BD.LEN_VERY_SHORT_PART and b3Solid:getDimX() < BD.LEN_VERY_SHORT_PART) + nSCC = EgtIf( BL.IsPartFinalPhase( EgtGetCurrPhase()) or ( bNearTail and not bVeryShortPart), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) elseif vtN:getY() < GEO.EPS_SMALL then nSCC = EgtIf( bRevertSide, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) else @@ -499,9 +504,18 @@ function ProcessMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) dMorH = dMaxDepth EgtOutLog( sWarn .. ' (process ' .. tostring( Proc.Id) .. ')') else - if bOpenBtm and not bForceOneSide then -- se mortasa passante setto metà profondità + -- se passante e lavorabile da due lati + if bOpenBtm and not bForceOneSide then + -- imposto metà profondità nDepthMin = -dMorH EgtSetMachiningParam( MCH_MP.DEPTH, nDepthMin) + -- se altrimenti passante ma lavorabile solo da un lato + elseif bOpenBtm and bForceOneSide then + if bRevertSide then + EgtSetMachiningParam( MCH_MP.DEPTH, min( dMorH + BD.CUT_EXTRA, dMaxDepth)) + else + EgtSetMachiningParam( MCH_MP.DEPTH, min( BD.CUT_EXTRA, dMaxDepth - dMorH)) + end end end -- imposto elevazione @@ -541,11 +555,14 @@ function ProcessMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) EgtSetMachiningParam( MCH_MP.INVERT, EgtIf( bCW, true, false)) -- imposto posizione braccio porta testa local nSCC = MCH_SCC.NONE - if not BD.C_SIMM then - if abs( vtN:getX()) < GEO.EPS_SMALL and abs( vtN:getY()) < GEO.EPS_SMALL then + if not BD.C_SIMM and not BD.TURN then + if AreSameOrOppositeVectorApprox( vtN, Z_AX()) then nSCC = MCH_SCC.ADIR_YM - elseif abs( vtN:getX()) < GEO.EPS_SMALL then - nSCC = MCH_SCC.ADIR_XP + elseif abs( vtN:getX()) < 0.1 then + local bNearTail = ( Proc.Box:getMax():getX() < b3Solid:getCenter():getX() and + Proc.Box:getMax():getX() - b3Solid:getMin():getX() < 1000) + local bVeryShortPart = ( BD.LEN_VERY_SHORT_PART and b3Solid:getDimX() < BD.LEN_VERY_SHORT_PART) + nSCC = EgtIf( BL.IsPartFinalPhase( EgtGetCurrPhase()) or ( bNearTail and not bVeryShortPart), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) elseif vtN:getY() < GEO.EPS_SMALL then nSCC = MCH_SCC.ADIR_YP else diff --git a/LuaLibs/ProcessProfConcave.lua b/LuaLibs/ProcessProfConcave.lua index d7a6616..8de536a 100644 --- a/LuaLibs/ProcessProfConcave.lua +++ b/LuaLibs/ProcessProfConcave.lua @@ -1,4 +1,4 @@ --- ProcessProfConcave.lua by Egaltech s.r.l. 2023/05/25 +-- ProcessProfConcave.lua by Egaltech s.r.l. 2023/07/31 -- Gestione calcolo profilo concavo per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa da sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. @@ -6,6 +6,7 @@ -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. -- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. -- 2023/05/25 Sistemazione SCC per TURN. +-- 2023/07/31 Correzione e semplificazione di ModifySideInvertLead per invert. -- Tabella per definizione modulo local ProcessProfConcave = {} @@ -89,7 +90,7 @@ end --------------------------------------------------------------------- local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, - bFirstTrim, bLastTrim, bFlagInvert, dOffsetPar) + bFirstTrim, bLastTrim, dOffsetPar) -- confronto il punto iniziale e finale della lavorazione con il box della feature -- e se è vicino alla parte esterna della trave inverto la lavorazione @@ -97,6 +98,9 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, local ptEp = EgtGetMachiningEndPoint() local nMachMode = EgtGetMachiningParam( MCH_MP.STEPTYPE) if nMachMode == 1 and ptSP and ptEp then + -- recupero flag inversione direzione di lavorazione + local bInvertMode = EgtGetMachiningParam( MCH_MP.INVERT) + -- verifico se da aggiustare if abs( EgtIf( bHead, Proc.Box:getMax():getX(), Proc.Box:getMin():getX()) - ptSP:getX()) < abs( EgtIf( bHead, Proc.Box:getMax():getX(), Proc.Box:getMin():getX()) - ptEp:getX()) then -- ottengo il lato lavoro e lo inverto @@ -104,9 +108,14 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, if nSideWork > 0 then EgtSetMachiningParam( MCH_MP.WORKSIDE, EgtIf( nSideWork == MCH_MILL_WS.LEFT, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT)) end - -- ottengo l'inversione e setto il contrario - local bInvertMode = EgtGetMachiningParam( MCH_MP.INVERT) - EgtSetMachiningParam( MCH_MP.INVERT, not bInvertMode) + -- imposto il contrario dell'inversione trovata + bInvertMode = not bInvertMode + EgtSetMachiningParam( MCH_MP.INVERT, bInvertMode) + end + -- se lavorazione invertita rispetto a geometria, scambio dati di inizio e fine + if bInvertMode then + dLenIni, dLenLst = dLenLst, dLenIni + bFirstTrim, bLastTrim = bLastTrim, bFirstTrim end -- modifico attacco e uscita if dLenIni and dLenLst then @@ -120,9 +129,6 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, if bLastTrim and dLenLst < dToolDiam / 2 + ( 20 * GEO.EPS_SMALL) then dEndAddLen = dToolDiam / 2 - dLenLst + dOffsetPar + 1 end - if bFlagInvert then - dStartAddLen, dEndAddLen = dEndAddLen, dStartAddLen - end EgtSetMachiningParam( MCH_MP.STARTADDLEN, dStartAddLen) EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEndAddLen) end @@ -247,8 +253,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- acquisisco informazioni sulle facce estreme local _, _, dLenIni = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFirstFacet, GDB_ID.ROOT) local _, _, dLenLst = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nLastFacet, GDB_ID.ROOT) - -- flag percorso invertito - local bFlagInvert = false -- verifico se in testa o coda local bHead = ( vtN:getX() > 0) EgtOutLog( 'vtN=' .. tostring( vtN), 3) @@ -344,7 +348,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() > 0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- altrimenti lavorazione dal davanti o dal dietro else @@ -353,14 +356,12 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if vtExtr:getZ() < 0 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- se lavorazione a destra da dietro o sinistra di fronte, inverto if ( bHead and vtN:getY() > 0.1) or ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- assegno affondamento e offset radiale @@ -378,7 +379,7 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) else -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione - ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dExtra) + ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, dExtra) end -- se lavorazione da due parti, aggiungo la seconda if bDoubleCham then @@ -393,8 +394,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra o da sotto if nSide ~= 0 then -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -402,7 +401,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end else -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -410,7 +408,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- assegno affondamento e offset radiale @@ -428,7 +425,7 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) else -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione - ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dExtra) + ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, dExtra) end end end @@ -487,14 +484,11 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra e da sotto if ( nSide == 0) then if vtExtr:getZ() > 0.1 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = true end -- altrimenti lavorazione davanti e dietro else @@ -503,7 +497,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = true end end -- imposto l'affondamento @@ -534,7 +527,7 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco -- e uscita - ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dOffsetPar) + ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, dOffsetPar) end -- se abilitata, aggiungo lavorazione di finitura if bFinish then @@ -568,8 +561,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra o da sotto if nSide ~= 0 then if not bDouble and nSide == -1 then @@ -578,7 +569,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end else -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -586,7 +576,6 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() > 0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- altrimenti lavorazione dal davanti o dal dietro @@ -595,14 +584,12 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if vtExtr:getZ() < 0 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- se lavorazione a destra da dietro o sinistra di fronte, inverto if ( bHead and vtN:getY() > 0.1) or ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- se in doppio, imposto l'affondamento @@ -631,7 +618,7 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco -- e uscita - ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dOffsetPar) + ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, dOffsetPar) end -- se abilitata, aggiungo lavorazione di finitura if bFinish then @@ -684,7 +671,7 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) EgtSetMachiningParam( MCH_MP.STEP, 0) EgtSetMachiningParam( MCH_MP.OFFSR, 0) if BD.TURN then - local nSCC = GetSccForTurn( vtN) + local nSCC = GetSccForTurn( vtN, 'V') EgtSetMachiningParam( MCH_MP.SCC, nSCC) -- modifico attacco e uscita per forzare risalita EgtSetMachiningParam( MCH_MP.STARTADDLEN, dToolDiam / 2) diff --git a/LuaLibs/ProcessProfConvex.lua b/LuaLibs/ProcessProfConvex.lua index 2c7d072..9da2783 100644 --- a/LuaLibs/ProcessProfConvex.lua +++ b/LuaLibs/ProcessProfConvex.lua @@ -1,4 +1,4 @@ --- ProcessProfConvex.lua by Egaltech s.r.l. 2023/05/25 +-- ProcessProfConvex.lua by Egaltech s.r.l. 2023/07/31 -- Gestione calcolo profilo convesso per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa da sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. @@ -6,6 +6,7 @@ -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. -- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. -- 2023/05/25 Sistemazione SCC per TURN. +-- 2023/07/31 Correzione e semplificazione di ModifySideInvertLead per invert. -- Tabella per definizione modulo local ProcessProfConvex = {} @@ -89,7 +90,7 @@ end --------------------------------------------------------------------- local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, - bFirstTrim, bLastTrim, bFlagInvert, dOffsetPar) + bFirstTrim, bLastTrim, dOffsetPar) -- confronto il punto iniziale e finale della lavorazione con il box della feature -- e se è vicino alla parte esterna della trave inverto la lavorazione @@ -97,6 +98,9 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, local ptEp = EgtGetMachiningEndPoint() local nMachMode = EgtGetMachiningParam( MCH_MP.STEPTYPE) if nMachMode == 1 and ptSP and ptEp then + -- recupero flag inversione direzione di lavorazione + local bInvertMode = EgtGetMachiningParam( MCH_MP.INVERT) + -- verifico se da aggiustare if abs( EgtIf( bHead, Proc.Box:getMax():getX(), Proc.Box:getMin():getX()) - ptSP:getX()) < abs( EgtIf( bHead, Proc.Box:getMax():getX(), Proc.Box:getMin():getX()) - ptEp:getX()) then -- ottengo il lato lavoro e lo inverto @@ -104,9 +108,14 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, if nSideWork > 0 then EgtSetMachiningParam( MCH_MP.WORKSIDE, EgtIf( nSideWork == MCH_MILL_WS.LEFT, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT)) end - -- ottengo l'inversione e setto il contrario - local bInvertMode = EgtGetMachiningParam( MCH_MP.INVERT) - EgtSetMachiningParam( MCH_MP.INVERT, not bInvertMode) + -- imposto il contrario dell'inversione trovata + bInvertMode = not bInvertMode + EgtSetMachiningParam( MCH_MP.INVERT, bInvertMode) + end + -- se lavorazione invertita rispetto a geometria, scambio dati di inizio e fine + if bInvertMode then + dLenIni, dLenLst = dLenLst, dLenIni + bFirstTrim, bLastTrim = bLastTrim, bFirstTrim end -- modifico attacco e uscita if dLenIni and dLenLst then @@ -120,9 +129,6 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, if bLastTrim and dLenLst < dToolDiam / 2 + ( 20 * GEO.EPS_SMALL) then dEndAddLen = dToolDiam / 2 - dLenLst + dOffsetPar + 1 end - if bFlagInvert then - dStartAddLen, dEndAddLen = dEndAddLen, dStartAddLen - end EgtSetMachiningParam( MCH_MP.STARTADDLEN, dStartAddLen) EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEndAddLen) end @@ -247,8 +253,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- acquisisco informazioni sulle facce estreme local _, _, dLenIni = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFirstFacet, GDB_ID.ROOT) local _, _, dLenLst = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nLastFacet, GDB_ID.ROOT) - -- flag percorso invertito - local bFlagInvert = false -- verifico se in testa o coda local bHead = ( vtN:getX() > 0) EgtOutLog( 'vtN=' .. tostring( vtN), 3) @@ -344,7 +348,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() > 0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- altrimenti lavorazione dal davanti o dal dietro else @@ -353,14 +356,12 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if vtExtr:getZ() < 0 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- se lavorazione a destra da dietro o sinistra di fronte, inverto if ( bHead and vtN:getY() > 0.1) or ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- assegno affondamento e offset radiale @@ -378,7 +379,7 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) else -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione - ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dExtra) + ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, dExtra) end -- se lavorazione da due parti, aggiungo la seconda if bDoubleCham then @@ -393,8 +394,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra o da sotto if nSide ~= 0 then -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -402,7 +401,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end else -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -410,7 +408,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- assegno affondamento e offset radiale @@ -428,7 +425,7 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) else -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione - ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dExtra) + ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, dLenLst, bFirstTrim, bLastTrim, dExtra) end end end @@ -487,14 +484,11 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra e da sotto if ( nSide == 0) then if vtExtr:getZ() > 0.1 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = true end -- altrimenti lavorazione davanti e dietro else @@ -503,7 +497,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = true end end -- imposto l'affondamento @@ -534,7 +527,7 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco -- e uscita - ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dOffsetPar) + ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, dOffsetPar) end -- se abilitata, aggiungo lavorazione di finitura if bFinish then @@ -568,8 +561,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra o da sotto if nSide ~= 0 then if not bDouble and nSide == -1 then @@ -578,7 +569,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end else -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -586,7 +576,6 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() > 0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- altrimenti lavorazione dal davanti o dal dietro @@ -595,14 +584,12 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if vtExtr:getZ() < 0 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- se lavorazione a destra da dietro o sinistra di fronte, inverto if ( bHead and vtN:getY() > 0.1) or ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- se in doppio, imposto l'affondamento @@ -631,7 +618,7 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco -- e uscita - ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, bFlagInvert, dOffsetPar) + ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, bFirstTrim, bLastTrim, dOffsetPar) end -- se abilitata, aggiungo lavorazione di finitura if bFinish then diff --git a/LuaLibs/ProcessProfFront.lua b/LuaLibs/ProcessProfFront.lua index e56f930..96a3023 100644 --- a/LuaLibs/ProcessProfFront.lua +++ b/LuaLibs/ProcessProfFront.lua @@ -465,8 +465,7 @@ function ProcessProfFront.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) return false, sErr else -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno - -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco - -- e uscita + -- della feature inverto il punto di inizio della lavorazione ModifySideInvertLead( Proc, bHead, dToolDiam) end -- se abilitata, aggiungo lavorazione di finitura @@ -554,8 +553,7 @@ function ProcessProfFront.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) return false, sErr else -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno - -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco - -- e uscita + -- della feature inverto il punto di inizio della lavorazione ModifySideInvertLead( Proc, bHead, dToolDiam) end -- se abilitata, aggiungo lavorazione di finitura diff --git a/LuaLibs/ProcessProfHead.lua b/LuaLibs/ProcessProfHead.lua index 9464fe6..79ffba0 100644 --- a/LuaLibs/ProcessProfHead.lua +++ b/LuaLibs/ProcessProfHead.lua @@ -1,4 +1,4 @@ --- ProcessProfHead.lua by Egaltech s.r.l. 2022/05/28 +-- ProcessProfHead.lua by Egaltech s.r.l. 2023/07/31 -- Gestione calcolo profilo di testa per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. @@ -6,6 +6,7 @@ -- 2022/02/02 Aggiunta funzione OnlyChamfer. -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. -- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. +-- 2023/07/31 Correzione e semplificazione di ModifySideInvertLead per invert. -- Tabella per definizione modulo local ProcessProfHead = {} @@ -81,7 +82,7 @@ end --------------------------------------------------------------------- local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, - bFirstTrim, bLastTrim, bFlagInvert, dOffsetPar) + bFirstTrim, bLastTrim, dOffsetPar) -- confronto il punto iniziale e finale della lavorazione con il box della feature -- e se è vicino alla parte esterna della trave inverto la lavorazione @@ -89,6 +90,9 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, local ptEp = EgtGetMachiningEndPoint() local nMachMode = EgtGetMachiningParam( MCH_MP.STEPTYPE) if nMachMode == 1 and ptSP and ptEp then + -- recupero flag inversione direzione di lavorazione + local bInvertMode = EgtGetMachiningParam( MCH_MP.INVERT) + -- verifico se da aggiustare if abs( EgtIf( bHead, Proc.Box:getMax():getX(), Proc.Box:getMin():getX()) - ptSP:getX()) < abs( EgtIf( bHead, Proc.Box:getMax():getX(), Proc.Box:getMin():getX()) - ptEp:getX()) then -- ottengo il lato lavoro e lo inverto @@ -96,9 +100,14 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, if nSideWork > 0 then EgtSetMachiningParam( MCH_MP.WORKSIDE, EgtIf( nSideWork == MCH_MILL_WS.LEFT, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT)) end - -- ottengo l'inversione e setto il contrario - local bInvertMode = EgtGetMachiningParam( MCH_MP.INVERT) - EgtSetMachiningParam( MCH_MP.INVERT, not bInvertMode) + -- imposto il contrario dell'inversione trovata + bInvertMode = not bInvertMode + EgtSetMachiningParam( MCH_MP.INVERT, bInvertMode) + end + -- se lavorazione invertita rispetto a geometria, scambio dati di inizio e fine + if bInvertMode then + dLenIni, dLenLst = dLenLst, dLenIni + bFirstTrim, bLastTrim = bLastTrim, bFirstTrim end -- modifico attacco e uscita if dLenIni and dLenLst then @@ -112,9 +121,6 @@ local function ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, dLenLst, if bLastTrim and dLenLst < dToolDiam / 2 + ( 20 * GEO.EPS_SMALL) then dEndAddLen = dToolDiam / 2 - dLenLst + dOffsetPar + 1 end - if bFlagInvert then - dStartAddLen, dEndAddLen = dEndAddLen, dStartAddLen - end EgtSetMachiningParam( MCH_MP.STARTADDLEN, dStartAddLen) EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEndAddLen) end @@ -224,8 +230,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- acquisisco informazioni sulle facce estreme local _, _, dLenIni = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFirstFacet, GDB_ID.ROOT) local _, _, dLenLst = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nLastFacet, GDB_ID.ROOT) - -- flag percorso invertito - local bFlagInvert = false -- verifico se in testa o coda local bHead = ( vtN:getX() > 0) EgtOutLog( 'vtN=' .. tostring( vtN), 3) @@ -326,7 +330,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() > 0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- altrimenti lavorazione dal davanti o dal dietro else @@ -335,14 +338,12 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if vtExtr:getZ() < 0 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- se lavorazione a destra da dietro o sinistra di fronte, inverto if ( bHead and vtN:getY() > 0.1) or ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- assegno affondamento e offset radiale @@ -361,7 +362,7 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, - dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), bFlagInvert, dExtra) + dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), dExtra) end -- se lavorazione da due parti, aggiungo la seconda if bDoubleCham then @@ -376,8 +377,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra o da sotto if nSide ~= 0 then -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -385,7 +384,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- altrimenti lavorazione dal davanti o dal dietro else @@ -394,7 +392,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- assegno affondamento e offset radiale @@ -413,7 +410,7 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- applico controllo del punto entrata lavorazione e se non è distante dall'esterno -- della feature inverto il punto di inizio della lavorazione ModifySideInvertLead( Proc, bHead, dToolDiam + ( 2 * dExtra), dLenIni, - dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), bFlagInvert, dExtra) + dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), dExtra) end end end @@ -473,8 +470,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra e da sotto if ( nSide == 0) then if vtExtr:getZ() > 0.1 then @@ -517,7 +512,7 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco -- e uscita ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, - dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), bFlagInvert, dOffsetPar) + dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), dOffsetPar) end -- se abilitata, aggiungo lavorazione di finitura if bFinish then @@ -551,8 +546,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- aggiungo geometria EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- resetto il flag inversione percorso - bFlagInvert = false -- se lavorazione da sopra o da sotto if nSide ~= 0 then if not bDouble and nSide == -1 then @@ -561,7 +554,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end else -- se lavorazione a destra di fronte o sinistra da dietro, inverto @@ -569,7 +561,6 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) ( not bHead and vtExtr:getY() > 0.1) then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- altrimenti lavorazione dal davanti o dal dietro @@ -578,14 +569,12 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if vtExtr:getZ() < 0 then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end -- se lavorazione a destra da dietro o sinistra di fronte, inverto if ( bHead and vtN:getY() > 0.1) or ( not bHead and vtN:getY() < -0.1) then EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) EgtSetMachiningParam( MCH_MP.INVERT, true) - bFlagInvert = not bFlagInvert end end -- se in doppio, imposto l'affondamento @@ -613,7 +602,7 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- della feature inverto il punto di inizio della lavorazione e modifico i parametri dell'attacco -- e uscita ModifySideInvertLead( Proc, bHead, dToolDiam, dLenIni, - dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), bFlagInvert, dOffsetPar) + dLenLst, ( #vAngs > 0 and vAngs[1] == 0), ( #vAngs > 0 and vAngs[#vAngs] == (Proc.Fct-2)), dOffsetPar) end -- se abilitata, aggiungo lavorazione di finitura if bFinish then diff --git a/LuaLibs/ProcessRidgeLap.lua b/LuaLibs/ProcessRidgeLap.lua index 0a42616..cd81679 100644 --- a/LuaLibs/ProcessRidgeLap.lua +++ b/LuaLibs/ProcessRidgeLap.lua @@ -1,4 +1,4 @@ --- ProcessRidgeLap.lua by Egaltech s.r.l. 2023/05/18 +-- ProcessRidgeLap.lua by Egaltech s.r.l. 2023/08/10 -- Gestione calcolo mezzolegno di testa per Travi -- Tabella per definizione modulo @@ -195,7 +195,7 @@ function ProcessRidgeLap.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) -- aggiornamento ingombro di testa o coda if Proc.Head then local dHCI = 0 - if abs( vtN[vFaceOrd[3]]:getZ()) > 0.1 then + if vtN[vFaceOrd[3]]:getZ() > 0.1 then local b3Fac1 = EgtSurfTmGetFacetBBoxGlob( Proc.Id, vFaceOrd[1] - 1, GDB_BB.STANDARD) if b3Fac1 then dHCI = b3Raw:getMax():getX() - dOvmHead - b3Fac1:getMin():getX() end else @@ -204,7 +204,7 @@ function ProcessRidgeLap.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) BL.UpdateHCING( nRawId, dHCI) elseif Proc.Tail then local dTCI = 0 - if abs( vtN[vFaceOrd[3]]:getZ()) > 0.1 then + if vtN[vFaceOrd[3]]:getZ() > 0.1 then local b3Fac1 = EgtSurfTmGetFacetBBoxGlob( Proc.Id, vFaceOrd[1] - 1, GDB_BB.STANDARD) if b3Fac1 then dTCI = b3Fac1:getMax():getX() - b3Solid:getMin():getX() end else diff --git a/LuaLibs/ProcessScarfJoint.lua b/LuaLibs/ProcessScarfJoint.lua index b3c2e23..84af102 100644 --- a/LuaLibs/ProcessScarfJoint.lua +++ b/LuaLibs/ProcessScarfJoint.lua @@ -101,7 +101,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch1Id, false) return false, sErr end -- Inserisco la lavorazione del lato opposto @@ -124,7 +124,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch2Id, false) return false, sErr end return true diff --git a/LuaLibs/ProcessSimpleScarf.lua b/LuaLibs/ProcessSimpleScarf.lua index 360d915..49aab92 100644 --- a/LuaLibs/ProcessSimpleScarf.lua +++ b/LuaLibs/ProcessSimpleScarf.lua @@ -101,7 +101,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch1Id, false) return false, sErr end -- Inserisco la lavorazione del lato opposto @@ -124,7 +124,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch2Id, false) return false, sErr end return true diff --git a/LuaLibs/ProcessSplit.lua b/LuaLibs/ProcessSplit.lua index 3a02d19..5a8fa5f 100644 --- a/LuaLibs/ProcessSplit.lua +++ b/LuaLibs/ProcessSplit.lua @@ -12,6 +12,7 @@ -- 2023/04/20 Per travi alte aggiunti tagli orizzontali per ridurre le dimensioni degli scarti. -- 2023/05/09 Aggiunta richiesta risalita preliminare a Zmax per tagli da sopra su macchine PF e ONE. -- 2023/06/13 Corrette note Precut e Cut per tagli aggiuntivi orizzontali. +-- 2023/08/02 Corretto calcolo allungamenti/accorciamenti pezzi alti per contemplare anche taglio singolo. -- Tabella per definizione modulo local ProcessSplit = {} @@ -467,7 +468,9 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt else dCutExtra = - ( b3Raw:getDimY() - dMaxDepth) local dSawRad = dSawDiam / 2 - local dKL = dSawRad - dMaxDepth + b3Raw:getDimY() / 2 + BD.CUT_EXTRA_MIN + -- distanza in Y tra il centro della lama e l'intersezione tra la lama stessa e la massima Z della trave, + extra + -- se taglio doppio l'intersezione sarà in mezzeria, se taglio singolo sarà all'estremo opposto della trave + local dKL = dSawRad - dMaxDepth + EgtIf( bDoubleCut, b3Raw:getDimY() / 2 + BD.CUT_EXTRA_MIN, b3Raw:getDimY() + BD.CUT_EXTRA) if BD.C_SIMM then dAccEnd = sqrt( max( dSawRad * dSawRad - dKL * dKL, 0)) else diff --git a/LuaLibs/ProcessStepJoint.lua b/LuaLibs/ProcessStepJoint.lua index 35a75bd..4d16d32 100644 --- a/LuaLibs/ProcessStepJoint.lua +++ b/LuaLibs/ProcessStepJoint.lua @@ -111,7 +111,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch1Id, false) return false, sErr end -- Inserisco la lavorazione del lato opposto @@ -134,7 +134,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch2Id, false) return false, sErr end return true diff --git a/LuaLibs/ProcessStepJointNotch.lua b/LuaLibs/ProcessStepJointNotch.lua index 6cf3ffd..8960b37 100644 --- a/LuaLibs/ProcessStepJointNotch.lua +++ b/LuaLibs/ProcessStepJointNotch.lua @@ -531,7 +531,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch1Id, false) return false, sErr end end @@ -556,7 +556,7 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch2Id, false) return false, sErr end end diff --git a/LuaLibs/ProcessTenon.lua b/LuaLibs/ProcessTenon.lua index e8090e4..6a8465a 100644 --- a/LuaLibs/ProcessTenon.lua +++ b/LuaLibs/ProcessTenon.lua @@ -240,7 +240,7 @@ function ProcessTenon.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) + EgtSetOperationMode( nMch1Id, false) return false, sErr end end diff --git a/UpdateLog.txt b/UpdateLog.txt index 53f106a..bb3c9d7 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,8 +1,36 @@ ==== Beam Update Log ==== +Versione 2.5i1 (12/09/2023) +- Fixed : in LapJoint gestito correttamente il ritorno nil di GetUShapeWidth [Ticket #1354]. + +Versione 2.5h1 (07/08/2023) +- Fixed : tagli doppi di lato non effettuati se macchina tipo PF e pezzo alto [Ticket #1400] +- Fixed : in split e headcut corretto calcolo allungamenti/accorciamenti pezzi alti per contemplare anche taglio singolo [Ticket #1227] +- Fixed : in lapjoint piccola correzione al calcolo della distanza di sicurezza in base al gambo dell'utensile [Ticket #1227] +- Fixed : in Lapjoint corretto incremento della profondità pari al raggio utensile per tunnel con sega a catena [Ticket #1212] + +Versione 2.5g3 (01/08/2023) +- Added : aggiunta gestione tasche chiuse ad orientamento verticale con rinvio angolare [Ticket #1333] +- Modif : in LongCut ammesso uso lama da sotto fino a Norm +3deg in verticale +- Fixed : in Cut correzione calcolo offset per taglio doppio di lato [Ticket #1400]. + +Versione 2.5g2 (31/07/2023) +- Added : in FreeContour, solo se pocket, aggiunta Q06 per specificare un eventuale offset radiale del contorno [Ticket #1334] +- Added : aggiunta gestione forature verticali con rinvio angolare [Ticket #1332] +- Fixed : corretta gestione antischeggia con lama su LapJoint [Ticket #1351] +- Fixed : in ProfConvex, ProfConcave e ProfHead corretto e semplificato ModifySideInvertLead per invert [Ticket #1330] +- Fixed : corretto il funzionamento delle mortase in doppio [Ticket #1404]. + +Versione 2.5g1 (05/07/2023) +- Modif : in DiceCut modificata scelta tagli ortogonali quando liberi (esteso caso di verticali ammessi) +- Modif : in LapJoint estesi casi riconoscimento in coda basato su lunghezza +- Fixed : nelle mortase passanti escluso il riconoscimento lati aperti che portava a lavorazioni errate [Ticket #1342] +- Fixed : in LapJoint impedito l'uso del truciolatore se la tasca è chiusa [Ticket #1361] +- Fixed : migliorato controllo fattibilità taglio di fianco con cubetti. + Versione 2.5f4 (21/06/2023) -- Fixed : corretto attacco speciale in FreeContour -- Added : aggiunti tagli speciali per evitare il rischio che il cubetto rimanga appoggiato al motore. +- Added : aggiunti tagli speciali per evitare il rischio che il cubetto rimanga appoggiato al motore [Ticket #1004, #1214] +- Fixed : corretto attacco speciale in FreeContour [Ticket #1250] Versione 2.5f3 (16/06/2023) - Fixed : correzione scelta di approccio lama in casi speciali @@ -13,16 +41,16 @@ Versione 2.5f2 (12/06/2023) - Fixed : In BeamLib -> ChangeOrOpenStart corretta ricerca segmento più lungo. Versione 2.5f1 (08/05/2023) -- Fixed : in LongDoubleCut corretta scelta SCC (orientamento braccio testa) per macchine TURN nel caso di concavi - Modif : in Process (esecuzione manuale da Cam5) ordinamento travi di lunghezza praticamente uguale dipende da ordine di selezione - Modif : in LapJoint limiti su svuotature tasche a L 4 facce come per L 3 facce - Modif : in LapJoint su svuotature aggiunto recupero UserNotes da libreria per MaxOptSize. +- Fixed : in LongDoubleCut corretta scelta SCC (orientamento braccio testa) per macchine TURN nel caso di concavi Versione 2.5e5 (26/05/2023) -- Fixed : correzioni a Profili Concavo e Convesso per TURN -- Fixed : correzione a foratura per ignorare fori annegati nel pezzo - Modif : riconoscimento fori da sotto anche dalla faccia di ingresso - Modif : in foratura se TURN aggiunta possibilità di forare da sotto. +- Fixed : correzioni a Profili Concavo e Convesso per TURN +- Fixed : correzione a foratura per ignorare fori annegati nel pezzo Versione 2.5e4 (23/05/2023) - Modif : in LongCut migliorato calcolo e verifica affondamento per lavorazione con lama con codolo in mezzo diff --git a/Version.lua b/Version.lua index 7d145e9..98fa033 100644 --- a/Version.lua +++ b/Version.lua @@ -1,6 +1,6 @@ --- Version.lua by Egaltech s.r.l. 2023/06/08 +-- Version.lua by Egaltech s.r.l. 2023/08/10 -- Gestione della versione di Beam NAME = 'Beam' -VERSION = '2.5f4' +VERSION = '2.5i1' MIN_EXE = '2.5c1' diff --git a/bin/LuaLibs/.placeholder b/bin/LuaLibs/.placeholder new file mode 100644 index 0000000..e69de29