EgtGeomKernel 2.2j3 :

- aggiunta in SurfTriMesh funzione CutWithOtherSurf.
This commit is contained in:
Dario Sassi
2020-10-15 09:01:15 +00:00
parent 680979c6d3
commit 18e297410f
3 changed files with 47 additions and 24 deletions
BIN
View File
Binary file not shown.
+1
View File
@@ -237,6 +237,7 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW
bool Subtract( const ISurfTriMesh& Other) override ;
bool GetSurfClassification( const ISurfTriMesh& ClassifierSurf,
INTVECTOR& vTriaIn, INTVECTOR& vTriaOut, INTVECTOR& vTriaOnP, INTVECTOR& vTriaOnM, INTVECTOR& vTriaIndef) override ;
bool CutWithOtherSurf( const ISurfTriMesh& CutterSurf, bool bInVsOut, bool bSaveOnEq) override ;
bool GetAllTriaOverlapBox( const BBox3d& b3Box, INTVECTOR& vT) const override ;
const BBox3d& GetAllTriaBox( void) const override ;
int GetPartCount( void) const override ;
+46 -24
View File
@@ -2408,15 +2408,13 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
AddTriangle( nNewVert, m_nMaxTFlag) ;
}
}
if ( ! AdjustVertices() || ! DoCompacting())
return false ;
RemoveTripleTriangles() ;
if ( ! AdjustVertices() || ! DoCompacting())
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
bool bOk = ( AdjustVertices() && DoCompacting()) ;
bOk && RemoveTripleTriangles() ;
bOk = bOk && ( AdjustVertices() && DoCompacting()) ;
bOk && RemoveTJunctions() ;
bOk = bOk && ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
return bOk ;
}
//----------------------------------------------------------------------------
@@ -2451,15 +2449,13 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
AddTriangle( nNewVert, m_nMaxTFlag) ;
}
}
if ( ! AdjustVertices() || ! DoCompacting())
return false ;
RemoveTripleTriangles() ;
if ( ! AdjustVertices() || ! DoCompacting())
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
bool bOk = ( AdjustVertices() && DoCompacting()) ;
bOk && RemoveTripleTriangles() ;
bOk = bOk && ( AdjustVertices() && DoCompacting()) ;
bOk && RemoveTJunctions() ;
bOk = bOk && ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
return bOk ;
}
//----------------------------------------------------------------------------
@@ -2495,15 +2491,13 @@ SurfTriMesh::Subtract( const ISurfTriMesh& Other)
AddTriangle( nNewVert, m_nMaxTFlag) ;
}
}
if ( ! AdjustVertices() || ! DoCompacting())
return false ;
RemoveTripleTriangles() ;
if ( ! AdjustVertices() || ! DoCompacting())
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
bool bOk = ( AdjustVertices() && DoCompacting()) ;
bOk && RemoveTripleTriangles() ;
bOk = bOk && ( AdjustVertices() && DoCompacting()) ;
bOk && RemoveTJunctions() ;
bOk = bOk && ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
return bOk ;
}
//----------------------------------------------------------------------------
@@ -2548,3 +2542,31 @@ SurfTriMesh::GetSurfClassification( const ISurfTriMesh& ClassifierSurf,
}
return true ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::CutWithOtherSurf( const ISurfTriMesh& CutterSurf, bool bInVsOut, bool bSaveOnEq)
{
// Le superfici devono essere valide
if ( ! IsValid() || ! CutterSurf.IsValid())
return false ;
m_OGrMgr.Clear() ;
SurfTriMesh SurfC ;
SurfC.CopyFrom( &CutterSurf) ;
Frame3d frScalingRef ;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfC.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfC) ;
IdentifyParts() ;
int nPartToRemove = ( bInVsOut ? -1 : 1) ;
int nCoplanarPartToRemove = ( bSaveOnEq ? ( nPartToRemove ? -2 : 2) : 5) ;
int nTriaNum = GetTriangleSize() ;
for ( int nT = 0 ; nT < nTriaNum ; ++ nT) {
if ( m_vTria[nT].nTempPart == nPartToRemove || m_vTria[nT].nTempPart == nCoplanarPartToRemove)
RemoveTriangle( nT) ;
}
bool bOk = ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bOk ;
}