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
+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 ;
}