diff --git a/EGkDllMain.h b/EGkDllMain.h index b07d63f..97eed4d 100644 --- a/EGkDllMain.h +++ b/EGkDllMain.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2013-2013 +// EgalTech 2013-2014 //---------------------------------------------------------------------------- -// File : EgkDllMain.h Data : 18.12.13 Versione : 1.4l2 +// File : EgkDllMain.h Data : 29.05.14 Versione : 1.5e10 // Contenuto : Prototipi funzioni generali della DLL. // // @@ -29,3 +29,5 @@ class ILogger ; EGK_EXPORT const char* GetEGkVersion( void) ; // permette di impostare il logger per la Dll EGK_EXPORT void SetEGkLogger( ILogger* pLogger) ; +// permette di inizializzare il font manager +EGK_EXPORT void InitFontManager( const std::string& sNfeFontDir, const std::string& sDefaultFont) ; diff --git a/EGkExtText.h b/EGkExtText.h new file mode 100644 index 0000000..47c262e --- /dev/null +++ b/EGkExtText.h @@ -0,0 +1,61 @@ +//---------------------------------------------------------------------------- +// EgalTech 2014-2014 +//---------------------------------------------------------------------------- +// File : EGkExtText.h Data : 28.05.14 Versione : 1.5e10 +// Contenuto : Dichiarazione della interfaccia IExtText. +// +// +// +// Modifiche : 28.05.14 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkGeoObj.h" +#include "/EgtDev/Include/EGkCurve.h" + +//----------------------------------------------------------------------------- +class __declspec( novtable) IExtText : public IGeoObj +{ + public : + virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ; + virtual bool Set( const std::string& sText, const Point3d& ptP, double dAngDeg, double dH) = 0 ; + virtual bool Set( const std::string& sText, const Point3d& ptP, double dAngDeg, + const std::string& sFont, int nW, bool bItl, double dH, double dRat, double dAddAdv) = 0 ; + virtual const Point3d& GetPoint( void) const = 0 ; + virtual const Vector3d& GetNormVersor( void) const = 0 ; + virtual const Vector3d& GetDirVersor( void) const = 0 ; + virtual const std::string& GetText( void) const = 0 ; + virtual const std::string& GetFont( void) const = 0 ; + virtual int GetWeight( void) const = 0 ; + virtual bool GetItalic( void) const = 0 ; + virtual double GetHeight( void) const = 0 ; + virtual double GetRatio( void) const = 0 ; + virtual double GetAddAdvance( void) const = 0 ; + virtual bool GetStartPoint( Point3d& ptStart) const = 0 ; + virtual bool GetEndPoint( Point3d& ptEnd) const = 0 ; + virtual bool GetMidPoint( Point3d& ptMid) const = 0 ; + virtual bool GetCenterPoint( Point3d& ptCen) const = 0 ; + virtual bool GetOutline( ICURVEPLIST& lstPC) const = 0 ; + virtual bool ApproxWithLines( double dLinTol, double dAngTolDeg, POLYLINELIST& lstPL) const = 0 ; + virtual bool Flip( void) = 0 ; + virtual bool Mir( bool bOnLen) = 0 ; +} ; + +//----------------------------------------------------------------------------- +inline IExtText* CreateExtText( void) + { return (static_cast( CreateGeoObj( EXT_TEXT))) ; } +inline IExtText* CloneExtText( const IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != EXT_TEXT) + return nullptr ; + return (static_cast(pGObj->Clone())) ; } +inline const IExtText* GetExtText( const IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != EXT_TEXT) + return nullptr ; + return (static_cast(pGObj)) ; } +inline IExtText* GetExtText( IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != EXT_TEXT) + return nullptr ; + return (static_cast(pGObj)) ; } diff --git a/EGkFrame3d.h b/EGkFrame3d.h index 377478d..9eaf565 100644 --- a/EGkFrame3d.h +++ b/EGkFrame3d.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2013-2013 +// EgalTech 2013-2014 //---------------------------------------------------------------------------- -// File : EgkFrame3d.h Data : 20.11.13 Versione : 1.3a1 +// File : EgkFrame3d.h Data : 30.05.14 Versione : 1.5e10 // Contenuto : Dichiarazione della classe Reference Frame 3d. // // @@ -40,13 +40,15 @@ class EGK_EXPORT Frame3d const Vector3d& vtDirY, const Vector3d& vtDirZ) ; bool Set( const Point3d& ptOrig, const Point3d& ptOnX, const Point3d& ptNearY) ; bool Set( const Point3d& ptOrig, const Vector3d& vtDirZ) ; + bool Set( const Point3d& ptOrig, const Vector3d& vtDirZ, const Vector3d& vtNearDirX) ; bool Set( const Point3d& ptOrig, Type nType) ; bool Reset( void) ; void Translate( const Vector3d& vtMove) ; + bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg) ; bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) ; - bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad) ; bool PseudoScale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) ; bool PseudoMirror( const Point3d& ptOn, const Vector3d& vtNorm) ; + bool PseudoShear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) ; bool Invert( void) ; bool ToGlob( const Frame3d& frRef) ; bool ToLoc( const Frame3d& frRef) ; diff --git a/EGkGdbIterator.h b/EGkGdbIterator.h index af0c96f..56baba1 100644 --- a/EGkGdbIterator.h +++ b/EGkGdbIterator.h @@ -82,7 +82,19 @@ class __declspec( novtable) IGdbIterator virtual bool ExistsName( void) const = 0 ; virtual bool RemoveName( void) = 0 ; virtual bool SetInfo( const std::string& sKey, const std::string& sInfo) = 0 ; + virtual bool SetInfo( const std::string& sKey, bool bInfo) = 0 ; + virtual bool SetInfo( const std::string& sKey, int nInfo) = 0 ; + virtual bool SetInfo( const std::string& sKey, double dInfo) = 0 ; + virtual bool SetInfo( const std::string& sKey, const Point3d& ptInfo) = 0 ; + virtual bool SetInfo( const std::string& sKey, const Vector3d& vtInfo) = 0 ; + virtual bool SetInfo( const std::string& sKey, const Frame3d& frInfo) = 0 ; virtual bool GetInfo( const std::string& sKey, std::string& sInfo) const = 0 ; + virtual bool GetInfo( const std::string& sKey, bool& bInfo) const = 0 ; + virtual bool GetInfo( const std::string& sKey, int& nInfo) const = 0 ; + virtual bool GetInfo( const std::string& sKey, double& dInfo) const = 0 ; + virtual bool GetInfo( const std::string& sKey, Point3d& ptInfo) const = 0 ; + virtual bool GetInfo( const std::string& sKey, Vector3d& vtInfo) const = 0 ; + virtual bool GetInfo( const std::string& sKey, Frame3d& frInfo) const = 0 ; virtual bool ExistsInfo( const std::string& sKey) const = 0 ; virtual bool RemoveInfo( const std::string& sKey) = 0 ; } ; diff --git a/EGkGeoObj.h b/EGkGeoObj.h index cba934d..8e359a2 100644 --- a/EGkGeoObj.h +++ b/EGkGeoObj.h @@ -41,12 +41,14 @@ class __declspec( novtable) IGeoObj virtual bool GetLocalBBox( BBox3d& b3Loc) const = 0 ; virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const = 0 ; virtual bool Translate( const Vector3d& vtMove) = 0 ; + virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg) = 0 ; virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) = 0 ; - virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad) = 0 ; virtual bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) = 0 ; virtual bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) = 0 ; + virtual bool Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) = 0 ; virtual bool ToGlob( const Frame3d& frRef) = 0 ; virtual bool ToLoc( const Frame3d& frRef) = 0 ; + virtual bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) = 0 ; virtual void SetObjGraphics( IObjGraphics* pOGr) = 0 ; virtual IObjGraphics* GetObjGraphics( void) = 0 ; virtual const IObjGraphics* GetObjGraphics( void) const = 0 ; diff --git a/EGkGeoObjType.h b/EGkGeoObjType.h index 081ede8..98b702c 100644 --- a/EGkGeoObjType.h +++ b/EGkGeoObjType.h @@ -1,13 +1,13 @@ //---------------------------------------------------------------------------- -// EgalTech 2013-2013 +// EgalTech 2013-2014 //---------------------------------------------------------------------------- -// File : EGkGeoObjType.h Data : 21.11.13 Versione : 1.3a1 +// File : EGkGeoObjType.h Data : 27.05.14 Versione : 1.5e10 // Contenuto : Definizione Tipo degli Oggetti Geometrici. // // // // Modifiche : 30.04.13 DS Creazione modulo. -// +// 27.05.14 DS Agg. EXT_TEXT. // //---------------------------------------------------------------------------- @@ -19,6 +19,7 @@ const int GEO_ZERODIM = 0x080 ; const int GEO_CURVE = 0x100 ; const int GEO_SURF = 0x200 ; +const int GEO_EXTRA = 0x400 ; //----------------- Costanti tipo oggetto geometrico -------------------------- enum GeoObjType { GEO_NONE = 0, @@ -29,4 +30,5 @@ enum GeoObjType { GEO_NONE = 0, CRV_ARC = ( GEO_CURVE + 1), CRV_BEZ = ( GEO_CURVE + 2), CRV_COMPO = ( GEO_CURVE + 3), - SRF_TRIMESH = ( GEO_SURF + 0)} ; + SRF_TRIMESH = ( GEO_SURF + 0), + EXT_TEXT = ( GEO_EXTRA + 0)} ; diff --git a/EGkGeomDB.h b/EGkGeomDB.h index f29a89b..f3108f8 100644 --- a/EGkGeomDB.h +++ b/EGkGeomDB.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- // EgalTech 2013-2014 //---------------------------------------------------------------------------- -// File : EGkGeomDB.h Data : 21.05.14 Versione : 1.5e8 +// File : EGkGeomDB.h Data : 30.05.14 Versione : 1.5e10 // Contenuto : Dichiarazione della interfaccia IGeomDB. // // @@ -9,6 +9,7 @@ // Modifiche : 24.11.13 DS Creazione modulo. // 26.04.14 DS Agg. gestione libreria materiali. // 21.05.14 DS Agg. GotoFirst/Next/Last/Prev. +// 30.05.14 DS Agg. metodi di Shear. // //---------------------------------------------------------------------------- @@ -58,10 +59,10 @@ class __declspec( novtable) IGeomDB virtual bool GetLocalBBox( int nId, BBox3d& b3Loc, int nFlag = BBF_NONE) const = 0 ; virtual bool GetGlobalBBox( int nId, BBox3d& b3Glob, int nFlag = BBF_NONE) const = 0 ; virtual bool GetRefBBox( int nId, const Frame3d& frRef, BBox3d& b3Ref, int nFlag = BBF_NONE) const = 0 ; - virtual int Copy( int nIdSou, int nIdDest, int nParentIdDest) = 0 ; - virtual int CopyGlob( int nIdSou, int nIdDest, int nParentIdDest) = 0 ; - virtual bool Relocate( int nId, int nNewParentId) = 0 ; - virtual bool RelocateGlob( int nId, int nNewParentId) = 0 ; + virtual int Copy( int nIdSou, int nIdDest, int nRefId, int nSonBeforeAfter = GDB_SON) = 0 ; + virtual int CopyGlob( int nIdSou, int nIdDest, int nRefId, int nSonBeforeAfter = GDB_SON) = 0 ; + virtual bool Relocate( int nId, int nRefId, int nSonBeforeAfter = GDB_SON) = 0 ; + virtual bool RelocateGlob( int nId, int nRefId, int nSonBeforeAfter = GDB_SON) = 0 ; virtual bool Erase( int nId) = 0 ; virtual bool Translate( int nId, const Vector3d& vtMove) = 0 ; virtual bool TranslateGlob( int nId, const Vector3d& vtMove) = 0 ; @@ -78,6 +79,9 @@ class __declspec( novtable) IGeomDB virtual bool Mirror( int nId, const Point3d& ptOn, const Vector3d& vtNorm) = 0 ; virtual bool MirrorGlob( int nId, const Point3d& ptOn, const Vector3d& vtNorm) = 0 ; virtual bool MirrorGroup( int nId, const Point3d& ptOn, const Vector3d& vtNorm) = 0 ; + virtual bool Shear( int nId, const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) = 0 ; + virtual bool ShearGlob( int nId, const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) = 0 ; + virtual bool ShearGroup( int nId, const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) = 0 ; // selection virtual bool SelectObj( int nId) = 0 ; virtual bool DeselectObj( int nId) = 0 ; @@ -122,7 +126,19 @@ class __declspec( novtable) IGeomDB virtual bool ExistsName( int nId) const = 0 ; virtual bool RemoveName( int nId) = 0 ; virtual bool SetInfo( int nId, const std::string& sKey, const std::string& sInfo) = 0 ; + virtual bool SetInfo( int nId, const std::string& sKey, bool bInfo) = 0 ; + virtual bool SetInfo( int nId, const std::string& sKey, int nInfo) = 0 ; + virtual bool SetInfo( int nId, const std::string& sKey, double dInfo) = 0 ; + virtual bool SetInfo( int nId, const std::string& sKey, const Point3d& ptInfo) = 0 ; + virtual bool SetInfo( int nId, const std::string& sKey, const Vector3d& vtInfo) = 0 ; + virtual bool SetInfo( int nId, const std::string& sKey, const Frame3d& frInfo) = 0 ; virtual bool GetInfo( int nId, const std::string& sKey, std::string& sInfo) const = 0 ; + virtual bool GetInfo( int nId, const std::string& sKey, bool& bInfo) const = 0 ; + virtual bool GetInfo( int nId, const std::string& sKey, int& nInfo) const = 0 ; + virtual bool GetInfo( int nId, const std::string& sKey, double& dInfo) const = 0 ; + virtual bool GetInfo( int nId, const std::string& sKey, Point3d& ptInfo) const = 0 ; + virtual bool GetInfo( int nId, const std::string& sKey, Vector3d& vtInfo) const = 0 ; + virtual bool GetInfo( int nId, const std::string& sKey, Frame3d& frInfo) const = 0 ; virtual bool ExistsInfo( int nId, const std::string& sKey) const = 0 ; virtual bool RemoveInfo( int nId, const std::string& sKey) = 0 ; // material library diff --git a/EGkPoint3d.h b/EGkPoint3d.h index 711de9f..03d7ed3 100644 --- a/EGkPoint3d.h +++ b/EGkPoint3d.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2013-2013 +// EgalTech 2013-2014 //---------------------------------------------------------------------------- -// File : EGkPoint3d.h Data : 20.11.13 Versione : 1.3a1 +// File : EGkPoint3d.h Data : 30.05.14 Versione : 1.5e10 // Contenuto : Dichiarazione della classe Punto 3d. // // @@ -56,10 +56,11 @@ class EGK_EXPORT Point3d const Point3d& operator /=( double dDiv) { double dMul = 1 / dDiv ; this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; } void Translate( const Vector3d& vtMove) ; - bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad) ; + bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg) ; bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) ; bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) ; bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) ; + bool Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) ; bool ToGlob( const Frame3d& frRef) ; bool ToLoc( const Frame3d& frRef) ; bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) ; diff --git a/EGkPolyLine.h b/EGkPolyLine.h index b91f375..27f92eb 100644 --- a/EGkPolyLine.h +++ b/EGkPolyLine.h @@ -37,6 +37,17 @@ class PolyLine EGK_EXPORT bool EraseFirstUPoint( void) ; EGK_EXPORT bool EraseLastUPoint( void) ; EGK_EXPORT bool AddOffsetToU( double dOffset) ; + EGK_EXPORT bool Translate( const Vector3d& vtMove) ; + EGK_EXPORT bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg) + { double dAngRad = dAngDeg * DEGTORAD ; + return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ; } + EGK_EXPORT bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) ; + EGK_EXPORT bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) ; + EGK_EXPORT bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) ; + EGK_EXPORT bool Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) ; + EGK_EXPORT bool ToGlob( const Frame3d& frRef) ; + EGK_EXPORT bool ToLoc( const Frame3d& frRef) ; + EGK_EXPORT bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) ; EGK_EXPORT bool Splice( PolyLine& PL) ; EGK_EXPORT bool IsClosed( void) const ; EGK_EXPORT int GetPointNbr( void) const @@ -81,3 +92,8 @@ class PolyLine UPNTLIST m_lUPoints ; mutable UPNTLIST::const_iterator m_iter ; } ; + +//---------------------------------------------------------------------------- +// Raccolte di PolyLine +typedef std::vector POLYLINEVECTOR ; // vettore di PolyLine +typedef std::list POLYLINELIST ; // lista di PolyLine diff --git a/EGkVector3d.h b/EGkVector3d.h index a29e681..f7946bb 100644 --- a/EGkVector3d.h +++ b/EGkVector3d.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2013-2013 +// EgalTech 2013-2014 //---------------------------------------------------------------------------- -// File : EgkVector3d.h Data : 20.11.13 Versione : 1.3a1 +// File : EgkVector3d.h Data : 30.05.14 Versione : 1.5e10 // Contenuto : Dichiarazione della classe Vettore 3d. // // @@ -73,10 +73,11 @@ class EGK_EXPORT Vector3d { double dMul = 1 / dDiv ; this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; } void ToSpherical( double* pdLen, double* pdAngVertDeg, double* pdAngOrizzDeg) const ; bool Normalize( double dEps = EPS_SMALL) ; - bool Rotate( const Vector3d& vtAx, double dAngRad) ; + bool Rotate( const Vector3d& vtAx, double dAngDeg) ; bool Rotate( const Vector3d& vtAx, double dCosAng, double dSinAng) ; bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) ; bool Mirror( const Vector3d& vtNorm) ; + bool Shear( const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) ; bool ToGlob( const Frame3d& frRef) ; bool ToLoc( const Frame3d& frRef) ; bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) ; diff --git a/EGnStringDecoder.h b/EGnStringDecoder.h new file mode 100644 index 0000000..7e58ddf --- /dev/null +++ b/EGnStringDecoder.h @@ -0,0 +1,118 @@ +//---------------------------------------------------------------------------- +// EgalTech 2014-2014 +//---------------------------------------------------------------------------- +// File : EgnStringDecoder.h Data : 01.06.14 Versione : 1.5f1 +// Contenuto : Insieme di funzioni per decodificare stringhe UTF-8. +// +// +// +// Modifiche : 01.06.14 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGnStringBase.h" +#include "/EgtDev/Include/EGtNumCollection.h" + +//----------------------------------------------------------------------------- +typedef unsigned char uint8_t ; +typedef unsigned int uint32_t ; + +//----------------------------------------------------------------------------- +const uint32_t UTF8_ACCEPT = 0 ; +const uint32_t UTF8_REJECT = 12 ; + +//----------------------------------------------------------------------------- +// Copyright (c) 2008-2010 Bjoern Hoehrmann +// See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. + +//----------------------------------------------------------------------------- +static const uint8_t utf8d[] = { + // The first part of the table maps bytes to character classes that + // to reduce the size of the transition table and create bitmasks. + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, + // The second part is a transition table that maps a combination + // of a state of the automaton and a character class to a state. + 0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12, + 12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12, + 12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12, + 12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12, + 12,36,12,12,12,12,12,12,12,12,12,12 +} ; + +//----------------------------------------------------------------------------- +uint32_t inline +decode( uint32_t* state, uint32_t* codep, uint8_t byte) +{ + uint32_t type = utf8d[byte] ; + + *codep = (*state != UTF8_ACCEPT) ? + (byte & 0x3fu) | (*codep << 6) : + (0xff >> type) & (byte) ; + + *state = utf8d[ 256 + *state + type] ; + return *state ; +} + +//----------------------------------------------------------------------------- +bool inline +CountCodePoints( const std::string& sString, int& nCount) +{ + // inizializzo numero caratteri + nCount = 0 ; + + // ciclo sui byte della stringa UTF-8 + uint32_t codepoint ; + uint32_t state = UTF8_ACCEPT ; + for ( unsigned int i = 0 ; i < sString.length() ; ++ i) { + if ( ! decode( &state, &codepoint, sString[i])) + ++ nCount ; + } + + return ( state == UTF8_ACCEPT) ; +} + +//----------------------------------------------------------------------------- +bool inline +GetCodePoints( const std::string& sString, UINTVECTOR& vCode) +{ + // pulisco vettore di codici da restituire + vCode.reserve( sString.length()) ; + vCode.clear() ; + + // ciclo sui byte della stringa UTF-8 + bool bOk = true ; + uint32_t codepoint ; + uint32_t state = UTF8_ACCEPT ; + uint32_t stPrev = UTF8_ACCEPT ; + for ( unsigned int i = 0 ; i < sString.length() ; ++ i) { + + switch ( decode( &state, &codepoint, sString[i])) { + case UTF8_ACCEPT : + // A properly encoded character has been found. + vCode.push_back( codepoint) ; + break ; + case UTF8_REJECT : + // The byte is invalid, replace it and restart. + vCode.push_back( 0xFFFD) ; + bOk = false ; + state = UTF8_ACCEPT ; + if ( stPrev != UTF8_ACCEPT) + -- i ; + break ; + } + + stPrev = state ; + } + + return bOk ; +} diff --git a/EgkCurve.h b/EgkCurve.h index 063596e..ead386f 100644 --- a/EgkCurve.h +++ b/EgkCurve.h @@ -56,3 +56,8 @@ inline ICurve* GetCurve( IGeoObj* pGObj) { if ( pGObj == nullptr || ( pGObj->GetType() & GEO_CURVE) == 0) return nullptr ; return (static_cast(pGObj)) ; } + +//---------------------------------------------------------------------------- +// Raccolte di puntatori a ICurve +typedef std::vector ICURVEPVECTOR ; // vettore di puntatori a ICurve +typedef std::list ICURVEPLIST ; // lista di puntatori a ICurve diff --git a/EgnFileUtils.h b/EgnFileUtils.h index acb71f5..1aca6e7 100644 --- a/EgnFileUtils.h +++ b/EgnFileUtils.h @@ -25,5 +25,7 @@ #endif //----------------------------------------------------------------------------- +EGN_EXPORT bool ExistsFile( const std::string& sFile) ; EGN_EXPORT bool EraseFile( const std::string& sFile) ; +EGN_EXPORT bool FileExtensionMatches( const std::string& sFile, const std::string& sExt) ; EGN_EXPORT bool EmptyDirectory( const std::string& sDir) ; diff --git a/EgtNumCollection.h b/EgtNumCollection.h index e770442..8436925 100644 --- a/EgtNumCollection.h +++ b/EgtNumCollection.h @@ -21,6 +21,11 @@ typedef std::vector INTVECTOR ; // vettore di interi typedef std::list INT_LIST ; // lista di interi (con _ per non collidere con Win) +//---------------------------------------------------------------------------- +// Raccolte di interi senza segno +typedef std::vector UINTVECTOR ; // vettore di interi senza segno +typedef std::list UINT_LIST ; // lista di interi senza segno (con _ per non collidere con Win) + //---------------------------------------------------------------------------- // Raccolte di double typedef std::vector DBLVECTOR ; // vettore di double