- aggiunto parametro dSawCornerRad a DoSideChainSaw

This commit is contained in:
luca.bacis
2022-01-25 17:41:27 +01:00
parent c46cec0538
commit 4e7e24f740
+26 -25
View File
@@ -35,6 +35,7 @@
-- 2021/12/17 Lettura parametri Q una volta sola all'inizio.
-- 2022/01/13 Estrapolazione da MakeMoreFaces() di MakeTwoFaces() e MakeThreeFaces(), e varie ottimizzazioni.
-- 2022/01/19 Cambiata % lunghezza pezzo per spezzatura. Tolta correzione spessore fresa a disco con superficie da lavorare verso Z-.
-- 2022/01/28 Aggiunte funzioni DoClean, DoPocketing, DoHeadChainSaw, DoSideChainSaw e DoHeadCut.
-- Tabella per definizione modulo
local ProcessLapJoint = {}
@@ -552,7 +553,7 @@ local function VerifyBHSideMill( Proc, bSinglePart, bPrevBhSideMill)
if bIsU or bIsL then
local bExit = false
for i = 1, Proc.Fct do
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, i - 1, GDB_ID.ROOT)
local _, vtN = EgtSurfTmFacetCenter( Proc.Id, i - 1, GDB_ID.ROOT)
if abs( vtN:getX()) > 0.001 and abs( vtN:getX()) < 0.999962 then
bExit = true
break
@@ -713,7 +714,7 @@ function ProcessLapJoint.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
end
-- se una sola faccia
if Proc.Fct == 1 then
local ptC, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
local _, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
if vtN0:getX() > 0.1 then
return true
end
@@ -757,7 +758,7 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw)
end
-- se una sola faccia
if Proc.Fct == 1 then
local ptC, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
local _, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
if vtN0:getX() < -0.1 then
return true
end
@@ -814,9 +815,10 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
-- se 2 facce
elseif Proc.Fct == 2 then
-- dati delle facce
local ptC = {}
local vtN = {}
_, vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
_, vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
-- verifico se è lavorabile solo dal basso
local bSmall = ( ( Proc.Head or Proc.Tail) and Proc.Box:getDimX() <= BD.GetMaxLenRidgeLapFromBottom( b3Raw:getDimZ())) or
( not ( Proc.Head or Proc.Tail) and Proc.Box:getDimY() <= BD.GetMaxLenRidgeLapFromBottom( b3Raw:getDimZ()))
@@ -902,17 +904,17 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
-- se verso il basso, verifico se utilizzabile seconda faccia
if bDown then
if tFData.nFacInd2 and tFData.dFacElev2 < 2 * tFData.dFacElev then
local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd2, GDB_ID.ROOT)
local ptC2, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd2, GDB_ID.ROOT)
bDown = ( vtN2:getZ() < BD.NZ_MINB)
elseif not tFData.nFacInd2 and bIsL and nFaceAdj >= 0 then
local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT)
local ptC2, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT)
bDown = ( vtN2:getZ() < BD.NZ_MINB)
end
-- verifico se la faccia principale è sottosquadra, ha forma L ed esiste la faccia adiacente
elseif vtN:getZ() < -0.2589 and bIsL and nFaceAdj >= 0 then
-- se il numero di facce > 2 o il box della feature supera una certa distanza dalle teste allora controllo la z della faccia ausiliaria
if Proc.Fct > 2 or ( Proc.Box:getMax():getX() < _b3Solid:getMin():getX() - 150) or ( Proc.Box:getMin():getX() > _b3Solid:getMax():getX() + 150) then
local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT)
local ptC2, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT)
bDown = ( vtN2:getZ() < BD.NZ_MINB)
end
end
@@ -926,7 +928,6 @@ end
-- Lavorazione con fresa
---------------------------------------------------------------------
local function MakeOneFaceByMill( Proc)
-- verifico il numero di facce della tacca
assert( ( Proc.Fct == 1), 'Error : MakeOneFaceByMill in LapJoint with ' .. tostring( Proc.Fct) .. ' faces')
-- dati della faccia
@@ -1112,7 +1113,6 @@ local function MakeTwoFacesByMill( Proc, bDownHead)
sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
bOk, sErr = DoMill( Proc, sName, sMilling, 0, nFacInd, nOthInd, vtN)
if not bOk then return bOk, sErr end
-- eventuale segnalazione ingombro di testa o coda
local dMinHIng = min( 0.5 * BD.VICE_MINH, 0.5 * _b3Raw:getDimZ())
if Proc.Box:getDimZ() > dMinHIng and Proc.Box:getMin():getZ() < _b3Raw:getMin():getZ() + dMinHIng then
@@ -1363,7 +1363,7 @@ local function CheckToInvert( AuxId, bPositive)
local nNewEntId = EgtCopyGlob( AuxId, sParnt)
-- chiudo il percorso
if EgtCloseCurveCompo( nNewEntId) then
local vtMPlane, _, dArea = EgtCurveArea( nNewEntId)
local vtMPlane, dDist, dArea = EgtCurveArea( nNewEntId)
-- cancello percorso copia
EgtErase( nNewEntId)
if dArea and abs(dArea) > 1 then
@@ -2041,9 +2041,9 @@ local function MakeDrillOnCorner( Proc, nFacInd, dDiam, bSpecialMach)
if nIdIniPoint and nIdEndPoint then
local vtExtr
if bSpecialMach then
local ptC, vtN0 = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT)
local ptC, vtN1 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][1], GDB_ID.ROOT)
local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][2], GDB_ID.ROOT)
local _, vtN0 = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT)
local _, vtN1 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][1], GDB_ID.ROOT)
local _, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][2], GDB_ID.ROOT)
vtExtr = vtN0 + vtN1 + vtN2
else
-- versore direzione
@@ -2460,7 +2460,7 @@ local function MakeByMillAsSaw( Proc, tFData, nBottomFace, sMillingOnSide, dSawD
return false, sErr
end
-- Riordino le dimensioni per avere dH come lato lungo e dV come perpendicolare
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT)
local _, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT)
if abs( vtN * tFData.rfFac:getVersX()) > abs( vtN * tFData.rfFac:getVersY()) then
tFData.dH, tFData.dV = tFData.dV, tFData.dH
end
@@ -2622,8 +2622,8 @@ local function DoHeadChainSaw( Proc, sName, sSawing, tFData, nFaceUse, nFacAdj,
end
---------------------------------------------------------------------
local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho,
nLundIdFace, dOffs, dMaxMat, bOpenStart, bOpenEnd)
local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho, nLundIdFace,
dOffs, dMaxMat, dSawCornerRad, bOpenStart, bOpenEnd)
local nMchFId = EgtAddMachining( sName, sSawing)
if not nMchFId then
local sErr = 'Error adding machining ' .. sName .. '-' .. sSawing
@@ -2673,8 +2673,8 @@ local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho,
-- altrimenti vero tunnel (solo sopra-sotto o davanti-dietro)
else
-- se possibile aumento l'affondamento pari al raggio corner + 1
if dMaxMat > ( dDepth + dSawCornerRad2 + 1) then
EgtSetMachiningParam( MCH_MP.DEPTH, ( dDepth + dSawCornerRad2 + 1))
if dMaxMat > ( dDepth + dSawCornerRad + 1) then
EgtSetMachiningParam( MCH_MP.DEPTH, ( dDepth + dSawCornerRad + 1))
-- se massimo affondamento supera altezza fessura, uso massimo affondamento
elseif dMaxMat > ( dDepth + 1) then
EgtSetMachiningParam( MCH_MP.DEPTH, ( dMaxMat - 1))
@@ -2723,7 +2723,7 @@ local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundI
local dDistToNextPiece = EgtGetInfo( _nRawId, 'BDST', 'd') or 5.4
if bIs3Faces then
-- recupero la faccia con il maggior numero di adiacenze e l'elevazione relativa
local nFacInd1, _, nFacInd2, _ = BL.GetFaceWithMostAdj( Proc.Id, _nPartId, bIs3Faces)
local nFacInd1, dFacElev1, nFacInd2, dFacElev2 = BL.GetFaceWithMostAdj( Proc.Id, _nPartId, bIs3Faces)
if not nFacInd1 or nFacInd1 < 0 then
if nFacInd1 == -1 then
bOrthoFaces = nFacInd2
@@ -2739,7 +2739,7 @@ local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundI
if bOrthoFaces then
-- ottengo le dimensioni del tunnel
dDimMin, dDimMax, _, vtOrtho, _, nSurfInt = GetTunnelDimension( Proc)
dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc)
-- verifico la direzione
-- se devo inserire il chamfer
if _nChamfer > 0 then
@@ -2773,7 +2773,7 @@ local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundI
return false, sErr
end
-- Riordino le dimensioni per avere dH come lato lungo e dV come perpendicolare
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT)
local _, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT)
if abs( vtN * tFData.rfFac:getVersX()) > abs( vtN * tFData.rfFac:getVersY()) then
tFData.dH, tFData.dV = tFData.dV, tFData.dH
end
@@ -2934,7 +2934,7 @@ local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundI
-- inserisco la lavorazione di sawing
local sName = sName .. 'Csaw_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i)
local dOffs = ( i - 1) * dStep
local bOk, sErr = DoSideChainSaw(Proc, sName, sSawing2, tFData, vtN, vtOrtho, nLundIdFace, dOffs, dMaxMat2, bOpenStart, bOpenEnd)
local bOk, sErr = DoSideChainSaw(Proc, sName, sSawing2, tFData, vtN, vtOrtho, nLundIdFace, dOffs, dMaxMat2, dSawCornerRad2, bOpenStart, bOpenEnd)
if not bOk then
return false, sErr
end
@@ -5117,9 +5117,10 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
-- verifico se da lavorare con testa da sotto
local bDownHead = false
if BD.DOWN_HEAD then
local ptC = {}
local vtN = {}
_, vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
_, vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
local vtNm = ( vtN[1] + vtN[2])
vtNm:normalize()
bDownHead = ( vtNm:getZ() < -0.5)