diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index dcf909b..1111e81 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -291,7 +291,7 @@ end function MachiningLib.GetBladeEngagement( Face, Edge, Part, Tool, dDepthToMachine, bIsDicing) -- la normale della faccia permette di lavorare in modo standard, ma potrebbero esserci collisioni che fanno fallire il taglio - -- se cubetti si controlla solo asse Z e si passa subito al DownUp (ci sarebbe collisione con il materiale già rimosso) + -- se cubetti si controlla con pezzo solo asse Z e grezzo con tutti (ci sarebbe collisione con il materiale già rimosso controllando AB e C con pezzo) if not IsFaceZOutOfRange( Face.vtN, Tool) then local bCollisionFound @@ -299,12 +299,12 @@ function MachiningLib.GetBladeEngagement( Face, Edge, Part, Tool, dDepthToMachin bCollisionFound, bMoveAfterSplitZ = PreCollisionLib.CheckCollisionWithAxis( 'Z', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) - if not ( bIsDicing or bCollisionFound) then - bCollisionFound, bMoveAfterSplitC = PreCollisionLib.CheckCollisionWithAxis( 'C', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) + if not bCollisionFound then + bCollisionFound, bMoveAfterSplitC = PreCollisionLib.CheckCollisionWithAxis( 'C', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine, bIsDicing) end - if not ( bIsDicing or bCollisionFound) then - bCollisionFound, bMoveAfterSplitAB = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine) + if not bCollisionFound then + bCollisionFound, bMoveAfterSplitAB = PreCollisionLib.CheckCollisionWithAxis( 'AB', Edge, Face.vtN, Face.vtN, Part, Tool, dDepthToMachine, bIsDicing) end -- se nessuna collisione trovata si ritorna lavorazione fattibile, altrimenti si proseguirà al DownUp diff --git a/LuaLibs/PreCollisionLib.lua b/LuaLibs/PreCollisionLib.lua index 5101283..4f89a25 100644 --- a/LuaLibs/PreCollisionLib.lua +++ b/LuaLibs/PreCollisionLib.lua @@ -75,8 +75,8 @@ local function GetMachiningPoints( Edge, dDepthToMachine) end ------------------------------------------------------------------------------------------------------------- --- si controlla la collisione con il carro Z nei 3 piani principali dell'asse sAxis. Se c'è collisione in tutti i piani, l'asse sarà in collisione. -function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, Part, Tool, dDepthToMachine) +-- controllo collisione con verifica intersezione trimesh e geometrie da macchina +function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, Part, Tool, dDepthToMachine, bCheckOnlyRestlength) -- se normale faccia non parallela a direzione testa c'è qualcosa che non va if not AreSameOrOppositeVectorApprox( vtNFace, vtHead) then @@ -102,7 +102,7 @@ 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 - -- vtC punta sempre verso il corpo dell'asse C + -- vtC punta sempre verso il corpo dell'asse C o verso l'aggregato local vtEdge = Edge.ptEnd - Edge.ptStart vtEdge:normalize() local nSCC = Tool.SetupInfo.GetSCC( Edge.vtN, vtEdge, vtNFace) @@ -119,7 +119,6 @@ function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, P local bMoveAfterSplit = false - -- nel singolo punto notevole si ha collisione se si trova intersezione in tutte le direzioni -- se almeno in un punto c'è collisione con il pezzo si ritorna collisione -- 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 @@ -152,30 +151,26 @@ function PreCollisionLib.CheckCollisionWithAxis( sAxis, Edge, vtNFace, vtHead, P -- check collisione con pezzo local bCollisionFoundPiece = false - - bCollisionFoundPiece = EgtTestSurfaceSurface( Part.idBoxTm, idCollisionSurfTm, BeamData.COLL_SIC) - if not type( bCollisionFoundPiece) == "boolean" then - error( 'EgtTestSurfaceSurface fail') - end - - if EgtGetDebugLevel() >= 3 and bCollisionFoundPiece then - EgtSetColor( idCollisionSurfTm, RED()) + if not bCheckOnlyRestlength then + bCollisionFoundPiece = EgtTestSurfaceSurface( Part.idBoxTm, idCollisionSurfTm, BeamData.COLL_SIC) + if not type( bCollisionFoundPiece) == "boolean" then + error( 'EgtTestSurfaceSurface fail') + end + if EgtGetDebugLevel() >= 3 and bCollisionFoundPiece then + EgtSetColor( idCollisionSurfTm, RED()) + end end -- check collisione con grezzo restante, se con il pezzo non c'è collisione - local bCollisionFoundRestLength = false if not bCollisionFoundPiece then local idRestLengthSurfFr = GetRestlengthSurfTm( Part) - - bCollisionFoundRestLength = EgtTestSurfaceSurface( idRestLengthSurfFr, idCollisionSurfTm, BeamData.COLL_SIC) + local bCollisionFoundRestLength = EgtTestSurfaceSurface( idRestLengthSurfFr, idCollisionSurfTm, BeamData.COLL_SIC) if not type( bCollisionFoundRestLength) == "boolean" then error( 'EgtTestSurfaceSurface fail') end - if EgtGetDebugLevel() >= 3 and bCollisionFoundRestLength then EgtSetColor( idCollisionSurfTm, ORANGE()) end - if bCollisionFoundRestLength then bMoveAfterSplit = true end @@ -193,7 +188,7 @@ end ------------------------------------------------------------------------------------------------------------- -- nel piano perpendicolare alla direzione di taglio, se c'è intersezione tra motore e trave c'è collisione --- TODO da integrare in funzione sopra +-- ATTENZIONE NON PIU' USATA, verificare ed eliminare function PreCollisionLib.CheckCollisionAxisAB( Edge, vtNFace, vtHead, Part, Tool, dDepthToMachine) -- se direzione utensile parallela ad uno degli assi principali non serve alcuna verifica