EgtGeomKernel :

- in ChainCurves::Init si può passare la dimensione della cella
- corretta GetSurfTriMeshBox nel caso Regular
- chiamate asincrone in VolZmap per taglio spilloni delle tre matrici.
This commit is contained in:
Dario Sassi
2020-10-08 08:15:20 +00:00
parent 51b9263f69
commit 1cd887271f
6 changed files with 175 additions and 77 deletions
+17 -14
View File
@@ -33,6 +33,9 @@
using namespace std ;
//----------------------------------------------------------------------------
const double BOOLEAN_SCALE = 1024 ;
//----------------------------------------------------------------------------
static int
IntersRectangleTriangle( const Point3d& ptP, const Vector3d& vtL1, const Vector3d& vtL2,
@@ -951,7 +954,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
// Creo i loop
ChainCurves LoopCreator ;
LoopCreator.Init( false, 10 * EPS_SMALL, int( it->second.size())) ;
LoopCreator.Init( false, 10 * EPS_SMALL, int( it->second.size()), 10 * BOOLEAN_SCALE) ;
// Carico le curve per concatenarle
for ( int nCv = 0 ; nCv < int( it->second.size()); ++ nCv) {
Point3d ptSt = it->second[nCv].ptSt ;
@@ -962,7 +965,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
}
// Recupero i concatenamenti
INTVECTOR vIds ;
Point3d ptNearStart ;
Point3d ptNearStart = ( it->second.size() > 0 ? it->second[0].ptSt : ORIG) ;
CHAINVECTOR vChain ;
while ( LoopCreator.GetChainFromNear( ptNearStart, false, vIds)) {
Chain chTemp ;
@@ -2382,8 +2385,8 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
SurfB.CopyFrom( &Other) ;
Frame3d frScalingRef ;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfB.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfB.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfB) ;
IdentifyParts() ;
SurfB.IdentifyParts() ;
@@ -2412,7 +2415,7 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
}
@@ -2425,8 +2428,8 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
SurfB.CopyFrom( &Other) ;
Frame3d frScalingRef ;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfB.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfB.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfB) ;
IdentifyParts() ;
SurfB.IdentifyParts() ;
@@ -2455,7 +2458,7 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
}
@@ -2468,8 +2471,8 @@ SurfTriMesh::Subtract( const ISurfTriMesh& Other)
SurfB.CopyFrom( &Other) ;
Frame3d frScalingRef;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfB.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfB.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfB) ;
IdentifyParts() ;
SurfB.IdentifyParts() ;
@@ -2499,7 +2502,7 @@ SurfTriMesh::Subtract( const ISurfTriMesh& Other)
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
}
@@ -2515,11 +2518,11 @@ SurfTriMesh::GetSurfClassification( const ISurfTriMesh& ClassifierSurf,
SurfC.CopyFrom( &ClassifierSurf) ;
Frame3d frScalingRef ;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfC.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfC.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfC) ;
IdentifyParts() ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
int nTriaNum = GetTriangleSize() ;
for ( int nT = 0 ; nT < nTriaNum ; ++ nT) {