- MachiningLib, PreSimulationLib e FACEBYBLADE modificate per introduzione check finecorsa (da completare) e check attacchi
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user