This commit is contained in:
luca.bacis
2022-01-27 08:51:16 +01:00
parent 4e7e24f740
commit 2893ab0f02
+48 -49
View File
@@ -150,7 +150,7 @@ local function AssignQValues( Proc)
end
---------------------------------------------------------------------
local function EvaluateQParam()
local function EvaluateChamfer()
local sErr
-- verifico che lo smusso sia richiesto
local nChamfer = 0
@@ -229,33 +229,33 @@ local function InitGlob( Proc, nPhase, nRawId, nPartId, dOvmHead)
-- leggo i valori dei parametri Q
AssignQValues( Proc)
-- verifico se sono presenti i parametri Q per la profondità smusso e
-- verifico se sono presenti i parametri per la profondità smusso e
-- per eseguire in esclusiva solo lo smusso
_nChamfer, _dDepthCham, _sErrCham, _bForceUseBlade = EvaluateQParam()
_nChamfer, _dDepthCham, _sErrCham, _bForceUseBlade = EvaluateChamfer()
return true, ''
end
---------------------------------------------------------------------
local function UpdateFacet1Data( nProcId, tFData, nFacInd, dFacElev)
if not tFData then
tFData = {}
if not tFData then
tFData = {}
end
tFData.nFacInd = nFacInd
if dFacElev then
tFData.dFacElev = dFacElev
end
end
if tFData.nFacInd and tFData.nFacInd > -1 then
tFData.ptC, tFData.vtN = EgtSurfTmFacetCenter( nProcId, tFData.nFacInd, GDB_ID.ROOT)
tFData.rfFac, tFData.dH, tFData.dV = EgtSurfTmFacetMinAreaRectangle( nProcId, tFData.nFacInd, GDB_ID.ROOT)
end
tFData.rfFac, tFData.dH, tFData.dV = EgtSurfTmFacetMinAreaRectangle( nProcId, tFData.nFacInd, GDB_ID.ROOT)
end
return tFData
end
---------------------------------------------------------------------
local function UpdateFacet2Data( nProcId, tFData, nFacInd2, dFacElev2)
if not tFData then
tFData = {}
if not tFData then
tFData = {}
end
tFData.nFacInd2 = nFacInd2
if dFacElev2 then
@@ -335,7 +335,7 @@ local function GetValidFacetAdjacencies( nSurfId, nFacet)
vValidAdj = {}
for j = 1, #vFacAdj do
if vFacAdj[j] >= 0 then
table.insert(vValidAdj, vFacAdj[j])
table.insert( vValidAdj, vFacAdj[j])
end
end
end
@@ -396,7 +396,7 @@ local function TestElleShape4( Proc)
return 1
else
return 2
end
end
end
---------------------------------------------------------------------
@@ -404,7 +404,7 @@ end
local function TestUL( Proc)
local bIsU = ( Proc.Fct == 3 and not TestElleShape3( Proc))
-- verifico se due facce o L con una o due facce di terminazione
local bIsL = ( Proc.Fct == 2 or TestElleShape3( Proc) or TestElleShape4( Proc) == 2)
local bIsL = ( Proc.Fct == 2 or TestElleShape3( Proc) or TestElleShape4( Proc) == 2)
return bIsU, bIsL
end
@@ -648,14 +648,14 @@ local function GetTunnelDimension( Proc)
end
local frSurfInt, dDimMax, dDimMin = EgtSurfTmFacetMinAreaRectangle( nSurfInt, 0, GDB_ID.ROOT)
-- cerco la faccia con larghezza pari a dimensione massima della fessura
local nLongIdFace = 0
local nLongFaceId = 0
for i = 1, Proc.Fct do
if abs( vtN[i] * frSurfInt:getVersX()) < 0.5 then
nLongIdFace = i - 1
nLongFaceId = i - 1
break
end
end
return dDimMin, dDimMax, dDepth, vtOrtho, nLongIdFace, nSurfInt
return dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt
end
---------------------------------------------------------------------
@@ -815,10 +815,9 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
-- se 2 facce
elseif Proc.Fct == 2 then
-- dati delle facce
local ptC = {}
local vtN = {}
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
_, vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
_, 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()))
@@ -876,7 +875,7 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
-- se facce formano un tunnel e sono ortogonali
if bClosedOrthoFaces then
-- ottengo le dimensioni del tunnel
local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc)
local dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt = GetTunnelDimension( Proc)
EgtErase( nSurfInt)
-- verifico se può essere fatto con svuotatura
if VerifyPocket( dDimMin) then
@@ -895,7 +894,7 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
-- altrimenti controllo se deve essere ruotato con le altre lavorazioni
else
-- dati della faccia
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd, GDB_ID.ROOT)
local _, vtN = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd, GDB_ID.ROOT)
-- cerco se c'è faccia adiacente sul lato più lungo
local nFaceAdj = GetFaceAdj( Proc, tFData) or -1
local _, bIsL = TestUL( Proc)
@@ -904,17 +903,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 ptC2, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd2, GDB_ID.ROOT)
local _, 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 ptC2, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT)
local _, 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 ptC2, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT)
local _, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT)
bDown = ( vtN2:getZ() < BD.NZ_MINB)
end
end
@@ -931,7 +930,7 @@ 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
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
local _, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
-- verifico se orientata verso l'alto
local bUp = ( vtN:getZ() >= BD.NZ_MINA)
-- scelta faccia da lavorare
@@ -2093,7 +2092,7 @@ local function MakeDrillOnCorner( Proc, nFacInd, dDiam, bSpecialMach)
else
EgtSetGridFrame( Frame3d( tFacAdj[nIdLine][nIdIniPoint], vtExtr))
end
-- creo geometria
-- creo geometria
local AuxId = EgtCircle( _nAddGrpId, {0, 0, 0}, EgtIf( bIsDrilling, dDiamTool / 2, ( dDiamTool / 2) + 0.1), GDB_RT.GRID)
-- riporto la griglia a globale
EgtSetGridFrame()
@@ -2622,7 +2621,7 @@ local function DoHeadChainSaw( Proc, sName, sSawing, tFData, nFaceUse, nFacAdj,
end
---------------------------------------------------------------------
local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho, nLundIdFace,
local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho, nLongFaceId,
dOffs, dMaxMat, dSawCornerRad, bOpenStart, bOpenEnd)
local nMchFId = EgtAddMachining( sName, sSawing)
if not nMchFId then
@@ -2631,7 +2630,7 @@ local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho, nLund
return false, sErr
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, nLundIdFace}})
EgtSetMachiningGeometry( {{ Proc.Id, nLongFaceId}})
-- imposto uso del lato faccia
local nFaceUse
-- se non è un tunnel a 4 facce
@@ -2714,7 +2713,7 @@ local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho, nLund
end
---------------------------------------------------------------------
local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundIdFace,
local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLongFaceId,
bOrthoFacesMaster, nBottomFace, nSurfInt)
local bIs3Faces = Proc.Fct == 3
local bOrthoFaces
@@ -2739,7 +2738,7 @@ local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundI
if bOrthoFaces then
-- ottengo le dimensioni del tunnel
dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc)
dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt = GetTunnelDimension( Proc)
-- verifico la direzione
-- se devo inserire il chamfer
if _nChamfer > 0 then
@@ -2934,7 +2933,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, dSawCornerRad2, bOpenStart, bOpenEnd)
local bOk, sErr = DoSideChainSaw( Proc, sName, sSawing2, tFData, vtN, vtOrtho, nLongFaceId, dOffs, dMaxMat2, dSawCornerRad2, bOpenStart, bOpenEnd)
if not bOk then
return false, sErr
end
@@ -2981,7 +2980,7 @@ local function MakeAntiSplintBySaw( Proc, nFacet, vtN, nFacInd, bReduceDepth, bM
if bReduceDepth then
local dLimitDepth = 100
-- se ho ridotto l'affondamento ne riduco ulteriormente l'affondamento (50mm)
if abs(dExtraOffs) > 0 then
if abs( dExtraOffs) > 0 then
if dMaxDepth > dLimitDepth then
dExtraOffs = dLimitDepth - dDepth
end
@@ -2989,7 +2988,7 @@ local function MakeAntiSplintBySaw( Proc, nFacet, vtN, nFacInd, bReduceDepth, bM
if dDepth > dLimitDepth then
dExtraOffs = dLimitDepth - dDepth
else
dExtraOffs = -(dDepth / 2)
dExtraOffs = -( dDepth / 2)
end
end
end
@@ -2997,7 +2996,7 @@ local function MakeAntiSplintBySaw( Proc, nFacet, vtN, nFacInd, bReduceDepth, bM
local bMadeASbyBld, sWarn, nIdMach = Fbs.MakeOne( Proc.Id, nFacet, sCutting, dSawDiam, vtN, nil, ( -0.5 + dExtraOffs), BD.CUT_SIC, 0, 0, 0, nil, _b3Raw)
if bMadeASbyBld then
sWarn = nil
if abs(dExtraOffs) > 0 then
if abs( dExtraOffs) > 0 then
sWarn = 'Warning : antisplint elevation is bigger than max tool depth'
end
end
@@ -3346,7 +3345,7 @@ local function MakeByPockets( Proc, bOrthoFacesMaster, bMillDown)
local bOrthoFaces
local sWarn
local sMchFind = 'Pocket'
local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt
local dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt
local bBadMach = false
local bIs3Faces = Proc.Fct == 3
@@ -3368,7 +3367,7 @@ local function MakeByPockets( Proc, bOrthoFacesMaster, bMillDown)
-- se è un tunnel verifico se è possibile usare la svuotatura
if bOrthoFaces then
-- ottengo le dimensioni del tunnel
dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc)
dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt = GetTunnelDimension( Proc)
local nPathInt
-- se devo inserire il chamfer
if _nChamfer > 0 then
@@ -3546,12 +3545,12 @@ local function MakeByPockets( Proc, bOrthoFacesMaster, bMillDown)
end
end
end
return 1, sWarn, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId
return 1, sWarn, dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId
end
end
end
return 0, sWarn, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, bOrthoFaces
return 0, sWarn, dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, bOrthoFaces
end
---------------------------------------------------------------------
@@ -4209,7 +4208,7 @@ local function MakeSpecialThreeFaces( Proc, tFData)
end
---------------------------------------------------------------------
local function MakeByChainsaw( Proc, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace)
local function MakeByChainsaw( Proc, dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId)
-- verifico se posso farlo con la sega-catena
local bMakeChainSaw, sSawing, dMaxMat, dSawCornerRad, dSawThick = VerifyChainSaw( dDimMin, dDimMax)
@@ -4230,7 +4229,7 @@ local function MakeByChainsaw( Proc, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdF
return false, sErr
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, nLundIdFace}})
EgtSetMachiningGeometry( {{ Proc.Id, nLongFaceId}})
-- imposto uso del lato faccia
-- al momento, dato che la fessura è passante da parte a parte, gestisco solo la lavorazione
-- dall'alto e di fronte (da dietro è disabilitata perchè ho exracorsa con la FAST).
@@ -4240,7 +4239,7 @@ local function MakeByChainsaw( Proc, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdF
else
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_BACK)
end
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nLundIdFace, GDB_ID.ROOT)
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nLongFaceId, GDB_ID.ROOT)
-- imposto angolo 3° asse rot
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 1))
EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, vtOrtho))
@@ -4287,7 +4286,7 @@ local function MakeSidePocketings( Proc, tFData, dCollSic, bSpecialMillOnSide,
nBottomFace, sMillingOnSide, dToolDiamOnSide, dThickMillOnSide,
bSinglePart, bIsU, bIsL, dDiam, bMillDown, bMillUp, sMchFind, sMchFindBackUp)
local bTryWithBlades = true
local nOk, bOk, sWarn, sStat, sErr, dDimMin, dDimMax, dDepth, vtOrtho, bOrthoFaces, nSurfInt, sPocketing, nLundIdFace
local nOk, bOk, sWarn, sStat, sErr, dDimMin, dDimMax, dDepth, vtOrtho, bOrthoFaces, nSurfInt, sPocketing, nLongFaceId
if bSpecialMillOnSide then
-- eseguo
bOk, sWarn = MakeByMillAsSaw( Proc, tFData, nBottomFace, sMillingOnSide, dToolDiamOnSide, dThickMillOnSide)
@@ -4355,7 +4354,7 @@ local function MakeSidePocketings( Proc, tFData, dCollSic, bSpecialMillOnSide,
-- se devo inserire il chamfer
if ( ( Proc.Fct == 3 and bIsU) or (Proc.Fct == 2 and bIsL)) and _nChamfer > 0 then
-- ottengo le dimensioni dello pseudotunnel
local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc)
local dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt = GetTunnelDimension( Proc)
local nOk, sErr = MakeChamfer( Proc, vtOrtho, nSurfInt)
if nOk < 0 then return 1, false, sErr end
end
@@ -4384,7 +4383,7 @@ local function MakeSidePocketings( Proc, tFData, dCollSic, bSpecialMillOnSide,
-- lavoro con svuotature (singola o doppia contrapposta)
local dDiamTool = 100
local nPathInt, nSurfInt, bOneShot, nFirstMachId, bDoubleSide
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool,
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, dDiamTool,
bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, bOrthoFaces = MakeByPockets( Proc, nil, bMillDown)
if nOk == -2 then
if not sMchFind then
@@ -4432,7 +4431,7 @@ local function MakeSidePocketings( Proc, tFData, dCollSic, bSpecialMillOnSide,
tFData = SwapFacetsData( tFData)
end
-- eseguo
bOk, sWarn, sStat = MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundIdFace, bOrthoFaces, nBottomFace, nSurfInt)
bOk, sWarn, sStat = MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLongFaceId, bOrthoFaces, nBottomFace, nSurfInt)
if not bOk and sStat == 'MNF' then
_, sPocketing = VerifyPocket( dDiam, tFData.dFacElev + dCollSic, nil, sMchFind)
if sPocketing then
@@ -4695,7 +4694,7 @@ local function MakePocketingOrMilling( Proc, tFData, bSinglePart)
-- se devo inserire il chamfer
if ( ( Proc.Fct == 3 and bIsU) or (Proc.Fct == 2 and bIsL)) and _nChamfer > 0 then
-- ottengo le dimensioni dello pseudotunnel
local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc)
local dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt = GetTunnelDimension( Proc)
local nOk, sErr = MakeChamfer( Proc, vtOrtho, nSurfInt)
if nOk < 0 then return false, sErr end
end
@@ -4931,7 +4930,7 @@ local function MakeMoreFaces( Proc, bSinglePart, bPrevBhSideMill)
if bClosedOrthoFaces then
local bTryWithBlades = true
-- lavoro fessura con svuotature (singola o doppia contrapposta)
local nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace = MakeByPockets( Proc, bClosedOrthoFaces)
local nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId = MakeByPockets( Proc, bClosedOrthoFaces)
if nOk < 0 then
return false, sErr
elseif nOk > 0 then
@@ -4940,7 +4939,7 @@ local function MakeMoreFaces( Proc, bSinglePart, bPrevBhSideMill)
-- Se la svuotatura precedente non è stata fatta e chamfer non è mutuamente esclusivo provo con la sega-catena
if bTryWithBlades and _nChamfer < 2 then
-- verifico se posso farlo con la sega-catena
local bOk, sErr = MakeByChainsaw( Proc, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace)
local bOk, sErr = MakeByChainsaw( Proc, dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId)
if not bOk then
return false, sErr
end
@@ -5140,7 +5139,7 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
-- verifico se due facce o L con una o due facce di terminazione
local _, bIsL = TestUL( Proc)
if bIsL and _nChamfer > 0 then
local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc)
local dDimMin, dDimMax, dDepth, vtOrtho, nLongFaceId, nSurfInt = GetTunnelDimension( Proc)
local nOk, sErr = MakeChamfer( Proc, vtOrtho, _b3Solid, nSurfInt)
if nOk < 0 then return false, sErr end
end