DataWall :

- altre correzioni per pulizia spigoli.
This commit is contained in:
Dario Sassi
2021-03-24 12:14:28 +00:00
parent a26260ee6a
commit 631c356e54
2 changed files with 49 additions and 63 deletions
+47 -61
View File
@@ -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