- in FACEBYBLADE aggiunta GetLeadInOutType per scelta attacco perpendicolare vs tangenziale, da migliorare

This commit is contained in:
luca.mazzoleni
2025-03-13 16:54:35 +01:00
parent 38eaed18cf
commit 99cbeca5c9
3 changed files with 75 additions and 9 deletions
+1
View File
@@ -526,6 +526,7 @@ local function AddNewMachining( ProcToAdd, MachiningToAdd, AuxiliaryDataToAdd)
end
-------------------------------------------------------------------------------------------------------------
-- TODO funziona solo con attacco perpendicolare - da aggiungere gestione in caso di attacco tangenziale
function MachiningLib.AddMachinings( Proc, Machining, AuxiliaryData)
local bMachiningAdded = false
+1 -1
View File
@@ -29,7 +29,7 @@ local function CompareEdges( EdgeA, EdgeB)
else
if EdgeA.dLength > EdgeB.dLength + 10 * GEO.EPS_SMALL then
return true
elseif EdgeB.dLength < EdgeB.dLength - 10 * GEO.EPS_SMALL then
elseif EdgeA.dLength < EdgeB.dLength - 10 * GEO.EPS_SMALL then
return false
-- se stessa lunghezza si preferiscono i lati più in basso
-- TODO qui dipenderà dalla lama scelta
+73 -8
View File
@@ -12,8 +12,53 @@ local MachiningLib = require( 'MachiningLib')
local FACEBYBLADE = {}
-------------------------------------------------------------------------------------------------------------
local function GetLeadInOutType( Machining)
local sLeadInOutType = ''
local function CalculateLeadInOut( Machining, EdgeToMachine)
if Machining.bIsStartClosed or Machining.bIsEndClosed then
sLeadInOutType = 'Perpendicular'
else
-- testa sopra
if TOOLS[Machining.nToolIndex].SetupInfo.HeadType.bTop then
if Machining.vtToolDirection:getX() < 0.7 then
if Machining.vtToolDirection:getZ() > -0.087
or abs( Machining.vtToolDirection:getX()) < 0.34202 then
sLeadInOutType = 'Perpendicular'
else
sLeadInOutType = 'Tangent'
end
elseif abs( Machining.vtEdgeDirection:getZ()) < 0.7 then
sLeadInOutType = 'Tangent'
else
-- TODO qui attacco tangenziale speciale tutto da un lato
sLeadInOutType = 'Tangent'
end
-- testa sotto
elseif TOOLS[Machining.nToolIndex].SetupInfo.HeadType.bBottom then
if Machining.vtToolDirection:getX() < 0.7 then
if Machining.vtToolDirection:getZ() < -GEO.EPS_SMALL
or abs( Machining.vtToolDirection:getX()) < 0.34202 then
sLeadInOutType = 'Perpendicular'
else
sLeadInOutType = 'Tangent'
end
elseif abs( Machining.vtEdgeDirection:getZ()) > 0.7 then
sLeadInOutType = 'Tangent'
else
-- TODO qui attacco tangenziale speciale tutto da un lato
sLeadInOutType = 'Tangent'
end
-- se testa senza preferenza Top e Bottom si fa sempre attacco tangenziale
else
sLeadInOutType = 'Tangent'
end
end
return sLeadInOutType
end
local function CalculateLeadInOut( Machining, EdgeToMachine, Part)
-- 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
@@ -25,18 +70,38 @@ local function CalculateLeadInOut( Machining, EdgeToMachine)
local LeadIn = {}
local LeadOut = {}
Machining.sLeadInOutType = ''
LeadIn.dStartAddLength = 0
LeadOut.dEndAddLength = 0
LeadIn.nType = MCH_MILL_LI.LINEAR
LeadOut.nType = MCH_MILL_LI.LINEAR
LeadIn.dPerpDistance = 0
LeadOut.dPerpDistance = 0
LeadIn.dTangentDistance = 0
LeadOut.dTangentDistance = 0
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
-- TODO da rimuovere controllo numero step quando si sistema la funzione che crea i cloni
if AreSameOrOppositeVectorApprox( Machining.vtToolDirection, X_AX())
or AreSameOrOppositeVectorApprox( Machining.vtToolDirection, Y_AX())
or AreSameOrOppositeVectorApprox( Machining.vtToolDirection, Z_AX())
or Machining.CloneStepsHorizontal.nCount > 1 then
Machining.sLeadInOutType = 'Perpendicular'
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
else
LeadIn.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset
LeadOut.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset
end
else
LeadIn.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset
LeadOut.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset
Machining.sLeadInOutType = GetLeadInOutType( Machining)
if Machining.sLeadInOutType == 'Perpendicular' then
LeadIn.dPerpDistance = 1
LeadOut.dPerpDistance = 1
else
LeadIn.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2
LeadOut.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2
end
end
LeadIn.dElevation = 0
LeadOut.dElevation = 0
@@ -267,8 +332,6 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
Cutting.nSCC = GetSCC( Cutting.vtToolDirection)
-- asse bloccato
Cutting.sBlockedAxis = BeamLib.GetBlockedAxis( Cutting.nToolIndex, 'perpendicular', Part.b3Raw, FaceToMachine.vtN, EgtIf( FaceToMachine.vtN:getX() > 0, X_AX(), -X_AX()))
-- approccio e retrazione
Cutting.LeadIn, Cutting.LeadOut = CalculateLeadInOut( Cutting, EdgeToMachine)
-- eventuale step orizzontale
Cutting.CloneStepsHorizontal = {}
if not bDisableHorizontalSteps and TOOLS[Cutting.nToolIndex].dSideStep then
@@ -277,6 +340,8 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
Cutting.CloneStepsHorizontal.nCount = 1
Cutting.CloneStepsHorizontal.dStep = 0
end
-- approccio e retrazione
Cutting.LeadIn, Cutting.LeadOut = CalculateLeadInOut( Cutting, EdgeToMachine, Part)
-- lunghezza impronta lama
if Cutting.bIsStartClosed and Cutting.bIsEndClosed then
Cutting.dBladeMarkLength = abs( min( Cutting.LeadIn.dStartAddLength, Cutting.LeadOut.dEndAddLength))