DataWall :
- altre correzioni per pulizia spigoli.
This commit is contained in:
@@ -205,75 +205,55 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function ReorderFaces( nIdSurf, nNumFacet)
|
||||
local vAdj = {}
|
||||
-- cerco una faccia senza precedenti
|
||||
local nFirstFac
|
||||
for i = 1, nNumFacet do
|
||||
local vFacAdj = EgtSurfTmFacetAdjacencies( nIdSurf, i - 1)[1]
|
||||
-- le conto
|
||||
local nCount = 0
|
||||
for j = 1, #vFacAdj do
|
||||
if vFacAdj[j] >= 0 then
|
||||
nCount = nCount + 1
|
||||
end
|
||||
end
|
||||
vAdj[i] = nCount
|
||||
end
|
||||
local nIdFace
|
||||
local nAdjMin = 1000
|
||||
for i = #vAdj, 1, -1 do
|
||||
if vAdj[i] <= nAdjMin then
|
||||
nAdjMin = vAdj[i]
|
||||
nIdFace = i
|
||||
end
|
||||
end
|
||||
-- se il numero faccia minore con minori adiacenze è <> 1 faccio lo scambio
|
||||
if nIdFace and nIdFace ~= 1 then
|
||||
EgtSurfTmSwapFacets( nIdSurf, nIdFace-1, 0)
|
||||
end
|
||||
-- ordino il numero di facce in modo da avere una sequenza di facce concatenate
|
||||
for i = 1, (nNumFacet-1) do
|
||||
-- recupero l'angolo con la faccia precedente
|
||||
local bAdj, _, _, _ = EgtSurfTmFacetsContact( nIdSurf, i-1, i, GDB_ID.ROOT)
|
||||
-- se non ho adiacenza
|
||||
if not bAdj then
|
||||
for j = i+1, nNumFacet do
|
||||
bAdj, _, _, _ = EgtSurfTmFacetsContact( nIdSurf, i-1, j-1, GDB_ID.ROOT)
|
||||
-- se ho adiacenza scambio le facce
|
||||
if bAdj then
|
||||
EgtSurfTmSwapFacets( nIdSurf, i, (j-1))
|
||||
-- centro e normale della faccia
|
||||
local ptCen, vtN = EgtSurfTmFacetCenter( nIdSurf, i - 1, GDB_ID.ROOT)
|
||||
-- verifico con le altre facce
|
||||
local bFoundPrec
|
||||
for j = 1, nNumFacet do
|
||||
if j ~= i then
|
||||
-- verifico se è precedente
|
||||
local bAdj, ptP1, _, _ = EgtSurfTmFacetsContact( nIdSurf, i - 1, j - 1, GDB_ID.ROOT)
|
||||
if bAdj and ( vtN ^ ( ptCen - ptP1)) * Z_AX() > 0 then
|
||||
bFoundPrec = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if not bFoundPrec then
|
||||
nFirstFac = i
|
||||
break
|
||||
end
|
||||
end
|
||||
-- se trovata, la metto al primo posto
|
||||
if nFirstFac and nFirstFac ~= 1 then
|
||||
EgtSurfTmSwapFacets( nIdSurf, nFirstFac - 1, 0)
|
||||
end
|
||||
-- ordino le facce in modo da avere una sequenza ordinata con le normali a destra
|
||||
for i = 1, nNumFacet - 1 do
|
||||
-- centro e normale della faccia
|
||||
local ptCen, vtN = EgtSurfTmFacetCenter( nIdSurf, i - 1, GDB_ID.ROOT)
|
||||
-- cerco la successiva
|
||||
for j = i + 1, nNumFacet do
|
||||
-- verifico se è successiva
|
||||
local bAdj, ptP1, _, _ = EgtSurfTmFacetsContact( nIdSurf, i - 1, j - 1, GDB_ID.ROOT)
|
||||
if bAdj and ( vtN ^ ( ptP1 - ptCen)) * Z_AX() > 0 then
|
||||
EgtSurfTmSwapFacets( nIdSurf, i, j - 1)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
return nIdSurf
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFaceToDel)
|
||||
|
||||
-- copio la superfice nel gruppo ausiliario
|
||||
local nNewProc = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL
|
||||
EgtSurfTmRemoveFacet( nNewProc, nFaceToDel)
|
||||
local nNumFacet = EgtSurfTmFacetCount( nNewProc)
|
||||
nNewProc = ReorderFaces( nNewProc, nNumFacet)
|
||||
--[[
|
||||
-- ordino il numero di facce in modo da avere una sequenza di facce concatenate
|
||||
for i = 1, (nNumFacet-1) do
|
||||
-- recupero l'angolo con la faccia precedente
|
||||
local bAdj, _, _, _ = EgtSurfTmFacetsContact( nNewProc, i-1, i, GDB_ID.ROOT)
|
||||
-- se non ho adiacenza
|
||||
if not bAdj then
|
||||
for j = i+1, nNumFacet do
|
||||
bAdj, _, _, _ = EgtSurfTmFacetsContact( nNewProc, i-1, j-1, GDB_ID.ROOT)
|
||||
-- se ho adiacenza scambio le facce
|
||||
if bAdj then
|
||||
EgtSurfTmSwapFacets( nNewProc, i, (j-1))
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
]]--
|
||||
ReorderFaces( nNewProc, nNumFacet)
|
||||
return nNewProc, nNumFacet
|
||||
end
|
||||
|
||||
@@ -284,7 +264,7 @@ local function GetFacesData( nNewProc, bOpposite, bCalclForBlade, dToolDiam, dTo
|
||||
local vFace = {}
|
||||
-- recupero i dati di tutte le facce
|
||||
for i = 1, nNumFacet do
|
||||
-- indice faccia corrente e precedente
|
||||
-- indici faccia corrente e precedente
|
||||
local nFac = EgtIf( bOpposite, nNumFacet - i, i - 1)
|
||||
local nPrecFac
|
||||
if bOpposite then
|
||||
@@ -298,6 +278,12 @@ local function GetFacesData( nNewProc, bOpposite, bCalclForBlade, dToolDiam, dTo
|
||||
local _, dLen, dWidth = WL.GetFaceHvRefDim( nNewProc, nFac)
|
||||
-- recupero l'angolo con la faccia precedente
|
||||
local bAdj, ptLocP1, ptLocP2, dAng = EgtSurfTmFacetsContact( nNewProc, nPrecFac, nFac, GDB_ID.ROOT)
|
||||
-- verifico che l'adiacenza sia veramente con il precedente (percorro con normale a destra)
|
||||
if bAdj then
|
||||
if ( vtN ^ ( ptLocP1 - ptCen)) * Z_AX() > 0 then
|
||||
bAdj = false
|
||||
end
|
||||
end
|
||||
-- salvo i dati
|
||||
vFace[i] = { Fac = nFac, Cen = ptCen, Norm = vtN, Len = dLen, Width = dWidth, AngPrev = EgtIf( bAdj, dAng, 0)}
|
||||
if bAdj then
|
||||
@@ -322,7 +308,7 @@ local function GetFacesData( nNewProc, bOpposite, bCalclForBlade, dToolDiam, dTo
|
||||
end
|
||||
-- lunghezza baffo
|
||||
local dElev = vFace[i].Width + dDepth
|
||||
local dWhisk = EgtIf( bCalclForBlade, ( dElev * sqrt( dToolDiam / dElev - 1) + WHISK_SAFE) , (dToolDiam/2) + WHISK_SAFE)
|
||||
local dWhisk = EgtIf( bCalclForBlade, ( dElev * sqrt( dToolDiam / dElev - 1) + WHISK_SAFE), (dToolDiam/2) + WHISK_SAFE)
|
||||
-- determino la lunghezza del taglio passante e il tipo di attacco e uscita
|
||||
local dLen = vFace[i].Len
|
||||
local nType = 0
|
||||
@@ -505,7 +491,7 @@ local function ReorderFacesFromTab( nIdSurf, vFace)
|
||||
local ptC, vtN = EgtSurfTmFacetCenter( nIdSurf, (j-1), GDB_ID.ROOT)
|
||||
-- se versore e posizione coincidono e non corrispondono al numero faccia, faccio lo swap
|
||||
if AreSameVectorExact( vFace[i].Norm, vtN) and AreSamePointEpsilon( vFace[i].Cen, ptC, 50*GEO.EPS_SMALL) then
|
||||
if (j-1) ~= vFace[i].Fac then
|
||||
if j - 1 ~= vFace[i].Fac then
|
||||
EgtSurfTmSwapFacets( nIdSurf, vFace[i].Fac, (j-1))
|
||||
end
|
||||
break
|
||||
@@ -677,7 +663,7 @@ local function AddMillCornerMachining( nPartId, nNewProc, nFacInd, tFacAdj, nTyp
|
||||
ptApPoint = ptLocP1
|
||||
end
|
||||
nAuxId = EgtLine( nAddGrpId, tFacAdj[1][nIdEndPoint] + Point3d( 0, 0, -dDepthMach), ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB)
|
||||
local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 2)
|
||||
local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 0.2)
|
||||
-- se la distanza dei due punti della linea è maggiore dal raggio fresa + delta, trimmo al raggio fresa + delta
|
||||
if dLenTrimExt > 10 * GEO.EPS_SMALL then
|
||||
EgtTrimExtendCurveByLen( nAuxId , -dLenTrimExt, ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB)
|
||||
@@ -715,7 +701,7 @@ local function AddMillCornerMachining( nPartId, nNewProc, nFacInd, tFacAdj, nTyp
|
||||
-- se offset angolare valido e/o negativo creo il baffo precedente
|
||||
if dOffsAng > -( 100 * GEO.EPS_SMALL) then
|
||||
nAuxId = EgtLine( nAddGrpId, tFacAdj[1][nIdEndPoint] + Point3d( 0, 0, -dDepthMach), ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB)
|
||||
local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 2)
|
||||
local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 0.2)
|
||||
-- se la distanza dei due punti della linea è maggiore dal raggio fresa + delta, trimmo al raggio fresa + delta
|
||||
if dLenTrimExt > 10 * GEO.EPS_SMALL then
|
||||
EgtTrimExtendCurveByLen( nAuxId , -dLenTrimExt, ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB)
|
||||
@@ -857,7 +843,7 @@ local function AddMillCorner( nTypeConeCut, vFace, Proc, nRawId, b3Raw,
|
||||
dMillDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam
|
||||
dThickTool = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dThickTool
|
||||
dToolLength = EgtTdbGetCurrToolParam( MCH_TP.LEN) or dToolLength
|
||||
dMaxDepth = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxDepth -- qui è la distanza dal portautensile
|
||||
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth -- qui è la distanza dal portautensile
|
||||
-- calcolo il secondo diametro del cono
|
||||
dMillTotDiam = dMillDiam + ( abs(dThickTool) * tan(dSideAng)) * 2
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user