in MachiningLib.GetBladeEngagement refactoring

This commit is contained in:
luca.mazzoleni
2025-12-05 11:42:00 +01:00
parent e2a2d0fd4e
commit f426311b28
+45 -30
View File
@@ -284,12 +284,49 @@ local function IsFaceZOutOfRange( vtNFace, Tool)
return false
end
-------------------------------------------------------------------------------------------------------------
local function CheckCollision( sBladeEngagement, Parameters, OptionalParameters)
local bCollisionFound
local bMoveAfterSplitZ, bMoveAfterSplitC, bMoveAfterSplitAB
-- parametri opzionali, in parte da far transitare
OptionalParameters = OptionalParameters or {}
local OptionalParametersCheckCollisionWithAxis = {}
OptionalParametersCheckCollisionWithAxis.bCheckOnlyRestlength = false
if OptionalParameters.MachiningPoints then
OptionalParametersCheckCollisionWithAxis.MachiningPoints = BeamLib.TableCopyDeep( OptionalParameters.MachiningPoints)
end
-- asse Z si controlla sempre
bCollisionFound, bMoveAfterSplitZ = PreSimulationLib.CheckCollisionWithAxis( 'Z', Parameters, OptionalParametersCheckCollisionWithAxis)
-- se cubetti in modalità standard (no DownUp), gli assi AB e C si controllano solo con grezzo (ci sarebbe collisione con il materiale già rimosso controllando AB e C con pezzo)
if sBladeEngagement == 'Standard' then
OptionalParametersCheckCollisionWithAxis.bCheckOnlyRestlength = OptionalParameters.bIsDicing or false
end
if not bCollisionFound then
bCollisionFound, bMoveAfterSplitAB = PreSimulationLib.CheckCollisionWithAxis( 'AB', Parameters, OptionalParametersCheckCollisionWithAxis)
end
if not bCollisionFound then
bCollisionFound, bMoveAfterSplitC = PreSimulationLib.CheckCollisionWithAxis( 'C', Parameters, OptionalParametersCheckCollisionWithAxis)
end
local bMoveAfterSplit = bMoveAfterSplitZ or bMoveAfterSplitC or bMoveAfterSplitAB
return bCollisionFound, bMoveAfterSplit
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)
-- TODO da gestire riduzione percorso
function MachiningLib.GetBladeEngagement( Parameters, OptionalParameters)
local sBladeEngagement = 'Standard'
-- parametri obbligatori
local Face = Parameters.Face
local Edge = Parameters.Edge
@@ -302,12 +339,8 @@ function MachiningLib.GetBladeEngagement( Parameters, OptionalParameters)
local bIsDicing = OptionalParameters.bIsDicing or false
-- la normale della faccia permette di lavorare in modo standard, ma potrebbero esserci collisioni che fanno fallire il taglio
-- se cubetti si controlla con pezzo solo asse Z e grezzo con tutti (ci sarebbe collisione con il materiale già rimosso controllando AB e C con pezzo)
if not IsFaceZOutOfRange( Face.vtN, Tool) then
local bCollisionFound
local bMoveAfterSplitZ, bMoveAfterSplitC, bMoveAfterSplitAB
local CheckCollisionParameters = {
Edge = Edge,
vtNFace = Face.vtN,
@@ -316,27 +349,21 @@ function MachiningLib.GetBladeEngagement( Parameters, OptionalParameters)
Tool = Tool,
dDepthToMachine = dDepthToMachine
}
local CheckCollisionOptionalParameters = {
bIsDicing = bIsDicing
}
bCollisionFound, bMoveAfterSplitZ = PreSimulationLib.CheckCollisionWithAxis( 'Z', CheckCollisionParameters)
if not bCollisionFound then
bCollisionFound, bMoveAfterSplitC = PreSimulationLib.CheckCollisionWithAxis( 'C', CheckCollisionParameters, { bCheckOnlyRestlength = bIsDicing})
end
if not bCollisionFound then
bCollisionFound, bMoveAfterSplitAB = PreSimulationLib.CheckCollisionWithAxis( 'AB', CheckCollisionParameters, { bCheckOnlyRestlength = bIsDicing})
end
local bCollisionFound, bMoveAfterSplit = CheckCollision( sBladeEngagement, CheckCollisionParameters, CheckCollisionOptionalParameters)
-- se nessuna collisione trovata si ritorna lavorazione fattibile, altrimenti si proseguirà al DownUp
if not bCollisionFound then
local sBladeEngagement = 'Standard'
local bMoveAfterSplit = bMoveAfterSplitZ or bMoveAfterSplitC or bMoveAfterSplitAB
return true, sBladeEngagement, bMoveAfterSplit, sLeadInOutType
end
end
-- faccia non lavorabile in modo standard: si verifica se il DownUp è fattibile
sBladeEngagement = 'DownUp'
-- 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
@@ -344,9 +371,6 @@ function MachiningLib.GetBladeEngagement( Parameters, OptionalParameters)
return false
end
local bCollisionFound
local bMoveAfterSplitZ, bMoveAfterSplitC, bMoveAfterSplitAB
local CheckCollisionParameters = {
Edge = Edge,
vtNFace = Face.vtN,
@@ -355,21 +379,12 @@ function MachiningLib.GetBladeEngagement( Parameters, OptionalParameters)
Tool = Tool,
dDepthToMachine = dDepthToMachine
}
local CheckCollisionOptionalParameters = {}
bCollisionFound, bMoveAfterSplitZ = PreSimulationLib.CheckCollisionWithAxis( 'Z', CheckCollisionParameters)
local bCollisionFound, bMoveAfterSplit = CheckCollision( sBladeEngagement, CheckCollisionParameters, CheckCollisionOptionalParameters)
-- se nessuna collisione il DownUp è fattibile
if not bCollisionFound then
bCollisionFound, bMoveAfterSplitC = PreSimulationLib.CheckCollisionWithAxis( 'C', CheckCollisionParameters)
end
if not bCollisionFound then
bCollisionFound, bMoveAfterSplitAB = PreSimulationLib.CheckCollisionWithAxis( 'AB', CheckCollisionParameters)
end
-- 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, sLeadInOutType
end