Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a54d2315b |
@@ -931,7 +931,7 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType,
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dCutExtra, b3Box)
|
function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dCutExtra, b3Box, bIsRightWorkside)
|
||||||
-- Mi assicuro che i vettori ingresso/uscita giacciano nel piano
|
-- Mi assicuro che i vettori ingresso/uscita giacciano nel piano
|
||||||
vtV1 = vtV1 - vtV1 * vtN * vtN ; vtV1:normalize()
|
vtV1 = vtV1 - vtV1 * vtN * vtN ; vtV1:normalize()
|
||||||
vtV2 = vtV2 - vtV2 * vtN * vtN ; vtV2:normalize()
|
vtV2 = vtV2 - vtV2 * vtN * vtN ; vtV2:normalize()
|
||||||
@@ -941,7 +941,7 @@ function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vt
|
|||||||
-- Sistema di riferimento intrinseco al taglio
|
-- Sistema di riferimento intrinseco al taglio
|
||||||
local vtX = vtTg ^ vtN
|
local vtX = vtTg ^ vtN
|
||||||
local frFace = Frame3d( ptP1, vtX, vtTg, vtN)
|
local frFace = Frame3d( ptP1, vtX, vtTg, vtN)
|
||||||
local bRight = ( vtX * vtRef > 0)
|
local bRight = EgtIf( bIsRightWorkside == nil, ( vtX * vtRef > 0), bIsRightWorkside)
|
||||||
EgtOutLog( 'LioPerp --> Vref=' .. tostring( vtRef) .. ' V1=' .. tostring( vtV1) .. ' V2=' .. tostring( vtV2), 3)
|
EgtOutLog( 'LioPerp --> Vref=' .. tostring( vtRef) .. ' V1=' .. tostring( vtV1) .. ' V2=' .. tostring( vtV2), 3)
|
||||||
|
|
||||||
-- Versore di attacco e uscita
|
-- Versore di attacco e uscita
|
||||||
|
|||||||
+44
-19
@@ -5662,7 +5662,7 @@ function SawPlusChain.GetLongFaceEdges( Proc, Face)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine, FaceToMachine, b3Raw)
|
function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine, FaceToMachine, b3Raw, Proc)
|
||||||
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
|
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
|
||||||
|
|
||||||
-- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi
|
-- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi
|
||||||
@@ -5720,30 +5720,42 @@ function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine, FaceToMachin
|
|||||||
else
|
else
|
||||||
vtOrthO = -Vector3d( EdgeToMachine.ToolDirection)
|
vtOrthO = -Vector3d( EdgeToMachine.ToolDirection)
|
||||||
end
|
end
|
||||||
local ptP1 = Point3d( FaceToMachine.Edges.BottomEdge.ptStart)
|
local ptP1 = Point3d( EdgeToMachine.ptStart)
|
||||||
local ptP2 = Point3d( FaceToMachine.Edges.BottomEdge.ptEnd)
|
local ptP2 = Point3d( EdgeToMachine.ptEnd)
|
||||||
local vtV1 = -Vector3d( FaceToMachine.Edges.SideEdges.StartEdge.vtEdge)
|
local Edges = BL.GetEdgesInfo( Proc, FaceToMachine.Id)
|
||||||
local vtV2 = Vector3d( FaceToMachine.Edges.SideEdges.EndEdge.vtEdge)
|
local vtV1 = -Vector3d( Edges[EdgeToMachine.PreviousEdgeIndex].vtEdge)
|
||||||
|
local vtV2 = Vector3d( Edges[EdgeToMachine.NextEdgeIndex].vtEdge)
|
||||||
|
|
||||||
local bInvert = Machining.Invert
|
local bInvert = Machining.Invert
|
||||||
if bInvert then
|
if bInvert then
|
||||||
ptP1, ptP2 = ptP2, ptP1
|
ptP1, ptP2 = ptP2, ptP1
|
||||||
vtV1, vtV2 = vtV2, vtV1
|
vtV1, vtV2 = vtV2, vtV1
|
||||||
end
|
end
|
||||||
local vtTg = ptP2 - ptP1 ; vtTg:normalize()
|
local vtTg = ptP2 - ptP1 ; vtTg:normalize()
|
||||||
Machining.vtTg = vtTg
|
|
||||||
Machining.vtV = vtV1
|
|
||||||
|
|
||||||
-- Versore di riferimento
|
-- Versore di riferimento
|
||||||
local vtRef = Vector3d( vtTg)
|
local vtRef = Vector3d( vtTg)
|
||||||
vtRef:rotate( vtN, EgtIf( bInvert, -90, 90))
|
vtRef:rotate( vtN, EgtIf( bInvert, -90, 90))
|
||||||
|
|
||||||
|
local bIsRightWorkside = Machining.Workside == MCH_MILL_WS.RIGHT
|
||||||
|
if bIsRightWorkside ~= bInvert--[[ and EdgeToMachine.Id ~= FaceToMachine.Edges.BottomEdge.Id]] then
|
||||||
|
vtV1 = -vtV1
|
||||||
|
vtV2 = -vtV2
|
||||||
|
end
|
||||||
|
|
||||||
local b3Box = BBox3d( b3Raw)
|
local b3Box = BBox3d( b3Raw)
|
||||||
b3Box:expand( BD.CUT_SIC)
|
b3Box:expand( BD.CUT_SIC)
|
||||||
local ptPa1 = ptP1 + LeadIn.StartAddLength * -vtTg
|
local ptPa1 = ptP1 + LeadIn.StartAddLength * -vtTg
|
||||||
local ptPa2 = ptP2 + LeadOut.EndAddLength * vtTg
|
local ptPa2 = ptP2 + LeadOut.EndAddLength * vtTg
|
||||||
|
|
||||||
LeadIn.TangentDistance, LeadIn.PerpDistance, LeadOut.TangentDistance, LeadOut.PerpDistance = Fbs.CalcLeadInOutPerpGeom( ptPa1, ptPa2, vtV1, vtV2, vtN, ( Machining.Tool.Diameter / 2), vtRef, -Machining.RadialOffset, b3Box)
|
Machining.vtTg = vtTg
|
||||||
|
LeadIn.vtV1 = vtV1
|
||||||
|
LeadOut.vtV2 = vtV2
|
||||||
|
LeadIn.ptP1 = ptP1
|
||||||
|
LeadOut.ptP2 = ptP2
|
||||||
|
Machining.vtOffset = vtRef
|
||||||
|
|
||||||
|
LeadIn.TangentDistance, LeadIn.PerpDistance, LeadOut.TangentDistance, LeadOut.PerpDistance = Fbs.CalcLeadInOutPerpGeom( ptPa1, ptPa2, vtV1, vtV2, vtN, ( Machining.Tool.Diameter / 2), vtRef, -Machining.RadialOffset, b3Box, bIsRightWorkside)
|
||||||
else
|
else
|
||||||
if Machining.IsStartClosed then
|
if Machining.IsStartClosed then
|
||||||
LeadIn.StartAddLength = -dAddLengthToReduce
|
LeadIn.StartAddLength = -dAddLengthToReduce
|
||||||
@@ -6002,7 +6014,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, Edg
|
|||||||
Cutting.BlockedAxis.VtN = FaceToMachine.VtN
|
Cutting.BlockedAxis.VtN = FaceToMachine.VtN
|
||||||
Cutting.BlockedAxis.VtOut = EgtIf( FaceToMachine.VtN:getX() > 0, X_AX(), -X_AX())
|
Cutting.BlockedAxis.VtOut = EgtIf( FaceToMachine.VtN:getX() > 0, X_AX(), -X_AX())
|
||||||
-- approccio e retrazione
|
-- approccio e retrazione
|
||||||
Cutting.LeadIn, Cutting.LeadOut = SawPlusChain.CalculateLeadInOut( Cutting, EdgeToMachine, FaceToMachine, b3Raw)
|
Cutting.LeadIn, Cutting.LeadOut = SawPlusChain.CalculateLeadInOut( Cutting, EdgeToMachine, FaceToMachine, b3Raw, Proc)
|
||||||
-- eventuale step orizzontale
|
-- eventuale step orizzontale
|
||||||
Cutting.HorizontalSteps = {}
|
Cutting.HorizontalSteps = {}
|
||||||
if Cutting.Tool.SideStep then
|
if Cutting.Tool.SideStep then
|
||||||
@@ -6045,16 +6057,29 @@ function SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
|
|||||||
local dOriginalLeadOutTangDistance = Cutting.LeadOut.TangentDistance
|
local dOriginalLeadOutTangDistance = Cutting.LeadOut.TangentDistance
|
||||||
|
|
||||||
for i = Cutting.HorizontalSteps.Count, 1, -1 do
|
for i = Cutting.HorizontalSteps.Count, 1, -1 do
|
||||||
Cutting.RadialOffset = dOriginalRadialOffset + Cutting.HorizontalSteps.StepLength * ( i - 1)
|
local dRadialStep = Cutting.HorizontalSteps.StepLength * ( i - 1)
|
||||||
local dOrthoOffsetStep = ( Cutting.RadialOffset * ( Cutting.vtV * vtTg))
|
local dDirectionProportion = ( Cutting.LeadIn.vtV1 * vtTg)
|
||||||
-- update distanza perpendicolare attacco per contemplare l'offset applicato
|
Cutting.RadialOffset = dOriginalRadialOffset + dRadialStep
|
||||||
Cutting.LeadIn.PerpDistance = dOriginalLeadInPerpDistance - Cutting.RadialOffset
|
local dStepOffset = Cutting.RadialOffset - dOriginalRadialOffset
|
||||||
Cutting.LeadIn.TangentDistance = dOriginalLeadInTangDistance + dOrthoOffsetStep + Cutting.LeadIn.StartAddLength
|
local dTangOffsetStep = ( Cutting.RadialOffset * dDirectionProportion)
|
||||||
Cutting.LeadOut.PerpDistance = dOriginalLeadOutPerpDistance - Cutting.RadialOffset
|
local bTiltedSlot = abs( dDirectionProportion) > 0 + 10 * GEO.EPS_SMALL
|
||||||
Cutting.LeadOut.TangentDistance = dOriginalLeadOutTangDistance - dOrthoOffsetStep - Cutting.LeadOut.EndAddLength
|
local bIsRightWorkside = Cutting.Workside == MCH_MILL_WS.RIGHT
|
||||||
|
|
||||||
Cutting.LeadIn.StartAddLength = Cutting.LeadIn.StartAddLength - dOrthoOffsetStep - Cutting.LeadIn.StartAddLength
|
-- update distanza perpendicolare attacco per contemplare l'offset applicato
|
||||||
Cutting.LeadOut.EndAddLength = Cutting.LeadOut.EndAddLength + dOrthoOffsetStep + Cutting.LeadOut.EndAddLength
|
|
||||||
|
local b3Box = BBox3d( b3Raw)
|
||||||
|
b3Box:expand( BD.CUT_SIC)
|
||||||
|
local ptPa1 = Cutting.LeadIn.ptP1 + ( Cutting.LeadIn.StartAddLength - dTangOffsetStep) * -vtTg + dStepOffset * Cutting.LeadIn.vtV1
|
||||||
|
local ptPa2 = Cutting.LeadOut.ptP2 + ( Cutting.LeadOut.EndAddLength + dTangOffsetStep) * vtTg + dStepOffset * Cutting.LeadOut.vtV2
|
||||||
|
|
||||||
|
Cutting.LeadIn.TangentDistance, Cutting.LeadIn.PerpDistance, Cutting.LeadOut.TangentDistance, Cutting.LeadOut.PerpDistance = Fbs.CalcLeadInOutPerpGeom( ptPa1, ptPa2, Cutting.LeadIn.vtV1, Cutting.LeadOut.vtV2, Cutting.BlockedAxis.VtN, ( Cutting.Tool.Diameter / 2), Cutting.vtOffset, -Cutting.RadialOffset, b3Box, bIsRightWorkside)
|
||||||
|
--Cutting.LeadIn.PerpDistance = dOriginalLeadInPerpDistance - dRadialStep --dOriginalLeadInPerpDistance - Cutting.RadialOffset
|
||||||
|
--Cutting.LeadIn.TangentDistance = dOriginalLeadInTangDistance + dTangOffsetStep --+ Cutting.LeadIn.StartAddLength
|
||||||
|
--Cutting.LeadOut.PerpDistance = dOriginalLeadOutPerpDistance - dRadialStep --- Cutting.RadialOffset
|
||||||
|
--Cutting.LeadOut.TangentDistance = dOriginalLeadOutTangDistance - dTangOffsetStep --- Cutting.LeadOut.EndAddLength
|
||||||
|
|
||||||
|
Cutting.LeadIn.StartAddLength = Cutting.LeadIn.StartAddLength + EgtIf( bTiltedSlot, - ( dTangOffsetStep + Cutting.LeadIn.StartAddLength), 0)
|
||||||
|
Cutting.LeadOut.EndAddLength = Cutting.LeadOut.EndAddLength + EgtIf( bTiltedSlot, ( dTangOffsetStep + Cutting.LeadOut.EndAddLength), 0)
|
||||||
-- applicazione lavorazione
|
-- applicazione lavorazione
|
||||||
bIsCuttingOk, sCuttingApplyMessage = SawPlusChain.ApplyMachining( Cutting, b3Raw)
|
bIsCuttingOk, sCuttingApplyMessage = SawPlusChain.ApplyMachining( Cutting, b3Raw)
|
||||||
-- update messaggi
|
-- update messaggi
|
||||||
|
|||||||
Reference in New Issue
Block a user