Files
EgtGeomKernel/Attribs.cpp
T
Dario Sassi 2a2c0065ed EgtGeomKernel 1.5c1 :
- aggiunta prima gestione attributi.
2014-03-06 08:17:26 +00:00

150 lines
4.4 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : Attribs.cpp Data : 05.03.14 Versione : 1.5c1
// Contenuto : Implementazione della classe Attribs.
//
//
//
// Modifiche : 05.03.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "Attribs.h"
#include "/EgtDev/Include/EgnStringUtils.h"
using namespace std ;
//----------------------------------------------------------------------------
bool
Attribs::Dump( string& sOut, const char* szNewLine) const
{
sOut += "Lev=" ;
switch ( m_Data[LEVEL]) {
default : /* LEV_USER */ sOut += "user" ; break ;
case LEV_SYSTEM : sOut += "system" ; break ;
case LEV_TEMP : sOut += "temp" ; break ;
}
sOut += " Mod=" ;
switch ( m_Data[MODE]) {
default : /* MOD_STD */ sOut += "std" ; break ;
case MOD_LOCKED : sOut += "locked" ; break ;
case MOD_HIDDEN : sOut += "hidden" ; break ;
}
sOut += " Sta=" ;
switch ( m_Data[STATUS]) {
default : /* STS_ON */ sOut += "on" ; break ;
case STS_SEL : sOut += "sel" ; break ;
case STS_OFF : sOut += "off" ; break ;
}
sOut += szNewLine ;
sOut += "Mat=" ;
switch ( m_Material) {
case MAT_PARENT : sOut += "by parent" ; break ;
case MAT_COLOR : sOut += "color" ; break ;
case MAT_NULL : sOut += "null" ; break ;
default : sOut += ToString( m_Material) ; break ;
}
if ( m_Material != MAT_PARENT && m_Material != MAT_NULL) {
sOut += " Col=" ;
sOut += ToString( m_Color.GetIntRed()) + "," ;
sOut += ToString( m_Color.GetIntGreen()) + "," ;
sOut += ToString( m_Color.GetIntBlue()) + "," ;
sOut += ToString( m_Color.GetIntAlpha()) ;
}
sOut += szNewLine ;
return true ;
}
//----------------------------------------------------------------------------
bool
Attribs::Save( ostream& osOut) const
{
// flag presenza attributi
osOut << "A" << endl ;
// livello
osOut << ToString( m_Data[LEVEL]) ;
// modo
osOut << "," << ToString( m_Data[MODE]) ;
// stato
osOut << "," << ToString( m_Data[STATUS]) ;
// altro
osOut << "," << ToString( m_Data[OTHER]) ;
// materiale
osOut << ";" << ToString( m_Material) ;
// colore
osOut << ";" << ToString( m_Color.GetIntRed()) ;
osOut << "," << ToString( m_Color.GetIntGreen()) ;
osOut << "," << ToString( m_Color.GetIntBlue()) ;
osOut << "," << ToString( m_Color.GetIntAlpha()) ;
// numero di stringhe (nelle linee successive)
osOut << ";" << ToString( 0) << ";" << endl ;
return true ;
}
//----------------------------------------------------------------------------
bool
Attribs::Load( Scanner& TheScanner)
{
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ",;", vsParams) ;
// 10 parametri
if ( vsParams.size() != 10)
return false ;
// livello
int nLev ;
if ( ! FromString( vsParams[0], nLev))
return false ;
m_Data[LEVEL] = CLIP( nLev, LEV_USER, LEV_TEMP) ;
// modo
int nMode ;
if ( ! FromString( vsParams[1], nMode))
return false ;
m_Data[MODE] = CLIP( nMode, MOD_STD, MOD_HIDDEN) ;
// stato
int nStat ;
if ( ! FromString( vsParams[2], nStat))
return false ;
m_Data[STATUS] = CLIP( nStat, STS_ON, STS_OFF) ;
// altro
int nOther ;
if ( ! FromString( vsParams[3], nOther))
return false ;
m_Data[OTHER] = CLIP( nOther, 0, 255) ;
// materiale
int nMat ;
if ( ! FromString( vsParams[4], nMat))
return false ;
m_Material = __max( nMat, MAT_PARENT) ;
// colore
int nRed ;
if ( ! FromString( vsParams[5], nRed))
return false ;
int nGreen ;
if ( ! FromString( vsParams[6], nGreen))
return false ;
int nBlue ;
if ( ! FromString( vsParams[7], nBlue))
return false ;
int nAlpha ;
if ( ! FromString( vsParams[8], nAlpha))
return false ;
m_Color.Set( nRed, nGreen, nBlue, nAlpha) ;
// numero di stringhe (nelle linee successive)
int nNext ;
if ( ! FromString( vsParams[9], nNext))
return false ;
return true ;
}