- MachiningLib, PreSimulationLib e FACEBYBLADE modificate per introduzione check finecorsa (da completare) e check attacchi

This commit is contained in:
luca.mazzoleni
2025-12-05 18:31:35 +01:00
parent ae30cb5736
commit c18e80a70d
3 changed files with 111 additions and 54 deletions
+30 -25
View File
@@ -90,11 +90,15 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature)
LeadOut.dPerpDistance = 0
LeadIn.dTangentDistance = 0
LeadOut.dTangentDistance = 0
-- TODO qui dovrebbe essere sempre perpendicolare tranne se bNeedTangentLeadInOut, che il GetBladeEngagement deve settare sempre correttamente per evitare sia messo in casi impropri
-- il problema è che se non è controllato bene dal GetBladeEngagement, che non ha tutte le informazioni(?), si potrebbe incorrere in scelte errate
if Machining.bIsStartClosed
or Machining.bIsEndClosed
or Machining.CloneStepsRadial.nCount > 1
or Machining.Steps.nCount > 1
or bIsSplitFeature then
or bIsSplitFeature
or not Machining.bNeedTangentLeadInOut then
Machining.sLeadInOutType = 'Perpendicular'
if AreSameVectorApprox( Machining.vtToolDirection, EdgeToMachine.vtN) then
@@ -105,23 +109,13 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature)
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
LeadIn.dPerpDistance = 1
LeadOut.dPerpDistance = 1
else
-- TODO da rimuovere, già inserito in GetLeadInOutType
if abs( Machining.vtEdgeDirection:getZ()) > 0.707 then
LeadIn.dPerpDistance = 1
LeadOut.dPerpDistance = 1
else
LeadIn.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2 + BeamData.CUT_SIC
LeadOut.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2 + BeamData.CUT_SIC
end
end
Machining.sLeadInOutType = 'Tangent'
LeadIn.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2 + BeamData.CUT_SIC
LeadOut.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2 + BeamData.CUT_SIC
end
LeadIn.dElevation = 0
LeadOut.dElevation = 0
LeadIn.dCompLength = 0
@@ -165,7 +159,7 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature)
end
-- TODO implementare SCC in funzione macchina
-- TODO da eliminare, sostituita da funzione macchina
function FACEBYBLADE.GetSCC( vtMachiningDirection, vtEdgeDirection, vtNFace)
local nSCC = MCH_SCC.NONE
@@ -286,9 +280,15 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
local BladeEngagementOptionalParameters = {
bIsDicing = bIsDicing
}
local Engagement
TIMER:startElapsed( 'GetBladeEngagement')
Cutting.bIsApplicable, Cutting.sBladeEngagement, Cutting.bMoveAfterSplit = MachiningLib.GetBladeEngagement( BladeEngagementParameters, BladeEngagementOptionalParameters)
Cutting.bIsApplicable, Engagement = MachiningLib.GetBladeEngagement( BladeEngagementParameters, BladeEngagementOptionalParameters)
TIMER:stopElapsed( 'GetBladeEngagement')
if Cutting.bIsApplicable then
Cutting.sBladeEngagement = Engagement.sBladeEngagement
Cutting.bMoveAfterSplit = Engagement.bMoveAfterSplit
Cutting.bNeedTangentLeadInOut = Engagement.bNeedTangentLeadInOut
end
-- utensile da cercare: si prende la lama migliore che può effettuare questo taglio, senza particolari analisi
else
@@ -303,8 +303,11 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
local ToolInfo = MachiningLib.FindBlade( Proc, ToolSearchParameters)
Cutting.nToolIndex = ToolInfo.nToolIndex
Cutting.sBladeEngagement = ToolInfo.sBladeEngagement
Cutting.bMoveAfterSplit = ToolInfo.bMoveAfterSplit
if Cutting.nToolIndex then
Cutting.sBladeEngagement = ToolInfo.Engagement.sBladeEngagement
Cutting.bMoveAfterSplit = ToolInfo.Engagement.bMoveAfterSplit
Cutting.bNeedTangentLeadInOut = ToolInfo.Engagement.bNeedTangentLeadInOut
end
-- se non trovato utensile, la lavorazione non è applicabile
if not Cutting.nToolIndex then
@@ -380,7 +383,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
bIsDicing = bIsDicing
}
TIMER:startElapsed( 'GetBladeEngagement')
local bIsApplicableOpposite, sBladeEngagementOpposite, bMoveAfterSplit = MachiningLib.GetBladeEngagement( BladeEngagementParameters, BladeEngagementOptionalParameters)
local bIsApplicableOpposite, EngagementOpposite = MachiningLib.GetBladeEngagement( BladeEngagementParameters, BladeEngagementOptionalParameters)
TIMER:stopElapsed( 'GetBladeEngagement')
-- taglio opposto non fattibile
@@ -407,8 +410,9 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
-- la direzione di percorrenza del lato deve essere verso l'alto; bInvert va considerata perchè inverte la direzione di percorrenza
-- il BladeEngagement non deve cambiare, altrimenti è inutile invertire la direzione
if ( sBladeEngagementOpposite == Cutting.sBladeEngagement)
and ( bMoveAfterSplit == Cutting.bMoveAfterSplit)
if ( EngagementOpposite.sBladeEngagement == Cutting.sBladeEngagement)
and ( EngagementOpposite.bMoveAfterSplit == Cutting.bMoveAfterSplit)
and ( EngagementOpposite.bNeedTangentLeadInOut == Cutting.bNeedTangentLeadInOut)
and ( Cutting.bInvert and Cutting.vtEdgeDirection:getZ() > 100 * GEO.EPS_SMALL)
or ( ( not Cutting.bInvert) and Cutting.vtEdgeDirection:getZ() < -100 * GEO.EPS_SMALL) then
@@ -487,11 +491,12 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
bIsDicing = bIsDicing
}
TIMER:startElapsed( 'GetBladeEngagement')
local bIsApplicable, sBladeEngagement, bMoveAfterSplit = MachiningLib.GetBladeEngagement( BladeEngagementParameters, BladeEngagementOptionalParameters )
local bIsApplicable, CurrentEngagement = MachiningLib.GetBladeEngagement( BladeEngagementParameters, BladeEngagementOptionalParameters )
TIMER:stopElapsed( 'GetBladeEngagement')
-- se non fattibile o cambiano le condizioni BladeEngagement, non si riduce
if not ( bIsApplicable and ( sBladeEngagement == Cutting.sBladeEngagement) and ( bMoveAfterSplit == Cutting.bMoveAfterSplit)) then
if not ( bIsApplicable and ( CurrentEngagement.sBladeEngagement == Cutting.sBladeEngagement) and ( CurrentEngagement.bMoveAfterSplit == Cutting.bMoveAfterSplit)
and ( CurrentEngagement.bNeedTangentLeadInOut == Cutting.bNeedTangentLeadInOut)) then
Cutting.sEdgeUsage = 'Standard'
dDepthToMachine = Cutting.dDepthToMachine
end