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