From c997cb4440e404abdbff43f22aa932b9ba5cf354 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Mon, 26 Jan 2026 13:29:18 +0100 Subject: [PATCH] - in BLADETOWASTE se i cubetti falliscono si riprovano con la SAFE_DIM_DICE, se disponibile - in PreSimulationLib per i test collisione con il grezzo si usa la vera dimensione della barra restante --- LuaLibs/PreSimulationLib.lua | 2 +- StrategyLibs/BLADETOWASTE.lua | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/LuaLibs/PreSimulationLib.lua b/LuaLibs/PreSimulationLib.lua index 1eb8671..ae97163 100644 --- a/LuaLibs/PreSimulationLib.lua +++ b/LuaLibs/PreSimulationLib.lua @@ -70,7 +70,7 @@ local function GetRestlengthSurfTm( Part) -- si costruisce il box in globale local ptRestLengthMax = Point3d( Part.b3Part:getMin()) + X_AX() * 500 * GEO.EPS_SMALL - local ptRestLengthMin = Point3d( Part.b3Part:getMin():getX() - 2000, Part.b3Part:getMax():getY(), Part.b3Part:getMax():getZ()) + local ptRestLengthMin = Point3d( Part.b3Part:getMin():getX() - Part.dRestLength, Part.b3Part:getMax():getY(), Part.b3Part:getMax():getZ()) local b3RestLength = BBox3d( ptRestLengthMin, ptRestLengthMax) -- si crea la trimesh dal box local idRestLengthBoxTm = EgtSurfTmBBox( Part.idTempGroup, b3RestLength , false, GDB_RT.GLOB) diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index aeae7b0..9ed9a1b 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -951,6 +951,23 @@ local function CutWithDicing( Proc, Part, OptionalParameters) bIsDicingOk, Machinings, bMoveAfterSplit = CalculateDiceMachinings( vCuts, Parameters) + -- se i cubetti falliscono si riprova con la dimensione ridotta (ad esempio quando tocca l'asse Z nei cubetti in coda) + if not bIsDicingOk and BeamData.SAFE_DIM_DICE then + dDiceDimension = BeamData.SAFE_DIM_DICE - BeamData.CUT_EXTRA + OptionalParametersDiceCut.dOffsetParallel = dDiceDimension + OptionalParametersDiceCut.dOffsetOrthogonal = dDiceDimension + vCuts = DiceCut.GetDice( Part, Face1, Face2, OptionalParametersDiceCut) + + -- se nessun cubetto trovato, si richiama ricorsivamente la BladeToWaste forzando di non fare i cubetti + if #vCuts == 0 then + OptionalParameters.bDisableDicing = true + Machinings, Result = BLADETOWASTE.Make( Proc, Part, OptionalParameters) + return Machinings, Result + end + + bIsDicingOk, Machinings, bMoveAfterSplit = CalculateDiceMachinings( vCuts, Parameters) + end + if not bIsDicingOk then Result = FeatureLib.GetStrategyResultNotApplicable() return {}, Result