EgtGeomKernel :
- modifiche per lettura/scrittura Zmap con tridexel.
This commit is contained in:
+69
-49
@@ -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 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user