Compare commits
38 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e303f8205d | |||
| 90b1215f31 | |||
| 2e25eb86e3 | |||
| 0a1c80d764 | |||
| 1077d19eea | |||
| 1ac895439b | |||
| d74091d7f3 | |||
| 0d8ac98869 | |||
| 8b231d7fd3 | |||
| 36bff56509 | |||
| 29eb50649d | |||
| bd503764ed | |||
| ad63364303 | |||
| 261f4115f4 | |||
| d945e92272 | |||
| 58dd72c963 | |||
| d4ed2d651f | |||
| 82d80616f1 | |||
| 05be6f1d89 | |||
| 0487b0ac9a | |||
| 580ff476e2 | |||
| ce3b623c14 | |||
| 4d57cc7c5b | |||
| fb57f47258 | |||
| dc301910e1 | |||
| 1a1a5192ee | |||
| 2561f79c39 | |||
| 123a983c75 | |||
| b9ceef6f31 | |||
| 39b72e3ab9 | |||
| 750ddd2c05 | |||
| 279a83b1f4 | |||
| e6704addb0 | |||
| 890b2a36e6 | |||
| 4468e24bb9 | |||
| ae4cd29853 | |||
| 478288b018 | |||
| bbd04a33a2 |
+1
-1
@@ -496,7 +496,7 @@ if ( BEAM.FLAG == 0 and ( bToProcess or bToRecalc)) or BEAM.FLAG == 3 or BEAM.F
|
||||
BEAM.MSG = 'Axis outstroke ' .. sErr
|
||||
elseif nErr == MCH_SHE.SPECIAL then
|
||||
BEAM.ERR = 24
|
||||
BEAM.MSG = 'Clamp move error ' .. sErr
|
||||
BEAM.MSG = 'Special error ' .. sErr
|
||||
else
|
||||
BEAM.ERR = 25
|
||||
BEAM.MSG = 'General failure (contact supplier)'
|
||||
|
||||
+1
-1
@@ -600,7 +600,7 @@ if ( BEAM.FLAG == 0 and ( bToProcess or bToRecalc)) or BEAM.FLAG == 3 or BEAM.F
|
||||
BEAM.MSG = 'Axis outstroke ' .. sErr
|
||||
elseif nErr == MCH_SHE.SPECIAL then
|
||||
BEAM.ERR = 24
|
||||
BEAM.MSG = 'Clamp move error ' .. sErr
|
||||
BEAM.MSG = 'Special error ' .. sErr
|
||||
else
|
||||
BEAM.ERR = 25
|
||||
BEAM.MSG = 'General failure (contact supplier)'
|
||||
|
||||
+16
-4
@@ -41,7 +41,9 @@
|
||||
-- 2022/12/28 Implementata gestione forature e code di rondine in doppio.
|
||||
-- 2023/01/31 Implementata gestione mortase in doppio.
|
||||
-- 2023/01/31 Nelle lavorazioni in doppio aggiunta la minima distanza tra le feature.
|
||||
|
||||
-- 2023/02/17 Ora le forature che intersecano le mortase sono sempre fatte prima della mortasa stessa.
|
||||
-- 2023/02/17 Nelle tasche in doppio, la distanza minima ammessa tra le feature è stata portata a 50.
|
||||
-- 2023/02/20 Ora le mortase a coda di rondine laterali sono sempre fatte prima dei tagli longitudinali.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local BeamExec = {}
|
||||
@@ -695,15 +697,25 @@ local function OrderFeatures( vProc, b3Raw)
|
||||
return B1.Head
|
||||
end
|
||||
-- se primo è foro e secondo è un ribasso, il foro va sempre prima
|
||||
if Drill.Identify(B1) and LapJoint.Identify(B2) and
|
||||
if Drill.Identify(B1) and ( LapJoint.Identify(B2) or Mortise.Identify(B2)) and
|
||||
B1.Box:getCenter():getX() > B2.Box:getMin():getX() and B1.Box:getCenter():getX() < B2.Box:getMax():getX() then
|
||||
return true
|
||||
end
|
||||
-- se primo è un ribasso e secondo è un foro, il ribasso va sempre dopo
|
||||
if LapJoint.Identify(B1) and Drill.Identify(B2) and
|
||||
if (LapJoint.Identify(B1) or Mortise.Identify(B1)) and Drill.Identify(B2) and
|
||||
B2.Box:getCenter():getX() > B1.Box:getMin():getX() and B2.Box:getCenter():getX() < B1.Box:getMax():getX() then
|
||||
return false
|
||||
end
|
||||
-- se prima è coda di rondine e secondo taglio longitudinale, la coda di rondine va sempre prima
|
||||
if DtMortise.SideIdentify(B1) and ( LongCut.Identify(B2) or Long2Cut.Identify(B2)) and
|
||||
OverlapsXY( B1.Box, B2.Box) then
|
||||
return true
|
||||
end
|
||||
-- se primo è taglio longitudinale e seconda è coda di rondine, il taglio longitudinale va sempre dopo
|
||||
if ( LongCut.Identify(B1) or Long2Cut.Identify(B1)) and DtMortise.SideIdentify(B2) and
|
||||
OverlapsXY( B1.Box, B2.Box) then
|
||||
return false
|
||||
end
|
||||
-- se entrambi tenoni e si intersecano, metto prima tenone vero e poi base tenone
|
||||
if ( Tenon.Identify( B1) or DtTenon.Identify( B1)) and ( Tenon.Identify( B2) or DtTenon.Identify( B2)) and
|
||||
B1.Box:getMin():getX() < B2.Box:getMax():getX() + 100 * GEO.EPS_SMALL and B2.Box:getMin():getX() < B1.Box:getMax():getX() + 100 * GEO.EPS_SMALL then
|
||||
@@ -1416,7 +1428,7 @@ local function CheckMirrorPocket( Proc, ProcMirror, b3Raw, AuxId)
|
||||
local ptCenRaw = b3Raw:getCenter()
|
||||
local dYMinDistance = EgtIf( ptBC:getY() > ptBCMirror:getY(), abs( b3ProcMirror:getMax():getY() - b3Proc:getMin():getY()), abs( b3Proc:getMax():getY() - b3ProcMirror:getMin():getY()))
|
||||
local dZMinDistance = EgtIf( ptBC:getZ() > ptBCMirror:getZ(), abs( b3ProcMirror:getMax():getZ() - b3Proc:getMin():getZ()), abs( b3Proc:getMax():getZ() - b3ProcMirror:getMin():getZ()))
|
||||
local dMinimumDistanceMirroredFeatures = 60
|
||||
local dMinimumDistanceMirroredFeatures = 50
|
||||
-- controllo che il centro delle due mortase sia allineato, che queste siano equidistanti dalla mezzeria della trave
|
||||
-- e che queste non siano troppo vicine
|
||||
if AreSameOrOppositeVectorApprox( vtExtr, Y_AX()) then
|
||||
|
||||
+5
-7
@@ -1,4 +1,4 @@
|
||||
-- DiceCut.lua by Egaltech s.r.l. 2023/01/09
|
||||
-- DiceCut.lua by Egaltech s.r.l. 2023/02/05
|
||||
-- Gestione dei piano paralleli nei tagli lunghi: equidistanziamento dei piani paralleli
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -144,8 +144,8 @@ local function GetOrtoCutCenter( FacetId, ptC, vtN, vtO, dOffsetEff, dNzLimDwnUp
|
||||
EgtErase( IdAuxLocal)
|
||||
EgtSetGridFrame(Frame3d())
|
||||
-- riferimento intrinseco
|
||||
local asseX = vtO
|
||||
local asseY = asseX ^ vtN
|
||||
local asseX = Vector3d( vtO)
|
||||
local asseY = vtN ^ asseX
|
||||
local Frame = Frame3d( ptC, ptC + asseX, ptC + asseY)
|
||||
-- ingombro della faccia secondo questo riferimento
|
||||
local Box = EgtGetBBoxRef( FacetId, GDB_BB.STANDARD, Frame)
|
||||
@@ -160,12 +160,11 @@ local function GetOrtoCutCenter( FacetId, ptC, vtN, vtO, dOffsetEff, dNzLimDwnUp
|
||||
end
|
||||
|
||||
local N = ceil( dLen / dOffsetEff)
|
||||
local dOffsetRel = dLen / N
|
||||
local dOffsetRel = ( dLen / N) + 10 * GEO.EPS_SMALL
|
||||
local dCopyPlane
|
||||
local dCenOffs = ( Box:getMax():getX() + Box:getMin():getX()) / 2
|
||||
|
||||
if dLen <= dOffsetRel then
|
||||
--dOffsetRel = 0
|
||||
dCopyPlane = 1
|
||||
elseif dLen <= 2 * dOffsetRel then
|
||||
dOffsetRel = dOffsetEff
|
||||
@@ -177,8 +176,7 @@ local function GetOrtoCutCenter( FacetId, ptC, vtN, vtO, dOffsetEff, dNzLimDwnUp
|
||||
dCopyPlane = 0.5
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
return dOffsetRel, dCopyPlane, dCenOffs, ptS
|
||||
end
|
||||
|
||||
|
||||
+19
-6
@@ -13,6 +13,7 @@
|
||||
-- 2022/04/12 DS Aggiunta gestione speciale cubetti con fresa da sotto.
|
||||
-- 2022/06/29 DS In MakeTwo modificato controllo facce dirette verso il basso.
|
||||
-- 2022/09/08 In MakeOne aggiunto argomento bForceInvert per poter forzare l'inversione del percorso.
|
||||
-- 2023/02/13 Migliorata la direzione di lavoro della lama in modo da essere tendenzialmente opposta all'avanzamento.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local FacesBySaw = {}
|
||||
@@ -52,8 +53,23 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
||||
return true, ''
|
||||
end
|
||||
vtV1 = - vtV1
|
||||
-- verifico se lavorazione con lama sotto e testa sopra
|
||||
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
||||
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
||||
-- verifico se la lama ruota in senso orario
|
||||
if not EgtMdbSetCurrMachining( sCutting) then
|
||||
return false
|
||||
end
|
||||
local bIsSawCW = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0
|
||||
local bInvert = bForceInvert
|
||||
if bInvert == nil then
|
||||
-- se la lama ruota in senso orario inverto la direzione di lavorazione, per avere rotazione lama opposta a avanzamento
|
||||
if bInvert == nil and bIsSawCW and not bDownUp then
|
||||
if ( ptP2:getZ() > ptP1:getZ() + 100 * GEO.EPS_SMALL) then
|
||||
bInvert = false
|
||||
else
|
||||
bInvert = true
|
||||
end
|
||||
elseif bInvert == nil then
|
||||
bInvert = ( ptP2:getZ() < ptP1:getZ() - 100 * GEO.EPS_SMALL)
|
||||
end
|
||||
if bInvert then
|
||||
@@ -90,9 +106,6 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
||||
vtTg = ptP2 - ptP1 ; vtTg:normalize()
|
||||
end
|
||||
end
|
||||
-- verifico se lavorazione con lama sotto e testa sopra
|
||||
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
||||
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
||||
local nFaceUse = nOrthoOpposite
|
||||
if bDownUp then nFaceUse = BL.GetOrtupOpposite( nOrthoOpposite) end
|
||||
local bWsRight = ( bInvert ~= bDownUp)
|
||||
@@ -141,8 +154,8 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
||||
( not bDownHead or abs( vtTg:getZ()) < 0.51) and
|
||||
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) or
|
||||
( Ktp * dLenLi2 < dLenLi and Ktp * dLenLo2 < dLenLo) or Ktp * ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) then
|
||||
( 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
|
||||
dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp
|
||||
if BD.TURN then
|
||||
bTurnTang = true
|
||||
|
||||
@@ -405,8 +405,8 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
||||
EgtSetInfo( vCuts[i][j], 'TASKID', Proc.TaskId)
|
||||
if ( i % 2) == 1 then
|
||||
local vtO = EgtSurfTmFacetNormVersor( vCuts[i][j], 0, GDB_ID.ROOT)
|
||||
if ( vtN:getY() > 0.707 and vtO:getY() < -0.05) or
|
||||
( vtN:getY() < -0.707 and vtO:getY() > 0.05) then
|
||||
if ( vtN:getY() > 0.766 and vtO:getY() < -0.05) or
|
||||
( vtN:getY() < -0.766 and vtO:getY() > 0.05) then
|
||||
EgtInvertSurf( vCuts[i][j])
|
||||
bOrthInv = true
|
||||
end
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
-- Gestione calcolo tenone a coda di rondine per Travi
|
||||
-- 2021/04/08 Aggiunto controllo massimo materiale lavorabile dalla fresa.
|
||||
-- 2022/04/14 Aumentati un poco i limiti di orientamento verso il basso per FAST e PF.
|
||||
-- 2023/02/08 Aumentato il range per cui i tenoni vengono lavorati in sottosquadro.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessDtTenon = {}
|
||||
@@ -38,14 +39,17 @@ local function VerifyOrientation( Proc, vtN, b3Raw)
|
||||
-- se tenone praticamente in asse, accetto fino a -30 deg
|
||||
if abs( vtN:getY()) < 0.088 then
|
||||
return ( vtN:getZ() >= -0.51)
|
||||
-- se macchina Fast, pezzo stretto e inclinazione laterale non eccessiva, accetto fino a -27deg
|
||||
elseif ( not BD.C_SIMM) and abs( vtN:getY()) < 0.5 and b3Raw:getDimY() < 150.1 then
|
||||
return ( vtN:getZ() >= -0.454)
|
||||
-- altrimenti accetto fino a -21deg
|
||||
else
|
||||
return ( vtN:getZ() >= -0.359)
|
||||
end
|
||||
-- se trave medio-bassa
|
||||
elseif b3Raw:getDimZ() < 281 then
|
||||
-- se tenone praticamente in asse, accetto fino a -25 deg
|
||||
if abs( vtN:getY()) < 0.088 then
|
||||
-- se tenone praticamente in asse oppure pezzo stretto e inclinazione laterale non eccessiva, accetto fino a -25 deg
|
||||
if abs( vtN:getY()) < 0.088 or ( abs( vtN:getY()) < 0.5 and b3Raw:getDimY() < 150.1) then
|
||||
return ( vtN:getZ() >= -0.422)
|
||||
-- altrimenti, accetto fino a -15 deg
|
||||
else
|
||||
|
||||
+19
-10
@@ -61,6 +61,9 @@
|
||||
-- 2022/12/21 Sistemata gestione SideMillAsSaw.
|
||||
-- 2023/01/19 In MakeMoreFaces -> MakeBySideMill aggiunto controllo che lo step finale non superi lo spessore utensile.
|
||||
-- 2023/01/24 In MakeByPocket gestito caso il caso in cui veniva applicata una fresatura con percorso vuoto. Ora viene rimossa e la tasca viene fatta con lama.
|
||||
-- 2023/02/06 Alla MakeDrillOnCorner aggiunto controllo distanza di sicurezza minima.
|
||||
-- 2023/02/16 Piccola correzione alla scelta utensile di svuotatura.
|
||||
-- 2023/02/21 Piccola correzione alla MakeByPocket.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessLapJoint = {}
|
||||
@@ -314,16 +317,18 @@ local function VerifyChainSaw( Proc, dMinDim, dMaxDim)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function VerifyPocket( Proc, dDiam, dDepth, dMaxTotLen, sMchFindMaster, bPocketDown)
|
||||
local function VerifyPocket( Proc, dDiam, dDepth, dMaxTotLen, sMchFindMaster, bPocketUp, bPocketDown)
|
||||
-- tipo di svuotatura
|
||||
local sMchFind = EgtIf( sMchFindMaster and #sMchFindMaster > 0, sMchFindMaster, 'Pocket')
|
||||
-- ricerca della svuotatura
|
||||
local sPocketing
|
||||
if dDepth then
|
||||
sPocketing = ML.FindPocketing( sMchFind, dDiam, dDepth, dMaxTotLen, not bPocketDown, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.8 * dDepth, dMaxTotLen, not bPocketDown, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.6 * dDepth, dMaxTotLen, not bPocketDown, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.4 * dDepth, dMaxTotLen, not bPocketDown, bPocketDown) or
|
||||
sPocketing = ML.FindPocketing( sMchFind, dDiam, dDepth, dMaxTotLen, bPocketUp, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.8 * dDepth, dMaxTotLen, bPocketUp, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.7 * dDepth, dMaxTotLen, bPocketUp, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.6 * dDepth, dMaxTotLen, bPocketUp, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.5 * dDepth, dMaxTotLen, bPocketUp, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0.4 * dDepth, dMaxTotLen, bPocketUp, bPocketDown) or
|
||||
ML.FindPocketing( sMchFind, dDiam, 0, dMaxTotLen)
|
||||
else
|
||||
sPocketing = ML.FindPocketing( sMchFind, dDiam, 0, dMaxTotLen)
|
||||
@@ -2147,6 +2152,11 @@ local function MakeDrillOnCorner( Proc, nPhase, nRawId, nPartId, b3Raw, nFacInd,
|
||||
end
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.DEPTH, dDepth)
|
||||
-- imposto il valore della distanza di sicurezza per l'attacco. Se il valore del db utensili è troppo basso lo alzo a 10.
|
||||
local dToolDbStartPos = EgtGetMachiningParam( MCH_MP.STARTPOS)
|
||||
local dMinStartPos = 10
|
||||
local dStartPos = max( dMinStartPos, dToolDbStartPos)
|
||||
EgtSetMachiningParam( MCH_MP.STARTPOS, dStartPos)
|
||||
-- Note utente con dichiarazione nessuna generazione sfridi per Vmill
|
||||
local sUserNotes = 'VMRS=0;'
|
||||
-- aggiungo alle note massima elevazione (coincide con affondamento)
|
||||
@@ -3482,7 +3492,7 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha
|
||||
local bMakePocket, sPocketing, dMaxDepth, dDiamTool = VerifyPocket( Proc, dDimMin, dDepth / 2, nil, sMchFind)
|
||||
local bMakePocketDn, sPocketingDn, dMaxDepthDn, dDiamToolDn
|
||||
if bMillDown then
|
||||
bMakePocketDn, sPocketingDn, dMaxDepthDn, dDiamToolDn = VerifyPocket( Proc, dDimMin, dDepth / 2, nil, sMchFind, true)
|
||||
bMakePocketDn, sPocketingDn, dMaxDepthDn, dDiamToolDn = VerifyPocket( Proc, dDimMin, dDepth / 2, nil, sMchFind, nil, true)
|
||||
-- se è negativo inverto il versore e la faccia
|
||||
if vtOrtho:getZ() < 0 then
|
||||
vtOrtho = -vtOrtho
|
||||
@@ -3494,22 +3504,21 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha
|
||||
local bMakeContour = false
|
||||
local sMilling
|
||||
if dFacElev < dMinFaceElevForPocket and ( bIsU or bIsL) and ( Proc.Fct == 2 or Proc.Fct == 3) and abs( vtN:getZ()) > 0.996 then
|
||||
bMakeContour = true
|
||||
-- recupero la lavorazione di contornatura
|
||||
sMilling = ML.FindMilling( 'Prof', nil, nil, nil, nil, not bMillDown, bMillDown)
|
||||
if not sMilling then
|
||||
local sMyWarn = 'Warning : Prof not found in library'
|
||||
EgtOutLog( sMyWarn)
|
||||
return true, sMyWarn
|
||||
end
|
||||
-- recupero i dati dell'utensile
|
||||
dDiamTool = 50
|
||||
dMaxDepth = 0
|
||||
if EgtMdbSetCurrMachining( sMilling) then
|
||||
if sMilling and EgtMdbSetCurrMachining( sMilling) then
|
||||
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
||||
dDiamTool = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam
|
||||
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dToolMaxDepth
|
||||
bMakeContour = true
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4985,7 +4994,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
||||
end
|
||||
-- ricerca lavorazione
|
||||
local sPocketing
|
||||
local _, sMyPocketing, dMyTMaxDepth, dMyTDiam = VerifyPocket( Proc, dDiam, dFacElev + dCollSic, dMaxTotLen, sMchFind, bMillDown)
|
||||
local _, sMyPocketing, dMyTMaxDepth, dMyTDiam = VerifyPocket( Proc, dDiam, dFacElev + dCollSic, dMaxTotLen, sMchFind, bMillUp, bMillDown)
|
||||
if not sMyPocketing and bMillUp then
|
||||
_, sMyPocketing, dMyTMaxDepth, dMyTDiam = VerifyPocket( Proc, dDiam, dFacElev + dCollSic, dMaxTotLen, sMchFind)
|
||||
bMillDown = false
|
||||
|
||||
+67
-19
@@ -19,6 +19,9 @@
|
||||
-- 2023/01/26 Rimossa la pulitura della faccia laterale nel caso in cui la feature abbia almeno una faccia rivolta verso il basso.
|
||||
-- 2023/01/27 In MakeSideFace il prolungamento di uscita è ora fissato a 10 mm.
|
||||
-- 2023/01/27 In caso di lavorazione aggiuntiva con fresa a catena il taglio con lama da sotto viene effettuato a step.
|
||||
-- 2023/02/15 Migliorato verso di avanzamento della lama.
|
||||
-- 2023/02/21 Verso di avanzamento della lama migliorato anche con lama LC.
|
||||
-- 2023/02/22 Nuova gestione del verso di avanzamento ottimale che contempla tutti i casi.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessLongCut = {}
|
||||
@@ -920,30 +923,75 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus
|
||||
if ( not bFront and k == 1) or ( bFront and k == 2) then
|
||||
dSal, dEal = dEal, dSal
|
||||
end
|
||||
|
||||
|
||||
-- settaggio di workside, uso faccia e eventuale inversione
|
||||
-- verifico lama in uso e imposto uso faccia
|
||||
local bIsTopBladeCurrent
|
||||
local nFaceUseCurrent
|
||||
if bCanUseBlade and bCanUseUnderBlade then
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||
dSal, dEal = dEal, dSal
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse2, nFaceUse))
|
||||
elseif bCanUseBlade and BD.USE_LONGCUT then
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||
dSal, dEal = dEal, dSal
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse2, nFaceUse))
|
||||
elseif bCanUseUnderBlade then
|
||||
if abs(nSide) ~= 2 then
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
||||
if k == 1 then
|
||||
bIsTopBladeCurrent = true
|
||||
nFaceUseCurrent = nFaceUse2
|
||||
else
|
||||
bIsTopBladeCurrent = false
|
||||
nFaceUseCurrent = nFaceUse
|
||||
end
|
||||
elseif bCanUseUnderBlade then
|
||||
if k == 1 then
|
||||
bIsTopBladeCurrent = false
|
||||
nFaceUseCurrent = nFaceUse
|
||||
else
|
||||
bIsTopBladeCurrent = false
|
||||
nFaceUseCurrent = nFaceUse2
|
||||
end
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2))
|
||||
else
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2))
|
||||
if k == 1 then
|
||||
bIsTopBladeCurrent = true
|
||||
nFaceUseCurrent = nFaceUse
|
||||
else
|
||||
bIsTopBladeCurrent = true
|
||||
nFaceUseCurrent = nFaceUse2
|
||||
end
|
||||
end
|
||||
|
||||
-- recupero alcune informazioni utili dalla lavorazione attuale
|
||||
local bIsCurrentBladeCW
|
||||
local bIsCurrentMachiningInverted
|
||||
if bIsTopBladeCurrent then
|
||||
EgtMdbSetCurrMachining( sCutting)
|
||||
else
|
||||
EgtMdbSetCurrMachining( sCuttingDn)
|
||||
end
|
||||
bIsCurrentBladeCW = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0
|
||||
bIsCurrentMachiningInverted = EgtMdbGetCurrMachiningParam( MCH_MP.INVERT)
|
||||
|
||||
-- imposto la direzione di lavoro per avere scarico del truciolo ottimale
|
||||
local nWorkSide, bInvert
|
||||
if not bIsTopBladeCurrent and abs( nSide) ~= 2 then
|
||||
if bIsCurrentBladeCW then
|
||||
nWorkSide = MCH_MILL_WS.LEFT
|
||||
bInvert = true
|
||||
dSal, dEal = dEal, dSal
|
||||
else
|
||||
nWorkSide = MCH_MILL_WS.RIGHT
|
||||
bInvert = false
|
||||
end
|
||||
else
|
||||
if bIsCurrentBladeCW then
|
||||
nWorkSide = MCH_MILL_WS.LEFT
|
||||
bInvert = false
|
||||
else
|
||||
nWorkSide = MCH_MILL_WS.RIGHT
|
||||
bInvert = true
|
||||
dSal, dEal = dEal, dSal
|
||||
end
|
||||
end
|
||||
|
||||
-- setto la lavorazione con i valori calcolati
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, bInvert)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, nWorkSide)
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUseCurrent)
|
||||
|
||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dSal)
|
||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEal)
|
||||
-- imposto offset radiale
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
-- 2022/11/30 Modifiche su SCC per TURN.
|
||||
-- 2023/01/26 Rimossa la pulitura della faccia laterale nel caso in cui la feature abbia almeno una faccia rivolta verso il basso.
|
||||
-- 2023/01/27 In MakeSideFace il prolungamento di uscita è ora fissato a 10 mm.
|
||||
-- 2023/02/15 Migliorato verso di avanzamento della lama.
|
||||
-- 2023/02/21 Verso di avanzamento della lama migliorato anche con lama LC.
|
||||
-- 2023/02/22 Nuova gestione del verso di avanzamento ottimale che contempla tutti i casi.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessLong2Cut = {}
|
||||
@@ -687,40 +690,87 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
if ( not bFront and k == 1) or ( bFront and k == 2) then
|
||||
dSal, dEal = dEal, dSal
|
||||
end
|
||||
|
||||
-- settaggio di workside, uso faccia e eventuale inversione
|
||||
-- verifico lama in uso e imposto uso faccia
|
||||
local bIsTopBladeCurrent
|
||||
local nFaceUseCurrent
|
||||
if bCanUseBlade and bCanUseUnderBlade then
|
||||
if bCanUseBlade and nSide == -1 then
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse2, nFaceUse))
|
||||
if nSide == -1 then
|
||||
if k == 1 then
|
||||
bIsTopBladeCurrent = true
|
||||
nFaceUseCurrent = nFaceUse2
|
||||
else
|
||||
bIsTopBladeCurrent = false
|
||||
nFaceUseCurrent = nFaceUse
|
||||
end
|
||||
else
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2))
|
||||
if k == 1 then
|
||||
bIsTopBladeCurrent = false
|
||||
nFaceUseCurrent = nFaceUse
|
||||
else
|
||||
bIsTopBladeCurrent = true
|
||||
nFaceUseCurrent = nFaceUse2
|
||||
end
|
||||
end
|
||||
elseif bCanUseBlade and BD.USE_LONGCUT then
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||
dSal, dEal = dEal, dSal
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2))
|
||||
elseif bCanUseUnderBlade then
|
||||
if nSide ~= 0 then
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
||||
if k == 1 then
|
||||
bIsTopBladeCurrent = false
|
||||
nFaceUseCurrent = nFaceUse
|
||||
else
|
||||
bIsTopBladeCurrent = false
|
||||
nFaceUseCurrent = nFaceUse2
|
||||
end
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2))
|
||||
else
|
||||
if bCanUseBlade and nSide == -1 then
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
||||
if k == 1 then
|
||||
bIsTopBladeCurrent = true
|
||||
nFaceUseCurrent = nFaceUse
|
||||
else
|
||||
bIsTopBladeCurrent = true
|
||||
nFaceUseCurrent = nFaceUse2
|
||||
end
|
||||
-- imposto uso della faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2))
|
||||
end
|
||||
|
||||
-- recupero alcune informazioni utili dalla lavorazione attuale
|
||||
local bIsCurrentBladeCW
|
||||
local bIsCurrentMachiningInverted
|
||||
if bIsTopBladeCurrent then
|
||||
EgtMdbSetCurrMachining( sCutting)
|
||||
else
|
||||
EgtMdbSetCurrMachining( sCuttingDn)
|
||||
end
|
||||
bIsCurrentBladeCW = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0
|
||||
bIsCurrentMachiningInverted = EgtMdbGetCurrMachiningParam( MCH_MP.INVERT)
|
||||
|
||||
-- imposto la direzione di lavoro per avere scarico del truciolo ottimale
|
||||
local nWorkSide, bInvert
|
||||
if ( not bIsTopBladeCurrent and abs( nSide) ~= 0) or ( bCanUseBlade and bCanUseUnderBlade and nSide == -1) then
|
||||
if bIsCurrentBladeCW then
|
||||
nWorkSide = MCH_MILL_WS.LEFT
|
||||
bInvert = true
|
||||
dSal, dEal = dEal, dSal
|
||||
else
|
||||
nWorkSide = MCH_MILL_WS.RIGHT
|
||||
bInvert = false
|
||||
end
|
||||
else
|
||||
if bIsCurrentBladeCW then
|
||||
nWorkSide = MCH_MILL_WS.LEFT
|
||||
bInvert = false
|
||||
else
|
||||
nWorkSide = MCH_MILL_WS.RIGHT
|
||||
bInvert = true
|
||||
dSal, dEal = dEal, dSal
|
||||
end
|
||||
end
|
||||
|
||||
-- setto la lavorazione con i valori calcolati
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, bInvert)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, nWorkSide)
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUseCurrent)
|
||||
|
||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dSal)
|
||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEal)
|
||||
|
||||
-- imposto offset radiale
|
||||
EgtSetMachiningParam( MCH_MP.OFFSR, EgtIf( nSide == -1, -dOffset, dOffset))
|
||||
-- imposto attacco/uscita
|
||||
|
||||
@@ -256,7 +256,7 @@ function ProcessMortise.VerifyMortiseOrPocket( Proc, dDiam, dDepth, dMaxTotLen,
|
||||
sPocketing = ML.FindPocketing( sType, dDiam, 0, dMaxTotLen, bExcludeH2)
|
||||
end
|
||||
if not sPocketing then
|
||||
return false
|
||||
return nil
|
||||
end
|
||||
-- recupero i dati dell'utensile
|
||||
local dMaxDepth = 0
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
-- 2021/06/28 Aggiunto extra-taglio alle lamate orizzontali.
|
||||
-- 2022/06/10 Aggiunto il parametro dOvmTail per gestire sovramateriali in coda diversi da OVM_MID (sezioni alte e larghe)
|
||||
-- 2022/07/12 Aggiunta gestione PF1250 e TURN.
|
||||
-- 2023/02/14 Gestite le rotazioni di 90 deg nell'aggiornamento del grezzo.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessScarfJoint = {}
|
||||
@@ -512,7 +513,7 @@ function ProcessScarfJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmTa
|
||||
-- aggiornamento ingombro di testa o coda
|
||||
if Proc.Head then
|
||||
local dHCI = 0
|
||||
if abs( vtRef:getZ()) > 0.1 then
|
||||
if abs( vtRef:getZ()) > 0.1 and not BD.ROT90 then
|
||||
local b3Fac1 = EgtSurfTmGetFacetBBoxGlob( Proc.Id, vFaceOrd[1] - 1, GDB_BB.STANDARD)
|
||||
if b3Fac1 then dHCI = b3Raw:getMax():getX() - dOvmHead - b3Fac1:getMin():getX() end
|
||||
dHCI = 0.75 * dHCI
|
||||
@@ -522,7 +523,7 @@ function ProcessScarfJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmTa
|
||||
BL.UpdateHCING( nRawId, dHCI)
|
||||
elseif Proc.Tail then
|
||||
local dTCI = 0
|
||||
if abs( vtRef:getZ()) > 0.1 then
|
||||
if abs( vtRef:getZ()) > 0.1 and not BD.ROT90 then
|
||||
local b3Fac1 = EgtSurfTmGetFacetBBoxGlob( Proc.Id, vFaceOrd[1] - 1, GDB_BB.STANDARD)
|
||||
if b3Fac1 then dTCI = b3Fac1:getMax():getX() - b3Solid:getMin():getX() end
|
||||
dTCI = 0.75 * dTCI
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
-- 2022/06/10 Aggiunto il parametro dOvmTail per gestire sovramateriali in coda diversi da OVM_MID (sezioni alte e larghe)
|
||||
-- 2022/08/09 Ora se la feature ha meno di due facce viene richiamata la normale Cut.
|
||||
-- 2022/11/09 Aggiunta gestione parametro Q04 per forzare utilizzo fresa di lato e lavorare come FreeContour.
|
||||
-- 2023/02/14 Gestite le rotazioni di 90 deg nell'aggiornamento del grezzo.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessSimpleScarf = {}
|
||||
@@ -317,7 +318,7 @@ function ProcessSimpleScarf.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmT
|
||||
-- aggiornamento ingombro di testa o coda
|
||||
if Proc.Head then
|
||||
local dHCI = 0
|
||||
if abs( vtRef:getZ()) > 0.1 then
|
||||
if abs( vtRef:getZ()) > 0.1 and not BD.ROT90 then
|
||||
local b3Fac1 = EgtSurfTmGetFacetBBoxGlob( Proc.Id, vFaceOrd[1] - 1, GDB_BB.STANDARD)
|
||||
if b3Fac1 then dHCI = b3Raw:getMax():getX() - dOvmHead - b3Fac1:getMin():getX() end
|
||||
else
|
||||
@@ -326,7 +327,7 @@ function ProcessSimpleScarf.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmT
|
||||
BL.UpdateHCING( nRawId, dHCI)
|
||||
elseif Proc.Tail then
|
||||
local dTCI = 0
|
||||
if abs( vtRef:getZ()) > 0.1 then
|
||||
if abs( vtRef:getZ()) > 0.1 and not BD.ROT90 then
|
||||
local b3Fac1 = EgtSurfTmGetFacetBBoxGlob( Proc.Id, vFaceOrd[1] - 1, GDB_BB.STANDARD)
|
||||
if b3Fac1 then dTCI = b3Fac1:getMax():getX() - b3Solid:getMin():getX() end
|
||||
else
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
-- ProcessStepJoint.lua by Egaltech s.r.l. 2022/11/03
|
||||
-- Gestione calcolo giunto a gradino per Travi
|
||||
-- 2022/11/03 Correzione per riconoscimento testa da sotto su fresatura.
|
||||
-- 2023/02/14 Gestite le rotazioni di 90 deg nell'aggiornamento del grezzo.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessStepJoint = {}
|
||||
@@ -433,18 +434,22 @@ local function MakeThreeFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||
-- Eventuale segnalazione ingombro di testa o coda
|
||||
if Proc.Head then
|
||||
local dOffs = b3Raw:getMax():getX() - dOvmHead - Proc.Box:getMin():getX()
|
||||
if vtNm:getZ() > 0.5 then
|
||||
dOffs = 0.5 * dOffs
|
||||
elseif abs( vtNm:getZ()) > 0.35 then
|
||||
dOffs = 0.75 * dOffs
|
||||
if not BD.ROT90 then
|
||||
if vtNm:getZ() > 0.5 then
|
||||
dOffs = 0.5 * dOffs
|
||||
elseif abs( vtNm:getZ()) > 0.35 then
|
||||
dOffs = 0.75 * dOffs
|
||||
end
|
||||
end
|
||||
BL.UpdateHCING( nRawId, dOffs)
|
||||
elseif Proc.Tail then
|
||||
local dOffs = Proc.Box:getMax():getX() - b3Solid:getMin():getX()
|
||||
if vtNm:getZ() > 0.5 then
|
||||
dOffs = 0.5 * dOffs
|
||||
elseif abs( vtNm:getZ()) > 0.35 then
|
||||
dOffs = 0.75 * dOffs
|
||||
if not BD.ROT90 then
|
||||
if vtNm:getZ() > 0.5 then
|
||||
dOffs = 0.5 * dOffs
|
||||
elseif abs( vtNm:getZ()) > 0.35 then
|
||||
dOffs = 0.75 * dOffs
|
||||
end
|
||||
end
|
||||
BL.UpdateTCING( nRawId, dOffs)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user