|
|
|
@@ -1,4 +1,4 @@
|
|
|
|
|
-- FacesBySaw.lua by Egaltech s.r.l. 2023/12/30
|
|
|
|
|
-- FacesBySaw.lua by Egaltech s.r.l. 2024/01/07
|
|
|
|
|
-- Gestione taglio con lama di feature con una o due facce
|
|
|
|
|
-- 2021/01/06 Cambiato limite per attacco Tg con lama e CalcLeadInOutGeom rinominata in CalcLeadInOutPerpGeom.
|
|
|
|
|
-- 2021/02/03 In taglio lama si accettano anche due lati con deviazione minore di 20deg.
|
|
|
|
@@ -23,6 +23,7 @@
|
|
|
|
|
-- 2023/11/28 In MakeTwo raffinamento calcolo vtRef per casi dubbi.
|
|
|
|
|
-- 2023/12/06 In CalcLeadInOutPerpGeom gestito caso in cui la geometria della feature esce dal grezzo.
|
|
|
|
|
-- 2023/12/30 Modifiche in CalcLeadInOutPerpGeom e CalcLeadInOutTangGeom con uso di EgtCAvToolPosBox.
|
|
|
|
|
-- 2024/01/07 Modifiche per OikosX (BD.TURN == 2).
|
|
|
|
|
|
|
|
|
|
-- Tabella per definizione modulo
|
|
|
|
|
local FacesBySaw = {}
|
|
|
|
@@ -135,6 +136,20 @@ function MakeParallelOne( nSurfId, nFacet, sCutting, dSawDiam, nFaceUse, dVzLimD
|
|
|
|
|
-- imposto allungamenti iniziale e finale
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, -dAccStart)
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, -dAccEnd)
|
|
|
|
|
-- imposto angolo 3° asse rot
|
|
|
|
|
local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5)
|
|
|
|
|
local vtTool
|
|
|
|
|
if nFaceUse == MCH_MILL_FU.PARAL_FRONT then
|
|
|
|
|
vtTool = Y_AX()
|
|
|
|
|
elseif nFaceUse == MCH_MILL_FU.PARAL_BACK then
|
|
|
|
|
vtTool = -Y_AX()
|
|
|
|
|
elseif nFaceUse == MCH_MILL_FU.PARAL_DOWN then
|
|
|
|
|
vtTool = Z_AX()
|
|
|
|
|
else
|
|
|
|
|
vtTool = -Z_AX()
|
|
|
|
|
end
|
|
|
|
|
local vtOut = EgtIf( vtN:getX() > 0, X_AX(), -X_AX())
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetSawBlockedAxis( 1, bDownHead, b3Raw, vtTool, vtOut))
|
|
|
|
|
-- eventuali note
|
|
|
|
|
if sNotes and #sNotes > 0 then EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) end
|
|
|
|
|
-- eseguo
|
|
|
|
@@ -172,7 +187,7 @@ local function GetNameSolidFaceIncludingLine( b3Solid, ptP1Comp, ptP2Comp)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert)
|
|
|
|
|
function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert, bMaximizeVerticalDepth)
|
|
|
|
|
-- se lama con asse parallelo alla faccia, passo alla apposita funzione
|
|
|
|
|
if ( Par5 == MCH_MILL_FU.PARAL_DOWN or
|
|
|
|
|
Par5 == MCH_MILL_FU.PARAL_TOP or
|
|
|
|
@@ -356,13 +371,32 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|
|
|
|
abs( vtTg:getX()) < 0.9848 and
|
|
|
|
|
( ( abs( vtTg:getZ()) < 0.17 and ( vtV1:getZ() < -0.5 or vtV2:getZ() < -0.5) and not bDownHead) or
|
|
|
|
|
( abs( vtTg:getZ()) < 0.51 and b3Box:getDimZ() > 300 and BD.C_SIMM and BD.MAX_HEIGHT > 450 and b3Box:getDimX() > BD.LEN_SHORT_PART) or
|
|
|
|
|
( abs( vtTg:getZ()) < 0.51 and ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) or Ktp * ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) then
|
|
|
|
|
bLioTang = true
|
|
|
|
|
dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp
|
|
|
|
|
if BD.TURN then
|
|
|
|
|
( abs( vtTg:getZ()) < 0.51 and ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) or
|
|
|
|
|
Ktp * ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo) or
|
|
|
|
|
( BD.TURN == 2 and vtRef:getZ() < -0.1)) then
|
|
|
|
|
if BD.TURN == 2 then
|
|
|
|
|
if vtTg:getY() < -0.1 then
|
|
|
|
|
bLioTang = 1
|
|
|
|
|
local dMove = dist( ptP1, ptP2)
|
|
|
|
|
dLiTang = -( dLi2Tang - dAccStart - dAccEnd + dMove)
|
|
|
|
|
-- dLiPerp rimane invariato
|
|
|
|
|
dLoTang, dLoPerp = dLo2Tang, dLo2Perp
|
|
|
|
|
else
|
|
|
|
|
bLioTang = 2
|
|
|
|
|
local dMove = dist( ptP1, ptP2)
|
|
|
|
|
dLiTang, dLiPerp = dLi2Tang, dLi2Perp
|
|
|
|
|
dLoTang = -( dLiTang - dAccStart - dAccEnd + dMove)
|
|
|
|
|
-- dLoPerp rimane invariato
|
|
|
|
|
end
|
|
|
|
|
elseif BD.TURN then
|
|
|
|
|
bLioTang = 2
|
|
|
|
|
local dMove = dist( ptP1, ptP2)
|
|
|
|
|
dLiTang, dLiPerp = dLi2Tang, dLi2Perp
|
|
|
|
|
dLoTang = -( dLiTang - dAccStart - dAccEnd + dMove)
|
|
|
|
|
dLoPerp = BD.COLL_SIC
|
|
|
|
|
else
|
|
|
|
|
bLioTang = true
|
|
|
|
|
dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- posizione braccio
|
|
|
|
@@ -375,8 +409,13 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|
|
|
|
nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if bLioTang then
|
|
|
|
|
--local vtTest = EgtIf( bInvert, vtTg, -vtTg)
|
|
|
|
|
if BD.TURN == 2 then
|
|
|
|
|
if vtRef:getZ() > -0.01 then
|
|
|
|
|
nSCC = MCH_SCC.ADIR_ZP
|
|
|
|
|
else
|
|
|
|
|
nSCC = MCH_SCC.ADIR_ZM
|
|
|
|
|
end
|
|
|
|
|
elseif bLioTang then
|
|
|
|
|
local vtTest = -vtTg
|
|
|
|
|
if abs( vtTest:getY()) > abs( vtTest:getZ()) then
|
|
|
|
|
-- calcolo direzione risultante da versore utensile e direzione di lavorazione inverso
|
|
|
|
@@ -424,14 +463,18 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|
|
|
|
-- offset longitudinale
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.OFFSL, EgtIf( bDownUp, -dCutOffset, dCutOffset))
|
|
|
|
|
-- imposto attacco/uscita
|
|
|
|
|
if BD.TURN and bLioTang == 1 then EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.TG_PERP) end
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.LITANG, dLiTang)
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.LIPERP, dLiPerp)
|
|
|
|
|
if BD.TURN and bLioTang then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end
|
|
|
|
|
if BD.TURN and bLioTang == 2 then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang)
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp)
|
|
|
|
|
-- imposto allungamenti iniziale e finale
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dAllStart - dAccStart)
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dAllEnd - dAccEnd)
|
|
|
|
|
-- imposto angolo 3° asse rot
|
|
|
|
|
local nInd = EgtIf( bMaximizeVerticalDepth, 0, 1)
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetSawBlockedAxis( nInd, bDownHead, b3Raw, vtN, vtOut))
|
|
|
|
|
-- eventuali note
|
|
|
|
|
if sNotes and #sNotes > 0 then EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) end
|
|
|
|
|
-- eseguo
|
|
|
|
|