EgtGeomKernel 2.2j3 :
- aggiunta in SurfTriMesh funzione CutWithOtherSurf.
This commit is contained in:
Binary file not shown.
@@ -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
@@ -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 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user