DataBeam :
- aggiunta gestione feature Dovetail (1/2/3/4-138-X) - correzioni e migliorie varie.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- ProcessTyroleanDovetail.lua by Egaltech s.r.l. 2020/04/20
|
||||
-- ProcessTyroleanDovetail.lua by Egaltech s.r.l. 2020/04/23
|
||||
-- Gestione calcolo giunzione tirolese
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -83,7 +83,7 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Classificazione della feature
|
||||
function ProcessTyroleanDovetail.Classify( Proc)
|
||||
function ProcessTyroleanDovetail.Classify( Proc, b3Raw)
|
||||
-- verifico le normali delle facce
|
||||
local nFacetCnt = EgtSurfTmFacetCount( Proc.Id)
|
||||
local nFlatFaceNeg
|
||||
@@ -98,7 +98,7 @@ function ProcessTyroleanDovetail.Classify( Proc)
|
||||
end
|
||||
-- se trovata faccia rastremata rivolta verso Z-
|
||||
-- verifico se lunghezza faccia piatta è compatibile con il taglio di lama
|
||||
if FlatFaceNeg then
|
||||
if nFlatFaceNeg then
|
||||
-- se ho 3 facce sicuramente è gruppo 3 o 4, setto il ribaltamento senza ulteriori controlli
|
||||
if nFacetCnt == 3 then
|
||||
bDown = true
|
||||
@@ -110,15 +110,18 @@ function ProcessTyroleanDovetail.Classify( Proc)
|
||||
local nOtherFace = EgtIf( nFlatFaceNeg == 0, nFlatFaceNeg + 1, nFlatFaceNeg - 1)
|
||||
local bAdj , ptP1, ptP2, dAng = EgtSurfTmFacetsContact( Proc.Id, nFlatFaceNeg, nOtherFace, GDB_ID.ROOT)
|
||||
local dDist = dist( ptP1, ptP2)
|
||||
local dLenface
|
||||
-- se non sono uguali prendo la dimensione diversa dalla lunghezza di adiacenza
|
||||
if abs( dDist - dH) < 10 * GEO.EPS_SMALL then
|
||||
dLenface = dV
|
||||
local dLargeface
|
||||
local dDelta = 100000
|
||||
local dDeltadH = abs( dDist - dH)
|
||||
local dDeltadV = abs( dDist - dV)
|
||||
-- prendo la dimensione diversa dalla lunghezza di adiacenza
|
||||
if dDeltadH < dDeltadV then
|
||||
dLargeface = dV
|
||||
else
|
||||
dLenface = dH
|
||||
end
|
||||
dLargeface = dH
|
||||
end
|
||||
-- se lunghezza faccia maggiore di taglio lama da sotto setto il ribaltamento
|
||||
if dLenface > BD.MAX_LEN_RIDGELAP_FROM_BOTTOM - 10 * GEO.EPS_SMALL then
|
||||
if dLargeface > BD.GetMaxLenRidgeLapFromBottom( b3Raw:getDimZ()) then
|
||||
bDown = true
|
||||
end
|
||||
-- se angolo tra le facce è maggiore di 90 non è raggiungibile dalla lama setto il ribaltamento
|
||||
@@ -407,104 +410,8 @@ local function MakeMachByBlade( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw,
|
||||
return true
|
||||
end
|
||||
|
||||
--[[
|
||||
---------------------------------------------------------------------
|
||||
local function MakePocket( Proc, nPartId, ptPs, tvtN, nFaceRef, sMchFind, sMasterPocket, dPrevFaceElev, sPrefixName, tDimAndRef, dAng)
|
||||
|
||||
-- calcolo l'elevazione dal punto medio
|
||||
local dElev
|
||||
local dLenIn, dLedOut = BL.GetPointDirDepth( nPartId, ptPs, tvtN[2])
|
||||
if dLenIn > 0 then
|
||||
dElev = dLenIn
|
||||
elseif dLedOut then
|
||||
dElev = dLedOut
|
||||
end
|
||||
local dCollSic = 2 * BD.COLL_SIC
|
||||
-- calcolo il diametro utensile
|
||||
local dDiamTool
|
||||
local dFaceDiamTool
|
||||
if tDimAndRef then
|
||||
-- prendo il valore dalle dimensioni minime delle facce
|
||||
dFaceDiamTool = min( tDimAndRef[2][1], tDimAndRef[2][2])
|
||||
end
|
||||
-- se ho lavorazione precedente ricalcolo grossolanamente l'elevazione
|
||||
if dPrevFaceElev and dPrevFaceElev > 0 and dAng then
|
||||
dElev = dElev + ( sqrt( ( dElev * dElev) - ( dPrevFaceElev * dPrevFaceElev)) * sin(dAng))
|
||||
elseif dPrevFaceElev and dPrevFaceElev > dElev then
|
||||
dElev = dPrevFaceElev
|
||||
end
|
||||
local sPocketing
|
||||
if sMasterPocket then
|
||||
sPocketing = sMasterPocket
|
||||
else
|
||||
sPocketing = ML.FindPocketing( sMchFind, dFaceDiamTool, dElev + dCollSic)
|
||||
end
|
||||
if not sPocketing then
|
||||
local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' pocketing not found in library'
|
||||
EgtOutLog( sErr)
|
||||
return false, sErr
|
||||
end
|
||||
dDiamTool = 20
|
||||
local dMaxDepth = 0
|
||||
local sTuuidPk
|
||||
if EgtMdbSetCurrMachining( sPocketing) then
|
||||
sTuuidPk = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuidPk) or '') then
|
||||
dMaxDepth = ( EgtTdbGetCurrToolMaxDepth() or dMaxDepth)
|
||||
dDiamTool = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||
end
|
||||
end
|
||||
-- se nome svuotatura non è stato ricalcolato, confronto il diametro utensile utilizzato con il minimo faccia e se non sono compatibili esco
|
||||
if sMasterPocket and dFaceDiamTool and dDiamTool >= dFaceDiamTool then
|
||||
return false, '', sTuuidPk, dDiamTool, dElev
|
||||
end
|
||||
-- inserisco la lavorazione di svuotatura
|
||||
local sName = sPrefixName .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. 'F' .. tostring( nFaceRef)
|
||||
local nMchFId = EgtAddMachining( sName, sPocketing)
|
||||
if not nMchFId then
|
||||
local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing
|
||||
EgtOutLog( sErr)
|
||||
return false, sErr
|
||||
end
|
||||
-- aggiungo geometria
|
||||
EgtSetMachiningGeometry( {{ Proc.Id, (nFaceRef)}})
|
||||
-- imposto uso faccia
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT)
|
||||
-- imposto posizione braccio porta testa
|
||||
if tvtN[2]:getY() < GEO.EPS_SMALL then
|
||||
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM)
|
||||
else
|
||||
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP)
|
||||
end
|
||||
-- imposto opportuno attacco
|
||||
EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALIN)
|
||||
-- se elevazione superiore a massimo affondamento della fresa, riduco opportunamente
|
||||
local sWarn
|
||||
-- if dElev > dMaxDepth + 10 * GEO.EPS_SMALL then
|
||||
-- EgtSetMachiningParam( MCH_MP.DEPTH, dMaxDepth - dElev)
|
||||
-- dElev = dMaxDepth
|
||||
-- sWarn = 'Warning in process ' .. tostring( Proc.Id) .. ' : elevation bigger than max tool depth'
|
||||
-- EgtOutLog( sWarn)
|
||||
-- end
|
||||
-- imposto elevazione e dichiaro non si generano sfridi per VMill
|
||||
local sNotes = 'MaxElev=' .. EgtNumToString( dElev, 1) .. ';'
|
||||
sNotes = sNotes .. 'VMRS=0;'
|
||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes)
|
||||
if not EgtApplyMachining( true, false) then
|
||||
-- provo ad allargare leggermente la tasca
|
||||
EgtSetMachiningParam( MCH_MP.OFFSR, -0.1)
|
||||
if not EgtApplyMachining( true, false) then
|
||||
local _, sErr = EgtGetLastMachMgrError()
|
||||
EgtSetOperationMode( nMchFId, false)
|
||||
return false, sErr
|
||||
end
|
||||
end
|
||||
return true, sWarn, sTuuidPk, dDiamTool
|
||||
end
|
||||
]]--
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function MakeMillCut( Proc, i, j, k, sMilling, nFacInd, pPPnt, rfFac, dOffs, dOffrRad, dAddOffsRad, nStep, dToolDiam, dStep)
|
||||
local function MakeMillCut( Proc, i, j, k, sMilling, nFacInd, TabNAD, rfFac, dOffs, dOffrRad, dAddOffsRad, nStep, dToolDiam, dStep)
|
||||
local sWarn = ''
|
||||
-- inserisco la lavorazione di fresatura
|
||||
-- per evitare nomi lavorazioni coincidenti, concateno anche il Proc.Id se il nome (del Proc.Id) è presente
|
||||
@@ -523,7 +430,7 @@ local function MakeMillCut( Proc, i, j, k, sMilling, nFacInd, pPPnt, rfFac, dOff
|
||||
-- aggiungo geometria
|
||||
EgtSetMachiningGeometry( {{ Proc.Id, nFacInd}})
|
||||
-- imposto uso faccia
|
||||
local nFaceUse = BL.GetNearestOrthoOpposite( pPPnt[j][1])
|
||||
local nFaceUse = BL.GetNearestOrthoOpposite( TabNAD[j][1])
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
||||
-- imposto posizione braccio porta testa
|
||||
local nSCC = MCH_SCC.ADIR_YM
|
||||
@@ -620,10 +527,10 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
dStepmach = dMaxMat * 0.5
|
||||
end
|
||||
-- recupero la faccia con il maggior numero di adiacenze e l'elevazione relativa
|
||||
local nFacInd, dFacElev, nFacInd2, dFacElev2 = BL.GetFaceWithMostAdj( Proc.Id, nPartId, false, sin(dSideAngle))
|
||||
local nFacInd, dFacElev = BL.GetFaceWithMostAdj( Proc.Id, nPartId, false, sin(dSideAngle))
|
||||
if not nFacInd or nFacInd < 0 then
|
||||
-- provo eliminando i sottosquadra
|
||||
nFacInd, dFacElev, nFacInd2, dFacElev2 = BL.GetFaceWithMostAdj( Proc.Id, nPartId, false, -2)
|
||||
nFacInd, dFacElev = BL.GetFaceWithMostAdj( Proc.Id, nPartId, false, -2)
|
||||
if not nFacInd or nFacInd < 0 then
|
||||
local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' MakeMachByMill could not find reference face'
|
||||
EgtOutLog( sErr)
|
||||
@@ -663,7 +570,7 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
-- vettore di riferimento per le facce ortogonali all'asse trave
|
||||
local vtRef = Vector3d( 0, vtN:getY(), vtN:getZ())
|
||||
vtRef:normalize()
|
||||
local pPPnt = {}
|
||||
local TabNAD = {}
|
||||
-- ciclo inserimento tagli antischeggia sulle facce
|
||||
for i = 1, nFacetCnt do
|
||||
if (i-1) ~= nFacInd then
|
||||
@@ -673,7 +580,7 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
local dTrim
|
||||
local bTouch, ptP1, ptP2, dAng = EgtSurfTmFacetsContact( Proc.Id, nFacInd, (i-1), GDB_ID.ROOT)
|
||||
if dAng then
|
||||
pPPnt[i] = { vtN2, dAng, dist( ptP1, ptP2)}
|
||||
TabNAD[i] = { vtN2, dAng, dist( ptP1, ptP2)}
|
||||
end
|
||||
if bTouch and dAng < 0 and dAng > -90 - 5 * GEO.EPS_SMALL then
|
||||
dTrim = 0
|
||||
@@ -704,11 +611,11 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
-- calcolo la larghezza (solo 1 volta)
|
||||
if i == 1 then
|
||||
-- se ho un sottosquadra maggiore dell'angolo di spoglia utensile
|
||||
if bUCutMax and ( 90 + pPPnt[j][2]) < dSideAngle then
|
||||
if bUCutMax and ( 90 + TabNAD[j][2]) < dSideAngle then
|
||||
dParzElev = dFacElev
|
||||
end
|
||||
local dDeltadH = abs( pPPnt[j][3] - dH)
|
||||
local dDeltadV = abs( pPPnt[j][3] - dV)
|
||||
local dDeltadH = abs( TabNAD[j][3] - dH)
|
||||
local dDeltadV = abs( TabNAD[j][3] - dV)
|
||||
if dDeltadH < dDeltadV then
|
||||
if dDeltadH < dDelta + 10 * GEO.EPS_SMALL then
|
||||
dDelta = dDeltadH
|
||||
@@ -724,7 +631,7 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
end
|
||||
end
|
||||
-- valori negativi di offset corrispondono ad un allargamento (perchè dParzElev è negativo)
|
||||
dOffsSide = dOffsSide + ( tan( 90 + pPPnt[j][2]) * dParzElev)
|
||||
dOffsSide = dOffsSide + ( tan( 90 + TabNAD[j][2]) * dParzElev)
|
||||
end
|
||||
end
|
||||
-- se la larghezza è più grande dell'utensile allora posso lavorare il passo
|
||||
@@ -734,12 +641,12 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
for j = 1, nFacetCnt do
|
||||
if (j-1) ~= nFacInd then
|
||||
-- calcolo l'offset radiale in base all'affondamento
|
||||
local dOffrRad = ( tan( 90 + pPPnt[j][2]) * dOffs)
|
||||
if bUCutMax and ( 90 + pPPnt[j][2]) < dSideAngle then
|
||||
dOffrRad = -( tan( 90 + pPPnt[j][2]) * dFacElev)
|
||||
local dOffrRad = ( tan( 90 + TabNAD[j][2]) * dOffs)
|
||||
if bUCutMax and ( 90 + TabNAD[j][2]) < dSideAngle then
|
||||
dOffrRad = -( tan( 90 + TabNAD[j][2]) * dFacElev)
|
||||
end
|
||||
-- inserisco la lavorazione di fresatura
|
||||
local bOk, sErr = MakeMillCut( Proc, i, j, nil, sMilling, nFacInd, pPPnt, rfFac, dOffs, dOffrRad, 0, nStep, dToolDiam, dStep)
|
||||
local bOk, sErr = MakeMillCut( Proc, i, j, nil, sMilling, nFacInd, TabNAD, rfFac, dOffs, dOffrRad, 0, nStep, dToolDiam, dStep)
|
||||
if not bOk then
|
||||
return false, sErr
|
||||
else
|
||||
@@ -752,7 +659,7 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
for k = 1, nStepSide do
|
||||
local dAddOffsRad = ( k * dStepSide) + EgtIf( k == nStepSide, ( dToolDiam * 0.1), 0)
|
||||
-- inserisco la lavorazione di fresatura
|
||||
local bOk, sErr = MakeMillCut( Proc, i, j, k, sMilling, nFacInd, pPPnt, rfFac, dOffs, dOffrRad, dAddOffsRad, nStep, dToolDiam, dStep)
|
||||
local bOk, sErr = MakeMillCut( Proc, i, j, k, sMilling, nFacInd, TabNAD, rfFac, dOffs, dOffrRad, dAddOffsRad, nStep, dToolDiam, dStep)
|
||||
if not bOk then
|
||||
return false, sErr
|
||||
else
|
||||
@@ -777,23 +684,6 @@ local function MakeMachByMill( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b
|
||||
-- return false, sErr
|
||||
-- end
|
||||
|
||||
-- recupero la lavorazione
|
||||
--local dCollSic = 2 * BD.COLL_SIC
|
||||
--if abs( vtN:getX()) > 0.996 or abs( vtN:getY()) > 0.996 or abs( vtN:getZ()) > 0.996 then dCollSic = 0 end
|
||||
--local dDiam = min( dH, dV)
|
||||
--sMchFind = 'OpenPocketTCone'
|
||||
--local sPocketing = ML.FindPocketing( sMchFind, dDiam, dFacElev + dCollSic)
|
||||
---- se non trova una svuotatura adatta emetto un warning
|
||||
--if not sPocketing then
|
||||
-- local sWarn = 'Warning on process ' .. tostring( Proc.Id) .. ' not found any pocket or tool'
|
||||
-- EgtOutLog( sErr)
|
||||
-- return false, sErr
|
||||
--end
|
||||
---- eseguo la svuotatura della faccia principale
|
||||
--local tvtNx = {}
|
||||
--tvtNx[2] = vtN
|
||||
--local bOk, sWarn = MakePocket( Proc, nPartId, ptC, tvtNx, nFacInd, sMchFind, sPocketing, dFacElev, 'PockTCone')
|
||||
--if not bOk then return false, sWarn end
|
||||
return true, sWarn
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user