- migliorie a GetMainFaces

- correzioni varie a STR0003
- piccola correzione a STR0002 in caso di groove passante (da completare)
This commit is contained in:
luca.mazzoleni
2024-05-30 18:17:30 +02:00
parent a5382e0847
commit 4160190886
6 changed files with 63 additions and 53 deletions
+20 -17
View File
@@ -101,7 +101,6 @@ function FaceData.GetFacesInfo( Proc, Part)
EgtOutLog( '---Faces START---')
local Faces = {}
local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( Proc.idPart, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
local vAdj
if Proc.AdjacencyMatrix then
vAdj = Proc.AdjacencyMatrix
@@ -126,7 +125,7 @@ function FaceData.GetFacesInfo( Proc, Part)
-- altezza OCS faccia
Faces[i].dHeight = dFaceHeight
-- elevazione calcolata rispetto al box della parte
Faces[i].dElevation = EgtSurfTmFacetElevationInBBox( Proc.id, i - 1, b3Solid, true, GDB_ID.ROOT)
Faces[i].dElevation = EgtSurfTmFacetElevationInBBox( Proc.id, i - 1, Part.b3Solid, true, GDB_ID.ROOT)
-- TODO qui sarebbe meglio l'area vera e non quella del rettangolo minimo
local _, dLongEdgeDimension, dShortEdgeDimension = EgtSurfTmFacetMinAreaRectangle( Proc.id, i - 1, GDB_ID.ROOT)
Faces[i].dArea = dShortEdgeDimension * dLongEdgeDimension
@@ -160,13 +159,10 @@ end
-------------------------------------------------------------------------------------------------------------
-- TODO valutare refactoring per mettere i calcoli del tunnel in una funzione
-- TODO valutare se restituire anche altre informazioni oltre alle facce (es: box); magari metterle in funzione a parte chiamata allo stesso livello della GetMainFAces
local function GetTunnelFaces( Proc)
-- TODO valutare se restituire anche altre informazioni oltre alle facce (es: box); magari metterle in funzione a parte chiamata allo stesso livello della GetMainFaces
local function GetTunnelFaces( Proc, Part)
local TunnelAddedFaces = {}
-- TODO scrivere il box della parte nella Proc o fare funzione per recuperarlo
local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( Proc.idPart, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
if not ( Proc.Topology.bIsThrough and Proc.Topology.bAllRightAngles and Proc.nFct < 5) then
error( 'GetTunnelFaces : Topology not implemented')
end
@@ -190,13 +186,18 @@ local function GetTunnelFaces( Proc)
-- faccia centrale, si crea larga come la parte e poi si trimma
TunnelAddedFaces.MiddleFaceTm = {}
TunnelAddedFaces.MiddleFaceTm.id = EgtSurfTmPlaneInBBox( nAddGrpId, ptTunnelCenter, vtTunnelDirection, b3Part, GDB_ID.ROOT)
TunnelAddedFaces.MiddleFaceTm.id = EgtSurfTmPlaneInBBox( nAddGrpId, ptTunnelCenter, vtTunnelDirection, Part.b3Solid, GDB_ID.ROOT)
-- TODO se non si riesce a costruire la faccia bisogna dare errore o semplicemente non ritornarla??
for i = 1, Proc.nFct do
EgtCutSurfTmPlane( TunnelAddedFaces.MiddleFaceTm.id, Proc.Faces[i].ptCenter, -Proc.Faces[i].vtN, false, GDB_ID.ROOT)
end
-- TODO c'è un modo più elegante per raccogliere le informazioni delle facce aggiunte
TunnelAddedFaces.MiddleFaceTm.Type = 'Tunnel'
-- TODO aggiungere anche informazioni Edges tunnel??
TunnelAddedFaces.MiddleFaceTm.nFct = 1
TunnelAddedFaces.MiddleFaceTm.Faces = FaceData.GetFacesInfo( TunnelAddedFaces.MiddleFaceTm, Part)
if TunnelAddedFaces.MiddleFaceTm.Faces[1].dHeight > TunnelAddedFaces.MiddleFaceTm.Faces[1].dWidth then
TunnelAddedFaces.MiddleFaceTm.Faces[1].dHeight, TunnelAddedFaces.MiddleFaceTm.Faces[1].dWidth = TunnelAddedFaces.MiddleFaceTm.Faces[1].dWidth, TunnelAddedFaces.MiddleFaceTm.Faces[1].dHeight
end
return TunnelAddedFaces
end
@@ -237,14 +238,16 @@ local function GetBottomFace( Proc)
BottomFace.MainEdges.LongEdges = {}
BottomFace.MainEdges.SideEdges = {}
local EdgesSortedByGreatestLength = {}
local ClosedEdgesSortedByGreatestLength = {}
for i = 1, #BottomFace.Edges do
EdgesSortedByGreatestLength[i] = {}
EdgesSortedByGreatestLength[i].nIndex = i
EdgesSortedByGreatestLength[i].dLength = BottomFace.Edges[i].Len
if not BottomFace.Edges[i].Open then
table.insert( ClosedEdgesSortedByGreatestLength, {})
ClosedEdgesSortedByGreatestLength[#ClosedEdgesSortedByGreatestLength].nIndex = i
ClosedEdgesSortedByGreatestLength[#ClosedEdgesSortedByGreatestLength].dLength = BottomFace.Edges[i].Len
end
end
table.sort( EdgesSortedByGreatestLength, function (a, b) return a.dLength > b.dLength end)
local nFirstLongEdgeIndex = EdgesSortedByGreatestLength[1].nIndex
table.sort( ClosedEdgesSortedByGreatestLength, function (a, b) return a.dLength > b.dLength end)
local nFirstLongEdgeIndex = ClosedEdgesSortedByGreatestLength[1].nIndex
for i = 1, #BottomFace.Edges do
local nPreviousEdgeIndex = i - 1
@@ -407,7 +410,7 @@ end
-------------------------------------------------------------------------------------------------------------
-- recupero facce principali della feature, in base alla topologia
function FaceData.GetMainFaces( Proc)
function FaceData.GetMainFaces( Proc, Part)
EgtOutLog( '---MainFaces START---')
local MainFaces = {}
@@ -416,7 +419,7 @@ function FaceData.GetMainFaces( Proc)
if Proc.Topology.sFamily == 'Rabbet' or Proc.Topology.sFamily == 'VGroove' or Proc.Topology.sFamily == 'Groove' or Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' then
if Proc.Topology.bIsThrough and Proc.Topology.bAllRightAngles and Proc.nFct < 5 then
MainFaces.TunnelAddedFaces = GetTunnelFaces( Proc)
MainFaces.TunnelAddedFaces = GetTunnelFaces( Proc, Part)
end
MainFaces.BottomFace = GetBottomFace( Proc)