From 987ffd30d652e5a93e07869a39c2e785877a99eb Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Fri, 19 Jun 2026 09:41:55 +0200 Subject: [PATCH] - in PreSimulationLib aggiunto controllo collisione con flangia lama --- LuaLibs/PreSimulationLib.lua | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/LuaLibs/PreSimulationLib.lua b/LuaLibs/PreSimulationLib.lua index c110276..c4c75d6 100644 --- a/LuaLibs/PreSimulationLib.lua +++ b/LuaLibs/PreSimulationLib.lua @@ -286,7 +286,7 @@ local function MoveMachineAxesToPosition( ptOnToolTipCenter, vtHead, vtAux) local AxesNames = EgtGetAllCurrAxesNames() local dTHome = EgtGetAxisHomePos( AxesNames[1]) - -- spostamento assi in posizione (la T non si sposta perchè si sposta il pezzo) + -- spostamento assi in posizione (la T non si sposta perchè si sposta direttamente la testa) EgtSetAxisPos( AxesNames[2], dLinear2) EgtSetAxisPos( AxesNames[3], dLinear3) EgtSetAxisPos( AxesNames[4], dRotative1) @@ -299,7 +299,7 @@ local function MoveMachineAxesToPosition( ptOnToolTipCenter, vtHead, vtAux) end ------------------------------------------------------------------------------------------------------------- -local function CheckCollisionPoint( sAxis, ptOnToolTipCenter, vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, idCheckCollisionTm) +local function CheckCollisionPoint( sAxis, ptOnToolTipCenter, vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, idCheckCollisionTm, idAddedCollisionSurfTm) -- spostamento assi macchina in posizione local dDeltaXHeadOffset = MoveMachineAxesToPosition( ptOnToolTipCenter, vtHead, vtAux) @@ -328,6 +328,10 @@ local function CheckCollisionPoint( sAxis, ptOnToolTipCenter, vtHead, vtAux, Par end end end + -- se presente si aggiunge la geometria opzionale (es: flangia lama) + if idAddedCollisionSurfTm then + table.insert( CollisionSurfTmId, idAddedCollisionSurfTm) + end -- check collisione con pezzo local bCollisionFoundPiece = false @@ -420,7 +424,25 @@ local function CheckCollisionWithAxis( sAxis, MachiningParameters, OptionalParam -- se non si trova collisione si ritorna se è necessario separare prima di effettuare la lavorazione (ossia non c'è collisione con il pezzo ma c'è con il grezzo restante) for i = 1, #PointsOnToolTipCenter do - local bCollisionFoundPiece, bCollisionFoundRestLength = CheckCollisionPoint( sAxis, PointsOnToolTipCenter[i], vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, idCheckCollisionTm) + -- se lama con flangia si aggiunge quest'ultima ai solidi di collisione, ipotizzandola grande fino al dMaxDepth + sicurezza + local idAddedCollisionSurfTm + if Tool.sType == 'SAW_FLAT' then + local ptCenterFlange = PointsOnToolTipCenter[i] + vtHead * Tool.dThickness + local frHead = Frame3d( ptCenterFlange, vtHead) + local dExtraSafety = 2 -- valore empirico che serve nei casi molto inclinati, ci potrebbero essere casi in cui va aumentato + local idFlangeCurve = EgtCircle( Part.idTempGroup, ORIG(), dExtraSafety + Tool.dDiameter / 2 - Tool.dMaxDepth, GDB_RT.GLOB) + EgtTransform( idFlangeCurve, frHead, GDB_RT.GLOB) + + -- TODO verificare se questo controllo serve + if AreOppositeVectorApprox( vtHead, EgtCurveExtrusion( idFlangeCurve)) then + EgtInvertCurve( idFlangeCurve) + end + + local vtExtrusion = 15 * vtHead + idAddedCollisionSurfTm = EgtSurfTmByRegionExtrusion( Part.idTempGroup, idFlangeCurve, vtExtrusion, 0.05, GDB_RT.GLOB) + end + + local bCollisionFoundPiece, bCollisionFoundRestLength = CheckCollisionPoint( sAxis, PointsOnToolTipCenter[i], vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, idCheckCollisionTm, idAddedCollisionSurfTm) -- se trovata collisione con pezzo è inutile controllare gli altri punti if bCollisionFoundPiece then