- in PreSimulationLib refactoring di CheckOutOfStroke e aggiunta la funzione GetPointOnToolTipCenter per calcolare il punto corretto da passare, a partire dal punto di lavorazione; adeguata MachiningLib

This commit is contained in:
luca.mazzoleni
2025-12-23 11:27:56 +01:00
parent 608a9c63c8
commit c068479ec1
4 changed files with 50 additions and 27 deletions
+13 -17
View File
@@ -78,6 +78,12 @@ local function GetRestlengthSurfTm( Part)
return idRestLengthBoxTm
end
-------------------------------------------------------------------------------------------------------------
function PreSimulationLib.GetPointOnToolTipCenter( ptPointAtDepth, vtHead, vtNFace, vtToolOffset, Tool)
return ptPointAtDepth + vtToolOffset * Tool.dDiameter / 2 + vtNFace * EgtIf( AreSameVectorApprox( vtHead, vtNFace), 0, Tool.dThickness)
end
-------------------------------------------------------------------------------------------------------------
-- calcolo punto sull'uscita testa a partire dal punto di lavorazione o di attacco sul diametro utensile
local function GetToolExitPoint( ptMachining, vtNEdge, vtHead, Tool, bIsDownUp)
@@ -131,15 +137,10 @@ local function GetCollisionPointsToCheck( Edge, dDepthToMachine)
end
-------------------------------------------------------------------------------------------------------------
local function CheckOutOfStrokePoint( ptOnFace, vtHead, vtNFace, vtNEdge, nSCC, Tool)
local bIsDownUp = AreOppositeVectorApprox( vtNFace, vtHead)
local ptOnToolTipCenter = ptOnFace + vtNEdge * Tool.dDiameter / 2 + vtNFace * EgtIf( bIsDownUp, Tool.dThickness, 0)
local function CheckOutOfStrokePoint( ptOnToolTipCenter, vtHead, nSCC, Tool)
-- impostazione utensile
EgtSetCalcTool( Tool.sName, Tool.sHead, Tool.nExit)
EgtLoadTool( Tool.sHead, Tool.nExit, Tool.sName)
-- settaggio SCC per discriminare soluzioni multiple
EgtSetCalcSolCh( nSCC)
@@ -186,17 +187,16 @@ local function CheckOutOfStrokePoint( ptOnFace, vtHead, vtNFace, vtNEdge, nSCC,
-- siccome non si sa a priori il numero di assi lineari e rotativi, si aggiungono tutti a Args in ordine
-- Args viene poi esplosa in modo da passare a EgtVerifyOutstroke i valori separati
local Args = {}
for i = 1, #LinearAxes do
Args[#Args+1] = LinearAxes[i].dValue
end
for i = 1, #RotativeAxes do
Args[#Args+1] = RotativeAxes[i].dValue
end
local bAllAxesInStroke = EgtVerifyOutstroke( table.unpack( Args))
-- extracorsa
if not bAllAxesInStroke then
if EgtGetDebugLevel() >= 3 then
@@ -216,22 +216,18 @@ local function CheckOutOfStrokePoint( ptOnFace, vtHead, vtNFace, vtNEdge, nSCC,
end
-------------------------------------------------------------------------------------------------------------
-- check extracorsa: se non vengono passati punti si controllano inizio e fine del lato
function PreSimulationLib.CheckOutOfStroke( PointsToCheck, Parameters)
-- check extracorsa
function PreSimulationLib.CheckOutOfStroke( PointsOnToolTipCenter, Parameters)
-- parametri obbligatori
local Edge = Parameters.Edge
local vtNFace = Parameters.vtNFace
local vtHead = Parameters.vtHead
local Tool = Parameters.Tool
-- SCC
local nSCC = Tool.SetupInfo.GetSCC( Edge.vtN, Edge.vtEdge, vtNFace)
local nSCC = Parameters.nSCC
-- check collisione sui punti in centro lama su naso mandrino o aggregato. In base a direzione e punto
for i = 1, #PointsToCheck do
for i = 1, #PointsOnToolTipCenter do
local bOutOfStroke = CheckOutOfStrokePoint( PointsToCheck[i], vtHead, vtNFace, Edge.vtN, nSCC, Tool)
local bOutOfStroke = CheckOutOfStrokePoint( PointsOnToolTipCenter[i], vtHead, nSCC, Tool)
-- se trovato extracorsa inutile procedere con gli altri punti
if bOutOfStroke then