diff --git a/SurfTriMesh.cpp b/SurfTriMesh.cpp index 7d883c9..cb7f6c0 100644 --- a/SurfTriMesh.cpp +++ b/SurfTriMesh.cpp @@ -1150,7 +1150,7 @@ SurfTriMesh::MarchOneTria( int& nT, int& nV, int nTimeStamp, //---------------------------------------------------------------------------- bool -SurfTriMesh::GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR& vPL, bool bAllTria) const +SurfTriMesh::GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR& vPL, bool bAllTria, double dLinTol) const { // Verifico lo stato if ( m_nStatus != OK) @@ -1163,6 +1163,7 @@ SurfTriMesh::GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR& // Controlli su tolleranza dTol = max( dTol, 100 * EPS_SMALL) ; + double dMyLinTol = max( EPS_SMALL, dLinTol) ; // Determino il riferimento di proiezione Frame3d frOCS ; frOCS.Set( ORIG, vtVers) ; @@ -1210,7 +1211,7 @@ SurfTriMesh::GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR& for ( int i = 0 ; i < pSfr->GetChunkCount() ; ++ i) { for ( int j = 0 ; j < pSfr->GetLoopCount( i) ; ++ j) { PolyLine PL ; - if ( ! pSfr->ApproxLoopWithLines( i, j, LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_STD, PL)) { + if ( ! pSfr->ApproxLoopWithLines( i, j, dMyLinTol, ANG_TOL_STD_DEG, ICurve::APL_STD, PL)) { vPL.clear() ; return false ; } @@ -1223,7 +1224,7 @@ SurfTriMesh::GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR& //---------------------------------------------------------------------------- bool -SurfTriMesh::GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR& vPL, bool bAllTria) const +SurfTriMesh::GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR& vPL, bool bAllTria, double dLinTol) const { // Verifico lo stato if ( m_nStatus != OK) @@ -1236,6 +1237,7 @@ SurfTriMesh::GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR& // Controlli su tolleranza dTol = max( dTol, 100 * EPS_SMALL) ; + double dMyLinTol = max( EPS_SMALL, dLinTol) ; // Determino il riferimento di proiezione Frame3d frOCS ; frOCS.Set( plPlane.GetPoint(), vtVers) ; @@ -1289,7 +1291,7 @@ SurfTriMesh::GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR& for ( int i = 0 ; i < pSfr->GetChunkCount() ; ++ i) { for ( int j = 0 ; j < pSfr->GetLoopCount( i) ; ++ j) { PolyLine PL ; - if ( ! pSfr->ApproxLoopWithLines( i, j, LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_STD, PL)) { + if ( ! pSfr->ApproxLoopWithLines( i, j, dMyLinTol, ANG_TOL_STD_DEG, ICurve::APL_STD, PL)) { vPL.clear() ; return false ; } diff --git a/SurfTriMesh.h b/SurfTriMesh.h index 44b1fa2..f052390 100644 --- a/SurfTriMesh.h +++ b/SurfTriMesh.h @@ -16,6 +16,7 @@ #include "ObjGraphicsMgr.h" #include "DllMain.h" #include "GeoObjRW.h" +#include "GeoConst.h" #include "/EgtDev/Include/EGkSurfTriMesh.h" #include "/EgtDev/Include/EGkHashGrids3d.h" #include "/EgtDev/Include/EGkPointGrid3d.h" @@ -295,8 +296,8 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW bool GetTriangleSmoothNormals( int nId, TriNormals3d& TNrms) const override ; SurfTriMesh* CloneTriangle( int nT) const override ; bool GetLoops( POLYLINEVECTOR& vPL) const override ; - bool GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR& vPL, bool bAllTria = false) const override ; - bool GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR& vPL, bool bAllTria = false) const override ; + bool GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR& vPL, bool bAllTria = false, double dLinTol = LIN_TOL_STD) const override ; + bool GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR& vPL, bool bAllTria = false, double dLinTol = LIN_TOL_STD) const override ; int GetFacetCount( void) const override ; int GetFacetSize( void) const override { return int( m_vFacet.size()) ; }