102 lines
3.6 KiB
C++
102 lines
3.6 KiB
C++
/******************************************************************************
|
|
** libDXFrw - Library to read/write DXF files (ascii & binary) **
|
|
** **
|
|
** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
|
|
** **
|
|
** This library is free software, licensed under the terms of the GNU **
|
|
** General Public License as published by the Free Software Foundation, **
|
|
** either version 2 of the License, or (at your option) any later version. **
|
|
** You should have received a copy of the GNU General Public License **
|
|
** along with this program. If not, see <http://www.gnu.org/licenses/>. **
|
|
******************************************************************************/
|
|
|
|
#ifndef DXFREADER_H
|
|
#define DXFREADER_H
|
|
|
|
#include "drw_textcodec.h"
|
|
|
|
class dxfReader
|
|
{
|
|
public:
|
|
dxfReader( std::ifstream* stream )
|
|
{
|
|
filestr = stream;
|
|
doubleData = 0.0;
|
|
intData = 0;
|
|
int64 = 0;
|
|
#ifdef DRW_DBG
|
|
count = 0;
|
|
#endif
|
|
}
|
|
|
|
virtual ~dxfReader() {}
|
|
virtual bool readCode( int* code ) = 0; // return true if sucesful (not EOF)
|
|
virtual bool readString( std::string* text ) = 0;
|
|
virtual bool readString() = 0;
|
|
bool readRec( int* code, bool skip );
|
|
virtual bool readInt() = 0;
|
|
virtual bool readInt32() = 0;
|
|
virtual bool readInt64() = 0;
|
|
virtual bool readDouble() = 0;
|
|
virtual bool readBool() = 0;
|
|
|
|
std::string getString() { return strData; }
|
|
int getHandleString(); // Convert hex string to int
|
|
|
|
std::string toUtf8String( std::string t ) { return decoder.toUtf8( t ); }
|
|
std::string getUtf8String() { return decoder.toUtf8( strData ); }
|
|
double getDouble() { return doubleData; }
|
|
int getInt32() { return intData; }
|
|
unsigned long long int getInt64() { return int64; }
|
|
bool getBool() { return (intData==0) ? false : true; }
|
|
int getVersion() { return decoder.getVersion(); }
|
|
void setVersion( std::string* v ) { decoder.setVersion( v ); }
|
|
void setCodePage( std::string* c ) { decoder.setCodePage( c ); }
|
|
std::string getCodePage() { return decoder.getCodePage(); }
|
|
#ifdef DRW_DBG
|
|
int count; // DBG
|
|
#endif
|
|
|
|
protected:
|
|
std::ifstream* filestr;
|
|
std::string strData;
|
|
double doubleData;
|
|
signed int intData; // 32 bits integer
|
|
unsigned long long int int64; // 64 bits integer
|
|
|
|
private:
|
|
DRW_TextCodec decoder;
|
|
};
|
|
|
|
class dxfReaderBinary : public dxfReader
|
|
{
|
|
public:
|
|
dxfReaderBinary( std::ifstream* stream ) : dxfReader( stream ) {}
|
|
virtual ~dxfReaderBinary() {}
|
|
virtual bool readCode( int* code ) override;
|
|
virtual bool readString( std::string* text ) override;
|
|
virtual bool readString() override;
|
|
virtual bool readInt() override;
|
|
virtual bool readInt32() override;
|
|
virtual bool readInt64() override;
|
|
virtual bool readDouble() override;
|
|
virtual bool readBool() override;
|
|
};
|
|
|
|
class dxfReaderAscii : public dxfReader
|
|
{
|
|
public:
|
|
dxfReaderAscii( std::ifstream* stream ) : dxfReader( stream ) {}
|
|
virtual ~dxfReaderAscii() {}
|
|
virtual bool readCode( int* code ) override;
|
|
virtual bool readString( std::string* text ) override;
|
|
virtual bool readString() override;
|
|
virtual bool readInt() override;
|
|
virtual bool readDouble() override;
|
|
virtual bool readInt32() override;
|
|
virtual bool readInt64() override;
|
|
virtual bool readBool() override;
|
|
};
|
|
|
|
#endif // DXFREADER_H
|