- 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:
+14
-89
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user