1 /****************************************************************************** 2 ** libDXFrw - Library to read/write DXF files (ascii & binary) ** 3 ** ** 4 ** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** 5 ** ** 6 ** This library is free software, licensed under the terms of the GNU ** 7 ** General Public License as published by the Free Software Foundation, ** 8 ** either version 2 of the License, or (at your option) any later version. ** 9 ** You should have received a copy of the GNU General Public License ** 10 ** along with this program. If not, see <http://www.gnu.org/licenses/>. ** 11 ******************************************************************************/ 12 13 #ifndef DWGREADER21_H 14 #define DWGREADER21_H 15 16 #include <map> 17 #include <list> 18 #include "drw_textcodec.h" 19 #include "dwgbuffer.h" 20 #include "dwgreader.h" 21 22 //reader for AC1021 aka v2007, chapter 5 23 class dwgReader21 : public dwgReader { 24 public: dwgReader21(std::ifstream * stream,dwgR * p)25 dwgReader21(std::ifstream *stream, dwgR *p):dwgReader(stream, p){ 26 } 27 bool readMetaData() override; 28 bool readFileHeader() override; 29 bool readDwgHeader(DRW_Header& hdr) override; 30 bool readDwgClasses() override; 31 bool readDwgHandles() override; 32 bool readDwgTables(DRW_Header& hdr) override; 33 bool readDwgBlocks(DRW_Interface& intfa) override; readDwgEntities(DRW_Interface & intfa)34 bool readDwgEntities(DRW_Interface& intfa) override { 35 bool ret = true; 36 dwgBuffer dataBuf(objData.get(), dataSize, &decoder); 37 ret = dwgReader::readDwgEntities(intfa, &dataBuf); 38 return ret; 39 } readDwgObjects(DRW_Interface & intfa)40 bool readDwgObjects(DRW_Interface& intfa) override { 41 bool ret = true; 42 dwgBuffer dataBuf(objData.get(), dataSize, &decoder); 43 ret = dwgReader::readDwgObjects(intfa, &dataBuf); 44 return ret; 45 } 46 //bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ 47 // return false; 48 //} 49 50 private: 51 bool parseSysPage(duint64 sizeCompressed, duint64 sizeUncompressed, duint64 correctionFactor, duint64 offset, duint8 *decompData); 52 bool parseDataPage(const dwgSectionInfo &si, duint8 *dData); 53 54 std::unique_ptr<duint8 []> objData; 55 duint64 dataSize{0}; 56 57 }; 58 59 #endif // DWGREADER21_H 60