EgtGeomKernel 2.2f4 :
- aggiunta gestione secondo colore in operazioni booleane tra superfici trimesh.
This commit is contained in:
+31
-9
@@ -2040,15 +2040,16 @@ SurfTriMesh::RemoveTJunctions(void)
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( Polygon, vPt, vTr)) {
|
||||
// Rimuovo il triangolo originale
|
||||
// Rimuovo il triangolo originale e salvo il suo flag
|
||||
int nTFlag = m_vTria[nT].nTFlag ;
|
||||
RemoveTriangle( nT) ;
|
||||
// Inserisco i nuovi triangoli che lo sostituiscono
|
||||
// Inserisco i nuovi triangoli che lo sostituiscono e asegno loro lo stesso flag
|
||||
for ( int n = 0 ; n < int( vTr.size()) - 2 ; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2]} ;
|
||||
int nNewId[3] = { AddVertex( vPt[nNewTriaVertId[0]]),
|
||||
AddVertex( vPt[nNewTriaVertId[1]]),
|
||||
AddVertex( vPt[nNewTriaVertId[2]])} ;
|
||||
AddTriangle( nNewId) ;
|
||||
AddTriangle( nNewId, nTFlag) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2171,13 +2172,22 @@ SurfTriMesh::ScanForTripleTriangles( bool& bModified)
|
||||
nAdjTriaContactEdge[(nAdjTria - 1) / 2] = nAdjEdge ;
|
||||
}
|
||||
}
|
||||
// Elimino i triangoli
|
||||
// Elimino i triangoli e salvo i loro Flag
|
||||
int vnTFlag[3] ;
|
||||
for ( int nTria = 0 ; nTria < 3 ; ++ nTria) {
|
||||
vnTFlag[nTria] = m_vTria[vTriaIndex[nTria]].nTFlag ;
|
||||
RemoveTriangle( vTriaIndex[nTria]) ;
|
||||
}
|
||||
// Aggiungo il novo triangolo
|
||||
// Aggiungo il nuovo triangolo con il flag
|
||||
int nNewTFlag ;
|
||||
if ( vnTFlag[0] == vnTFlag[1])
|
||||
nNewTFlag = vnTFlag[1] ;
|
||||
else if ( vnTFlag[0] == vnTFlag[2] || vnTFlag[1] == vnTFlag[2])
|
||||
nNewTFlag = vnTFlag[2] ;
|
||||
else
|
||||
nNewTFlag = 0 ;
|
||||
int nNewVert[3] = { vVertAndAdjTria[0], vVertAndAdjTria[2], vVertAndAdjTria[4] } ;
|
||||
int nNewTriaId = AddTriangle( nNewVert) ;
|
||||
int nNewTriaId = AddTriangle( nNewVert, nNewTFlag) ;
|
||||
if ( nNewTriaId != SVT_NULL) {
|
||||
// Sistemo le adiacenze
|
||||
m_vTria[nNewTriaId].nIdAdjac[0] = vVertAndAdjTria[1] ;
|
||||
@@ -2256,6 +2266,7 @@ SurfTriMesh::FlipTriangles( int nTA, int nTB)
|
||||
bool
|
||||
SurfTriMesh::Add( const ISurfTriMesh& Other)
|
||||
{
|
||||
m_OGrMgr.Clear() ;
|
||||
SurfTriMesh SurfB ;
|
||||
SurfB.CopyFrom( &Other) ;
|
||||
IntersectTriMeshTriangle( SurfB) ;
|
||||
@@ -2266,6 +2277,7 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
|
||||
if ( m_vTria[nTA].nTempPart == 1 || m_vTria[nTA].nTempPart == - 2)
|
||||
RemoveTriangle( nTA) ;
|
||||
}
|
||||
int nPrevMaxTFlag = m_nMaxTFlag ;
|
||||
int nTriaNumB = SurfB.GetTriangleSize() ;
|
||||
for ( int nTB = 0 ; nTB < nTriaNumB ; ++ nTB) {
|
||||
if ( SurfB.m_vTria[nTB].nTempPart == - 1) {
|
||||
@@ -2273,7 +2285,9 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
|
||||
for ( int nV = 0 ; nV < 3 ; ++ nV) {
|
||||
nNewVert[nV] = AddVertex( SurfB.m_vVert[SurfB.m_vTria[nTB].nIdVert[nV]].ptP) ;
|
||||
}
|
||||
AddTriangle( nNewVert) ;
|
||||
if ( nPrevMaxTFlag == m_nMaxTFlag)
|
||||
++ m_nMaxTFlag ;
|
||||
AddTriangle( nNewVert, m_nMaxTFlag) ;
|
||||
}
|
||||
}
|
||||
if ( ! AdjustVertices() || ! DoCompacting())
|
||||
@@ -2289,6 +2303,7 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
|
||||
bool
|
||||
SurfTriMesh::Intersect( const ISurfTriMesh& Other)
|
||||
{
|
||||
m_OGrMgr.Clear() ;
|
||||
SurfTriMesh SurfB ;
|
||||
SurfB.CopyFrom( &Other) ;
|
||||
IntersectTriMeshTriangle( SurfB) ;
|
||||
@@ -2299,6 +2314,7 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
|
||||
if ( m_vTria[nTA].nTempPart == - 1 || m_vTria[nTA].nTempPart == - 2)
|
||||
RemoveTriangle( nTA) ;
|
||||
}
|
||||
int nPrevMaxTFlag = m_nMaxTFlag ;
|
||||
int nTriaNumB = SurfB.GetTriangleSize() ;
|
||||
for ( int nTB = 0 ; nTB < nTriaNumB ; ++ nTB) {
|
||||
if ( SurfB.m_vTria[nTB].nTempPart == 1) {
|
||||
@@ -2306,7 +2322,9 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
|
||||
for ( int nV = 0 ; nV < 3 ; ++ nV) {
|
||||
nNewVert[nV] = AddVertex( SurfB.m_vVert[SurfB.m_vTria[nTB].nIdVert[nV]].ptP) ;
|
||||
}
|
||||
AddTriangle( nNewVert) ;
|
||||
if ( nPrevMaxTFlag == m_nMaxTFlag)
|
||||
++ m_nMaxTFlag ;
|
||||
AddTriangle( nNewVert, m_nMaxTFlag) ;
|
||||
}
|
||||
}
|
||||
if ( ! AdjustVertices() || ! DoCompacting())
|
||||
@@ -2322,6 +2340,7 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
|
||||
bool
|
||||
SurfTriMesh::Subtract( const ISurfTriMesh& Other)
|
||||
{
|
||||
m_OGrMgr.Clear() ;
|
||||
SurfTriMesh SurfB ;
|
||||
SurfB.CopyFrom( &Other) ;
|
||||
IntersectTriMeshTriangle( SurfB) ;
|
||||
@@ -2332,6 +2351,7 @@ SurfTriMesh::Subtract( const ISurfTriMesh& Other)
|
||||
if ( m_vTria[nTA].nTempPart == 1 || m_vTria[nTA].nTempPart == 2)
|
||||
RemoveTriangle( nTA) ;
|
||||
}
|
||||
int nPrevMaxTFlag = m_nMaxTFlag ;
|
||||
int nTriaNumB = SurfB.GetTriangleSize() ;
|
||||
for ( int nTB = 0 ; nTB < nTriaNumB ; ++ nTB) {
|
||||
if ( SurfB.m_vTria[nTB].nTempPart == 1) {
|
||||
@@ -2340,7 +2360,9 @@ SurfTriMesh::Subtract( const ISurfTriMesh& Other)
|
||||
nNewVert[nV] = AddVertex( SurfB.m_vVert[SurfB.m_vTria[nTB].nIdVert[nV]].ptP) ;
|
||||
}
|
||||
swap( nNewVert[1], nNewVert[2]) ;
|
||||
AddTriangle( nNewVert) ;
|
||||
if ( nPrevMaxTFlag == m_nMaxTFlag)
|
||||
++ m_nMaxTFlag ;
|
||||
AddTriangle( nNewVert, m_nMaxTFlag) ;
|
||||
}
|
||||
}
|
||||
if ( ! AdjustVertices() || ! DoCompacting())
|
||||
|
||||
Reference in New Issue
Block a user