Miglioramento gestione facce complanari

This commit is contained in:
LorenzoM
2021-04-27 15:26:49 +02:00
parent c5e8a5753b
commit c56e573ae3
+8 -6
View File
@@ -4548,7 +4548,7 @@ SurfTriMesh::ItersectTriMeshFacets( SurfTriMesh& Other)
Point3d ptCentroidA, ptCentroidB ;
RegionA.GetCentroid( ptCentroidA) ;
RegionB.GetCentroid( ptCentroidB) ;
if ( AreSameVectorApprox( plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
if ( AreSameOrOppositeVectorApprox( plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
abs( ( ptCentroidB - ptCentroidA) * plPlaneA.GetVersN()) < EPS_SMALL) {
BBox3d b3Box, b3BoxB;
RegionA.GetLocalBBox(b3Box);
@@ -4607,7 +4607,7 @@ SurfTriMesh::ItersectTriMeshFacets( SurfTriMesh& Other)
Point3d ptCentroidA, ptCentroidB ;
RegionA.GetCentroid( ptCentroidA) ;
RegionB.GetCentroid( ptCentroidB) ;
if (AreSameVectorApprox(plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
if ( AreSameOrOppositeVectorApprox(plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
abs((ptCentroidB - ptCentroidA) * plPlaneA.GetVersN()) < EPS_SMALL) {
BBox3d b3Box, b3BoxB;
RegionA.GetLocalBBox(b3Box);
@@ -4670,6 +4670,10 @@ SurfTriMesh::ItersectTriMeshFacets( SurfTriMesh& Other)
auto itFacetB = NewFacetB.find( nFB) ;
// Faccia B divisa in pezzi
if ( itFacetB != NewFacetB.end()) {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (nFB == 1)
int a = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for ( int nPieceNumB = 0 ; nPieceNumB < int( itFacetB->second.size()) ; ++ nPieceNumB) {
POLYLINEVECTOR& vPieceLoopsVecB = itFacetB->second[nPieceNumB].vPieceLoop ;
PtrOwner<SurfFlatRegion> pRegB( GetBasicSurfFlatRegion( GetSurfFlatRegionFromPolyLineVector( vPieceLoopsVecB))) ;
@@ -4701,7 +4705,7 @@ SurfTriMesh::ItersectTriMeshFacets( SurfTriMesh& Other)
Point3d ptCentroidA, ptCentroidB ;
RegionA.GetCentroid( ptCentroidA) ;
RegionB.GetCentroid( ptCentroidB) ;
if ( AreSameVectorApprox( plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
if ( AreSameOrOppositeVectorApprox( plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
abs( ( ptCentroidB - ptCentroidA) * plPlaneA.GetVersN()) < EPS_SMALL) {
BBox3d b3Box, b3BoxB ;
RegionA.GetLocalBBox( b3Box) ;
@@ -4766,9 +4770,7 @@ SurfTriMesh::ItersectTriMeshFacets( SurfTriMesh& Other)
Point3d ptCentroidA, ptCentroidB ;
RegionA.GetCentroid( ptCentroidA) ;
RegionB.GetCentroid( ptCentroidB) ;
bool bVecOk = AreSameVectorApprox(plPlaneA.GetVersN(), plPlaneB.GetVersN());
double dOk = abs((ptCentroidB - ptCentroidA) * plPlaneA.GetVersN());
if ( AreSameVectorApprox( plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
if ( AreSameOrOppositeVectorApprox( plPlaneA.GetVersN(), plPlaneB.GetVersN()) &&
abs( ( ptCentroidB - ptCentroidA) * plPlaneA.GetVersN()) < EPS_SMALL) {
BBox3d b3Box, b3BoxB;
RegionA.GetLocalBBox(b3Box);