- in MachiningLib ennesimo refactoring

This commit is contained in:
luca.mazzoleni
2025-12-05 15:09:18 +01:00
parent cd586673c7
commit ae30cb5736
3 changed files with 49 additions and 60 deletions
+45 -57
View File
@@ -285,7 +285,43 @@ local function IsFaceZOutOfRange( vtNFace, Tool)
end
-------------------------------------------------------------------------------------------------------------
local function TestEngagement( sBladeEngagement, Parameters, OptionalParameters)
-- parametri obbligatori (parametri opzionali transitano solamente)
local Face = Parameters.Face
local Edge = Parameters.Edge
local Part = Parameters.Part
local Tool = Parameters.Tool
local dDepthToMachine = Parameters.dDepthToMachine
-- il lato della testa cambia in base all'Engagement
local vtHead
if sBladeEngagement == 'Standard' then
vtHead = Face.vtN
elseif sBladeEngagement == 'DownUp' then
vtHead = -Face.vtN
else
error( 'TestEngagement : unknown engagement')
end
-- se l'angolo non può essere raggiunto dall'utensile si esce subito
if IsFaceZOutOfRange( vtHead, Tool) then
return false
end
local CheckCollisionParameters = {
Edge = Edge,
vtNFace = Face.vtN,
vtHead = vtHead,
Part = Part,
Tool = Tool,
dDepthToMachine = dDepthToMachine
}
local bCollisionFound, bMoveAfterSplit = PreSimulationLib.CheckCollision( sBladeEngagement, CheckCollisionParameters, OptionalParameters)
return not bCollisionFound, bMoveAfterSplit
end
-------------------------------------------------------------------------------------------------------------
-- ritorna se la faccia e il lato sono lavorabili e, se sì, il modo di lavorare (standard/DownUp)
@@ -293,68 +329,20 @@ end
-- TODO da gestire riduzione percorso
function MachiningLib.GetBladeEngagement( Parameters, OptionalParameters)
local sBladeEngagement = 'Standard'
-- test lavorazione faccia in modo standard (no DownUp)
local bIsEngagementOk, bMoveAfterSplit = TestEngagement( 'Standard', Parameters, OptionalParameters)
-- parametri obbligatori
local Face = Parameters.Face
local Edge = Parameters.Edge
local Part = Parameters.Part
local Tool = Parameters.Tool
local dDepthToMachine = Parameters.dDepthToMachine
-- parametri opzionali
OptionalParameters = OptionalParameters or {}
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
if not IsFaceZOutOfRange( Face.vtN, Tool) then
local CheckCollisionParameters = {
Edge = Edge,
vtNFace = Face.vtN,
vtHead = Face.vtN,
Part = Part,
Tool = Tool,
dDepthToMachine = dDepthToMachine
}
local CheckCollisionOptionalParameters = {
bIsDicing = bIsDicing
}
local bCollisionFound, bMoveAfterSplit = PreSimulationLib.CheckCollision( sBladeEngagement, CheckCollisionParameters, CheckCollisionOptionalParameters)
-- se nessuna collisione trovata si ritorna lavorazione fattibile, altrimenti si proseguirà al DownUp
if not bCollisionFound then
return true, sBladeEngagement, bMoveAfterSplit, sLeadInOutType
end
if bIsEngagementOk then
return true, 'Standard', bMoveAfterSplit
end
-- faccia non lavorabile in modo standard: si verifica se il DownUp è fattibile
sBladeEngagement = 'DownUp'
bIsEngagementOk, bMoveAfterSplit = TestEngagement( 'DownUp', Parameters, OptionalParameters)
-- 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
local CheckCollisionParameters = {
Edge = Edge,
vtNFace = Face.vtN,
vtHead = -Face.vtN,
Part = Part,
Tool = Tool,
dDepthToMachine = dDepthToMachine
}
local CheckCollisionOptionalParameters = {}
local bCollisionFound, bMoveAfterSplit = PreSimulationLib.CheckCollision( sBladeEngagement, CheckCollisionParameters, CheckCollisionOptionalParameters)
-- se nessuna collisione il DownUp è fattibile
if not bCollisionFound then
return true, sBladeEngagement, bMoveAfterSplit, sLeadInOutType
if bIsEngagementOk then
return true, 'DownUp', bMoveAfterSplit
end
return false
+2 -3
View File
@@ -224,11 +224,10 @@ function PreSimulationLib.CheckCollision( sBladeEngagement, Parameters, Optional
-- 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
OptionalParametersCheckCollisionWithAxis.MachiningPoints = OptionalParameters.MachiningPoints or nil
-- asse Z si controlla sempre
bCollisionFound, bMoveAfterSplitZ = PreSimulationLib.CheckCollisionWithAxis( 'Z', Parameters, OptionalParametersCheckCollisionWithAxis)
+2
View File
@@ -100,10 +100,12 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature)
if AreSameVectorApprox( Machining.vtToolDirection, EdgeToMachine.vtN) then
LeadIn.dPerpDistance = EdgeToMachine.dElevation + BeamData.CUT_SIC - Machining.dRadialOffset
LeadOut.dPerpDistance = EdgeToMachine.dElevation + BeamData.CUT_SIC - Machining.dRadialOffset
-- casi con lavorazione OppositeToolDirection
else
LeadIn.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset
LeadOut.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset
end
-- TODO conviene usare sempre EdgeToMachine.dElevation + BeamData.CUT_SIC - Machining.dRadialOffset?? tranne nei casi OppositeToolDirection
else
Machining.sLeadInOutType = GetLeadInOutType( Machining)
if Machining.sLeadInOutType == 'Perpendicular' then