EgtGeomKernel :
- correzioni a booleane di TriMesh per buchi.
This commit is contained in:
+33
-61
@@ -1241,83 +1241,54 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
|
||||
}
|
||||
|
||||
Polygon3d pgPol ;
|
||||
pgPol.FromPolyLine( vPolygons[1]) ;
|
||||
pgPol.FromPolyLine(vPolygons[1]) ;
|
||||
|
||||
if ( trTria.GetN() * pgPol.GetVersN() > 0.) {
|
||||
bool bCodirectedNormals = trTria.GetN() * pgPol.GetVersN() > 0. ;
|
||||
if ( bCodirectedNormals) {
|
||||
for ( int nL = 1 ; nL < int( vPolygons.size()) ; ++ nL) {
|
||||
vPolygons[nL].Invert() ;
|
||||
}
|
||||
}
|
||||
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( vPolygons, vPt, vTr)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
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] = { Surf.AddVertex(vPt[nNewTriaVertId[0]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[1]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[2]]) } ;
|
||||
int nNewTriaNum = Surf.AddTriangle( nNewId) ;
|
||||
if ( IsValidSvt( nNewTriaNum)) {
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( vPolygons, vPt, vTr)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
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] = { Surf.AddVertex( vPt[nNewTriaVertId[0]]),
|
||||
Surf.AddVertex( vPt[nNewTriaVertId[1]]),
|
||||
Surf.AddVertex( vPt[nNewTriaVertId[2]])} ;
|
||||
int nNewTriaNum = Surf.AddTriangle( nNewId) ;
|
||||
if ( IsValidSvt( nNewTriaNum)) {
|
||||
if ( bCodirectedNormals)
|
||||
Surf.m_vTria[nNewTriaNum].nTempPart = -1 ;
|
||||
bModif = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ( int nL = 1 ; nL < int( vPolygons.size()) ; ++ nL) {
|
||||
vPolygons[nL].Invert() ;
|
||||
if ( Triangulate().Make( vPolygons[nL], vPt, vTr)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
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] = { Surf.AddVertex(vPt[nNewTriaVertId[0]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[1]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[2]]) } ;
|
||||
int nNewTriaNum = Surf.AddTriangle( nNewId) ;
|
||||
if ( IsValidSvt( nNewTriaNum)) {
|
||||
Surf.m_vTria[nNewTriaNum].nTempPart = 1 ;
|
||||
bModif = true ;
|
||||
}
|
||||
}
|
||||
else
|
||||
Surf.m_vTria[nNewTriaNum].nTempPart = 1 ;
|
||||
bModif = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( vPolygons, vPt, vTr)) {
|
||||
|
||||
for ( int nL = 1 ; nL < int( vPolygons.size()) ; ++ nL) {
|
||||
vPolygons[nL].Invert() ;
|
||||
if ( Triangulate().Make( vPolygons[nL], vPt, vTr)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
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] = { Surf.AddVertex(vPt[nNewTriaVertId[0]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[1]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[2]]) } ;
|
||||
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] = { Surf.AddVertex( vPt[nNewTriaVertId[0]]),
|
||||
Surf.AddVertex( vPt[nNewTriaVertId[1]]),
|
||||
Surf.AddVertex( vPt[nNewTriaVertId[2]])} ;
|
||||
int nNewTriaNum = Surf.AddTriangle( nNewId) ;
|
||||
if ( IsValidSvt( nNewTriaNum)) {
|
||||
Surf.m_vTria[nNewTriaNum].nTempPart = 1 ;
|
||||
if ( bCodirectedNormals)
|
||||
Surf.m_vTria[nNewTriaNum].nTempPart = 1 ;
|
||||
else
|
||||
Surf.m_vTria[nNewTriaNum].nTempPart = -1 ;
|
||||
bModif = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ( int nL = 1 ; nL < int( vPolygons.size()) ; ++ nL) {
|
||||
vPolygons[nL].Invert() ;
|
||||
if ( Triangulate().Make( vPolygons[nL], vPt, vTr)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
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] = { Surf.AddVertex(vPt[nNewTriaVertId[0]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[1]]),
|
||||
Surf.AddVertex(vPt[nNewTriaVertId[2]]) } ;
|
||||
int nNewTriaNum = Surf.AddTriangle( nNewId) ;
|
||||
if ( IsValidSvt( nNewTriaNum)) {
|
||||
Surf.m_vTria[nNewTriaNum].nTempPart = - 1 ;
|
||||
bModif = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
vInnerLoop.resize( 0) ;
|
||||
@@ -1439,6 +1410,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
else
|
||||
bIntOnEndgeA = true ;
|
||||
|
||||
swap( CurInters.ptSt, CurInters.ptEn) ;
|
||||
CurInters.vtOuter = trTriaA.GetN() ;
|
||||
CurInters.vtOuter -= ( ( CurInters.vtOuter * trTriaB.GetN()) * trTriaB.GetN()) ;
|
||||
CurInters.vtOuter.Normalize() ;
|
||||
|
||||
Reference in New Issue
Block a user