From b10844beeda0e60ce1ea7b53543f7716fb9830ac Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Fri, 24 Jul 2026 14:37:03 +0200 Subject: [PATCH] - in BLADETOWASTE corretta UpdateDiceRaw - in FACEBYBLADE tutte le feature aperte sul retro e che occupano tutta la sezione diventano AfterTail --- LuaLibs/PreSimulationLib.lua | 1 + StrategyLibs/BLADETOWASTE.lua | 8 ++++---- StrategyLibs/FACEBYBLADE.lua | 11 ++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/LuaLibs/PreSimulationLib.lua b/LuaLibs/PreSimulationLib.lua index f41acde..e13804d 100644 --- a/LuaLibs/PreSimulationLib.lua +++ b/LuaLibs/PreSimulationLib.lua @@ -357,6 +357,7 @@ local function CheckCollisionPoint( sAxis, ptOnToolTipCenter, vtHead, vtAux, Par local idHeadCopy = EgtCopyGlob( CollisionSurfTmId[i], idAddGroup) EgtSetName( idHeadCopy, 'COLL_' .. sAxis) EgtVector( idAddGroup, vtHead, ptOnToolTipCenter, GDB_RT.GLOB) + EgtSetStatus( { idBeamCopy, idHeadCopy}, GDB_ST.OFF) end if bCollisionFoundPiece then break diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index c4a26ec..26036c8 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -782,7 +782,7 @@ local function CutWholeWaste( Proc, Part, OptionalParameters) end -local function UpdateDiceRaw( idRaw, idParallelTm, idPerpendicularTm, Part, MainFace, OtherFace) +local function UpdateDiceRaw( idRaw, idParallelTm, idPerpendicularTm, Part) -- contorno della faccia parallela local vtNParallelFaceTm = EgtSurfTmFacetNormVersor( idParallelTm, 0, GDB_ID.ROOT) @@ -841,7 +841,7 @@ local function CalculateDiceMachinings( vCuts, Parameters) local bAreOrthogonalCutsInverted = false for i = 1, #vCuts do for j = 1, #vCuts[i] do - local sType = ( i % 2 == 0) and 'PARAL' or 'PERP' + local sType = ( i % 2 == 0) and 'Paral' or 'Perp' SetDiceFaceInfo( Proc, vCuts[i][j], sType) end end @@ -908,7 +908,7 @@ local function CalculateDiceMachinings( vCuts, Parameters) end -- aggiornamento grezzo dinamico if i % 2 == 0 then - UpdateDiceRaw( idCheckCollisionTm, idSurfToCut, vCuts[i-1][#vCuts[i-1]], Part, MainFace, OtherFace) + UpdateDiceRaw( idCheckCollisionTm, idSurfToCut, nil, Part) end else EgtErase( idSurfToCut) @@ -972,7 +972,7 @@ local function CalculateDiceMachinings( vCuts, Parameters) end -- aggiornamento grezzo dinamico if i % 2 == 0 then - UpdateDiceRaw( idCheckCollisionTm, vCuts[i][j], vCuts[i-1][j], Part, MainFace, OtherFace) + UpdateDiceRaw( idCheckCollisionTm, vCuts[i][j], vCuts[i-1][j], Part) end end end diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index c46ed9f..c0e088d 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -603,14 +603,15 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar -- TODO già guardare se il box della faccia è aperto sulla coda, invece di tutta la trimesh, escluderebbe tanti casi Cutting.bMoveAfterSplit = Cutting.bMoveAfterSplit or Cutting.LeadIn.bMoveAfterSplit or Cutting.LeadOut.bMoveAfterSplit local bIsTruncatingCutOnTail = Proc.Topology and ( Proc.Topology.sName == 'Cut-1-Through' or Proc.Topology.sName == 'TailCut') and Proc.AffectedFaces.bLeft - if Cutting.bMoveAfterSplit or bIsTruncatingCutOnTail then + local bIsFeatureBigAsRawOnTail = ( Proc.b3Box:getDimY() > Part.b3Raw:getDimY() - 100 * GEO.EPS_SMALL) and + ( Proc.b3Box:getDimZ() > Part.b3Raw:getDimZ() - 100 * GEO.EPS_SMALL) and + Proc.AffectedFaces.bLeft + if Cutting.bMoveAfterSplit or bIsTruncatingCutOnTail or bIsFeatureBigAsRawOnTail then Cutting.sStage = 'AfterTail' elseif Proc.AffectedFaces.bLeft and ( EdgeToMachine.sType == 'Bottom' or - ( Cutting.vtToolDirection:getX() < 0.707 and - not ( Cutting.vtToolDirection:getX() > - 10 * GEO.EPS_SMALL and - ( AreSameOrOppositeVectorApprox( EdgeToMachine.vtEdge, Z_AX()) or - AreSameOrOppositeVectorApprox( EdgeToMachine.vtEdge, Y_AX()))))) then + ( Cutting.vtToolDirection:getX() < 0.707 and not ( Cutting.vtToolDirection:getX() > - 10 * GEO.EPS_SMALL and ( AreSameOrOppositeVectorApprox( EdgeToMachine.vtEdge, Z_AX()) or + AreSameOrOppositeVectorApprox( EdgeToMachine.vtEdge, Y_AX()))))) then local dLengthOnX = Cutting.dLengthOnX -- se feature splittata non si considera la lunghezza della feature per il check spostamento dopo separazione