diff --git a/src/libs/vdxf/libdxfrw/intern/dxfreader.cpp b/src/libs/vdxf/libdxfrw/intern/dxfreader.cpp index 9e99e89fb..d4d99c914 100644 --- a/src/libs/vdxf/libdxfrw/intern/dxfreader.cpp +++ b/src/libs/vdxf/libdxfrw/intern/dxfreader.cpp @@ -48,6 +48,10 @@ bool dxfReader::readRec(int *codeData) { readInt16(); else if (code < 300) //TODO this is a boolean indicator, int in Binary? readBool(); + else if (code < 310) + readString(); + else if (code < 320) + readBinary(); else if (code < 370) readString(); else if (code < 390) @@ -74,6 +78,8 @@ bool dxfReader::readRec(int *codeData) { readString(); return readRec( codeData); } + else if (code == 1004) + readBinary(); else if (code > 998 && code < 1009) //skip not used at the v2012 readString(); else if (code < 1060) //TODO this is a floating point double precision?? @@ -138,6 +144,16 @@ bool dxfReaderBinary::readString(std::string *text) { return (filestr->good()); } +bool dxfReaderBinary::readBinary() { + unsigned char chunklen {0}; + + filestr->read( reinterpret_cast(&chunklen), 1); + filestr->seekg( chunklen, std::ios_base::cur); + DRW_DBG( chunklen); DRW_DBG( " byte(s) binary data bypassed\n"); + + return (filestr->good()); +} + bool dxfReaderBinary::readInt16() { type = INT32; char buffer[2]; @@ -214,6 +230,10 @@ bool dxfReaderAscii::readString() { return (filestr->good()); } +bool dxfReaderAscii::readBinary() { + return readString(); +} + bool dxfReaderAscii::readInt16() { type = INT32; std::string text; diff --git a/src/libs/vdxf/libdxfrw/intern/dxfreader.h b/src/libs/vdxf/libdxfrw/intern/dxfreader.h index 60f5e203f..9c7caf9ee 100644 --- a/src/libs/vdxf/libdxfrw/intern/dxfreader.h +++ b/src/libs/vdxf/libdxfrw/intern/dxfreader.h @@ -59,6 +59,7 @@ 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 readBinary() = 0; virtual bool readInt16() = 0; virtual bool readInt32() = 0; virtual bool readInt64() = 0; @@ -88,6 +89,7 @@ public: virtual bool readCode(int *code) override; virtual bool readString(std::string *text) override; virtual bool readString() override; + virtual bool readBinary() override; virtual bool readInt16() override; virtual bool readInt32() override; virtual bool readInt64() override; @@ -105,6 +107,7 @@ public: virtual bool readCode(int *code) override; virtual bool readString(std::string *text) override; virtual bool readString() override; + virtual bool readBinary() override; virtual bool readInt16() override; virtual bool readDouble() override; virtual bool readInt32() override;