- in PreCollisionLib corretta gestione SCC

This commit is contained in:
luca.mazzoleni
2025-12-01 17:21:48 +01:00
parent d5b4edea14
commit 1e327819c6
+11 -11
View File
@@ -31,10 +31,10 @@ end
-------------------------------------------------------------------------------------------------------------
-- calcolo pivot in riferimento globale
local function GetGlobalPivot( ptRef, vtToolSCC, vtHead, vtMovePivot)
local function GetGlobalPivot( ptRef, vtC, vtHead, vtMovePivot)
-- frame solidale all'utensile (lo stesso in cui vtMovePivot è definito)
local frTool = Frame3d( ptRef, vtHead, vtToolSCC)
local frTool = Frame3d( ptRef, vtHead, vtC)
local vtMovePivotGlob = Vector3d( vtMovePivot)
vtMovePivotGlob:toGlob( frTool)
local ptPivot = ptRef + vtMovePivotGlob
@@ -102,20 +102,20 @@ function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, P
ToolExitPoints[i] = Point3d( MachiningPoints[i] + Edge.vtN * Tool.dDiameter / 2) + vtHead * EgtIf( bIsDownUp, ( Tool.dLength - Tool.dThickness), Tool.dLength)
end
-- vtToolSCC è la direzione vtTool con verso dato dalla direzione SCC (punta verso il lato in cui c'è l'asse C/aggregato)
-- vtC punta sempre verso il corpo dell'asse C
local vtEdge = Edge.ptEnd - Edge.ptStart
vtEdge:normalize()
local nSCC = Tool.SetupInfo.GetSCC( Edge.vtN, vtEdge, vtNFace)
local vtSCC = BeamLib.GetDirectionFromSCC( nSCC)
local vtToolSCC
if Edge.vtN * vtSCC > GEO.EPS_SMALL then
vtToolSCC = Vector3d( Edge.vtN)
else
vtToolSCC = Vector3d( -Edge.vtN)
local vtC = vtHead ^ Tool.SetupInfo.vtRotationAxisC
if vtC:isZero() then
vtC = vtSCC
elseif vtC * vtSCC < GEO.EPS_SMALL then
vtC = -vtC
end
-- punti curva collisione e direzioni check da macchina
local PreCollisionData = Tool.SetupInfo.GetPreCollisionData( sAxis, vtToolSCC, vtHead)
local PreCollisionData = Tool.SetupInfo.GetPreCollisionData( sAxis, vtC, vtHead)
local bMoveAfterSplit = false
@@ -124,7 +124,7 @@ function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, P
-- se non si trova collisione si ritorna se è necessario separare prima di effettuare la lavorazione (ossia non c'è collisione con il pezzo ma c'è con il grezzo restante)
for i = 1, #ToolExitPoints do
local ptPivot = GetGlobalPivot( ToolExitPoints[i], vtToolSCC, vtHead, PreCollisionData.vtMovePivot)
local ptPivot = GetGlobalPivot( ToolExitPoints[i], vtC, vtHead, PreCollisionData.vtMovePivot)
-- orientamento del riferimento locale
local vtDirectionX = PreCollisionData.Directions.vtDirectionX
@@ -165,7 +165,7 @@ function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, P
-- check collisione con grezzo restante, se con il pezzo non c'è collisione
local bCollisionFoundRestLength = false
if not bCollisionFoundPiece then
local idRestLengthSurfFr = GetRestlengthSurfTm( Part, vtDirectionZ)
local idRestLengthSurfFr = GetRestlengthSurfTm( Part)
bCollisionFoundRestLength = EgtTestSurfaceSurface( idRestLengthSurfFr, idCollisionSurfTm, BeamData.COLL_SIC)
if not type( bCollisionFoundRestLength) == "boolean" then