Include :

- aggiunto Triangle3dEx
- modifiche interfacce Zmap per Triangle3dEx.
This commit is contained in:
Dario Sassi
2018-01-22 11:04:55 +00:00
parent c4e34a1d64
commit 9eee64227c
2 changed files with 89 additions and 9 deletions
+87 -7
View File
@@ -23,7 +23,7 @@
class Triangle3d
{
public :
Triangle3d( void) : m_nFlag( 0)
Triangle3d( void) : m_nGrade( 0)
{ m_nAttr[0] = 0 ; m_nAttr[1] = 0 ; m_nAttr[2] = 0 ; }
void Set( const Point3d& ptP0, const Point3d& ptP1, const Point3d& ptP2)
{ m_ptP[0] = ptP0 ; m_ptP[1] = ptP1 ; m_ptP[2] = ptP2 ; m_vtN.Set( 0, 0, 0) ; }
@@ -35,8 +35,8 @@ class Triangle3d
m_ptP[nInd] = ptV ;
return true ;
}
bool SetFlag( int nFlag)
{ m_nFlag = nFlag ;
bool SetGrade( int nFlag)
{ m_nGrade = nFlag ;
return true ;
}
bool SetAttrib( int nInd, int nVal)
@@ -112,8 +112,8 @@ class Triangle3d
else
return m_ptP[2] ;
}
int GetFlag( void) const
{ return m_nFlag ; }
int GetGrade( void) const
{ return m_nGrade ; }
int GetAttrib( int nInd) const
{ if ( nInd >= 0 && nInd < 3)
return m_nAttr[nInd] ;
@@ -139,10 +139,10 @@ class Triangle3d
return ( (std::max)( dSqDistA, (std::max)( dSqDistB, dSqDistC)) / dTwoArea) ;
}
private :
protected :
Point3d m_ptP[3] ;
Vector3d m_vtN ;
int m_nFlag ;
int m_nGrade ;
int m_nAttr[3] ;
} ;
@@ -156,6 +156,14 @@ typedef std::vector<TRIA3DLIST> TRIA3DLISTVECTOR ; // vettore di liste di Tria
// Flags indicanti se i lati sono parte del contorno di un poligono di più triangoli
class TriFlags3d
{
public :
TriFlags3d( void)
{ bFlag[0] = true ; bFlag[1] = true ; bFlag[2] = true ; }
TriFlags3d( bool bF)
{ bFlag[0] = bF ; bFlag[1] = bF ; bFlag[2] = bF ; }
TriFlags3d( bool bF0, bool bF1, bool bF2)
{ bFlag[0] = bF0 ; bFlag[1] = bF1 ; bFlag[2] = bF2 ; }
public :
bool bFlag[3] ;
} ;
@@ -164,10 +172,82 @@ class TriFlags3d
// Normali sui vertici, ottenute mediando opportunamente coi triangoli vicini
class TriNormals3d
{
public :
TriNormals3d( void)
{}
TriNormals3d( const Vector3d& vtNrm)
{ vtN[0] = vtNrm ; vtN[1] = vtNrm ; vtN[2] = vtNrm ; }
TriNormals3d( const Vector3d& vtN0, const Vector3d& vtN1, const Vector3d& vtN2)
{ vtN[0] = vtN0 ; vtN[1] = vtN1 ; vtN[2] = vtN2 ; }
public :
Vector3d vtN[3] ;
} ;
//-----------------------------------------------------------------------------
// Classe derivata da Triangle3d che include anche i flag dei lati e le normali dei vertici
class Triangle3dEx : public Triangle3d
{
public :
Triangle3dEx( void)
{}
Triangle3dEx( const Triangle3d& trTria)
{ *(static_cast<Triangle3d*>(this)) = trTria ;
for ( int i = 0 ; i < 3 ; ++ i)
m_triN.vtN[i] = m_vtN ;
}
bool SetEdgeFlag( int nInd, bool bVal)
{ if ( nInd < 0 || nInd >= 3)
return false ;
m_triF.bFlag[nInd] = bVal ;
return true ;
}
bool GetEdgeFlag( int nInd) const
{ if ( nInd >= 0 && nInd < 3)
return m_triF.bFlag[nInd] ;
else if ( nInd < 0)
return m_triF.bFlag[0] ;
else
return m_triF.bFlag[2] ;
}
const TriFlags3d& GetTriFlags( void) const
{ return m_triF ; }
bool SetVertexNorm( int nInd, const Vector3d& vtN)
{ if ( nInd < 0 || nInd >= 3)
return false ;
m_triN.vtN[nInd] = vtN ;
return true ;
}
const Vector3d& GetVertexNorm( int nInd) const
{ if ( nInd >= 0 && nInd < 3)
return m_triN.vtN[nInd] ;
else if ( nInd < 0)
return m_triN.vtN[0] ;
else
return m_triN.vtN[2] ;
}
const TriNormals3d& GetTriNormals( void) const
{ return m_triN ; }
bool Validate( bool bOverwrite = false)
{ if ( ! Triangle3d::Validate( bOverwrite))
return false ;
for ( int i = 0 ; i < 3 ; ++ i) {
if ( m_triN.vtN[i].IsZero())
m_triN.vtN[i] = m_vtN ;
}
return true ;
}
private :
TriFlags3d m_triF ;
TriNormals3d m_triN ;
} ;
//----------------------------------------------------------------------------
// Raccolte di Triangle3dEx
typedef std::vector<Triangle3dEx> TRIA3DEXVECTOR ; // vettore di Triangle3dEx
typedef std::list<Triangle3dEx> TRIA3DEXLIST ; // lista di Triangle3dEx
typedef std::vector<TRIA3DEXLIST> TRIA3DEXLISTVECTOR ; // vettore di liste di Triangle3dEx
//-----------------------------------------------------------------------------
enum PlaneType { PL_NULL = 0,
PL_XY = 1,
+2 -2
View File
@@ -30,12 +30,12 @@ class __declspec( novtable) IVolZmap : public IGeoObj
virtual bool Create( const Point3d& ptO, double dDimX, double dDimY, double dDimZ, double dPrec, bool bTriDex) = 0 ;
virtual bool CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double dPrec, bool bTriDex) = 0 ;
virtual bool CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bTriDex) = 0 ;
virtual bool GetAllTriangles( TRIA3DLIST& lstTria) const = 0 ;
virtual bool GetAllTriangles( TRIA3DEXLIST& lstTria) const = 0 ;
virtual int GetBlockCount( void) const = 0 ;
virtual bool GetVolume( double& dVol) const = 0 ;
virtual int GetPartCount( void) const = 0 ;
virtual bool GetPartVolume( int nPart, double& dVol) const = 0 ;
virtual bool GetTriangles( bool bAllBlocks, INTVECTOR& nModifiedBlocks, TRIA3DLISTVECTOR& vLstTria) const ;
virtual bool GetTriangles( bool bAllBlocks, INTVECTOR& nModifiedBlocks, TRIA3DEXLISTVECTOR& vLstTria) const ;
virtual bool GetDexelLines( int nDir, int nPos1, int nPos2, POLYLINELIST& lstPL) const = 0 ;
virtual bool SetTolerances( double dLinTol, double dAngTolDeg = 90) = 0 ;
virtual bool SetStdTool( const std::string& sToolName, double dH, double dR, double dCornR, int nFlag) = 0 ;