in MachiningLib.GetBladeEngagement refactoring
This commit is contained in:
+45
-30
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user