EgtGeomKernel :

- cambiato Load, con uso di NgeReader.
This commit is contained in:
Dario Sassi
2014-04-15 06:48:39 +00:00
parent f956fd20cc
commit 2cbdfc1db9
33 changed files with 492 additions and 330 deletions
+26 -23
View File
@@ -15,6 +15,7 @@
#include "stdafx.h"
#include "Attribs.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "/EgtDev/Include/EGnStringUtils.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
@@ -85,7 +86,7 @@ bool
Attribs::Save( NgeWriter& ngeOut) const
{
// flag presenza attributi
ngeOut.WriteKey( NGE_A, true) ;
ngeOut.WriteKey( NGE_A) ;
// livello
ngeOut.WriteUchar( m_Data[LEVEL], ",") ;
// modo
@@ -111,45 +112,47 @@ Attribs::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
Attribs::Load( Scanner& TheScanner)
Attribs::Load( NgeReader& ngeIn)
{
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
// livello
unsigned char ucLev ;
if ( ! ngeIn.ReadUchar( ucLev, ","))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ";", vsParams) ;
// 4 parametri
if ( vsParams.size() != 4)
m_Data[LEVEL] = CLIP( ucLev, GDB_LV_USER, GDB_LV_TEMP) ;
// modo
unsigned char ucMode ;
if ( ! ngeIn.ReadUchar( ucMode, ","))
return false ;
// Data (Level,Mode,Status,Other)
if ( ! DataFromString( vsParams[0]))
m_Data[MODE] = CLIP( ucMode, GDB_MD_STD, GDB_MD_HIDDEN) ;
// stato (se SEL è convertito in ON)
unsigned char ucStat ;
if ( ! ngeIn.ReadUchar( ucStat, ","))
return false ;
// OldData è inizializzato con Data
for ( int i = 0 ; i < DIM ; ++ i)
m_OldData[i] = m_Data[i] ;
m_Data[STATUS] = CLIP( ucStat, GDB_ST_OFF, GDB_ST_ON) ;
// marcatura (sempre OFF)
unsigned char ucMark ;
if ( ! ngeIn.ReadUchar( ucMark, ";"))
return false ;
m_Data[MARK] = CLIP( ucMark, GDB_MK_OFF, GDB_MK_OFF) ;
// materiale
int nMat ;
if ( ! FromString( vsParams[1], nMat))
if ( ! ngeIn.ReadInt( m_Material, ";"))
return false ;
m_Material = __max( nMat, GDB_MT_COLOR) ;
// colore
if ( ! FromString( vsParams[2], m_Color))
if ( ! ngeIn.ReadCol( m_Color, ";"))
return false ;
// numero di stringhe (nelle linee successive)
// numero di stringhe di info (nelle linee successive)
int nNext ;
if ( ! FromString( vsParams[3], nNext))
if ( ! ngeIn.ReadInt( nNext, ";", true))
return false ;
// leggo le eventuali stringhe
string sLine ;
for ( int i = 0 ; i < nNext ; ++i) {
// leggo la linea
if ( ! TheScanner.GetLine( sLine))
if ( ! ngeIn.ReadString( sLine, nullptr, true))
return false ;
// la carico in lista
m_slInfo.push_back( sLine) ;
}
return true ;
}
+2 -2
View File
@@ -15,10 +15,10 @@
#include "/EgtDev/Include/EGkGdbConst.h"
#include "/EgtDev/Include/EGkColor.h"
#include "/EgtDev/Include/EGnScan.h"
#include "/EgtDev/Include/EGnStringBase.h"
class NgeWriter ;
class NgeReader ;
//----------------------------------------------------------------------------
#define CLIP( nV, nMIN, nMAX) (( nV < nMIN) ? nMIN : (( nV > nMAX) ? nMAX : nV))
@@ -42,7 +42,7 @@ class Attribs
return pAttribs ; }
bool Dump( std::string& sOut, const char* szNewLine) const ;
bool Save( NgeWriter& ngeOut) const ;
bool Load( Scanner& TheScanner) ;
bool Load( NgeReader& ngeIn) ;
void SetLevel( int nLev)
{ m_OldData[LEVEL] = m_Data[LEVEL] ;
m_Data[LEVEL] = CLIP( nLev, GDB_LV_USER, GDB_LV_TEMP) ; }
+9 -17
View File
@@ -17,6 +17,7 @@
#include "GeoConst.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
#include <new>
@@ -223,37 +224,28 @@ CurveArc::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
CurveArc::Load( Scanner& TheScanner)
CurveArc::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ";", vsParams) ;
// 6 parametri : centro, versore normale, raggio, versore iniziale, angolo al centro e delta Z
if ( vsParams.size() != 6)
return false ;
// leggo la prossima linea ( 6 parametri)
// recupero il centro
if ( ! FromString( vsParams[0], m_PtCen))
if ( ! ngeIn.ReadPoint( m_PtCen, ";"))
return false ;
// recupero il versore normale
if ( ! FromString( vsParams[1], m_VtN))
if ( ! ngeIn.ReadVector( m_VtN, ";"))
return false ;
// recupero il raggio
if ( ! FromString( vsParams[2], m_dRad))
if ( ! ngeIn.ReadDouble( m_dRad, ";"))
return false ;
// recupero il versore iniziale
if ( ! FromString( vsParams[3], m_VtS))
if ( ! ngeIn.ReadVector( m_VtS, ";"))
return false ;
// recupero l'angolo al centro
if ( ! FromString( vsParams[4], m_dAngCenDeg))
if ( ! ngeIn.ReadDouble( m_dAngCenDeg, ";"))
return false ;
// recupero il delta N
if ( ! FromString( vsParams[5], m_dDeltaN))
if ( ! ngeIn.ReadDouble( m_dDeltaN, ";", true))
return false ;
// eseguo validazione
return Validate() ;
+5 -3
View File
@@ -30,9 +30,6 @@ class CurveArc : public ICurveArc, public IGeoObjRW
{ return ( m_nStatus == OK) ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool Translate( const Vector3d& vtMove) ;
@@ -100,6 +97,11 @@ class CurveArc : public ICurveArc, public IGeoObjRW
virtual double GetDeltaN( void) const
{ return m_dDeltaN ; }
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
CurveArc( void) ;
const CurveArc& operator =( const CurveArc& caSrc)
+14 -26
View File
@@ -18,6 +18,7 @@
#include "DistPointLine.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "PolynomialPoint3d.h"
#include "/EgtDev/Include/EGkCurveArc.h"
#include "/EgtDev/Include/ENkPolynomial.h"
@@ -366,27 +367,18 @@ CurveBezier::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
CurveBezier::Load( Scanner& TheScanner)
CurveBezier::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ";", vsParams) ;
// 2 parametri : flag razionale e grado
if ( vsParams.size() != 2)
return false ;
// recupero il flag
// leggo la prossima linea ( 2 parametri)
// recupero il flag razionale
bool bIsRat ;
if ( ! FromString( vsParams[0], bIsRat))
if ( ! ngeIn.ReadBool( bIsRat, ";"))
return false ;
// recupero il grado
int nDeg ;
if ( ! FromString( vsParams[1], nDeg))
if ( ! ngeIn.ReadInt( nDeg, ";", true))
return false ;
// inizializzo la curva di Bezier
if ( ! Init( nDeg, bIsRat))
@@ -397,13 +389,11 @@ CurveBezier::Load( Scanner& TheScanner)
string sLine ;
Point3d ptP ;
for ( int i = 0 ; i <= nDeg ; ++ i) {
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
// leggo la prossima linea ( un punto)
if ( ! ngeIn.ReadPoint( ptP, ";", true))
return false ;
TrimRight( sLine, ";") ;
// la interpreto
if ( ! FromString( sLine, ptP) ||
! SetControlPoint( i, ptP))
// lo assegno
if ( ! SetControlPoint( i, ptP))
return false ;
}
}
@@ -414,13 +404,11 @@ CurveBezier::Load( Scanner& TheScanner)
Point3d ptP ;
double dW ;
for ( int i = 0 ; i <= nDeg ; ++ i) {
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
// leggo la prossima linea ( un punto con peso)
if ( ! ngeIn.ReadPointW( ptP, dW, ";", true))
return false ;
TrimRight( sLine, ";") ;
// la interpreto
if ( ! FromString( sLine, ptP, dW) ||
! SetControlPoint( i, ptP, dW))
// lo assegno
if ( ! SetControlPoint( i, ptP, dW))
return false ;
}
}
+5 -3
View File
@@ -32,9 +32,6 @@ class CurveBezier : public ICurveBezier, public IGeoObjRW
{ return ( m_nStatus == OK) ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool Translate( const Vector3d& vtMove) ;
@@ -92,6 +89,11 @@ class CurveBezier : public ICurveBezier, public IGeoObjRW
virtual bool GetControlPolygonLength( double& dLen) const ;
virtual int GetSingularParam( double& dPar) const ;
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
CurveBezier( void) ;
const CurveBezier& operator =( const CurveBezier& cbSrc)
+12 -18
View File
@@ -17,6 +17,7 @@
#include "GeoConst.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "/EgtDev/Include/EGnStringUtils.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include "/EgtDev/Include/EGkCurveArc.h"
@@ -290,12 +291,12 @@ CurveComposite::Save( NgeWriter& ngeOut) const
int i = 0 ;
const ICurve* pCrvSmpl = GetFirstCurve() ;
while ( pCrvSmpl != nullptr) {
// recupero il gestore di lettura/scrittura dell'entità
// recupero il gestore di lettura/scrittura delle curve
const IGeoObjRW* pCSmplRW = dynamic_cast<const IGeoObjRW*>( pCrvSmpl) ;
if ( pCSmplRW == nullptr)
return false ;
// emetto tipo della curva semplice
ngeOut.WriteKey( pCSmplRW->GetNgeId(), true) ;
ngeOut.WriteKey( pCSmplRW->GetNgeId()) ;
// assegno ed emetto nome della curva semplice
string sCrvName = "#" + ToString( ++i) ;
ngeOut.WriteString( sCrvName, nullptr, true) ;
@@ -311,39 +312,32 @@ CurveComposite::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
CurveComposite::Load( Scanner& TheScanner)
CurveComposite::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ",", vsParams) ;
// 1 parametro : numero di curve componenti
if ( vsParams.size() != 1)
return false ;
// leggo la prossima linea ( 1 parametro)
// recupero il numero di curve componenti
int nCounter ;
if ( ! FromString( vsParams[0], nCounter))
if ( ! ngeIn.ReadInt( nCounter, nullptr, true))
return false ;
// leggo le curve componenti
for ( int i = 0 ; i < nCounter ; ++ i) {
// recupero la prossima linea (con il tipo di oggetto)
if ( ! TheScanner.GetLine( sLine))
int nNgeId ;
if ( ! ngeIn.ReadKey( nNgeId))
return false ;
// creo l'oggetto
int nType = GEOOBJ_KEYTOTYPE( sLine) ;
int nType = GEOOBJ_NGEIDTOTYPE( nNgeId) ;
IGeoObj* pGeoO = GEOOBJ_CREATE( nType) ;
if ( pGeoO == nullptr)
return false ;
// recupero la linea con il nome
bool bOk = TheScanner.GetLine( sLine) ;
string sName ;
bool bOk = ngeIn.ReadString( sName, nullptr, true) ;
// ne leggo i dati
IGeoObjRW* pGObjRW = dynamic_cast<IGeoObjRW*>( pGeoO) ;
bOk = bOk && ( pGObjRW != nullptr && pGObjRW->Load( TheScanner)) ;
bOk = bOk && ( pGObjRW != nullptr && pGObjRW->Load( ngeIn)) ;
// verifico sia una curva
ICurve* pCrv = ::GetCurve( pGeoO) ;
bOk = bOk && ( pCrv != nullptr && pCrv->IsSimple()) ;
+5 -3
View File
@@ -32,9 +32,6 @@ class CurveComposite : public ICurveComposite, public IGeoObjRW
{ return ( m_nStatus == OK) ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool Translate( const Vector3d& vtMove) ;
@@ -85,6 +82,11 @@ class CurveComposite : public ICurveComposite, public IGeoObjRW
virtual bool IsParamAtJoint( double dU) const ;
virtual bool ArcsToBezierCurves( void) ;
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
CurveComposite( void) ;
const CurveComposite& operator =( const CurveComposite& ccSrc)
+4 -14
View File
@@ -16,6 +16,7 @@
#include "CurveLine.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
#include <new>
@@ -131,25 +132,14 @@ CurveLine::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
CurveLine::Load( Scanner& TheScanner)
CurveLine::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
if ( ! ngeIn.ReadPoint( m_PtStart, ";"))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ";", vsParams) ;
// 2 parametri : punto iniziale e punto finale
if ( vsParams.size() != 2)
return false ;
// recupero il punto iniziale
if ( ! FromString( vsParams[0], m_PtStart))
return false ;
// recupero il punto finale
if ( ! FromString( vsParams[1], m_PtEnd))
if ( ! ngeIn.ReadPoint( m_PtEnd, ";", true))
return false ;
// eseguo validazione
return Validate() ;
+5 -3
View File
@@ -30,9 +30,6 @@ class CurveLine : public ICurveLine, public IGeoObjRW
{ return ( m_nStatus == OK) ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool Translate( const Vector3d& vtMove) ;
@@ -82,6 +79,11 @@ class CurveLine : public ICurveLine, public IGeoObjRW
virtual const Point3d& GetEnd( void) const
{ return m_PtEnd ; }
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
CurveLine( void) ;
const CurveLine& operator =( const CurveLine& clSrc)
+2
View File
@@ -252,6 +252,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
<ClCompile Include="GeoPoint3d.cpp" />
<ClCompile Include="GeoVector3d.cpp" />
<ClCompile Include="IterManager.cpp" />
<ClCompile Include="NgeReader.cpp" />
<ClCompile Include="OutTsc.cpp" />
<ClCompile Include="Point3d.cpp" />
<ClCompile Include="PolyLine.cpp" />
@@ -336,6 +337,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
<ClInclude Include="IterManager.h" />
<ClInclude Include="NgeConst.h" />
<ClInclude Include="NgeKeyW.h" />
<ClInclude Include="NgeReader.h" />
<ClInclude Include="ObjGraphicsMgr.h" />
<ClInclude Include="OutTsc.h" />
<ClInclude Include="PolynomialPoint3d.h" />
+6
View File
@@ -144,6 +144,9 @@
<ClCompile Include="NgeWriter.cpp">
<Filter>File di origine\Gdb</Filter>
</ClCompile>
<ClCompile Include="NgeReader.cpp">
<Filter>File di origine\Gdb</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h">
@@ -374,6 +377,9 @@
<ClInclude Include="GeoObjRW.h">
<Filter>File di intestazione</Filter>
</ClInclude>
<ClInclude Include="NgeReader.h">
<Filter>File di intestazione</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EgtGeomKernel.rc">
+15 -23
View File
@@ -18,6 +18,7 @@
#include "CurveAux.h"
#include "Attribs.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "GeoObjRW.h"
#include "/EgtDev/Include/EGkGdbFunct.h"
#include "/EgtDev/Include/EGnStringUtils.h"
@@ -85,13 +86,13 @@ GdbGeo::GetType( void) const
bool
GdbGeo::Save( NgeWriter& ngeOut) const
{
// recupero il gestore di lettura/scrittura dell'entità
// recupero il gestore di lettura/scrittura dell'oggetto
IGeoObjRW* pGObjRW = dynamic_cast<IGeoObjRW*>( m_pGeoObj) ;
if ( pGObjRW == nullptr)
return false ;
// tipo entità e identificativi
ngeOut.WriteKey( pGObjRW->GetNgeId(), true) ;
ngeOut.WriteKey( pGObjRW->GetNgeId()) ;
ngeOut.WriteInt( m_nId, "@") ;
ngeOut.WriteInt( GetParentId(), nullptr, true) ;
@@ -100,60 +101,51 @@ GdbGeo::Save( NgeWriter& ngeOut) const
return false ;
// parametri geometrici
ngeOut.WriteKey( NGE_G, true) ;
ngeOut.WriteKey( NGE_G) ;
return pGObjRW->Save( ngeOut) ;
}
//----------------------------------------------------------------------------
bool
GdbGeo::Load( const std::string& sType, Scanner& TheScanner, int& nParentId)
GdbGeo::Load( int nNgeId, NgeReader& ngeIn, int& nParentId)
{
int nType ;
string sLine ;
STRVECTOR vsParams ;
// creo l'oggetto geometrico corrispondente
nType = GEOOBJ_KEYTOTYPE( sType) ;
int nType = GEOOBJ_NGEIDTOTYPE( nNgeId) ;
m_pGeoObj = GEOOBJ_CREATE( nType) ;
if ( m_pGeoObj == nullptr)
return false ;
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
if ( ! ngeIn.ReadInt( m_nId, "@"))
return false ;
// la divido in parametri
Tokenize( sLine, "@", vsParams) ;
// 2 parametri : Id e ParentId
if ( vsParams.size() != 2)
return false ;
// assegno l'identificativo
if ( ! FromString( vsParams[0], m_nId))
return false ;
// assegno l'Id del padre
if ( ! FromString( vsParams[1], nParentId))
if ( ! ngeIn.ReadInt( nParentId, nullptr, true))
return false ;
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
int nKey ;
if ( ! ngeIn.ReadKey( nKey))
return false ;
// eventuali attributi
if ( sLine == "A") {
if ( ! GdbObj::LoadAttribs( TheScanner))
if ( nKey == NGE_A) {
if ( ! GdbObj::LoadAttribs( ngeIn))
return false ;
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
if ( ! ngeIn.ReadKey( nKey))
return false ;
}
// verifico inizio dati geometrici
if ( sLine != "G")
if ( nKey != NGE_G)
return false ;
// parametri geometrici
IGeoObjRW* pGObjRW = dynamic_cast<IGeoObjRW*>( m_pGeoObj) ;
return ( pGObjRW != nullptr && pGObjRW->Load( TheScanner)) ;
return ( pGObjRW != nullptr && pGObjRW->Load( ngeIn)) ;
}
//----------------------------------------------------------------------------
+1 -1
View File
@@ -26,7 +26,7 @@ class GdbGeo : public GdbObj
virtual ~GdbGeo( void) ;
virtual GdbGeo* Clone( int nId, IdManager& IdMgr) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( const std::string& sType, Scanner& TheScanner, int& nParentId) ;
virtual bool Load( int nNgeId, NgeReader& ngeIn, int& nParentId) ;
virtual bool GetLocalBBox( BBox3d& b3Loc, int nFlag, int nLev = 0) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag, int nLev = 0) const ;
virtual bool Translate( const Vector3d& vtMove) ;
+13 -24
View File
@@ -16,6 +16,7 @@
#include "GdbGroup.h"
#include "IdManager.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "/EgtDev/Include/EGkGdbFunct.h"
#include "/EgtDev/Include/EGnStringUtils.h"
@@ -107,7 +108,7 @@ GdbGroup::Save( NgeWriter& ngeOut) const
bool bOk = true ;
// tipo entità e identificativi
ngeOut.WriteKey( NGE_A_GRP, true) ;
ngeOut.WriteKey( NGE_A_GRP) ;
ngeOut.WriteInt( m_nId, "@") ;
ngeOut.WriteInt( GetParentId(), nullptr, true) ;
@@ -116,7 +117,7 @@ GdbGroup::Save( NgeWriter& ngeOut) const
bOk = false ;
// dati del riferimento
ngeOut.WriteKey( NGE_G, true) ;
ngeOut.WriteKey( NGE_G) ;
if ( ! m_gfrFrame.Save( ngeOut))
bOk = false ;
@@ -133,46 +134,34 @@ GdbGroup::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
GdbGroup::Load( const string& sType, Scanner& TheScanner, int& nParentId)
GdbGroup::Load( int nNgeId, NgeReader& ngeIn, int& nParentId)
{
string sLine ;
STRVECTOR vsParams ;
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
if ( ! ngeIn.ReadInt( m_nId, "@"))
return false ;
// la divido in parametri
Tokenize( sLine, "@", vsParams) ;
// 2 parametri : Id e ParentId
if ( vsParams.size() != 2)
return false ;
// assegno l'identificativo
if ( ! FromString( vsParams[0], m_nId))
return false ;
// assegno l'Id del padre
if ( ! FromString( vsParams[1], nParentId))
if ( ! ngeIn.ReadInt( nParentId, nullptr, true))
return false ;
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
int nKey ;
if ( ! ngeIn.ReadKey( nKey))
return false ;
// eventuali attributi
if ( sLine == "A") {
if ( ! GdbObj::LoadAttribs( TheScanner))
if ( nKey == NGE_A) {
if ( ! GdbObj::LoadAttribs( ngeIn))
return false ;
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
if ( ! ngeIn.ReadKey( nKey))
return false ;
}
// verifico inizio dati geometrici
if ( sLine != "G")
if ( nKey != NGE_G)
return false ;
// leggo i dati del riferimento
return m_gfrFrame.Load( TheScanner) ;
return m_gfrFrame.Load( ngeIn) ;
}
//----------------------------------------------------------------------------
+1 -1
View File
@@ -27,7 +27,7 @@ class GdbGroup : public GdbObj
virtual ~GdbGroup( void) ;
virtual GdbGroup* Clone( int nId, IdManager& IdMgr) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( const std::string& sType, Scanner& TheScanner, int& nParentId) ;
virtual bool Load( int nNgeId, NgeReader& ngeIn, int& nParentId) ;
virtual bool GetLocalBBox( BBox3d& b3Loc, int nFlag, int nLev = 0) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag, int nLev = 0) const ;
virtual bool Translate( const Vector3d& vtMove) ;
+2 -2
View File
@@ -215,12 +215,12 @@ GdbObj::SaveAttribs( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
GdbObj::LoadAttribs( Scanner& TheScanner)
GdbObj::LoadAttribs( NgeReader& ngeIn)
{
if ( GetSafeAttribs() == nullptr)
return false ;
return m_pAttribs->Load( TheScanner) ;
return m_pAttribs->Load( ngeIn) ;
}
//----------------------------------------------------------------------------
+3 -3
View File
@@ -15,7 +15,6 @@
#include "/EgtDev/Include/EGkGdbConst.h"
#include "/EgtDev/Include/EGkColor.h"
#include "/EgtDev/Include/EGnScan.h"
#include "/EgtDev/Include/EGkBBox3d.h"
#include <string>
@@ -23,6 +22,7 @@ class GdbGroup ;
class IdManager ;
class Attribs ;
class NgeWriter ;
class NgeReader ;
//----------------------------------------------------------------------------
class GdbObj
@@ -31,7 +31,7 @@ class GdbObj
virtual ~GdbObj( void) ;
virtual GdbObj* Clone( int nId, IdManager& IdMgr) const = 0 ;
virtual bool Save( NgeWriter& ngeOut) const = 0 ;
virtual bool Load( const std::string& sType, Scanner& TheScanner, int& nParentId) = 0 ;
virtual bool Load( int nNgeId, NgeReader& ngeIn, int& nParentId) = 0 ;
virtual bool GetLocalBBox( BBox3d& b3Loc, int nFlag, int nLev = 0) const = 0 ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag, int nLev = 0) const = 0 ;
virtual bool Translate( const Vector3d& vtMove) = 0 ;
@@ -49,7 +49,7 @@ class GdbObj
public :
bool SaveAttribs( NgeWriter& ngeOut) const ;
bool LoadAttribs( Scanner& TheScanner) ;
bool LoadAttribs( NgeReader& ngeIn) ;
Attribs* GetAttribs( void)
{ return m_pAttribs ; }
Attribs* GetSafeAttribs( void) ;
+3 -8
View File
@@ -16,6 +16,7 @@
#include "GeoFrame3d.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
#include "/EgtDev/Include/EGkPolyLine.h"
#include <new>
@@ -139,18 +140,12 @@ GeoFrame3d::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
GeoFrame3d::Load( Scanner& TheScanner)
GeoFrame3d::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// elimino ; finale
TrimRight( sLine, ";") ;
// eseguo lettura
return FromString( sLine, m_frF) ;
return ngeIn.ReadFrame( m_frF, ";", true) ;
}
//----------------------------------------------------------------------------
+5 -3
View File
@@ -30,9 +30,6 @@ class GeoFrame3d : public IGeoFrame3d, public IGeoObjRW
{ return ( m_frF.GetType() != Frame3d::ERR) ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool GetFrame( Frame3d& frF) const
@@ -68,6 +65,11 @@ class GeoFrame3d : public IGeoFrame3d, public IGeoObjRW
virtual bool GetDrawWithArrowHeads( double dLenA, double dFrazLenAH,
PolyLine& plX, PolyLine& plY, PolyLine& plZ) const ;
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
GeoFrame3d( void) ;
inline const GeoFrame3d& operator =( const GeoFrame3d& gfSrc)
+2 -3
View File
@@ -13,9 +13,8 @@
#pragma once
#include "/EgtDev/Include/EGnScan.h"
class NgeWriter ;
class NgeReader ;
//-----------------------------------------------------------------------------
class __declspec( novtable) IGeoObjRW
@@ -23,5 +22,5 @@ class __declspec( novtable) IGeoObjRW
public :
virtual int GetNgeId( void) const = 0 ;
virtual bool Save( NgeWriter& ngeOut) const = 0 ;
virtual bool Load( Scanner& TheScanner) = 0 ;
virtual bool Load( NgeReader& ngeIn) = 0 ;
} ;
+3 -11
View File
@@ -16,6 +16,7 @@
#include "GeoPoint3d.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "\EgtDev\Include\EGkStringUtils3d.h"
#include <new>
@@ -127,21 +128,12 @@ GeoPoint3d::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
GeoPoint3d::Load( Scanner& TheScanner)
GeoPoint3d::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// 1 solo parametro : il punto
TrimRight( sLine, ";") ;
// recupero il punto
if ( ! FromString( sLine, m_ptP))
return false ;
return true ;
return ngeIn.ReadPoint( m_ptP, ";", true) ;
}
//----------------------------------------------------------------------------
+5 -3
View File
@@ -30,9 +30,6 @@ class GeoPoint3d : public IGeoPoint3d, public IGeoObjRW
{ return true ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool GetPoint( Point3d& ptP) const
@@ -64,6 +61,11 @@ class GeoPoint3d : public IGeoPoint3d, public IGeoObjRW
virtual const Point3d& GetPoint( void) const
{ return m_ptP ; }
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
GeoPoint3d( void) ;
const GeoPoint3d& operator =( const GeoPoint3d& gpSrc)
+3 -11
View File
@@ -16,6 +16,7 @@
#include "GeoVector3d.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
#include "/EgtDev/Include/EGkPolyLine.h"
#include <new>
@@ -128,21 +129,12 @@ GeoVector3d::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
GeoVector3d::Load( Scanner& TheScanner)
GeoVector3d::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// 1 solo parametro : il vettore
TrimRight( sLine, ";") ;
// recupero il vettore
if ( ! FromString( sLine, m_vtV))
return false ;
return true ;
return ngeIn.ReadVector( m_vtV, ";", true) ;
}
//----------------------------------------------------------------------------
+5 -3
View File
@@ -29,9 +29,6 @@ class GeoVector3d : public IGeoVector3d, public IGeoObjRW
{ return true ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool GetVector( Vector3d& vtV) const
@@ -64,6 +61,11 @@ class GeoVector3d : public IGeoVector3d, public IGeoObjRW
{ return m_vtV ; }
virtual bool GetDrawWithArrowHead( double dFrazLenAH, PolyLine& PL) const ;
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
GeoVector3d( void) ;
inline const GeoVector3d& operator =( const GeoVector3d& gvSrc)
+43 -68
View File
@@ -17,6 +17,7 @@
#include "GdbGeo.h"
#include "DllMain.h"
#include "Attribs.h"
#include "NgeReader.h"
#include "NgeWriter.h"
#include "/EgtDev/Include/EgnStringUtils.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
@@ -80,30 +81,27 @@ GeomDB::Clear( void)
bool
GeomDB::Load( const std::string& sFileIn)
{
bool bOk ;
bool bEnd ;
Scanner TheScanner ;
// inizializzo lo scanner
if ( ! TheScanner.Init( sFileIn)) {
// apertura file
NgeReader ngeIn ;
if ( ! ngeIn.Init( sFileIn)) {
LOG_ERROR( GetEGkLogger(), "GeomDbLoad : Error on Init ")
return false ;
}
// leggo l'intestazione
if ( ! LoadHeader( TheScanner)) {
string sOut = "GeomDbLoad : Error on line " + ToString( TheScanner.GetCurrLineNbr()) ;
if ( ! LoadHeader( ngeIn)) {
string sOut = "GeomDbLoad : Error on pos " + ToString( ngeIn.GetCurrPos()) ;
LOG_ERROR( GetEGkLogger(), sOut.c_str())
return false ;
}
// ciclo di lettura dei nodi
bOk = true ;
bool bEnd ;
bool bOk = true ;
do {
if ( ! LoadOneObj( TheScanner, bEnd)) {
if ( ! LoadOneObj( ngeIn, bEnd)) {
bOk = false ;
string sOut = "GeomDbLoad : Error on line " + ToString( TheScanner.GetCurrLineNbr()) ;
string sOut = "GeomDbLoad : Error on pos " + ToString( ngeIn.GetCurrPos()) ;
LOG_ERROR( GetEGkLogger(), sOut.c_str())
}
} while ( ! bEnd) ;
@@ -113,78 +111,52 @@ GeomDB::Load( const std::string& sFileIn)
//----------------------------------------------------------------------------
bool
GeomDB::LoadHeader( Scanner& TheScanner)
GeomDB::LoadHeader( NgeReader& ngeIn)
{
string sLine ;
// intestazione
int nKey ;
if ( ! ngeIn.ReadKey( nKey) || nKey != NGE_START)
return false ;
string sVal ;
if ( ! ngeIn.ReadString( sVal, ",") || sVal != NGE_GEOMDB)
return false ;
int nVal ;
if ( ! ngeIn.ReadInt( nVal, "."))
return false ;
if ( ! ngeIn.ReadInt( nVal, "."))
return false ;
if ( ! ngeIn.ReadInt( nVal, ";", true))
return false ;
// recupero la prima linea
if ( ! TheScanner.GetLine( sLine))
// materiale di default come colore
if ( ! ngeIn.ReadKey( nKey) || nKey != NGE_MAT_DEF)
return false ;
// deve essere l'intestazione
if ( sLine != "START")
Color colDef( 0, 0, 0, 0) ;
if ( ! ngeIn.ReadCol( colDef, ";", true))
return false ;
// recupero la riga successiva
if ( ! TheScanner.GetLine( sLine))
return false ;
// leggo i parametri
// TODO
// recupero la linea
if ( ! TheScanner.GetLine( sLine))
return false ;
// deve essere il materiale di default
if ( sLine != "MAT_DEF")
return false ;
// recupero la riga successiva
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ",;", vsParams) ;
// 4 parametri
if ( vsParams.size() != 4)
return false ;
// leggo il materiale come colore
int nRed ;
if ( ! FromString( vsParams[0], nRed))
return false ;
int nGreen ;
if ( ! FromString( vsParams[1], nGreen))
return false ;
int nBlue ;
if ( ! FromString( vsParams[2], nBlue))
return false ;
int nAlpha ;
if ( ! FromString( vsParams[3], nAlpha))
return false ;
Color colDef( nRed, nGreen, nBlue, nAlpha) ;
return SetDefaultMaterial( colDef) ;
}
//----------------------------------------------------------------------------
bool
GeomDB::LoadOneObj( Scanner& TheScanner, bool& bEnd)
GeomDB::LoadOneObj( NgeReader& ngeIn, bool& bEnd)
{
int nParentId ;
string sType ;
GdbObj* pGdbObj ;
// in generale non è fine file
bEnd = false ;
// leggo la prossima linea : tipo di nodo
if ( ! TheScanner.GetLine( sType))
int nKey ;
if ( ! ngeIn.ReadKey( nKey))
return false ;
// se fine dati
if ( sType == "END") {
GdbObj* pGdbObj ;
if ( nKey == NGE_END) {
bEnd = true ;
return true ;
}
// se gruppo
else if ( sType == "A_GRP") {
else if ( nKey == NGE_A_GRP) {
pGdbObj = new( nothrow) GdbGroup ;
}
// se copia TODO ("X_CPY")..
@@ -200,7 +172,8 @@ GeomDB::LoadOneObj( Scanner& TheScanner, bool& bEnd)
return false ;
// se lettura dati e inserimento nel DB vanno bene
if ( pGdbObj->Load( sType, TheScanner, nParentId) &&
int nParentId ;
if ( pGdbObj->Load( nKey, ngeIn, nParentId) &&
AddToGeomDB( pGdbObj, nParentId))
return true ;
// altrimenti errore
@@ -216,8 +189,10 @@ GeomDB::Save( const std::string& sFileOut, bool bBinary) const
{
// apertura file
NgeWriter ngeOut ;
if ( ! ngeOut.Init( sFileOut, bBinary))
if ( ! ngeOut.Init( sFileOut, bBinary)) {
LOG_ERROR( GetEGkLogger(), "GeomDbSave : Error on Init ")
return false ;
}
// intestazione
bool bOk = SaveHeader( ngeOut) ;
@@ -254,7 +229,7 @@ bool
GeomDB::SaveHeader( NgeWriter& ngeOut) const
{
// intestazione
ngeOut.WriteKey( NGE_START, true) ;
ngeOut.WriteKey( NGE_START) ;
ngeOut.WriteString( NGE_GEOMDB, ",") ;
ngeOut.WriteInt( NGE_MAJOR_VER, ".") ;
ngeOut.WriteInt( NGE_MINOR_VER, ".") ;
@@ -263,7 +238,7 @@ GeomDB::SaveHeader( NgeWriter& ngeOut) const
// materiale di default come colore
Color colDef( 0, 0, 0, 0) ;
GetDefaultMaterial( colDef) ;
ngeOut.WriteKey( NGE_MAT_DEF, true) ;
ngeOut.WriteKey( NGE_MAT_DEF) ;
ngeOut.WriteCol( colDef, ";", true) ;
return true ;
@@ -274,7 +249,7 @@ bool
GeomDB::SaveFooter( NgeWriter& ngeOut) const
{
// terminazione
ngeOut.WriteKey( NGE_END, true) ;
ngeOut.WriteKey( NGE_END) ;
return true ;
}
+2 -2
View File
@@ -131,8 +131,8 @@ class GeomDB : public IGeomDB
bool AddToGeomDB( GdbObj* pGObj, int nParentId) ;
bool Relocate( int nId, int nNewParentId, bool bGlob) ;
bool Erase( GdbObj* pGObj) ;
bool LoadHeader( Scanner& TheScanner) ;
bool LoadOneObj( Scanner& TheScanner, bool& bEnd) ;
bool LoadHeader( NgeReader& ngeIn) ;
bool LoadOneObj( NgeReader& ngeIn, bool& bEnd) ;
bool SaveHeader( NgeWriter& ngeOut) const ;
bool SaveFooter( NgeWriter& ngeOut) const ;
bool SetStatus( GdbObj* pGdbObj, int nStat) ;
+206
View File
@@ -0,0 +1,206 @@
//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : NgeReader.cpp Data : 14.04.14 Versione : 1.5d5
// Contenuto : Implementazione della classe NgeReader.
//
//
//
// Modifiche : 14.04.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "NgeReader.h"
#include "NgeKeyW.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
using namespace std ;
//----------------------------------------------------------------------------
bool
NgeReader::Init( const std::string& sFileIn)
{
m_iPosStart = string::npos ;
m_sLine.reserve( 128) ;
m_sToken.reserve( 48) ;
return m_Scan.Init( sFileIn) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::Close( void)
{
return m_Scan.Terminate() ;
}
//----------------------------------------------------------------------------
int
NgeReader::GetCurrPos( void)
{
return m_Scan.GetCurrLineNbr() ;
}
//----------------------------------------------------------------------------
bool
NgeReader::GetToken( std::string& sToken, const char* szSep, bool bEndL)
{
// se necessario, lettura nuova linea
if ( m_iPosStart == string::npos) {
if ( ! m_Scan.GetLine( m_sLine))
return false ;
m_iPosStart = 0 ;
}
// se richiesta ricerca separatore
if ( szSep != nullptr) {
// cerco il primo separatore nella linea
string::size_type iPosEnd = m_sLine.find_first_of( szSep, m_iPosStart) ;
sToken = m_sLine.substr( m_iPosStart, iPosEnd - m_iPosStart) ;
// passo al prossimo
m_iPosStart = m_sLine.find_first_not_of( szSep, iPosEnd) ;
if ( bEndL)
return ( m_iPosStart == string::npos) ;
else
return ( m_iPosStart != string::npos) ;
}
// altrimenti, deve essere tutto con endl obbligatorio
else {
sToken = m_sLine.substr( m_iPosStart, string::npos) ;
m_iPosStart = string::npos ;
return bEndL ;
}
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadUchar( unsigned char& ucVal, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
int nVal ;
if ( ! FromString( m_sToken, nVal))
return false ;
ucVal = nVal ;
return true ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadBool( bool& bVal, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, bVal) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadInt( int& nVal, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, nVal) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadDouble( double& dVal, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, dVal) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadVector( Vector3d& vtV, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, vtV) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadPoint( Point3d& ptP, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, ptP) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadPointW( Point3d& ptP, double& dW, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, ptP, dW) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadFrame( Frame3d& frF, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, frF) ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadString( string& sVal, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// lo copio nella stringa
sVal = m_sToken ;
return true ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadKey( int& nKey)
{
// recupero la linea
if ( ! GetToken( m_sToken, nullptr, true))
return false ;
// ricavo il valore
for ( int i = 0 ; i <= NGE_LAST_ID ; ++ i) {
if ( m_sToken == NgeAscKeyW[i]) {
nKey = i ;
return true ;
}
}
return false ;
}
//----------------------------------------------------------------------------
bool
NgeReader::ReadCol( Color& cCol, const char* szSep, bool bEndL)
{
// recupero il token
if ( ! GetToken( m_sToken, szSep, bEndL))
return false ;
// ricavo il valore
return FromString( m_sToken, cCol) ;
}
+53
View File
@@ -0,0 +1,53 @@
//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : NgeReader.h Data : 14.04.14 Versione : 1.5d5
// Contenuto : Dichiarazione della classe NgeReader.
//
//
//
// Modifiche : 14.04.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "NgeConst.h"
#include "/EgtDev/Include/EGkPoint3d.h"
#include "/EgtDev/Include/EGkColor.h"
#include "/EgtDev/Include/EGnScan.h"
#include "/EgtDev/Include/EGnStringBase.h"
#include <fstream>
//----------------------------------------------------------------------------
class NgeReader
{
public :
NgeReader( void) : m_iPosStart( std::string::npos) {}
~NgeReader( void)
{ Close() ; }
bool Init( const std::string& sFileIn) ;
bool Close( void) ;
int GetCurrPos( void) ;
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 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 ReadString( std::string& sVal, const char* szSep, bool bEndL = false) ;
bool ReadKey( int& nKey /* bEndL = true*/) ;
bool ReadCol( Color& cCol, const char* szSep, bool bEndL = false) ;
private :
bool GetToken( std::string& sToken, const char* szSep, bool bEndL) ;
private :
Scanner m_Scan ;
std::string::size_type m_iPosStart ;
std::string m_sLine ;
std::string m_sToken ;
} ;
+4 -6
View File
@@ -2,7 +2,7 @@
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : NgeWriter.cpp Data : 13.04.14 Versione : 1.5d5
// Contenuto : Implementazione della classe Writer.
// Contenuto : Implementazione della classe NgeWriter.
//
//
//
@@ -14,7 +14,6 @@
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "NgeWriter.h"
#include "NgeConst.h"
#include "NgeKeyW.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
#include "/EgtDev/Include/EgnStringConverter.h"
@@ -220,7 +219,7 @@ NgeWriter::WriteFrame( const Frame3d& frF, const char* szSep, bool bEndL, int nP
//----------------------------------------------------------------------------
void
NgeWriter::WriteKey( int nKey, bool bEndL)
NgeWriter::WriteKey( int nKey)
{
if ( ! m_OutFile.is_open())
return ;
@@ -232,8 +231,7 @@ NgeWriter::WriteKey( int nKey, bool bEndL)
m_OutFile.write( (char*) &NgeBinKeyW[nKey], sizeof( int)) ;
else {
m_OutFile << NgeAscKeyW[nKey] ;
if ( bEndL)
m_OutFile << endl ;
m_OutFile << endl ;
}
}
@@ -259,4 +257,4 @@ NgeWriter::WriteCol( const Color& cCol, const char* szSep, bool bEndL)
if ( bEndL)
m_OutFile << endl ;
}
}
}
+1 -3
View File
@@ -37,12 +37,10 @@ class NgeWriter
int nPrecP = 6, int nPrecW = 9) ;
void WriteFrame( const Frame3d& frF, const char* szSep, bool bEndL, int nPrecP = 6, int nPrecV = 9) ;
void WriteString( const std::string& sVal, const char* szSep, bool bEndL = false) ;
void WriteKey( int nKey, bool bEndL) ;
void WriteKey( int nKey /* bEndL = true*/) ;
void WriteCol( const Color& cCol, const char* szSep, bool bEndL = false) ;
private :
bool m_bBinary ;
std::ofstream m_OutFile ;
} ;
+22 -40
View File
@@ -16,6 +16,7 @@
#include "SurfTriMesh.h"
#include "GeoObjFactory.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "Triangulate.h"
#include "\EgtDev\Include\EGkStringUtils3d.h"
#include "\EgtDev\Include\EGkPolyLine.h"
@@ -370,31 +371,22 @@ SurfTriMesh::Save( NgeWriter& ngeOut) const
//----------------------------------------------------------------------------
bool
SurfTriMesh::Load( Scanner& TheScanner)
SurfTriMesh::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica
m_OGrMgr.Reset() ;
// leggo la prossima linea
string sLine ;
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
STRVECTOR vsParams ;
Tokenize( sLine, ";", vsParams) ;
// 3 parametri : flag chiuso num vertici e num tria
if ( vsParams.size() != 3)
return false ;
// leggo la prossima linea ( 3 parametri : flag chiuso num vertici e num tria)
// recupero il flag
bool bClosed ;
if ( ! FromString( vsParams[0], bClosed))
if ( ! ngeIn.ReadBool( bClosed, ";"))
return false ;
// recupero il numero di vertici
int nNumVert ;
if ( ! FromString( vsParams[1], nNumVert))
if ( ! ngeIn.ReadInt( nNumVert, ";"))
return false ;
// recupero il numero di triangoli
int nNumTria ;
if ( ! FromString( vsParams[2], nNumTria))
if ( ! ngeIn.ReadInt( nNumTria, ";", true))
return false ;
// inizializzo la superficie TriMesh
if ( ! Init( nNumVert, nNumTria))
@@ -404,40 +396,30 @@ SurfTriMesh::Load( Scanner& TheScanner)
int nInd ;
StmVert vV ;
for ( int i = 0 ; i < nNumVert ; ++ i) {
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
Tokenize( sLine, ";", vsParams) ;
// 4 parametri : Indice, Punto, IdTria, Flag
if ( vsParams.size() != 4)
return false ;
// leggo la prossima linea ( 4 parametri : Indice, Punto, IdTria, Flag)
// la interpreto e imposto il vertice
if ( ! FromString( vsParams[0], nInd) ||
! FromString( vsParams[1], vV.ptP) ||
! FromString( vsParams[2], vV.nIdTria) ||
! FromString( vsParams[3], vV.nFlag) ||
if ( ! ngeIn.ReadInt( nInd, ";") ||
! ngeIn.ReadPoint( vV.ptP, ";") ||
! ngeIn.ReadInt( vV.nIdTria, ";") ||
! ngeIn.ReadInt( vV.nFlag, ";", true) ||
! SetVertex( nInd, vV))
return false ;
}
// lettura dei triangoli
StmTria tT ;
for ( int i = 0 ; i < nNumTria ; ++ i) {
// leggo la prossima linea
if ( ! TheScanner.GetLine( sLine))
return false ;
// la divido in parametri
Tokenize( sLine, ";", vsParams) ;
// 6 parametri : Indice, IdVertici, IdAdiacenze, Normale, TFlag, EFlag
if ( vsParams.size() != 6)
return false ;
// leggo la prossima linea ( 6 parametri : Indice, IdVertici, IdAdiacenze, Normale, TFlag, EFlag)
// la interpreto e imposto il vertice
if ( ! FromString( vsParams[0], nInd) ||
! FromString( vsParams[1], tT.nIdVert) ||
! FromString( vsParams[2], tT.nIdAdjac) ||
! FromString( vsParams[3], tT.vtN) ||
! FromString( vsParams[4], tT.nTFlag) ||
! FromString( vsParams[5], tT.nEFlag) ||
if ( ! ngeIn.ReadInt( nInd, ";") ||
! ngeIn.ReadInt( tT.nIdVert[0], ",") ||
! ngeIn.ReadInt( tT.nIdVert[1], ",") ||
! ngeIn.ReadInt( tT.nIdVert[2], ";") ||
! ngeIn.ReadInt( tT.nIdAdjac[0], ",") ||
! ngeIn.ReadInt( tT.nIdAdjac[1], ",") ||
! ngeIn.ReadInt( tT.nIdAdjac[2], ";") ||
! ngeIn.ReadVector( tT.vtN, ";") ||
! ngeIn.ReadInt( tT.nTFlag, ";") ||
! ngeIn.ReadInt( tT.nEFlag, ";", true) ||
! SetTriangle( nInd, tT))
return false ;
}
+5 -3
View File
@@ -69,9 +69,6 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW
{ return ( m_nStatus == OK) ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, const char* szNewLine = "\n") const ;
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( Scanner& TheScanner) ;
virtual bool GetLocalBBox( BBox3d& b3Loc) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const ;
virtual bool Translate( const Vector3d& vtMove) ;
@@ -114,6 +111,11 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW
virtual int GetNextTriangle( int nId, Triangle3d& Tria) const ;
virtual bool GetTriangleSmoothNormals( int nId, TriNormals3d& TNrms) const ;
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
SurfTriMesh( void) ;
const SurfTriMesh& operator =( const SurfTriMesh& stSrc)