From 1729e57dbfd30ad9610d2dcd9aa9d29b140fec8a Mon Sep 17 00:00:00 2001 From: "daniele.nicoli" Date: Mon, 2 Mar 2026 16:38:08 +0100 Subject: [PATCH 01/10] ProcessLongDoubleCut, migliorata casistica pezzo da lavorare con testa 2 --- LuaLibs/ProcessLongDoubleCut.lua | 54 +++++++++++++++++--------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/LuaLibs/ProcessLongDoubleCut.lua b/LuaLibs/ProcessLongDoubleCut.lua index 08fbdd2..7d5f850 100644 --- a/LuaLibs/ProcessLongDoubleCut.lua +++ b/LuaLibs/ProcessLongDoubleCut.lua @@ -1151,7 +1151,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster end -- recupero la lavorazione local sMilling - local bDownHead = ( nSide == -1 and BD.DOWN_HEAD) + local bDownHead = ( BD.DOWN_HEAD and ( nSide == -1 or AreSameVectorApprox( vtN[vOrd[1]], -Z_AX()))) sMilling = ML.FindMilling( 'Long2Cut', dElev, nil, nil, nil, not bDownHead, bDownHead) if not sMilling then @@ -1277,31 +1277,35 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster local dLimitAngle = -0.5 - 20 * GEO.EPS_SMALL -- se facce ortogonali (concave), mantengo la lavorazione di testa sulla faccia più grande purchè non superi di 30 gradi il sottosquadra if bOrtho then - local vtN1 = vtN[vOrd[1]] - local vtN2 = vtN[vOrd[2]] - if vtN1:getZ() > 0.001 and vtN2:getZ() > 0.001 then - if vtN1:getZ() >= vtN2:getZ() then - nFin = 1 - else - nIni = 2 - end + if bDownHead and AreSameVectorApprox( vtN[vOrd[1]], -Z_AX()) then + nFin = 1 else - if vtN1:getZ() < dLimitAngle then - nIni = 2 - elseif vtN2:getZ() < dLimitAngle then - nFin = 1 - else + local vtN1 = vtN[vOrd[1]] + local vtN2 = vtN[vOrd[2]] + if vtN1:getZ() > 0.001 and vtN2:getZ() > 0.001 then if vtN1:getZ() >= vtN2:getZ() then - if vtN1:getZ() < dLimitAngle then - nIni = 2 - else - nFin = 1 - end + nFin = 1 else - if vtN1:getZ() < dLimitAngle then - nIni = 2 + nIni = 2 + end + else + if vtN1:getZ() < dLimitAngle then + nIni = 2 + elseif vtN2:getZ() < dLimitAngle then + nFin = 1 + else + if vtN1:getZ() >= vtN2:getZ() then + if vtN1:getZ() < dLimitAngle then + nIni = 2 + else + nFin = 1 + end else - nFin = 1 + if vtN1:getZ() < dLimitAngle then + nIni = 2 + else + nFin = 1 + end end end end @@ -1325,7 +1329,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster -- valore sovrapposizione tra passate con fresa di fianco local dOverLapExtend = 2 -- Verifico se da fare di fianco perchè normale troppo verso il basso (minore di -30deg) - local bSide = ( vtN[vOrd[i]]:getZ() < dLimitAngle and not ( nSide == -1 and ( BD.DOWN_HEAD or BD.TURN))) + local bSide = ( vtN[vOrd[i]]:getZ() < dLimitAngle and not ( bDownHead or ( nSide == -1 and ( BD.DOWN_HEAD or BD.TURN)))) -- Limitazioni della lavorazione local nPos = EgtIf( i == 1, j, nC - j + 1) local dSal = EgtIf( nPos == 1, - EgtIf( i == nIni, dStartDist, dEndDist), - EgtIf( i == nIni, dStartAccDist, dEndAccDist) - ( nPos - 2) * dC + EgtIf( bSide, dOverLapExtend, 0)) @@ -1503,8 +1507,8 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster sMilling = ML.FindMilling( sMchType) sPrefix = 'L2CS_' nExtendMach = nUseMillOnSide - if nUseMillOnSide == 2 then - bRemoveToolRadius = true + if nUseMillOnSide == 2 then + bRemoveToolRadius = true end -- se testa da sotto if nSide ~= 1 and BD.DOWN_HEAD then From bd8a55100591dcc197a2faecb276ff9efbc980b3 Mon Sep 17 00:00:00 2001 From: "daniele.nicoli" Date: Tue, 3 Mar 2026 11:53:08 +0100 Subject: [PATCH 02/10] =?UTF-8?q?Eliminata=20passata=20finale=20dopo=20il?= =?UTF-8?q?=20taglio=20di=20coda=20se=20non=20=C3=A8=20presente=20un=20gre?= =?UTF-8?q?zzo=20successivo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/ProcessLongDoubleCut.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LuaLibs/ProcessLongDoubleCut.lua b/LuaLibs/ProcessLongDoubleCut.lua index 7d5f850..f1d4d58 100644 --- a/LuaLibs/ProcessLongDoubleCut.lua +++ b/LuaLibs/ProcessLongDoubleCut.lua @@ -1474,7 +1474,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster end end end - if not Proc.bMoveAfterSplit and not bConvex and Proc.AffectedFaces.Left then + if not Proc.bMoveAfterSplit and not bConvex and Proc.AffectedFaces.Left and Proc.DistanceToNextPart < ( dToolDiam / 2 + 5) then -- recupero gruppo per geometria addizionale local nAddGrpId = BL.GetAddGroup( nPartId) if not nAddGrpId then From 7dd0c14f5f158136bfb96e6197e95ca4ea1f0c42 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 11 Mar 2026 09:22:00 +0100 Subject: [PATCH 03/10] - in ProcessDrill sistemato LastStep in caso di DrillPocket: ora si copia la lavorazione e si toglie il doppio --- LuaLibs/ProcessDrill.lua | 53 ++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/LuaLibs/ProcessDrill.lua b/LuaLibs/ProcessDrill.lua index a887786..85da00a 100644 --- a/LuaLibs/ProcessDrill.lua +++ b/LuaLibs/ProcessDrill.lua @@ -37,6 +37,7 @@ EgtOutLog( ' ProcessDrill started', 1) -- Dati local BD = require( 'BeamData') local ML = require( 'MachiningLib') +local FreeContour = require( 'ProcessFreeContour') --------------------------------------------------------------------- -- Riconoscimento della feature @@ -345,8 +346,6 @@ end function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- Se forzato contorno foro forzo richiamo a FreeContour e uscita dalla funzione if EgtGetInfo( Proc.Id, 'Q04', 'i') == 1 then - _G.package.loaded.ProcessFreeContour = nil - local FreeContour = require( 'ProcessFreeContour') return FreeContour.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) end -- default per costanti @@ -717,23 +716,41 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) else -- se DrillPocket passante in doppio si fa lavorazione aggiuntiva dell'ultimo step if Proc.Double and Proc.Double > 0 and ( sType == 'Pocket_AT' or sType == 'Pocket') and bOpen then - local nAddGrpId = BL.GetAddGroup( Proc.PartId) - local idProcLastStep = EgtCopyGlob( Proc.Id, nAddGrpId) - local idAuxIdLastStep = EgtCopyGlob( AuxId, nAddGrpId) - EgtModifyCurveThickness( idAuxIdLastStep, -dLastStepDepth) - local ProcLastStep = BL.TableCopyDeep( Proc) - ProcLastStep.Id = idProcLastStep - ProcLastStep.Flg = 1 - ProcLastStep.Double = 0 - ProcLastStep.dCustomMaxElev = dLastStepDepth - dDepth - local bOkLastStep, sWarnLastStep = ProcessDrill.Make( ProcLastStep, nPhase, nRawId, nPartId) - if not bOkLastStep then - sWarnLastStep = 'Drillpocket double : incomplete, last step missing' + local idMachiningLastStep = EgtCopyMachining( EgtIf( EgtStartsWith( sType, 'Predrill'), 'Predrill_', 'Drill_') .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)), sName) + EgtSetCurrMachining( idMachiningLastStep) + if dLastStepDepth > dMaxDepth + 10 * GEO.EPS_SMALL then + sMyWarn = 'Warning in drill pocket last step: depth (' .. EgtNumToString( dLastStepDepth, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')' + dLastStepDepth = dMaxDepth end - local sPreviousWarn = sMyWarn or sWarn - if sWarnLastStep then - if not sPreviousWarn then sPreviousWarn = '' end - sMyWarn = EgtIf( #sPreviousWarn > 0, sPreviousWarn .. '\n' .. sWarnLastStep, sWarnLastStep) + local dMaxElevLastStep = dLastStepDepth - dDepth + sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dMaxElevLastStep, 1)) + EgtSetMachiningParam( MCH_MP.DEPTH, dLastStepDepth) + sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', '') + sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', '') + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + local bOkLastStep = ML.ApplyMachining( true, false) + if not bOkLastStep and bDownDrill and bOpen and abs( Proc.Flg) == 1 then + if sType == 'Drill' or sType == 'Drill_H2' or sType == 'AngleDrill' then + EgtSetMachiningParam( MCH_MP.INVERT, true) + else + EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) + end + bOkLastStep = ML.ApplyMachining( true, false) + end + if not bOkLastStep then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchId, false) + return false, sErr + else + local _, sWarnLastStep = EgtGetMachMgrWarning( 0) + if not bOkLastStep then + sWarnLastStep = 'Drillpocket double : incomplete, last step missing' + end + local sPreviousWarn = sMyWarn or sWarn + if sWarnLastStep then + if not sPreviousWarn then sPreviousWarn = '' end + sMyWarn = EgtIf( #sPreviousWarn > 0, sPreviousWarn .. '\n' .. sWarnLastStep, sWarnLastStep) + end end end return true, ( sMyWarn or sWarn) From 6643673196c888d106a9cf7a2ba85756e484cd77 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 11 Mar 2026 17:38:13 +0100 Subject: [PATCH 04/10] - in LapJoint se svuotatura da due lati si usa la OpenPocket per groove3 aperta e rabbet --- LuaLibs/ProcessLapJoint.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 3d7ad1d..f9b20a4 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -7486,6 +7486,10 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa if ( bTrySidePocketAtFirst and Proc.Fct == 3 and bIsU) or bForceSideMill then -- lavoro con svuotature (singola o doppia contrapposta) local sMyMchFind = EgtIf( bForceSideMill, 'OpenPocket', 'Pocket') + if Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' + or Proc.TopologyLongName == 'Rabbet-Through-RightAngles-Parallel-2' then + sMyMchFind = 'OpenPocket' + end local dDiamTool = 100 local nPathInt, nSurfInt, bOneShot, nFirstMachId local bIs3Faces = true From fbca8d3abdbfab5c3f791b31c6d9accee592e49d Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Thu, 12 Mar 2026 18:42:56 +0100 Subject: [PATCH 05/10] - in ProcessSplit correzione per coda con spessore molto piccolo e separazione con testa sopra/sotto --- LuaLibs/ProcessSplit.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LuaLibs/ProcessSplit.lua b/LuaLibs/ProcessSplit.lua index 3a8792f..5f8a800 100644 --- a/LuaLibs/ProcessSplit.lua +++ b/LuaLibs/ProcessSplit.lua @@ -834,7 +834,7 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt -- determinazione materiale da asportare local dSawThickCheck = dSawThick if dSawThick2 > 0 and bDoubleHorizCut then - dSawThickCheck = min( dSawThick, dSawThick2) + dSawThickCheck = max( min( dSawThick, dSawThick2), dOvmTail) end local dMaxElev = 0 if vtN:getX() > 0 then From 58e32bdfd039124bba600476925ceb2a7b0e0f78 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Mon, 16 Mar 2026 18:23:16 +0100 Subject: [PATCH 06/10] =?UTF-8?q?-=20in=20LapJoint=20aggiunta=20possibilit?= =?UTF-8?q?=C3=A0=20di=20fare=20solo=20contorno=20per=20tasche=20groove=20?= =?UTF-8?q?3=20aperte=20con=20Q02,=20pe=20L030?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/BeamLib.lua | 1 + LuaLibs/ProcessLapJoint.lua | 352 +++++++++++++++++++++++++++++++----- 2 files changed, 306 insertions(+), 47 deletions(-) diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index 282c3e1..892a29a 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -1393,6 +1393,7 @@ function BeamLib.GetToolFromMachining( sMachiningName) else Tool.IsOnAggregate = false end + Tool.MaxDepth = EgtTdbGetCurrToolMaxDepth() or 0 -- altri utensili al momento non previsti else error( 'Wrong tool type') diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index f9b20a4..cee96c8 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -153,6 +153,7 @@ local Q_CHAINSAW_FROM_SIDE = '' -- i local Q_CONVENTIONAL_MILLING = '' -- i local Q_CLEAN_CORNER = '' -- 1 local Q_FLOATING_AGGREGATE = '' -- i +local Q_DIM_STRIP = '' -- d -- variabile smussi local bMadeChamfer @@ -233,6 +234,7 @@ local function AssignQIdent( Proc) Q_CONVENTIONAL_MILLING = 'Q14' -- i Q_CLEAN_CORNER = 'Q15' -- i Q_FLOATING_AGGREGATE = 'Q16' -- i + Q_DIM_STRIP = 'Q17' -- d elseif ( Proc.Grp == 1 or Proc.Grp == 2) and Proc.Prc == 30 then Q_BLADE_ON_ALONG_FACE = 'Q04' -- i elseif ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 32 then @@ -2414,6 +2416,222 @@ local function MakeDrillOnCorner( Proc, nPhase, nRawId, nPartId, b3Raw, nFacInd, return true, sMyWarn end +--------------------------------------------------------------------- +local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunnelDepth, dDimStrip, nPhase) + + local dCollSic = BL.CalcCollisionSafety( vtTunnelDirection) + local bMultipleHeadsAvailble = BD.DOWN_HEAD or BD.TWO_EQUAL_HEADS + local bMillFromBottom = vtTunnelDirection:getZ() < BD.NZ_MINA + local bMillFromBottomOpposite = -vtTunnelDirection:getZ() < BD.NZ_MINA + local sWarn = '' + + -- ricerca lavorazione lato principale + local sMilling = ML.FindMilling( 'SmallToolContour', nil, nil, nil, nil, not bMillFromBottom, bMillFromBottom) + if not sMilling then + local sErr = 'Warning : SmallToolContour not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- dati utensile + local Tool = BL.GetToolFromMachining( sMilling) + + -- verifica necessità lavorazione opposta + local bOppositeMillingNeeded + local bMainMillingReachesFullDepth = Tool.MaxDepth > dTunnelDepth + dCollSic - dDimStrip + local bMainMillingReachesHalfDepth = bMainMillingReachesFullDepth or ( Tool.MaxDepth > dTunnelDepth / 2 + dCollSic - dDimStrip / 2) + if bMainMillingReachesFullDepth and not bMultipleHeadsAvailble then + bOppositeMillingNeeded = false + else + bOppositeMillingNeeded = true + end + + -- ricera lavorazione lato opposto + local sMillingOpposite = ML.FindMilling( 'SmallToolContour', nil, nil, nil, nil, not bMillFromBottomOpposite, bMillFromBottomOpposite) + if bOppositeMillingNeeded and not sMillingOpposite then + local sErr = 'Warning : Opposite SmallToolContour not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- dati utensile + local ToolOpposite = BL.GetToolFromMachining( sMillingOpposite) + + local bOppositMillingReachesHalfDepth = ToolOpposite.MaxDepth > dTunnelDepth + dCollSic - dDimStrip + + -- applicazione lavorazione lato principale + local sName = 'Contour_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) + local idMachining = EgtAddMachining( sName, sMilling) + if not idMachining then + local sErr = 'Error : impossible add machining ' .. sName .. '-' .. sMilling + return false, sErr + end + -- geometria + EgtSetMachiningGeometry( {{ idContourPath, -1}}) + -- lato di lavoro sinistro + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + -- inversione direzione utensile + EgtSetMachiningParam( MCH_MP.TOOLINVERT, false) + -- SCC + local nSCC = MCH_SCC.NONE + if not BD.C_SIMM then + if AreSameOrOppositeVectorApprox( vtTunnelDirection, Z_AX()) then + nSCC = MCH_SCC.ADIR_YM + elseif abs( vtTunnelDirection:getX()) < 0.1 then + nSCC = EgtIf( BL.IsPartFinalPhase( nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) + elseif vtTunnelDirection:getY() < GEO.EPS_SMALL then + nSCC = MCH_SCC.ADIR_YM + else + nSCC = MCH_SCC.ADIR_YP + end + end + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- gestione attacco e uscita + if EgtCurveIsClosed( idContourPath) then + -- attacco e uscita a quarto di cerchio senza allungamenti a inizio e fine + EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.TANGENT) + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) + EgtSetMachiningParam( MCH_MP.LITANG, 0) + EgtSetMachiningParam( MCH_MP.LIPERP, 0.5 * Tool.Diameter) + EgtSetMachiningParam( MCH_MP.LIELEV, 0) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) + else + -- nessun attacco e uscita, allungo inizio e fine di raggio utensile + 5mm (per evitare controllo collisioni) + EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.NONE) + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, Tool.Diameter / 2 + 5) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, Tool.Diameter / 2 + 5) + end + -- affondamento - la curva è a metà tasca quindi affondamento 0 significa che la lavorazione arriva a metà tasca + local dDepth + -- c'è la lavorazione opposta + if bOppositeMillingNeeded then + -- si arriva a metà tasca + if bMainMillingReachesHalfDepth then + dDepth = -dDimStrip / 2 + -- si arriva al massimo raggiungibile + else + dDepth = Tool.MaxDepth - dTunnelDepth / 2 + sWarn = 'Warning : incomplete' + end + -- non c'è lavorazione opposta + else + -- si arriva fino in fondo + if bMainMillingReachesFullDepth then + dDepth = dTunnelDepth / 2 - dDimStrip + -- si arriva al massimo raggiungibile + else + dDepth = Tool.MaxDepth - dTunnelDepth / 2 + sWarn = 'Warning : incomplete' + end + end + EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) + -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione + local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or '' + sUserNotes = EgtSetValInNotes( sUserNotes, 'VMRS', 0) + sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dTunnelDepth / 2 + dDepth, 1)) + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + -- eseguo + local bMillingOk + if ML.ApplyMachining( true, false) then + _, sWarn = EgtGetMachMgrWarning( 0) + if EgtIsMachiningEmpty() then + EgtSetOperationMode( idMachining, false) + end + bMillingOk = true + -- altrimenti lavorazione non applicata + else + _, sWarn = EgtGetLastMachMgrError() + EgtSetOperationMode( idMachining, false) + bMillingOk = false + end + + -- eventuale lavorazione opposta + local bMillingOppositeOk + if bOppositeMillingNeeded then + local sName = 'ContourOppo_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) + local idMachining = EgtAddMachining( sName, sMillingOpposite) + if not idMachining then + local sErr = 'Error : impossible add machining ' .. sName .. '-' .. sMilling + return false, sErr + end + -- geometria + EgtSetMachiningGeometry( {{ idContourPath, -1}}) + -- lato di lavoro sinistro + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + -- inversione direzione utensile + EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) + -- SCC + local nSCC = MCH_SCC.NONE + if not BD.C_SIMM then + if AreSameOrOppositeVectorApprox( vtTunnelDirection, Z_AX()) then + nSCC = MCH_SCC.ADIR_YM + elseif abs( vtTunnelDirection:getX()) < 0.1 then + nSCC = EgtIf( BL.IsPartFinalPhase( nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) + elseif vtTunnelDirection:getY() < GEO.EPS_SMALL then + nSCC = MCH_SCC.ADIR_YM + else + nSCC = MCH_SCC.ADIR_YP + end + end + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- gestione attacco e uscita + if EgtCurveIsClosed( idContourPath) then + -- attacco e uscita a quarto di cerchio senza allungamenti a inizio e fine + EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.TANGENT) + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) + EgtSetMachiningParam( MCH_MP.LITANG, 0) + EgtSetMachiningParam( MCH_MP.LIPERP, 0.5 * Tool.Diameter) + EgtSetMachiningParam( MCH_MP.LIELEV, 0) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) + else + -- nessun attacco e uscita, allungo inizio e fine di raggio utensile + 5mm (per evitare controllo collisioni) + EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.NONE) + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, Tool.Diameter / 2 + 5) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, Tool.Diameter / 2 + 5) + end + -- affondamento - la curva è a metà tasca quindi affondamento 0 significa che la lavorazione arriva a metà tasca + local dDepth + -- si arriva a metà tasca + if bOppositMillingReachesHalfDepth then + dDepth = -dDimStrip / 2 + -- si arriva al massimo raggiungibile + else + dDepth = Tool.MaxDepth - dTunnelDepth / 2 + sWarn = 'Warning : incomplete' + end + EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) + -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione + local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or '' + sUserNotes = EgtSetValInNotes( sUserNotes, 'VMRS', 0) + sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dTunnelDepth / 2 + dDepth, 1)) + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + -- eseguo + if ML.ApplyMachining( true, false) then + _, sWarn = EgtGetMachMgrWarning( 0) + if EgtIsMachiningEmpty() then + EgtSetOperationMode( idMachining, false) + end + bMillingOppositeOk = true + -- altrimenti lavorazione non applicata + else + _, sWarn = EgtGetLastMachMgrError() + EgtSetOperationMode( idMachining, false) + bMillingOppositeOk = false + end + end + + + if bMillingOk or ( bOppositeMillingNeeded and bMillingOppositeOk) then + return true, sWarn + else + local sErr = 'Error : Not applicable' + return false, sErr + end + +end + --------------------------------------------------------------------- local function ExtractExternalPaths( nPathInt, nNumIdAux, vtOrtho, b3Solid, nAddGrpId) local nAuxId1, nAuxId2 @@ -7557,7 +7775,6 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa end bTryWithBlades = false -- se ho antischeggia con fresa le inserisco - -- if nChamfer < 2 and nQAntisplintResult == 2 and ( bIsU or bIsL) then if nChamfer < 2 and nQAntisplintResult == 2 then local bOk, sWarn2 = ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, nFacInd, nAddGrpId, bMillDown, dDiamTool, nil, @@ -7584,57 +7801,93 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa -- in tutti gli altri casi, a meno che non sia forzata sega a catena, lancio la MakeByPockets -- lavorazione singola o doppia contrapposta, fondo della tasca una faccia fittizia perpendicolare al lato lungo elseif not bForceChainsaw then - -- se 2 facce setto i parametri corretti per la MakeByPockets - if bForceSideMill and Proc.Fct == 2 then - bIs3Faces = false - bOrthoFacesMaster = true - bSetOpenBorders = true - end - nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, - bOrthoFaces = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, bIs3Faces, b3Solid, bOrthoFacesMaster, bMillDown, bSetOpenBorders, bIsU, bIsL) - if nOk == -3 then - bTryWithBlades = true - elseif nOk == -2 then - if not sMchFind then - sMchFind = sMchFindBackUp - end - sPocketing = ML.FindPocketing( sMchFind, dDiam, nil, nil, not bMillDown, bMillDown) - if not sPocketing then - local sErr2 = 'Error : '..sMchFind..' not found in library' - EgtOutLog( sErr2) - return false, sErr2 - end - bTryWithBlades = false - sWarn = sErr - elseif nOk < 0 then - return false, sErr - elseif nOk > 0 then - bTryWithBlades = false - sWarn = sErr - -- se ho antischeggia con fresa le inserisco - -- if nChamfer < 2 and nQAntisplintResult == 2 and ( bIsU or bIsL) then - local nFacIndOri, dFacElevOri = BL.GetFaceWithMostAdj( Proc, nPartId) - if nChamfer < 2 and nQAntisplintResult == 2 then - local bOk, sWarn2 = ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, - nFacIndOri, nAddGrpId, bMillDown, dDiamTool, nil, - nil, nil, nil, b3Solid, dFacElevOri, - bOneShot, nFirstMachId) + local bOnlyContour = ( EgtGetInfo( Proc.Id, Q_ONLY_CONTOUR, 'i') or 0) > 0 + -- richiesto solo contorno + if bOnlyContour then + if Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' then + -- direzione e faccia aggiunta del tunnel (la groove-3 passante è uno pseudotunnel) + local _, _, dTunnelDepth, vtTunnelDirection, _, idAddedTunnelTmFace = BL.GetTunnelDimension( Proc, nPartId) + -- si tiene il verso del tunnel dal lato Z positiva + if vtTunnelDirection:getZ() < GEO.EPS_SMALL then + vtTunnelDirection = -vtTunnelDirection + EgtInvertSurf( idAddedTunnelTmFace) + end + -- elevazione della faccia aggiunta + -- estrazione del contorno da lavorare + local idContourPath = EgtExtractSurfTmLoops( idAddedTunnelTmFace, nAddGrpId) + EgtModifyCurveExtrusion( idContourPath, vtTunnelDirection, GDB_RT.GLOB) + -- si eliminano i lati aperti + BL.SetOpenSide( idContourPath, b3Solid) + BL.ChangeOrOpenStart( idContourPath, 2) + -- spessore codolo da lasciare + local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') or 5 + local bOkContour, sWarn2 = MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunnelDepth, dDimStrip, nPhase) + if bOkContour then + return true, sWarn2 + else + return false, sWarn2 + end if sWarn2 then if not sWarn then sWarn = '' end sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) end + else + local sErr2 = 'Error : Cannot use ' .. Q_ONLY_CONTOUR .. ' on this feature' + return false, sErr2 end - -- se abilitato dal parametro Q inserisco pulitura spigoli o contorno con fresa più piccola - local nContourSmallTool = EgtGetInfo( Proc.Id, Q_CONTOUR_SMALL_TOOL, 'i') or 0 - if nContourSmallTool > 0 then - local bOk, sWarn2 = MakeRoundCleanCornerOrContour( Proc, nPhase, nRawId, nPartId, b3Raw, - nFacInd, nAddGrpId, dDiamTool, nContourSmallTool, bMillDown, - bDoubleSide, vtOrtho, nPathInt, nSurfInt, b3Solid, - dDepth, bOneShotm) - if not bOk then return false, sWarn2 end - if sWarn2 then - if not sWarn then sWarn = '' end - sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) + -- svuotatura + else + -- se 2 facce setto i parametri corretti per la MakeByPockets + if bForceSideMill and Proc.Fct == 2 then + bIs3Faces = false + bOrthoFacesMaster = true + bSetOpenBorders = true + end + nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, + bOrthoFaces = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, bIs3Faces, b3Solid, bOrthoFacesMaster, bMillDown, bSetOpenBorders, bIsU, bIsL) + if nOk == -3 then + bTryWithBlades = true + elseif nOk == -2 then + if not sMchFind then + sMchFind = sMchFindBackUp + end + sPocketing = ML.FindPocketing( sMchFind, dDiam, nil, nil, not bMillDown, bMillDown) + if not sPocketing then + local sErr2 = 'Error : '..sMchFind..' not found in library' + EgtOutLog( sErr2) + return false, sErr2 + end + bTryWithBlades = false + sWarn = sErr + elseif nOk < 0 then + return false, sErr + elseif nOk > 0 then + bTryWithBlades = false + sWarn = sErr + -- se ho antischeggia con fresa le inserisco + local nFacIndOri, dFacElevOri = BL.GetFaceWithMostAdj( Proc, nPartId) + if nChamfer < 2 and nQAntisplintResult == 2 then + local bOk, sWarn2 = ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, + nFacIndOri, nAddGrpId, bMillDown, dDiamTool, nil, + nil, nil, nil, b3Solid, dFacElevOri, + bOneShot, nFirstMachId) + if sWarn2 then + if not sWarn then sWarn = '' end + sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) + end + end + -- se abilitato dal parametro Q inserisco pulitura spigoli o contorno con fresa più piccola + local nContourSmallTool = EgtGetInfo( Proc.Id, Q_CONTOUR_SMALL_TOOL, 'i') or 0 + if nContourSmallTool > 0 then + local bOk, sWarn2 = MakeRoundCleanCornerOrContour( Proc, nPhase, nRawId, nPartId, b3Raw, + nFacInd, nAddGrpId, dDiamTool, nContourSmallTool, bMillDown, + bDoubleSide, vtOrtho, nPathInt, nSurfInt, b3Solid, + dDepth, bOneShotm) + if not bOk then return false, sWarn2 end + if sWarn2 then + if not sWarn then sWarn = '' end + sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) + end end end end @@ -8356,6 +8609,11 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) if ( Proc.Box:getDimX() > BD.LONGCUT_MAXLEN) or ( Proc.Box:getDimX() > 0.7 * b3Solid:getDimX() and ( Proc.DistanceToNextPart > 1000 or Proc.Box:getDimX() > BD.LONGCUT_ENDLEN)) or ( ( nForceUseBladeOnNotContinueFace and nForceUseBladeOnNotContinueFace > 0) and ( Proc.Box:getDimX() > ( BD.LEN_SHORT_PART or 1000))) then + local bOnlyContour = ( EgtGetInfo( Proc.Id, Q_ONLY_CONTOUR, 'i') or 0) > 0 + if bOnlyContour then + local sErr2 = 'Error : Cannot use ' .. Q_ONLY_CONTOUR .. ' on long features' + return false, sErr2 + end -- una faccia if Proc.Fct == 1 then if bUseBlade then From 63133c881318b6b40682e4419f28e0d31ba6b2d0 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 17 Mar 2026 09:57:48 +0100 Subject: [PATCH 07/10] - in BeamLib.GetToolfromMachining per le frese si leggono anche MaxDepth e StemDiameter. MaxDepth corretta se StemDiameter > Diameter - in LapJoint correzioni a Q02 per solo contorno --- LuaLibs/BeamLib.lua | 4 ++++ LuaLibs/ProcessLapJoint.lua | 9 ++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index 892a29a..5b39da5 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -1393,7 +1393,11 @@ function BeamLib.GetToolFromMachining( sMachiningName) else Tool.IsOnAggregate = false end + Tool.StemDiameter = EgtTdbGetCurrToolParam( MCH_TP.STEMDIAM) or 0 Tool.MaxDepth = EgtTdbGetCurrToolMaxDepth() or 0 + if Tool.StemDiameter > Tool.Diameter + GEO.EPS_SMALL then + Tool.MaxDepth = Tool.MaxDepth - BD.COLL_SIC + end -- altri utensili al momento non previsti else error( 'Wrong tool type') diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index cee96c8..98fc381 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -2455,7 +2455,7 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne -- dati utensile local ToolOpposite = BL.GetToolFromMachining( sMillingOpposite) - local bOppositMillingReachesHalfDepth = ToolOpposite.MaxDepth > dTunnelDepth + dCollSic - dDimStrip + local bOppositMillingReachesHalfDepth = ToolOpposite.MaxDepth > dTunnelDepth / 2 + dCollSic - dDimStrip / 2 -- applicazione lavorazione lato principale local sName = 'Contour_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) @@ -2510,7 +2510,7 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne dDepth = -dDimStrip / 2 -- si arriva al massimo raggiungibile else - dDepth = Tool.MaxDepth - dTunnelDepth / 2 + dDepth = Tool.MaxDepth - dTunnelDepth / 2 - dCollSic sWarn = 'Warning : incomplete' end -- non c'è lavorazione opposta @@ -2520,7 +2520,7 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne dDepth = dTunnelDepth / 2 - dDimStrip -- si arriva al massimo raggiungibile else - dDepth = Tool.MaxDepth - dTunnelDepth / 2 + dDepth = Tool.MaxDepth - dTunnelDepth / 2 - dCollSic sWarn = 'Warning : incomplete' end end @@ -2598,7 +2598,7 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne dDepth = -dDimStrip / 2 -- si arriva al massimo raggiungibile else - dDepth = Tool.MaxDepth - dTunnelDepth / 2 + dDepth = Tool.MaxDepth - dTunnelDepth / 2 - dCollSic sWarn = 'Warning : incomplete' end EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) @@ -2622,7 +2622,6 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne end end - if bMillingOk or ( bOppositeMillingNeeded and bMillingOppositeOk) then return true, sWarn else From 6892759956aa5bd13199914924662deda05c7df7 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 17 Mar 2026 13:08:36 +0100 Subject: [PATCH 08/10] - in LapJoint per Q02 solo contorno sono ammessi anche i tunnel; aggiunti messagi in caso di lavorazione incompleta --- LuaLibs/ProcessLapJoint.lua | 91 ++++++++++++++++++++++++++++--------- 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 98fc381..9b64a98 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -2423,7 +2423,8 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne local bMultipleHeadsAvailble = BD.DOWN_HEAD or BD.TWO_EQUAL_HEADS local bMillFromBottom = vtTunnelDirection:getZ() < BD.NZ_MINA local bMillFromBottomOpposite = -vtTunnelDirection:getZ() < BD.NZ_MINA - local sWarn = '' + local sApplyWarning = '' + local bIncomplete = false -- ricerca lavorazione lato principale local sMilling = ML.FindMilling( 'SmallToolContour', nil, nil, nil, nil, not bMillFromBottom, bMillFromBottom) @@ -2511,7 +2512,7 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne -- si arriva al massimo raggiungibile else dDepth = Tool.MaxDepth - dTunnelDepth / 2 - dCollSic - sWarn = 'Warning : incomplete' + bIncomplete = true end -- non c'è lavorazione opposta else @@ -2521,7 +2522,7 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne -- si arriva al massimo raggiungibile else dDepth = Tool.MaxDepth - dTunnelDepth / 2 - dCollSic - sWarn = 'Warning : incomplete' + bIncomplete = true end end EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) @@ -2533,14 +2534,14 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne -- eseguo local bMillingOk if ML.ApplyMachining( true, false) then - _, sWarn = EgtGetMachMgrWarning( 0) + _, sApplyWarning = EgtGetMachMgrWarning( 0) if EgtIsMachiningEmpty() then EgtSetOperationMode( idMachining, false) end bMillingOk = true -- altrimenti lavorazione non applicata else - _, sWarn = EgtGetLastMachMgrError() + _, sApplyWarning = EgtGetLastMachMgrError() EgtSetOperationMode( idMachining, false) bMillingOk = false end @@ -2599,7 +2600,7 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne -- si arriva al massimo raggiungibile else dDepth = Tool.MaxDepth - dTunnelDepth / 2 - dCollSic - sWarn = 'Warning : incomplete' + bIncomplete = true end EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione @@ -2609,21 +2610,28 @@ local function MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunne EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) -- eseguo if ML.ApplyMachining( true, false) then - _, sWarn = EgtGetMachMgrWarning( 0) + _, sApplyWarning = EgtGetMachMgrWarning( 0) if EgtIsMachiningEmpty() then EgtSetOperationMode( idMachining, false) end bMillingOppositeOk = true -- altrimenti lavorazione non applicata else - _, sWarn = EgtGetLastMachMgrError() + _, sApplyWarning = EgtGetLastMachMgrError() EgtSetOperationMode( idMachining, false) bMillingOppositeOk = false end end if bMillingOk or ( bOppositeMillingNeeded and bMillingOppositeOk) then - return true, sWarn + local sWarning = '' + if bIncomplete then + sWarning = 'Warning : machining incomplete' + end + if #sApplyWarning > 0 then + sWarning = sApplyWarning .. '\n' .. sWarning + end + return true, sWarning else local sErr = 'Error : Not applicable' return false, sErr @@ -6889,17 +6897,53 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa if bForceChainsaw then -- ottengo le dimensioni del tunnel dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace = BL.GetTunnelDimension( Proc, nPartId) - -- lavoro fessura con svuotature (singola o doppia contrapposta) + -- se non richiesto solo contorno, lavoro fessura con svuotature (singola o doppia contrapposta) else - local sMyMchFind = 'Pocket' - local nOk, sErr - nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, - nLundIdFace, sErr = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces) - if nOk < 0 then - return false, sErr - elseif nOk > 0 then - sWarn = sErr - bTryWithBlades = false + local bOnlyContour = ( EgtGetInfo( Proc.Id, Q_ONLY_CONTOUR, 'i') or 0) > 0 + if bOnlyContour then + if Proc.TopologyLongName == 'Tunnel-Through-RightAngles-Parallel-4' then + -- direzione e faccia aggiunta del tunnel (la groove-3 passante è uno pseudotunnel) + local _, _, dTunnelDepth, vtTunnelDirection, _, idAddedTunnelTmFace = BL.GetTunnelDimension( Proc, nPartId) + -- si tiene il verso del tunnel dal lato Z positiva + if vtTunnelDirection:getZ() < GEO.EPS_SMALL then + vtTunnelDirection = -vtTunnelDirection + EgtInvertSurf( idAddedTunnelTmFace) + end + -- estrazione del contorno da lavorare + local idContourPath = EgtExtractSurfTmLoops( idAddedTunnelTmFace, nAddGrpId) + EgtModifyCurveExtrusion( idContourPath, vtTunnelDirection, GDB_RT.GLOB) + -- spessore codolo da lasciare + local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') + if dDimStrip < 10 * GEO.EPS_SMALL then + dDimStrip = 5 + end + -- lavorazione + local bOkContour, sWarn2 = MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunnelDepth, dDimStrip, nPhase) + if bOkContour then + return true, sWarn2 + else + return false, sWarn2 + end + if sWarn2 then + if not sWarn then sWarn = '' end + sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) + end + else + local sErr2 = 'Error : Cannot use ' .. Q_ONLY_CONTOUR .. ' on this feature' + return false, sErr2 + end + -- svuotatura + else + local sMyMchFind = 'Pocket' + local nOk, sErr + nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, + nLundIdFace, sErr = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces) + if nOk < 0 then + return false, sErr + elseif nOk > 0 then + sWarn = sErr + bTryWithBlades = false + end end end -- Se la svuotatura precedente non è stata fatta e chamfer non è mutuamente esclusivo provo con la sega-catena @@ -7798,7 +7842,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa end end -- in tutti gli altri casi, a meno che non sia forzata sega a catena, lancio la MakeByPockets - -- lavorazione singola o doppia contrapposta, fondo della tasca una faccia fittizia perpendicolare al lato lungo + -- se non richiesto solo contorno, lavorazione singola o doppia contrapposta, fondo della tasca una faccia fittizia perpendicolare al lato lungo elseif not bForceChainsaw then local bOnlyContour = ( EgtGetInfo( Proc.Id, Q_ONLY_CONTOUR, 'i') or 0) > 0 -- richiesto solo contorno @@ -7811,7 +7855,6 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa vtTunnelDirection = -vtTunnelDirection EgtInvertSurf( idAddedTunnelTmFace) end - -- elevazione della faccia aggiunta -- estrazione del contorno da lavorare local idContourPath = EgtExtractSurfTmLoops( idAddedTunnelTmFace, nAddGrpId) EgtModifyCurveExtrusion( idContourPath, vtTunnelDirection, GDB_RT.GLOB) @@ -7819,7 +7862,11 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa BL.SetOpenSide( idContourPath, b3Solid) BL.ChangeOrOpenStart( idContourPath, 2) -- spessore codolo da lasciare - local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') or 5 + local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') + if dDimStrip < 10 * GEO.EPS_SMALL then + dDimStrip = 5 + end + -- lavorazione local bOkContour, sWarn2 = MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunnelDepth, dDimStrip, nPhase) if bOkContour then return true, sWarn2 From 89fefbcbadb87748803df250ebe034fffb98c777 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 18 Mar 2026 15:37:15 +0100 Subject: [PATCH 09/10] - in LapJoint per antischeggia Q06 contemplato valore 3 per scegliere in automatico la strategia (lama o fresa) - in LapJoint Q17=0 significa nessun codolo (sempre abbinato a Q02) --- LuaLibs/ProcessLapJoint.lua | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 9b64a98..b3b4591 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -6913,10 +6913,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa local idContourPath = EgtExtractSurfTmLoops( idAddedTunnelTmFace, nAddGrpId) EgtModifyCurveExtrusion( idContourPath, vtTunnelDirection, GDB_RT.GLOB) -- spessore codolo da lasciare - local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') - if dDimStrip < 10 * GEO.EPS_SMALL then - dDimStrip = 5 - end + local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') or 0 -- lavorazione local bOkContour, sWarn2 = MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunnelDepth, dDimStrip, nPhase) if bOkContour then @@ -7733,7 +7730,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa local bPassEdge = ((( bIsU and Proc.Fct == 3) or ( bIsL and Proc.Fct == 2)) and bSinglePart and Proc.Box:getDimX() < 0.9 * b3Raw:getDimX()) local nFacIndOri = BL.GetFaceWithMostAdj( Proc, nPartId) local vtNOri = EgtSurfTmFacetNormVersor( Proc.Id, nFacIndOri, GDB_ID.ROOT) - 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 + if nChamfer < 2 and ( nQAntisplintResult == 1 or nQAntisplintResult == 3) 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, b3Solid, bIsU, vtNOri, nFacIndOri, sWarn, bSawDown, true) @@ -7818,7 +7815,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa end bTryWithBlades = false -- se ho antischeggia con fresa le inserisco - if nChamfer < 2 and nQAntisplintResult == 2 then + if nChamfer < 2 and ( nQAntisplintResult == 2 or ( nQAntisplintResult == 3 and not bMadeASbyBld)) then local bOk, sWarn2 = ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, nFacInd, nAddGrpId, bMillDown, dDiamTool, nil, nil, nil, nil, b3Solid, dDepth, @@ -7862,10 +7859,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa BL.SetOpenSide( idContourPath, b3Solid) BL.ChangeOrOpenStart( idContourPath, 2) -- spessore codolo da lasciare - local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') - if dDimStrip < 10 * GEO.EPS_SMALL then - dDimStrip = 5 - end + local dDimStrip = EgtGetInfo( Proc.Id, Q_DIM_STRIP, 'd') or 0 -- lavorazione local bOkContour, sWarn2 = MakeContourByMill( Proc, idContourPath, vtTunnelDirection, dTunnelDepth, dDimStrip, nPhase) if bOkContour then @@ -7912,7 +7906,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa sWarn = sErr -- se ho antischeggia con fresa le inserisco local nFacIndOri, dFacElevOri = BL.GetFaceWithMostAdj( Proc, nPartId) - if nChamfer < 2 and nQAntisplintResult == 2 then + if nChamfer < 2 and ( nQAntisplintResult == 2 or ( nQAntisplintResult == 3 and not bMadeASbyBld)) then local bOk, sWarn2 = ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, nFacIndOri, nAddGrpId, bMillDown, dDiamTool, nil, nil, nil, nil, b3Solid, dFacElevOri, @@ -8017,14 +8011,14 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa local bPassEdge = ((( bIsU and Proc.Fct == 3) or ( bIsL and Proc.Fct == 2)) and bSinglePart and Proc.Box:getDimX() < 0.9 * b3Raw:getDimX()) local nFacIndOri = BL.GetFaceWithMostAdj( Proc, nPartId) local vtNOri = EgtSurfTmFacetNormVersor( Proc.Id, nFacIndOri, GDB_ID.ROOT) - 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 + if nChamfer < 2 and ( nQAntisplintResult == 1 or nQAntisplintResult == 3) 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, b3Solid, bIsU, vtNOri, nFacIndOri, sWarn, bSawDown) if not bOk then return false, sWarn end end - if nChamfer < 2 and nQAntisplintResult == 2 then - local bOk, sWarn2 = ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, + if nChamfer < 2 and ( nQAntisplintResult == 2 or ( nQAntisplintResult == 3 and not bMadeASbyBld)) then + local bOk, sWarn2 = ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, nFacInd, nAddGrpId, bMillDown, dDiamTool, nil, nil, nil, nil, b3Solid) if not bOk then return false, sWarn2 end From cf96d7bc90273316d42b214f1a45cc9932b89c44 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 18 Mar 2026 15:37:49 +0100 Subject: [PATCH 10/10] update log e versione --- UpdateLog.txt | 9 +++++++++ Version.lua | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/UpdateLog.txt b/UpdateLog.txt index cb173f1..46c214d 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,4 +1,13 @@ ==== Beam Update Log ==== +Versione 3.1c2 (18/03/2026) +- Added : in LapJoint (solo L030) aggiunto Q02 per fare solo contorno per forme a "C" e tunnel; Q17 spessore di eventuale codolo +- Modif : per LapJoint e simili il Q06 per antischeggia ora contempla il valore 3 per scegliere la strategia in automatico (lama o fresa) +- Modif : in LapJoint migliorie nella lavorazione delle tasche aperte +- Modif : in LongDoubleCut e LapJoint lunghe migliorata scelta fresa in caso di tasca che guarda verso il basso +- Fixed : in forature in doppio con svuotatura corretto ultimo step +- Fixed : in split correzione in caso di materiale di coda molto sottile e testa sotto +- Fixed : in LongDoubleCut e LapJoint lunghe eliminata passate finale dopo taglio di coda se non è presente un grezzo successivo + Versione 3.1c1 (04/03/2026) - Fixed : correzione in ordinamento (fori vs tagli) - Fixed : in drilling rimosso preforo duplicato diff --git a/Version.lua b/Version.lua index 4a4b840..27bc95d 100644 --- a/Version.lua +++ b/Version.lua @@ -2,5 +2,5 @@ -- Gestione della versione di Beam NAME = 'Beam' -VERSION = '3.1c1' +VERSION = '3.1c2' MIN_EXE = '3.1b1'