diff --git a/Attribs.cpp b/Attribs.cpp index 5012756..4ca1f6e 100644 --- a/Attribs.cpp +++ b/Attribs.cpp @@ -14,7 +14,8 @@ //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "Attribs.h" -#include "/EgtDev/Include/EgnStringUtils.h" +#include "/EgtDev/Include/EGnStringUtils.h" +#include "/EgtDev/Include/EGkStringUtils3d.h" using namespace std ; @@ -60,10 +61,15 @@ Attribs::Dump( string& sOut, const char* szNewLine) const // eventuale colore 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()) ; + string sColName ; + if ( GetNameOfStdColor( m_Color, sColName)) + sOut += sColName ; + sOut += "(" + ToString( m_Color.GetIntRed()) ; + sOut += "," + ToString( m_Color.GetIntGreen()) ; + sOut += "," + ToString( m_Color.GetIntBlue()) ; + if ( m_Color.GetIntAlpha() != 100) + sOut += "," + ToString( m_Color.GetIntAlpha()) ; + sOut += ")" ; } sOut += szNewLine ; // eventuali nome e stringhe informative @@ -82,22 +88,19 @@ Attribs::Save( ostream& osOut) const osOut << "A" << endl ; // livello - osOut << ToString( m_Data[LEVEL]) ; + osOut << ToString( m_Data[LEVEL]) << "," ; // modo - osOut << "," << ToString( m_Data[MODE]) ; + osOut << ToString( m_Data[MODE]) << "," ; // stato - osOut << "," << ToString( m_Data[STATUS]) ; + osOut << ToString( m_Data[STATUS]) << "," ; // altro - osOut << "," << ToString( m_Data[OTHER]) ; + osOut << ToString( m_Data[OTHER]) << ";" ; // materiale - osOut << ";" << ToString( m_Material) ; + 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()) ; + osOut << ToString( m_Color) << ";" ; // numero di stringhe di info (nelle linee successive) - osOut << ";" << ToString( int( m_slInfo.size())) << ";" << endl ; + osOut << ToString( int( m_slInfo.size())) << ";" << endl ; // stringhe di info STRLIST::const_iterator iIter ; for ( iIter = m_slInfo.begin() ; iIter != m_slInfo.end() ; ++ iIter) @@ -116,9 +119,46 @@ Attribs::Load( Scanner& TheScanner) return false ; // la divido in parametri STRVECTOR vsParams ; - Tokenize( sLine, ",;", vsParams) ; - // 10 parametri - if ( vsParams.size() != 10) + Tokenize( sLine, ";", vsParams) ; + // 4 parametri + if ( vsParams.size() != 4) + return false ; + // Data (Level,Mode,Status,Other) + if ( ! DataFromString( vsParams[0])) + return false ; + // materiale + int nMat ; + if ( ! FromString( vsParams[1], nMat)) + return false ; + m_Material = __max( nMat, MAT_PARENT) ; + // colore + if ( ! FromString( vsParams[2], m_Color)) + return false ; + // numero di stringhe (nelle linee successive) + int nNext ; + if ( ! FromString( vsParams[3], nNext)) + return false ; + // leggo le eventuali stringhe + for ( int i = 0 ; i < nNext ; ++i) { + // leggo la linea + if ( ! TheScanner.GetLine( sLine)) + return false ; + // la carico in lista + m_slInfo.push_back( sLine) ; + } + + return true ; +} + +//---------------------------------------------------------------------------- +bool +Attribs::DataFromString( const string& sParam) +{ + // il primo parametro è diviso in 4 parti + STRVECTOR vsParams ; + Tokenize( sParam, ",", vsParams) ; + // 4 parti + if ( vsParams.size() != 4) return false ; // livello int nLev ; @@ -140,37 +180,6 @@ Attribs::Load( Scanner& TheScanner) 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 ; - // leggo le eventuali stringhe - for ( int i = 0 ; i < nNext ; ++i) { - // leggo la linea - if ( ! TheScanner.GetLine( sLine)) - return false ; - // la carico in lista - m_slInfo.push_back( sLine) ; - } return true ; } diff --git a/Attribs.h b/Attribs.h index b5fb4ad..e3f5911 100644 --- a/Attribs.h +++ b/Attribs.h @@ -77,6 +77,7 @@ class Attribs enum { LEVEL = 0, MODE = 1, STATUS = 2, OTHER = 3, DIM = 4} ; private : + bool DataFromString( const std::string& sParam) ; bool FindKey( const std::string& sString, const std::string& sKey) const ; bool ValidString( const std::string& sString) const ; diff --git a/Color.cpp b/Color.cpp new file mode 100644 index 0000000..49e435b --- /dev/null +++ b/Color.cpp @@ -0,0 +1,133 @@ +//---------------------------------------------------------------------------- +// EgalTech 2014-2014 +//---------------------------------------------------------------------------- +// File : Color.cpp Data : 12.03.14 Versione : 1.5a5 +// Contenuto : Implementazione funzioni per gestione colori. +// +// +// +// Modifiche : 12.03.14 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +//--------------------------- Include ---------------------------------------- +#include "stdafx.h" +#include "/EgtDev/Include/EGkColor.h" +#include "/EgtDev/Include/EGnStringUtils.h" + +using namespace std ; + +//------------------------- Constants ---------------------------------------- +static const char* SZ_BLACK = "BLACK" ; +static const char* SZ_GRAY = "GRAY" ; +static const char* SZ_LGRAY = "LGRAY" ; +static const char* SZ_WHITE = "WHITE" ; +static const char* SZ_RED = "RED" ; +static const char* SZ_GREEN = "GREEN" ; +static const char* SZ_BLUE = "BLUE" ; +static const char* SZ_CYAN = "CYAN" ; +static const char* SZ_MAGENTA = "MAGENTA" ; +static const char* SZ_YELLOW = "YELLOW" ; +static const char* SZ_BROWN = "BROWN" ; +static const char* SZ_PURPLE = "PURPLE" ; +static const char* SZ_ORANGE = "ORANGE" ; +static const char* SZ_LRED = "LRED" ; +static const char* SZ_LGREEN = "LGREEN" ; +static const char* SZ_LBLUE = "LBLUE" ; +static const char* SZ_LCYAN = "LCYAN" ; +static const char* SZ_LMAGENTA = "LMAGENTA" ; + +//---------------------------------------------------------------------------- +bool +GetStdColor( const string& sName, Color& cCol) +{ + string sCol = sName ; + ToUpper( sCol) ; + if ( sCol == SZ_BLACK) + cCol = BLACK ; + else if ( sCol == SZ_GRAY) + cCol = GRAY ; + else if ( sCol == SZ_LGRAY) + cCol = LGRAY ; + else if ( sCol == SZ_WHITE) + cCol = WHITE ; + else if ( sCol == SZ_RED) + cCol = RED ; + else if ( sCol == SZ_GREEN) + cCol = GREEN ; + else if ( sCol == SZ_BLUE) + cCol = BLUE ; + else if ( sCol == SZ_CYAN) + cCol = CYAN ; + else if ( sCol == SZ_MAGENTA) + cCol = MAGENTA ; + else if ( sCol == SZ_YELLOW) + cCol = YELLOW ; + else if ( sCol == SZ_BROWN) + cCol = BROWN ; + else if ( sCol == SZ_PURPLE) + cCol = PURPLE ; + else if ( sCol == SZ_ORANGE) + cCol = ORANGE ; + else if ( sCol == SZ_LRED) + cCol = LRED ; + else if ( sCol == SZ_LGREEN) + cCol = LGREEN ; + else if ( sCol == SZ_LBLUE) + cCol = LBLUE ; + else if ( sCol == SZ_LCYAN) + cCol = LCYAN ; + else if ( sCol == SZ_LMAGENTA) + cCol = LMAGENTA ; + else + return false ; + + return true ; +} + +//---------------------------------------------------------------------------- +bool +GetNameOfStdColor( const Color& cCol, string& sName) +{ + if ( cCol == BLACK) + sName = SZ_BLACK ; + else if ( cCol == GRAY) + sName = SZ_GRAY ; + else if ( cCol == LGRAY) + sName = SZ_LGRAY ; + else if ( cCol == WHITE) + sName = SZ_WHITE ; + else if ( cCol == RED) + sName = SZ_RED ; + else if ( cCol == GREEN) + sName = SZ_GREEN ; + else if ( cCol == BLUE) + sName = SZ_BLUE ; + else if ( cCol == CYAN) + sName = SZ_CYAN ; + else if ( cCol == MAGENTA) + sName = SZ_MAGENTA ; + else if ( cCol == YELLOW) + sName = SZ_YELLOW ; + else if ( cCol == BROWN) + sName = SZ_BROWN ; + else if ( cCol == PURPLE) + sName = SZ_PURPLE ; + else if ( cCol == ORANGE) + sName = SZ_ORANGE ; + else if ( cCol == LRED) + sName = SZ_LRED ; + else if ( cCol == LGREEN) + sName = SZ_LGREEN ; + else if ( cCol == LBLUE) + sName = SZ_LBLUE ; + else if ( cCol == LCYAN) + sName = SZ_LCYAN ; + else if ( cCol == LMAGENTA) + sName = SZ_LMAGENTA ; + else + return false ; + + return true ; +} diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index a081d37..a855045 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/EgtGeomKernel.vcxproj b/EgtGeomKernel.vcxproj index dc0d2b9..12b0fec 100644 --- a/EgtGeomKernel.vcxproj +++ b/EgtGeomKernel.vcxproj @@ -227,6 +227,7 @@ copy $(TargetPath) \EgtProg\Dll64 + @@ -265,6 +266,7 @@ copy $(TargetPath) \EgtProg\Dll64 + diff --git a/EgtGeomKernel.vcxproj.filters b/EgtGeomKernel.vcxproj.filters index 1121af4..179acd8 100644 --- a/EgtGeomKernel.vcxproj.filters +++ b/EgtGeomKernel.vcxproj.filters @@ -129,6 +129,9 @@ File di origine\Gdb + + File di origine\Base + @@ -323,6 +326,9 @@ File di intestazione + + File di intestazione + diff --git a/GdbExecutor.cpp b/GdbExecutor.cpp index 3c9e319..bce85cb 100644 --- a/GdbExecutor.cpp +++ b/GdbExecutor.cpp @@ -759,10 +759,10 @@ GdbExecutor::GetVectorParam( const std::string& sParam, Vector3d& vtV) { // se insieme di tre componenti if ( sParam[0] == '(') { - STRVECTOR vsParams ; - STRVECTOR::iterator Iter ; // divido in parti + STRVECTOR vsParams ; Tokenize( sParam, ",", vsParams) ; + STRVECTOR::iterator Iter ; for ( Iter = vsParams.begin() ; Iter != vsParams.end() ; ++Iter) Trim( (*Iter), " \t\r\n()") ; // verifico siano 3 parti e le converto @@ -788,10 +788,10 @@ GdbExecutor::GetPointParam( const std::string& sParam, Point3d& ptP) { // se insieme di tre coordinate if ( sParam[0] == '(') { - STRVECTOR vsParams ; - STRVECTOR::iterator Iter ; // divido in parti + STRVECTOR vsParams ; Tokenize( sParam, ",", vsParams) ; + STRVECTOR::iterator Iter ; for ( Iter = vsParams.begin() ; Iter != vsParams.end() ; ++Iter) Trim( (*Iter), " \t\r\n()") ; // verifico siano 3 parti e le converto @@ -815,16 +815,14 @@ GdbExecutor::GetPointParam( const std::string& sParam, Point3d& ptP) bool GdbExecutor::GetPointWParam( const std::string& sParam, Point3d& ptP, double& dW) { - STRVECTOR vsParams ; - STRVECTOR::iterator Iter ; - - // deve essere insieme di dati if ( sParam[0] != '(') return false ; // divido in parti + STRVECTOR vsParams ; Tokenize( sParam, ",", vsParams) ; + STRVECTOR::iterator Iter ; for ( Iter = vsParams.begin() ; Iter != vsParams.end() ; ++Iter) Trim( (*Iter), " \t\r\n()") ; @@ -888,32 +886,56 @@ GdbExecutor::GetFrameParam( const std::string& sParam, Frame3d& frF) } } +//---------------------------------------------------------------------------- +bool +GdbExecutor::GetColorParam( const std::string& sParam, Color& cCol) +{ + // se insieme di tre o quattro valori + if ( sParam[0] == '(') { + // divido in parti + STRVECTOR vsParams ; + Tokenize( sParam, ",", vsParams) ; + STRVECTOR::iterator Iter ; + for ( Iter = vsParams.begin() ; Iter != vsParams.end() ; ++Iter) + Trim( (*Iter), " \t\r\n()") ; + // devono essere 3 o 4 parametri ( Red, Green, Blue [, Alpha]) + if ( vsParams.size() != 3 && vsParams.size() != 4) + return false ; + int nRed, nGreen, nBlue ; + if ( ! FromString( vsParams[0], nRed) || + ! FromString( vsParams[1], nGreen) || + ! FromString( vsParams[2], nBlue)) + return false ; + int nAlpha = 100 ; + if ( vsParams.size() == 4 && + ! FromString( vsParams[3], nAlpha)) + return false ; + cCol.Set( nRed, nGreen, nBlue, nAlpha) ; + return true ; + } + // altrimenti colore predefinito + else { + return GetStdColor( sParam, cCol) ; + } +} + //---------------------------------------------------------------------------- bool GdbExecutor::ExecuteColor( const string& sCmd2, const STRVECTOR& vsParams) { // assegnazione colore di oggetto if ( sCmd2.empty()) { - // 4 o 5 parametri ( Id, Red, Green, Blue, Alpha) - if ( vsParams.size() != 4 && vsParams.size() != 5) + // devono essere 2 parametri ( Id, Colore) + if ( vsParams.size() != 2) return false ; // recupero lista Id STRVECTOR vsNames ; if ( ! GetNamesParam( vsParams[0], vsNames)) return false ; - // recupero i colori - int nRed ; - int nGreen ; - int nBlue ; - if ( ! FromString( vsParams[1], nRed) || - ! FromString( vsParams[2], nGreen) || - ! FromString( vsParams[3], nBlue)) + // recupero il colore + Color cCol ; + if ( ! GetColorParam( vsParams[1], cCol)) return false ; - int nAlpha = 100 ; - if ( vsParams.size() == 5 && - ! FromString( vsParams[4], nAlpha)) - return false ; - Color cCol( nRed, nGreen, nBlue, nAlpha) ; // esecuzione impostazione colore STRVECTOR::iterator Iter ; for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; ++Iter) { @@ -924,18 +946,14 @@ GdbExecutor::ExecuteColor( const string& sCmd2, const STRVECTOR& vsParams) } // impostazione colore di default else if ( sCmd2 == "DEF" || sCmd2 == "DEFAULT") { - // 3 parametri ( Red, Green, Blue) - if ( vsParams.size() != 3) + // 1 parametro ( Colore) + if ( vsParams.size() != 1) return false ; - // recupero i colori - int nRed ; - int nGreen ; - int nBlue ; - if ( ! FromString( vsParams[0], nRed) || - ! FromString( vsParams[1], nGreen) || - ! FromString( vsParams[2], nBlue)) + // recupero il colore + Color cCol ; + if ( ! GetColorParam( vsParams[0], cCol)) return false ; - Color cCol( nRed, nGreen, nBlue) ; + // imposto il colore di default return m_pGDB->SetDefaultColor( cCol) ; } diff --git a/GdbExecutor.h b/GdbExecutor.h index 14af38e..d5dbc68 100644 --- a/GdbExecutor.h +++ b/GdbExecutor.h @@ -17,6 +17,9 @@ #include "/EgtDev/Include/EgkGdbExecutor.h" #include "/EgtDev/Include/EgtPerfCounter.h" +class Vector3d ; +class Color ; + //---------------------------------------------------------------------------- class GdbExecutor : public IGdbExecutor { @@ -38,6 +41,7 @@ class GdbExecutor : public IGdbExecutor bool GetPointParam( const std::string& sParam, Point3d& ptP) ; bool GetPointWParam( const std::string& sParam, Point3d& ptP, double& dW) ; bool GetFrameParam( const std::string& sParam, Frame3d& frF) ; + bool GetColorParam( const std::string& sParam, Color& cCol) ; bool ExecuteGroup( const std::string& sCmd2, const STRVECTOR& vsParams) ; bool ExecutePoint( const std::string& sCmd2, const STRVECTOR& vsParams) ; bool ExecuteVector( const std::string& sCmd2, const STRVECTOR& vsParams) ; diff --git a/GdbGeo.h b/GdbGeo.h index 48b7b23..7ae4148 100644 --- a/GdbGeo.h +++ b/GdbGeo.h @@ -46,3 +46,9 @@ class GdbGeo : public GdbObj public : IGeoObj* m_pGeoObj ; } ; + +//---------------------------------------------------------------------------- +inline const GdbGeo* GetGdbGeo( const GdbObj* pGObj) + { return dynamic_cast(pGObj) ; } +inline GdbGeo* GetGdbGeo( GdbObj* pGObj) + { return dynamic_cast(pGObj) ; } diff --git a/GdbGroup.h b/GdbGroup.h index 260fb24..39f3a1d 100644 --- a/GdbGroup.h +++ b/GdbGroup.h @@ -75,3 +75,9 @@ class GdbGroup : public GdbObj GdbObj* m_pFirstObj ; GdbObj* m_pLastObj ; } ; + +//---------------------------------------------------------------------------- +inline const GdbGroup* GetGdbGroup( const GdbObj* pGObj) + { return dynamic_cast(pGObj) ; } +inline GdbGroup* GetGdbGroup( GdbObj* pGObj) + { return dynamic_cast(pGObj) ; } diff --git a/GdbIterator.cpp b/GdbIterator.cpp index e828aa7..1b1113d 100644 --- a/GdbIterator.cpp +++ b/GdbIterator.cpp @@ -54,8 +54,10 @@ GdbIterator::SetGDB( IGeomDB* pGDB) bool GdbIterator::GoTo( int nId) { - if ( m_pGDB == nullptr) + if ( m_pGDB == nullptr) { + m_pCurrObj = nullptr ; return false ; + } m_pCurrObj = m_pGDB->GetGdbObj( nId) ; @@ -66,14 +68,41 @@ GdbIterator::GoTo( int nId) bool GdbIterator::GoToFirstInGroup( int nIdGroup) { - GdbGroup* pGdbGroup ; - - - if ( m_pGDB == nullptr) + if ( m_pGDB == nullptr) { + m_pCurrObj = nullptr ; return false ; + } // recupero il gruppo - pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ; + GdbGroup* pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ; + if ( pGdbGroup == nullptr) { + m_pCurrObj = nullptr ; + return false ; + } + + // recupero l'oggetto + m_pCurrObj = pGdbGroup->GetFirstObj() ; + + return ( m_pCurrObj != nullptr) ; +} + +//---------------------------------------------------------------------------- +bool +GdbIterator::GoToFirstInGroup( const IGdbIterator& iIter) +{ + if ( m_pGDB == nullptr) { + m_pCurrObj = nullptr ; + return false ; + } + + const GdbIterator* pIter = dynamic_cast (&iIter) ; + if ( pIter == nullptr || pIter->m_pGDB != m_pGDB) { + m_pCurrObj = nullptr ; + return false ; + } + + // recupero il gruppo + GdbGroup* pGdbGroup = GetGdbGroup( pIter->m_pCurrObj) ; if ( pGdbGroup == nullptr) { m_pCurrObj = nullptr ; return false ; @@ -101,12 +130,41 @@ GdbIterator::GoToNext( void) bool GdbIterator::GoToLastInGroup( int nIdGroup) { - if ( m_pGDB == nullptr) + if ( m_pGDB == nullptr) { + m_pCurrObj = nullptr ; return false ; + } // recupero il gruppo - GdbGroup* pGdbGroup ; - pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ; + GdbGroup* pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ; + if ( pGdbGroup == nullptr) { + m_pCurrObj = nullptr ; + return false ; + } + + // recupero l'oggetto + m_pCurrObj = pGdbGroup->GetLastObj() ; + + return ( m_pCurrObj != nullptr) ; +} + +//---------------------------------------------------------------------------- +bool +GdbIterator::GoToLastInGroup( const IGdbIterator& iIter) +{ + if ( m_pGDB == nullptr) { + m_pCurrObj = nullptr ; + return false ; + } + + const GdbIterator* pIter = dynamic_cast (&iIter) ; + if ( pIter == nullptr || pIter->m_pGDB != m_pGDB) { + m_pCurrObj = nullptr ; + return false ; + } + + // recupero il gruppo + GdbGroup* pGdbGroup = GetGdbGroup( pIter->m_pCurrObj) ; if ( pGdbGroup == nullptr) { m_pCurrObj = nullptr ; return false ; diff --git a/GdbIterator.h b/GdbIterator.h index 2684fd8..ce02f39 100644 --- a/GdbIterator.h +++ b/GdbIterator.h @@ -20,13 +20,16 @@ class GdbIterator : public IGdbIterator { public : - GdbIterator( void) ; virtual ~GdbIterator( void) ; virtual bool SetGDB( IGeomDB* pGDB) ; + virtual GeomDB* GetGDB( void) + { return m_pGDB ; } virtual bool GoTo( int nId) ; virtual bool GoToFirstInGroup( int nIdGroup) ; + virtual bool GoToFirstInGroup( const IGdbIterator& iIter) ; virtual bool GoToNext( void) ; virtual bool GoToLastInGroup( int nIdGroup) ; + virtual bool GoToLastInGroup( const IGdbIterator& iIter) ; virtual bool GoToPrev( void) ; virtual GdbType GetGdbType( void) const ; @@ -47,6 +50,9 @@ class GdbIterator : public IGdbIterator virtual bool GetInfo( const std::string& sKey, std::string& sInfo) const ; virtual bool RemoveInfo( const std::string& sKey) ; + public : + GdbIterator( void) ; + private : GeomDB* m_pGDB ; GdbObj* m_pCurrObj ; diff --git a/GeoFrame3d.cpp b/GeoFrame3d.cpp index b9b80bf..4da2d7c 100644 --- a/GeoFrame3d.cpp +++ b/GeoFrame3d.cpp @@ -131,8 +131,8 @@ GeoFrame3d::Load( Scanner& TheScanner) bool GeoFrame3d::GetLocalBBox( BBox3d& b3Loc) const { - // reset del box (un riferimento non occupa posizioni nello spazio) - b3Loc.Reset() ; + // assegno il box in locale (considero l'origine) + b3Loc.Set( m_frF.Orig()) ; return true ; } @@ -143,8 +143,11 @@ GeoFrame3d::GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const // verifico validità del frame if ( frRef.GetType() == Frame3d::ERR) return false ; - // reset del box (un riferimento non occupa posizioni nello spazio) - b3Ref.Reset() ; + // porto l'origine nel riferimento passato + Point3d ptP = m_frF.Orig() ; + ptP.ToGlob( frRef) ; + // assegno il box nel riferimento + b3Ref.Set( ptP) ; return true ; } diff --git a/GeomDB.cpp b/GeomDB.cpp index 27d66ca..cb20555 100644 --- a/GeomDB.cpp +++ b/GeomDB.cpp @@ -240,7 +240,7 @@ GeomDB::SaveHeader( ostream& osOut) const { // intestazione osOut << "START" << endl ; - osOut << "GeomDB,1.5c2" << endl ; + osOut << "GeomDB,1.5.3.5;" << endl ; // colore di default osOut << "COL_DEF" << endl ; diff --git a/GeomDB.h b/GeomDB.h index 70b8755..ee726fd 100644 --- a/GeomDB.h +++ b/GeomDB.h @@ -96,13 +96,3 @@ class GeomDB : public IGeomDB GdbGroup m_GrpRadix ; // gruppo radice di tutto il DB IdManager m_IdManager ; // gestore del nuovo Id } ; - -//---------------------------------------------------------------------------- -inline const GdbGeo* GetGdbGeo( const GdbObj* pGObj) - { return dynamic_cast(pGObj) ; } -inline GdbGeo* GetGdbGeo( GdbObj* pGObj) - { return dynamic_cast(pGObj) ; } -inline const GdbGroup* GetGdbGroup( const GdbObj* pGObj) - { return dynamic_cast(pGObj) ; } -inline GdbGroup* GetGdbGroup( GdbObj* pGObj) - { return dynamic_cast(pGObj) ; } diff --git a/OutScl.cpp b/OutScl.cpp index be24203..604a5fc 100644 --- a/OutScl.cpp +++ b/OutScl.cpp @@ -14,6 +14,11 @@ //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "OutScl.h" +#include "/EgtDev/Include/EgkPoint3d.h" +#include "/EgtDev/Include/EgkCurveLine.h" +#include "/EgtDev/Include/EgkCurveArc.h" +#include "/EgtDev/Include/EgkCurveBezier.h" +#include "/EgtDev/Include/EgkCurveComposite.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EGnStringConverter.h" @@ -101,7 +106,7 @@ OutScl::New( void) //---------------------------------------------------------------------------- bool -OutScl::Remark( string sRemark) +OutScl::Remark( const string& sRemark) { // verifico sia aperto if ( ! m_ofFile.is_open()) @@ -134,7 +139,7 @@ OutScl::SetMaterial( double dRed, double dGreen, double dBlue) //---------------------------------------------------------------------------- bool -OutScl::SetMaterial( string sMaterial, double dRed, double dGreen, double dBlue) +OutScl::SetMaterial( const string& sMaterial, double dRed, double dGreen, double dBlue) { // verifico sia aperto if ( ! m_ofFile.is_open()) @@ -152,7 +157,7 @@ OutScl::SetMaterial( string sMaterial, double dRed, double dGreen, double dBlue) //---------------------------------------------------------------------------- bool -OutScl::SetPartLay( string sPart, string sLay) +OutScl::SetPartLay( const string& sPart, const string& sLay) { // verifico sia aperto if ( ! m_ofFile.is_open()) @@ -170,7 +175,7 @@ OutScl::SetPartLay( string sPart, string sLay) //---------------------------------------------------------------------------- bool -OutScl::SetPartLayRef( string sPart, string sLay, const Frame3d& frFrame) +OutScl::SetPartLayRef( const string& sPart, const string& sLay, const Frame3d& frFrame) { double dAngC ; double dAngA ; diff --git a/OutScl.h b/OutScl.h index 118fa3a..5650284 100644 --- a/OutScl.h +++ b/OutScl.h @@ -15,11 +15,14 @@ #include #include -#include "/EgtDev/Include/EgkPoint3d.h" -#include "/EgtDev/Include/EgkCurveLine.h" -#include "/EgtDev/Include/EgkCurveArc.h" -#include "/EgtDev/Include/EgkCurveBezier.h" -#include "/EgtDev/Include/EgkCurveComposite.h" + +class Point3d ; +class BBox3d ; +class Frame3d ; +class IGeoObj ; +class ICurve ; +class ICurveBezier ; +class CrvPointDiffGeom ; //---------------------------------------------------------------------------- @@ -30,10 +33,10 @@ class OutScl ~OutScl( void) ; bool Open( const std::string& sOutScl) ; bool Close( void) ; - bool Remark( std::string sRemark) ; + bool Remark( const std::string& sRemark) ; bool SetMaterial( double dRed, double dGreen, double dBlue) ; - bool SetPartLay( std::string sPart, std::string sLay) ; - bool SetPartLayRef( std::string sPart, std::string sLay, const Frame3d& frFrame) ; + bool SetPartLay( const std::string& sPart, const std::string& sLay) ; + bool SetPartLayRef( const std::string& sPart, const std::string& sLay, const Frame3d& frFrame) ; bool PutCurrRef( void) ; bool PutGeoObj( const IGeoObj* pGeoObj, int nFlag) ; bool PutBBox( const BBox3d& b3B) ; @@ -42,7 +45,7 @@ class OutScl bool Start( void) ; bool End( void) ; bool New( void) ; - bool SetMaterial( std::string sMaterial, double dRed, double dGreen, double dBlue) ; + bool SetMaterial( const std::string& sMaterial, double dRed, double dGreen, double dBlue) ; bool Line2P( const Point3d& ptP1, const Point3d& ptP2) ; bool Arc3P( const Point3d& ptP1, const Point3d& ptP2, const Point3d& ptP3) ; bool ArcCPA( const Point3d& ptCen, const Point3d& ptMed, double dAngCenDeg) ; diff --git a/StringUtils3d.cpp b/StringUtils3d.cpp index dc5efb3..17756fd 100644 --- a/StringUtils3d.cpp +++ b/StringUtils3d.cpp @@ -103,3 +103,25 @@ FromString( const string& sVal, Frame3d& frFrame) // imposto il riferimento return frFrame.Set( ptOrig, vtDirX, vtDirY, vtDirZ) ; } + +//---------------------------------------------------------------------------- +bool +FromString( const string& sVal, Color& cCol) +{ + // divido la stringa in parametri + STRVECTOR vsParams ; + Tokenize( sVal, ",", vsParams) ; + // devono essere 4 parametri : Red, Green, Blue, Alpha + if ( vsParams.size() != 4) + return false ; + // recupero i parametri + int nRed, nGreen, nBlue, nAlpha ; + if ( ! FromString( vsParams[0], nRed) || + ! FromString( vsParams[1], nGreen) || + ! FromString( vsParams[2], nBlue) || + ! FromString( vsParams[3], nAlpha)) + return false ; + // assegno il colore + cCol.Set( nRed, nGreen, nBlue, nAlpha) ; + return true ; +}