From c56e573ae3a98ce2d0aef3fa774d7fd421ec5cac Mon Sep 17 00:00:00 2001 From: LorenzoM Date: Tue, 27 Apr 2021 15:26:49 +0200 Subject: [PATCH] Miglioramento gestione facce complanari --- SurfTriMeshBooleans.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/SurfTriMeshBooleans.cpp b/SurfTriMeshBooleans.cpp index 74dfe23..a646862 100644 --- a/SurfTriMeshBooleans.cpp +++ b/SurfTriMeshBooleans.cpp @@ -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 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);