diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index 37db86a..33899e0 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -425,6 +425,28 @@ function BeamLib.GetNearestParalOpposite( vtRef, vtNorm) return nil end +------------------------------------------------------------------------------------------------------------- +-- TODO gestire anche altri valori +function BeamLib.GetDirectionFromSCC( nSCC) + local vtSCC + + if nSCC == MCH_SCC.ADIR_XP then + vtSCC = X_AX() + elseif nSCC == MCH_SCC.ADIR_XM then + vtSCC = -X_AX() + elseif nSCC == MCH_SCC.ADIR_YP then + vtSCC = Y_AX() + elseif nSCC == MCH_SCC.ADIR_YM then + vtSCC = -Y_AX() + elseif nSCC == MCH_SCC.ADIR_ZP then + vtSCC = Z_AX() + elseif nSCC == MCH_SCC.ADIR_ZM then + vtSCC = -Z_AX() + end + + return vtSCC +end + ------------------------------------------------------------------------------------------------------------- -- Funzione per determinare se la faccia ha lati molto corti (trascurabili) ed è quindi approssimabile ad una 3 facce function BeamLib.Is3EdgesApprox( Proc, idFace, nAddGrpId) diff --git a/LuaLibs/PreCollisionLib.lua b/LuaLibs/PreCollisionLib.lua index ca7530b..b6f2667 100644 --- a/LuaLibs/PreCollisionLib.lua +++ b/LuaLibs/PreCollisionLib.lua @@ -6,6 +6,7 @@ local PreCollisionLib = {} -- Include require( 'EgtBase') +local BeamLib = require( 'BeamLib') -- Carico i dati globali @@ -53,10 +54,10 @@ end ------------------------------------------------------------------------------------------------------------- -- calcolo pivot in riferimento globale -local function GetGlobalPivot( ptRef, vtSCC, vtHead, vtMovePivot) +local function GetGlobalPivot( ptRef, vtToolSCC, vtHead, vtMovePivot) -- frame solidale all'utensile (lo stesso in cui vtMovePivot è definito) - local frTool = Frame3d( ptRef, vtHead, vtSCC) + local frTool = Frame3d( ptRef, vtHead, vtToolSCC) local vtMovePivotGlob = Vector3d( vtMovePivot) vtMovePivotGlob:toGlob( frTool) local ptPivot = ptRef + vtMovePivotGlob @@ -124,11 +125,18 @@ 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 - -- TODO questo va girato di verso in base a SCC - local vtSCC = Edge.vtN + -- vtToolSCC è la direzione vtTool con verso dato dalla direzione SCC (punta verso il lato in cui c'è l'asse C/aggregato) + local nSCC = Tool.SetupInfo.GetSCC( Edge.vtN, Edge.ptEnd - Edge.ptStart, 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) + end -- direzioni in cui fare il check - local PreCollisionData = Tool.SetupInfo.GetPreCollisionData( sAxis, vtSCC, vtHead) + local PreCollisionData = Tool.SetupInfo.GetPreCollisionData( sAxis, vtToolSCC, vtHead) local bMoveAfterSplit = false @@ -143,7 +151,7 @@ function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, P for j = 1, #PreCollisionData do -- pivot in globale - local ptPivot = GetGlobalPivot( ToolExitPoints[i], vtSCC, vtHead, PreCollisionData[j].vtMovePivot) + local ptPivot = GetGlobalPivot( ToolExitPoints[i], vtToolSCC, vtHead, PreCollisionData[j].vtMovePivot) -- orientamento del riferimento locale local vtDirectionX = PreCollisionData[j].Directions.vtDirectionX diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index 8772d7c..4c7924d 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -164,7 +164,7 @@ end -- TODO implementare SCC in funzione macchina -local function GetSCC( vtMachiningDirection, vtEdgeDirection, vtNFace) +function FACEBYBLADE.GetSCC( vtMachiningDirection, vtEdgeDirection, vtNFace) local nSCC = MCH_SCC.NONE if abs( vtMachiningDirection:getX()) > abs( vtMachiningDirection:getY()) - GEO.EPS_SMALL then @@ -264,6 +264,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar -- lunghezze, direzioni e punti caratteristici della lavorazione e del lato lavorato Cutting.dEdgeLength = EdgeToMachine.dLength + -- TODO questa deve essere ptEnd - ptStart Cutting.vtEdgeDirection = EdgeToMachine.vtN ^ FaceToMachine.vtN Cutting.vtToolDirection = EdgeToMachine.vtN Cutting.ptEdge1, Cutting.ptEdge2 = EdgeToMachine.ptStart, EdgeToMachine.ptEnd @@ -507,7 +508,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar end -- SCC - Cutting.nSCC = GetSCC( Cutting.vtToolDirection, Cutting.vtEdgeDirection, FaceToMachine.vtN) + Cutting.nSCC = TOOLS[Cutting.nToolIndex].SetupInfo.GetSCC( Cutting.vtToolDirection, Cutting.vtEdgeDirection, FaceToMachine.vtN) -- asse bloccato Cutting.sBlockedAxis = BeamLib.GetBlockedAxis( Cutting.nToolIndex, 'perpendicular', Part.b3Raw, FaceToMachine.vtN, EgtIf( FaceToMachine.vtN:getX() > 0, X_AX(), -X_AX()))