- in MachiningLib miglioramenti a GetBladeEngagement

This commit is contained in:
luca.mazzoleni
2025-12-02 10:27:59 +01:00
parent cb60773216
commit 4bbadb8581
+30 -31
View File
@@ -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
-------------------------------------------------------------------------------------------------------------