From 4bbadb8581ecfde56697bd01fe499b405a43b3ad Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 2 Dec 2025 10:27:59 +0100 Subject: [PATCH] - in MachiningLib miglioramenti a GetBladeEngagement --- LuaLibs/MachiningLib.lua | 61 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index c689c8e..dcf909b 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -287,33 +287,30 @@ end ------------------------------------------------------------------------------------------------------------- -- ritorna se la faccia e il lato sono lavorabili e, se sì, il modo di lavorare (standard/DownUp) -- TODO si dovrà decidere come tagliare anche se pezzo corto (il motore non deve ingombrare con il pinzaggio) --- valutare se restituire, se disponibili, entrambe le soluzioni e demandare la decisione alla FaceByBlade +-- TODO da gestire riduzione percorso function MachiningLib.GetBladeEngagement( Face, Edge, Part, Tool, dDepthToMachine, bIsDicing) - local sBladeEngagement = 'Standard' -- la normale della faccia permette di lavorare in modo standard, ma potrebbero esserci collisioni che fanno fallire il taglio + -- se cubetti si controlla solo asse Z e si passa subito al DownUp (ci sarebbe collisione con il materiale già rimosso) if not IsFaceZOutOfRange( Face.vtN, Tool) then - -- se cubetti si controlla solo asse Z (ci sarebbe collisione con il materiale già rimosso) - if bIsDicing then - local bCollisionFound, bMoveAfterSplit = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) + local bCollisionFound + local bMoveAfterSplitZ, bMoveAfterSplitC, bMoveAfterSplitAB - return not bCollisionFound, sBladeEngagement, bMoveAfterSplit + bCollisionFound, bMoveAfterSplitZ = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) + + if not ( bIsDicing or bCollisionFound) then + bCollisionFound, bMoveAfterSplitC = PreCollisionLib.CheckCollisionWithAxis( 'C', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) end - local bMoveAfterSplit = false - - local bCollisionFoundZ, bMoveAfterSplitZ = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) - - local bCollisionFoundC, bMoveAfterSplitC = PreCollisionLib.CheckCollisionWithAxis( 'C', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) - - local bCollisionFoundAB, bMoveAfterSplitAB = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) + if not ( bIsDicing or bCollisionFound) then + bCollisionFound, bMoveAfterSplitAB = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) + end -- se nessuna collisione trovata si ritorna lavorazione fattibile, altrimenti si proseguirà al DownUp - if not ( bCollisionFoundZ or bCollisionFoundC or bCollisionFoundAB) then - if bMoveAfterSplitZ or bMoveAfterSplitC or bMoveAfterSplitAB then - bMoveAfterSplit = true - end + if not bCollisionFound then + local sBladeEngagement = 'Standard' + local bMoveAfterSplit = bMoveAfterSplitZ or bMoveAfterSplitC or bMoveAfterSplitAB return true, sBladeEngagement, bMoveAfterSplit end @@ -327,26 +324,28 @@ function MachiningLib.GetBladeEngagement( Face, Edge, Part, Tool, dDepthToMachin return false end - local bCollisionFoundZ, bMoveAfterSplitZ = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine) - if bCollisionFoundZ then - return false + local bCollisionFound + local bMoveAfterSplitZ, bMoveAfterSplitC, bMoveAfterSplitAB + + bCollisionFound, bMoveAfterSplitZ = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine) + + if not bCollisionFound then + bCollisionFound, bMoveAfterSplitC = PreCollisionLib.CheckCollisionWithAxis( 'C', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine) end - local bCollisionFoundC, bMoveAfterSplitC = PreCollisionLib.CheckCollisionWithAxis( 'C', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine) - if bCollisionFoundC then - return false + if not bCollisionFound then + bCollisionFound, bMoveAfterSplitAB = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine) end - local bCollisionFoundAB, bMoveAfterSplitAB = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine) - if bCollisionFoundAB then - return false + -- se si è arrivati qui senza collisioni il DownUp è fattibile + if not bCollisionFound then + local sBladeEngagement = 'DownUp' + local bMoveAfterSplit = bMoveAfterSplitZ or bMoveAfterSplitC or bMoveAfterSplitAB + + return true, sBladeEngagement, bMoveAfterSplit end - -- se si è arrivati qui il DownUp è fattibile - sBladeEngagement = 'DownUp' - local bMoveAfterSplit = bMoveAfterSplitZ or bMoveAfterSplitC or bMoveAfterSplitAB - - return true, sBladeEngagement, bMoveAfterSplit + return false end -------------------------------------------------------------------------------------------------------------