Include :
- aggiunto Triangle3dEx - modifiche interfacce Zmap per Triangle3dEx.
This commit is contained in:
+87
-7
@@ -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
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user