mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-23 00:02:38 -05:00
111 lines
3.6 KiB
C++
111 lines
3.6 KiB
C++
/******************************************************************************
|
|
** libDXFrw - Library to read/write DXF files (ascii & binary) **
|
|
** **
|
|
** Copyright (C) 2011-2015 José F. Soriano, 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:
|
|
enum TYPE
|
|
{
|
|
STRING,
|
|
INT32,
|
|
INT64,
|
|
DOUBLE,
|
|
BOOL,
|
|
INVALID
|
|
};
|
|
enum TYPE type;
|
|
public:
|
|
explicit dxfReader( std::ifstream *stream, bool aSkip = false )
|
|
: doubleData( 0. )
|
|
, intData( 0 )
|
|
, int64( 0 )
|
|
, skip( aSkip )
|
|
{
|
|
filestr = stream;
|
|
type = INVALID;
|
|
}
|
|
virtual ~dxfReader() = default;
|
|
bool readRec( int *code );
|
|
|
|
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(const std::string &v, bool dxfFormat){decoder.setVersion(v, dxfFormat);}
|
|
void setCodePage(const std::string &c){decoder.setCodePage(c, true);}
|
|
std::string getCodePage() { return decoder.getCodePage();}
|
|
|
|
protected:
|
|
virtual bool readCode( int *code ) = 0; //return true if successful (not EOF)
|
|
virtual bool readString( std::string *text ) = 0;
|
|
virtual bool readString() = 0;
|
|
virtual bool readInt16() = 0;
|
|
virtual bool readInt32() = 0;
|
|
virtual bool readInt64() = 0;
|
|
virtual bool readDouble() = 0;
|
|
virtual bool readBool() = 0;
|
|
|
|
protected:
|
|
std::ifstream *filestr = nullptr;
|
|
std::string strData;
|
|
double doubleData;
|
|
signed int intData; //32 bits integer
|
|
unsigned long long int int64; //64 bits integer
|
|
bool skip; //set to true for ascii dxf, false for binary
|
|
private:
|
|
DRW_TextCodec decoder;
|
|
};
|
|
|
|
class dxfReaderBinary : public dxfReader
|
|
{
|
|
public:
|
|
explicit dxfReaderBinary( std::ifstream *stream )
|
|
: dxfReader( stream, false )
|
|
{}
|
|
virtual bool readCode( int *code );
|
|
virtual bool readString( std::string *text );
|
|
virtual bool readString();
|
|
virtual bool readInt16();
|
|
virtual bool readInt32();
|
|
virtual bool readInt64();
|
|
virtual bool readDouble();
|
|
virtual bool readBool();
|
|
};
|
|
|
|
class dxfReaderAscii : public dxfReader
|
|
{
|
|
public:
|
|
explicit dxfReaderAscii( std::ifstream *stream )
|
|
: dxfReader( stream, true )
|
|
{}
|
|
virtual bool readCode( int *code );
|
|
virtual bool readString( std::string *text );
|
|
virtual bool readString();
|
|
virtual bool readInt16();
|
|
virtual bool readDouble();
|
|
virtual bool readInt32();
|
|
virtual bool readInt64();
|
|
virtual bool readBool();
|
|
};
|
|
|
|
#endif // DXFREADER_H
|