EgtGeomKernel :

- modifiche per lettura/scrittura Zmap con tridexel.
This commit is contained in:
Dario Sassi
2016-12-19 18:26:25 +00:00
parent 7ee899b0a2
commit 5d09d963e7
5 changed files with 100 additions and 69 deletions
+11
View File
@@ -187,6 +187,17 @@ NgeReader::ReadInt( int& nVal, const char* szSep, bool bEndL)
}
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadInt( unsigned int& nVal, const char* szSep, bool bEndL)
{
int nTemp ;
if ( ! ReadInt( nTemp, szSep, bEndL))
return false ;
nVal = unsigned int( nTemp) ;
return true ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadDouble( double& dVal, const char* szSep, bool bEndL)
+2 -1
View File
@@ -34,11 +34,12 @@ class NgeReader
bool ReadUchar( unsigned char& ucVal, const char* szSep, bool bEndL = false) ;
bool ReadBool( bool& bVal, const char* szSep, bool bEndL = false) ;
bool ReadInt( int& nVal, const char* szSep, bool bEndL = false) ;
bool ReadInt( unsigned int& nVal, const char* szSep, bool bEndL = false) ;
bool ReadDouble( double& dVal, const char* szSep, bool bEndL = false) ;
bool ReadVector( Vector3d& vtV, const char* szSep, bool bEndL = false) ;
bool ReadPoint( Point3d& ptP, const char* szSep, bool bEndL = false) ;
bool ReadPointW( Point3d& ptP, double& dW, const char* szSep, bool bEndL = false) ;
bool ReadFrame( Frame3d& frF, const char* szSep, bool bEndL) ;
bool ReadFrame( Frame3d& frF, const char* szSep, bool bEndL = false) ;
bool ReadCol( Color& cCol, const char* szSep, bool bEndL = false) ;
bool ReadString( std::string& sVal, const char* szSep, bool bEndL = false) ;
bool ReadKey( int& nKey /* bEndL = true*/) ;
+2 -3
View File
@@ -3345,7 +3345,8 @@ VolZmap::CompConus_Drilling( unsigned int nGrid, const Point3d & ptS, const Poin
//----------------------------------------------------------------------------
bool
VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir, double dHei, double dRad)
VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE,
const Vector3d& vtToolDir, double dHei, double dRad)
{
double dMin, dMax ;
unsigned int nStartI, nStartJ, nEndI, nEndJ ;
@@ -3353,7 +3354,6 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d
// Verifica sull'interferenza utensile Zmap
bool Control = BBoxComponent( nGrid, ptS, ptE, vtToolDir, vtToolDir,
nStartI, nStartJ, nEndI, nEndJ, dRad, dRad, dHei) ;
if ( ! Control)
return true ;
@@ -3541,7 +3541,6 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d
SubtractIntervals( nGrid, i, j, dMin, dMax) ;
}
// Parallelepipedo
Point3d ptInt1 = ptC + ( ( ( vtRIPlus - vtC) * vtV3) / ( Z_AX * vtV3)) * Z_AX ;
Point3d ptInt2 = ptC + ( ( ( vtRIMinus - vtC) * vtV3) / ( Z_AX * vtV3)) * Z_AX ;
+69 -49
View File
@@ -31,7 +31,7 @@ VolZmap::VolZmap(void)
: m_nStatus( TO_VERIFY), m_dStep( EPS_SMALL), m_nTempProp( 0), m_dLinTol( LIN_TOL_STD), m_dAngTolDeg( ANG_TOL_APPROX_DEG)
{
m_nMapNum = 0 ;
for ( int i = 0 ; i < 3 ; ++ i) {
for ( int i = 0 ; i < N_MAPS ; ++ i) {
m_nVNx[i] = 0 ;
m_nVNy[i] = 0 ;
m_nVDim[i] = 0 ;
@@ -45,6 +45,33 @@ VolZmap::~VolZmap( void)
{
}
//----------------------------------------------------------------------------
bool
VolZmap::Clear( void)
{
m_nStatus = TO_VERIFY ;
m_nMapNum = 0 ;
for ( int i = 0 ; i < N_MAPS ; ++ i) {
m_MapFrame[i].Reset() ;
m_nVNx[i] = 0 ;
m_nVNy[i] = 0 ;
m_nVDim[i] = 0 ;
m_dVMinZ[i] = 0 ;
m_dVMaxZ[i] = 0 ;
m_TriZValues[i].clear() ;
}
m_dStep = EPS_SMALL ;
m_dLinTol = LIN_TOL_STD ;
m_dAngTolDeg = ANG_TOL_APPROX_DEG;
m_nTempProp = 0 ;
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
return true ;
}
//----------------------------------------------------------------------------
VolZmap*
VolZmap::Clone( void) const
@@ -134,38 +161,39 @@ VolZmap::GetNgeId( void) const
bool
VolZmap::Save( NgeWriter& ngeOut) const
{
// parametri di scrittura: sistema di riferimento, numero di passi
// in direzione x e y, minimo incremento e per ogni casella, numero di valori e valori
for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) {
if ( ! ngeOut.WriteFrame( m_MapFrame[i], ",", true))
// numero di mappe
if ( ! ngeOut.WriteInt( m_nMapNum, ";", true))
return false ;
// per ogni mappa : sistema di riferimento, numero di passi in X e Y intrinseci
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
if ( ! ngeOut.WriteFrame( m_MapFrame[i], ";", true))
return false ;
if ( ! ngeOut.WriteInt( m_nVNx[i], ",", false))
return false ;
if ( ! ngeOut.WriteInt( m_nVNy[i], ",", true))
if ( ! ngeOut.WriteInt( m_nVNy[i], ";", true))
return false ;
}
if ( ! ngeOut.WriteDouble( m_dStep, ";", false))
// passo di campionamento (distanza tra spilloni)
if ( ! ngeOut.WriteDouble( m_dStep, ";", true))
return false ;
// ciclo sulle mappe
for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) {
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
// ciclo sui dexel
for ( unsigned int j = 0 ; j < m_nVDim[i] ; ++ j) {
// numero di estremi
int nDim = int( m_TriZValues[i][j].size()) ;
unsigned int nDim = unsigned int( m_TriZValues[i][j].size()) ;
if ( ! ngeOut.WriteInt( nDim, ",", false))
return false ;
return false ;
// se dexel nullo
if ( nDim == 0) {
// scrivo un valore dummy
if ( ! ngeOut.WriteDouble( 0, ";", true))
return false ;
// scrivo un valore dummy
if ( ! ngeOut.WriteDouble( 0, ";", true))
return false ;
}
// altrimenti
else {
for ( unsigned int k = 0 ; k < m_TriZValues[i][j].size() ; ++ k) {
bool bEndL = ( k == m_TriZValues[i][j].size() - 1) ;
for ( unsigned int k = 0 ; k < nDim ; ++ k) {
bool bEndL = ( k == nDim - 1) ;
if ( ! ngeOut.WriteDouble( m_TriZValues[i][j][k], ( bEndL ? ";" : ","), bEndL))
return false ;
}
@@ -179,58 +207,50 @@ VolZmap::Save( NgeWriter& ngeOut) const
bool
VolZmap::Load( NgeReader& ngeIn)
{
m_nStatus = TO_VERIFY ;
// parametri di lettura: sistema di riferimento, numero di passi
// in direzione x e y, minimo incremento e per ogni casella, numero di valori e valori
int nTemp ;
for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) {
Clear() ;
// numero di mappe
if ( ! ngeIn.ReadInt( m_nMapNum, ";", true))
return false ;
// per ogni mappa : sistema di riferimento, numero di passi in X e Y intrinseci
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
if ( ! ngeIn.ReadFrame( m_MapFrame[i], ";", true))
return false ;
if ( ! ngeIn.ReadInt( nTemp, ",", false))
if ( ! ngeIn.ReadInt( m_nVNx[i], ",", false))
return false ;
m_nVNx[i] = nTemp ;
if ( ! ngeIn.ReadInt( nTemp, ";", true))
if ( ! ngeIn.ReadInt( m_nVNy[i], ";", true))
return false ;
m_nVNy[i] = nTemp ;
}
if ( ! ngeIn.ReadDouble( m_dStep, ",", false))
return false ;
// dimensione dei vettori di dexel
for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) {
m_nVDim[i] = m_nVNx[i] * m_nVNy[i] ;
m_TriZValues[i].resize(m_nVDim[i]) ;
}
// passo di campionamento (distanza tra spilloni)
if ( ! ngeIn.ReadDouble( m_dStep, ";", true))
return false ;
// ciclo sulle mappe
for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) {
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
// dimensiono i vettori
m_TriZValues[i].resize( m_nVDim[i]) ;
// ciclo sui dexel
for ( unsigned int j = 0 ; j < m_nVDim[i] ; ++ j) {
// leggo il numero di estremi nel dexel
if ( ! ngeIn.ReadInt( nTemp, ",", false))
unsigned int nDim ;
if ( ! ngeIn.ReadInt( nDim, ",", false))
return false ;
// devono essere pari
if ( ( nTemp % 2) != 0)
if ( ( nDim % 2) != 0)
return false ;
// se dexel nullo
if ( nTemp == 0) {
if ( nDim == 0) {
// leggo un valore dummy
double dDummy ;
if ( ! ngeIn.ReadDouble( dDummy, ",", true))
if ( ! ngeIn.ReadDouble( dDummy, ";", true))
return false ;
}
// altrimenti
else {
// dimensiono l'array
m_TriZValues[i][j].resize(nTemp) ;
// leggo i valori
for ( unsigned int k = 0 ; k < m_TriZValues[i][j].size() ; ++ k) {
bool bEndL = ( k == m_TriZValues[i][j].size() - 1) ;
// dimensiono l'array
m_TriZValues[i][j].resize( nDim) ;
// leggo i valori
for ( unsigned int k = 0 ; k < nDim ; ++ k) {
bool bEndL = ( k == nDim - 1) ;
if ( ! ngeIn.ReadDouble( m_TriZValues[i][j][k], ( bEndL ? ";" : ","), bEndL))
return false ;
}
+16 -16
View File
@@ -60,6 +60,7 @@ class VolZmap : public IVolZmap, public IGeoObjRW
public : // IVolZmap
bool CopyFrom( const IGeoObj* pGObjSrc) override ;
bool Clear( void) override ;
bool Create( const Point3d& ptO, double dDimX, double dDimY, double dDimZ, double dPrec, bool bTriDex) override ;
bool CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double dPrec, bool bTriDex) override ;
bool CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bTriDex) override ;
@@ -70,12 +71,10 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool SetAdvTool( const std::string& pToolName,
double dH, double dR, double dTipH, double dTipR, double dCornR) override ;
bool SetGenTool( const std::string& pToolName, const ICurveComposite* pToolOutline) override ;
bool MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Point3d& ptPe, const Vector3d& vtDe) override ;
bool GetDepth( const Point3d& ptP, const Vector3d& vtDir, double& dInLength, double& dOutLength) override ;
bool AvoidBox( const Frame3d& frBox, const Vector3d& vtDiag) override ;
bool MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Point3d& ptPe, const Vector3d& vtDe) override ;
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
@@ -212,21 +211,22 @@ class VolZmap : public IVolZmap, public IGeoObjRW
private :
enum Status { ERR = 0, OK = 1, TO_VERIFY = 2} ;
static const int N_MAPS = 3 ;
private :
ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto
Status m_nStatus ; // stato
int m_nTempProp ; // proprietà temporanea
double m_dStep ; // passo delle griglie
unsigned int m_nMapNum ; // numero di griglie ( 1 o 3)
Frame3d m_MapFrame[3] ; // riferimenti delle griglie
unsigned int m_nVNx[3] ; // dimensione di ciascuna griglia in X
unsigned int m_nVNy[3] ; // dimensione di ciascuna griglia in Y
unsigned int m_nVDim[3] ; // dimensione di ciascuna griglia ( X * Y)
double m_dVMinZ[3] ; // minimo in Zlocale di ciascuna griglia
double m_dVMaxZ[3] ; // massimo in Zlocale di ciascuna griglia
std::vector<std::vector<double>> m_TriZValues[3] ; // dexel delle 3 griglie
double m_dLinTol ; // dati per utensile
ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto
Status m_nStatus ; // stato
int m_nTempProp ; // proprietà temporanea
double m_dStep ; // passo delle griglie
unsigned int m_nMapNum ; // numero di griglie ( 1 o 3)
Frame3d m_MapFrame[N_MAPS] ; // riferimenti delle griglie
unsigned int m_nVNx[N_MAPS] ; // dimensione di ciascuna griglia in X
unsigned int m_nVNy[N_MAPS] ; // dimensione di ciascuna griglia in Y
unsigned int m_nVDim[N_MAPS] ; // dimensione di ciascuna griglia ( X * Y)
double m_dVMinZ[N_MAPS] ; // minimo in Zlocale di ciascuna griglia
double m_dVMaxZ[N_MAPS] ; // massimo in Zlocale di ciascuna griglia
std::vector<std::vector<double>> m_TriZValues[N_MAPS] ; // dexel delle 3 griglie
double m_dLinTol ; // dati per utensile
double m_dAngTolDeg ;
std::string m_sToolName ;
unsigned int m_nToolType ;