- In LapJoint -> MakeMoreFaces e Classify refactoring della gestione scanalatura chiusa

- in FeatureTopology modificata GetFacesParallelToPart per tunnel, pocket e groove 3 lati
This commit is contained in:
luca.mazzoleni
2023-09-27 11:54:33 +02:00
parent f54cfa7eb3
commit 1c25ca7667
2 changed files with 16 additions and 90 deletions
+14 -89
View File
@@ -75,6 +75,7 @@
-- 2023/08/10 Modificata scelta SCC per tasche in Y+/- in coda o quasi (anche per relativi antischeggia con lama).
-- 2023/09/12 In MakeByPockets gestito correttamente il ritorno nil di GetUShapeWidth.
-- 2023/09/26 Modificata chiamata a GetFaceWithMostAdj.
-- 2023/09/27 In MakeMoreFaces e Classify refactoring della gestione scanalatura chiusa.
-- Tabella per definizione modulo
local ProcessLapJoint = {}
@@ -87,6 +88,7 @@ local Cut = require( 'ProcessCut')
local DoubleCut = require( 'ProcessDoubleCut')
local LongCut = require( 'ProcessLongCut')
local Long2Cut = require( 'ProcessLongDoubleCut')
local Topology = require( 'FeatureTopology')
EgtOutLog( ' ProcessLapJoint started', 1)
@@ -635,6 +637,7 @@ function ProcessLapJoint.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
end
end
-- deve avere la normale principale diretta verso la testa
Topology.Classify( Proc, b3Raw)
local nFacInd, dElev = BL.GetFaceWithMostAdj( Proc, nPartId)
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT)
if vtN and vtN:getX() < 0.499 then
@@ -689,6 +692,7 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw)
end
end
-- deve avere la normale principale diretta verso la coda (oppure tunnel)
Topology.Classify( Proc, b3Raw)
local nFacInd, dElev, nFacInd2, dElev2 = BL.GetFaceWithMostAdj( Proc, nPartId)
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT)
if vtN and vtN:getZ() < BD.NZ_MINA and nFacInd2 then
@@ -753,52 +757,11 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
return true, false
end
end
-- se è una feature scanalatura (con 5 facce) e non è stata riconosciuta come fessura, eseguo altre verifiche
if Proc.Prc == 16 and Proc.Fct == 5 and not bClosedOrthoFaces then
-- recupero gruppo per geometria addizionale
local nAddGrpId = BL.GetAddGroup( nPartId)
if not nAddGrpId then
return false
end
-- dalla copia della superfice, ciclo eliminando una faccia per volta per verificare se trova fessura
for i = 1, Proc.Fct do
local nNewProc = {}
nNewProc.Id = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL
nNewProc.Topology = Proc.Topology
nNewProc.TopologyLongName = Proc.TopologyLongName
nNewProc.AllRightAngles = Proc.AllRightAngles
nNewProc.IsThrough = Proc.IsThrough
nNewProc.IsParallel = Proc.IsParallel
nNewProc.Fct = Proc.Fct
-- elimino una faccia
nDeletedFace = i - 1
if EgtSurfTmRemoveFacet( nNewProc.Id, nDeletedFace) then
-- recupero la faccia con il maggior numero di adiacenze e l'elevazione relativa
nFacInd, dElev, nFacInd2, dElev2 = BL.GetFaceWithMostAdj( nNewProc, nPartId)
if not nFacInd or nFacInd < 0 then
if nFacInd == -1 then
bClosedOrthoFaces = nFacInd2
EgtErase( nNewProc.Id)
break
else
EgtErase( nNewProc.Id)
return false
end
end
-- altrimenti esco
else
EgtErase( nNewProc.Id)
break
end
end
-- se riconosciuta fessura ricalcolo l'elevazione dalla faccia di fondo
if bClosedOrthoFaces then
nFacInd = nDeletedFace
-- rendo nulla la faccia opzionale perchè si tratta di una fessura
nFacInd2 = nil
dElev = BL.GetFaceElevation( Proc.Id, nFacInd)
bClosedOrthoFaces = false -- non lo setto come tunnel
end
-- se scanalatura chiusa lavoro la faccia di fondo
if Proc.Topology == 'Pocket' and ( Proc.IsParallel or Proc.AllRightAngles) and not bClosedOrthoFaces then
nFacInd = Topology.GetFacesWithGivenAdjacencyNumber( Proc, 4)[1]
nFacInd2 = nil
dElev = Proc.Face[ nFacInd + 1].Elevation
end
-- se facce formano un tunnel e sono ortogonali
if bClosedOrthoFaces then
@@ -4520,49 +4483,11 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
return false, sErr
end
end
-- se è una feature scanalatura (con 5 facce) e non è stata riconosciuta come fessura, eseguo altre verifiche
if Proc.Prc == 16 and Proc.Fct == 5 and not bClosedOrthoFaces then
-- dalla copia della superfice, ciclo eliminando una faccia per volta per verificare se trova fessura
for i = 1, Proc.Fct do
local nNewProc = {}
nNewProc.Id = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL
nNewProc.Topology = Proc.Topology
nNewProc.TopologyLongName = Proc.TopologyLongName
nNewProc.AllRightAngles = Proc.AllRightAngles
nNewProc.IsThrough = Proc.IsThrough
nNewProc.IsParallel = Proc.IsParallel
nNewProc.Fct = Proc.Fct
-- elimino una faccia
nBottomFace = i - 1
if EgtSurfTmRemoveFacet( nNewProc.Id, nBottomFace) then
-- recupero la faccia con il maggior numero di adiacenze e l'elevazione relativa
nFacInd, dFacElev, nFacInd2, dFacElev2 = BL.GetFaceWithMostAdj( nNewProc, nPartId)
if not nFacInd or nFacInd < 0 then
if nFacInd == -1 then
bClosedOrthoFaces = nFacInd2
EgtErase( nNewProc.Id)
break
else
EgtErase( nNewProc.Id)
local sErr = 'Error : MakeMoreFaces could not find reference face'
EgtOutLog( sErr)
return false, sErr
end
end
-- altrimenti esco
else
EgtErase( nNewProc.Id)
break
end
end
-- se riconosciuta fessura ricalcolo l'elevazione dalla faccia di fondo
if bClosedOrthoFaces then
nFacInd = nBottomFace
-- rendo nulla la faccia opzionale perchè si tratta di una fessura
nFacInd2 = nil
dFacElev = BL.GetFaceElevation( Proc.Id, nFacInd)
bClosedOrthoFaces = false -- non setto come tunnel
end
-- se scanalatura chiusa lavoro la faccia di fondo
if Proc.Topology == 'Pocket' and ( Proc.IsParallel or Proc.AllRightAngles) and not bClosedOrthoFaces then
nFacInd = Topology.GetFacesWithGivenAdjacencyNumber( Proc, 4)[1]
nFacInd2 = nil
dElev = Proc.Face[ nFacInd + 1].Elevation
end
-- se proviene da divisione in parti lungo X ed è un tunnel non è fattibile
if not bSinglePart and bClosedOrthoFaces then