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 <vector>
17 #include "drw_textcodec.h"
18 #include "dwgbuffer.h"
19 #include "dwgreader.h"
20 
21 //reader for AC1021 aka v2007, chapter 5
22 class dwgReader21 : public dwgReader {
23 public:
dwgReader21(std::ifstream * stream,dwgR * p)24     dwgReader21(std::ifstream *stream, dwgR *p):dwgReader(stream, p){
25 	}
26 	bool readMetaData() override;
27 	bool readFileHeader() override;
28 	bool readDwgHeader(DRW_Header& hdr) override;
29 	bool readDwgClasses() override;
30 	bool readDwgHandles() override;
31 	bool readDwgTables(DRW_Header& hdr) override;
32 	bool readDwgBlocks(DRW_Interface& intfa) override;
readDwgEntities(DRW_Interface & intfa)33 	virtual bool readDwgEntities(DRW_Interface& intfa) override{
34         bool ret = true;
35 		dwgBuffer dataBuf(&objData.front(), dataSize, &decoder);
36         ret = dwgReader::readDwgEntities(intfa, &dataBuf);
37         return ret;
38     }
readDwgObjects(DRW_Interface & intfa)39 	virtual bool readDwgObjects(DRW_Interface& intfa) override{
40         bool ret = true;
41 		dwgBuffer dataBuf(&objData.front(), dataSize, &decoder);
42         ret = dwgReader::readDwgObjects(intfa, &dataBuf);
43         return ret;
44     }
45 //bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){
46 //    return false;
47 //}
48 
49 private:
50     bool parseSysPage(duint64 sizeCompressed, duint64 sizeUncompressed, duint64 correctionFactor, duint64 offset, duint8 *decompData);
51     bool parseDataPage(dwgSectionInfo si, duint8 *dData);
52 
53 	std::vector<duint8> objData;
54 	duint64 dataSize = 0;
55 
56 };
57 
58 #endif // DWGREADER21_H
59