- in MachiningLib si GetBladeEngagement si controlla la collisione con tutti gli assi in modalità standard o DownUp
This commit is contained in:
+43
-23
@@ -288,45 +288,65 @@ 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
|
||||
function MachiningLib.GetBladeEngagement( Face, Edge, Part, Tool, dDepthToMachine, bCollisionCheckForDownUpOnly)
|
||||
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 altre condizioni che fanno fallire il taglio
|
||||
-- la normale della faccia permette di lavorare in modo standard, ma potrebbero esserci collisioni che fanno fallire il taglio
|
||||
if not IsFaceZOutOfRange( Face.vtN, Tool) then
|
||||
|
||||
-- TODO La riduzione percorso cambia questo test?
|
||||
-- TODO da completare questo test
|
||||
-- TODO rimuovere timer qua
|
||||
TIMER:startElapsed( 'CollisionZ')
|
||||
local bCollisionFoundZ, bMoveAfterSplitZ = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine)
|
||||
TIMER:stopElapsed( 'CollisionZ')
|
||||
|
||||
--local bCollisionFound, bMoveAfterSplit = PreCollisionLib.CheckCollisionAxisAB( Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine)
|
||||
local bCollisionFound, bMoveAfterSplit = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine)
|
||||
if bCollisionCheckForDownUpOnly or not bCollisionFound 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)
|
||||
|
||||
return not bCollisionFound, sBladeEngagement, bMoveAfterSplit
|
||||
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)
|
||||
|
||||
-- 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
|
||||
|
||||
return true, sBladeEngagement, bMoveAfterSplit
|
||||
end
|
||||
end
|
||||
|
||||
-- faccia non lavorabile in modo standard: si verifica se il DownUp è fattibile
|
||||
|
||||
-- la normale della faccia non permette il DownUp: non lavorabile in DownUp (se taglio DownUp la faccia è lavorata al contrario, vtN opposta)
|
||||
if IsFaceZOutOfRange( -Face.vtN, Tool) then
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- orientamento faccia / utensile compatibili con DownUp: lavorabile
|
||||
--local bCollisionFound, bMoveAfterSplit = PreCollisionLib.CheckCollisionAxisAB( Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine)
|
||||
local bCollisionFound, bMoveAfterSplit = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine)
|
||||
if not bCollisionFound then
|
||||
|
||||
sBladeEngagement = 'DownUp'
|
||||
|
||||
return true, sBladeEngagement, bMoveAfterSplit
|
||||
local bCollisionFoundZ, bMoveAfterSplitZ = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine)
|
||||
if bCollisionFoundZ then
|
||||
return false
|
||||
end
|
||||
|
||||
return false
|
||||
local bCollisionFoundC, bMoveAfterSplitC = PreCollisionLib.CheckCollisionWithAxis( 'C', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine)
|
||||
if bCollisionFoundC then
|
||||
return false
|
||||
end
|
||||
|
||||
local bCollisionFoundAB, bMoveAfterSplitAB = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, -Face.vtN, Part, Tool, dDepthToMachine)
|
||||
if bCollisionFoundAB then
|
||||
return false
|
||||
end
|
||||
|
||||
-- se si è arrivati qui il DownUp è fattibile
|
||||
sBladeEngagement = 'DownUp'
|
||||
local bMoveAfterSplit = bMoveAfterSplitZ or bMoveAfterSplitC or bMoveAfterSplitAB
|
||||
|
||||
return true, sBladeEngagement, bMoveAfterSplit
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -472,7 +492,7 @@ function MachiningLib.FindBlade( Proc, ToolSearchParameters)
|
||||
local bForceLongcutBlade = ToolSearchParameters.bForceLongcutBlade or false
|
||||
local EdgeToMachine = ToolSearchParameters.EdgeToMachine
|
||||
local Part = ToolSearchParameters.Part
|
||||
local bCollisionCheckForDownUpOnly = ToolSearchParameters.bCollisionCheckForDownUpOnly or false
|
||||
local bIsDicing = ToolSearchParameters.bIsDicing or false
|
||||
|
||||
local nBestToolIndex
|
||||
local dBestToolResidualDepth = 0
|
||||
@@ -498,7 +518,7 @@ function MachiningLib.FindBlade( Proc, ToolSearchParameters)
|
||||
if FaceToMachine and EdgeToMachine and Part and dElevation then
|
||||
local bIsBladeOk = false
|
||||
TIMER:startElapsed( 'GetBladeEngagement')
|
||||
bIsBladeOk, sCurrentBladeEngagement, bCurrentMoveAfterSplit = MachiningLib.GetBladeEngagement( FaceToMachine, EdgeToMachine, Part, TOOLS[i], dElevation, bCollisionCheckForDownUpOnly)
|
||||
bIsBladeOk, sCurrentBladeEngagement, bCurrentMoveAfterSplit = MachiningLib.GetBladeEngagement( FaceToMachine, EdgeToMachine, Part, TOOLS[i], dElevation, bIsDicing)
|
||||
TIMER:stopElapsed( 'GetBladeEngagement')
|
||||
-- orientamento non raggiungibile
|
||||
if not bIsBladeOk then
|
||||
|
||||
Reference in New Issue
Block a user