summaryrefslogtreecommitdiff
path: root/lib_dxf/libdxfrw.h
blob: c37dcb2f3e7e0d992b86fb72ec5c64bb56c55bfb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/******************************************************************************
**  libDXFrw - Library to read/write DXF files (ascii & binary)              **
**                                                                           **
**  Copyright (C) 2011 Rallaz, 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 LIBDXFRW_H
#define LIBDXFRW_H

#include <string>
#include "drw_entities.h"
#include "drw_objects.h"
#include "drw_interface.h"


class dxfReader;
class dxfWriter;

class dxfRW
{
public:
    dxfRW( const char* name );
    ~dxfRW();
    /// reads the file specified in constructor
    /*!
     * An interface must be provided. It is used by the class to signal various
     * components being added.
     * @param interface_ the interface to use
     * @param ext should the extrusion be applied to convert in 2D?
     * @return true for success
     */
    bool read( DRW_Interface* interface_, bool ext );

    void setBinary( bool b ) { binary = b; }

    bool            write( DRW_Interface* interface_, DRW::Version ver, bool bin );
    bool            writeLineType( DRW_LType* ent );
    bool            writeLayer( DRW_Layer* ent );
    bool            writeDimstyle( DRW_Dimstyle* ent );
    bool            writeTextstyle( DRW_Textstyle* ent );
    bool            writeVport( DRW_Vport* ent );
    bool            writeAppId( DRW_AppId* ent );
    bool            writePoint( DRW_Point* ent );
    bool            writeLine( DRW_Line* ent );
    bool            writeRay( DRW_Ray* ent );
    bool            writeXline( DRW_Xline* ent );
    bool            writeCircle( DRW_Circle* ent );
    bool            writeArc( DRW_Arc* ent );
    bool            writeEllipse( DRW_Ellipse* ent );
    bool            writeTrace( DRW_Trace* ent );
    bool            writeSolid( DRW_Solid* ent );
    bool            write3dface( DRW_3Dface* ent );
    bool            writeLWPolyline( DRW_LWPolyline* ent );
    bool            writePolyline( DRW_Polyline* ent );
    bool            writeSpline( DRW_Spline* ent );
    bool            writeBlockRecord( std::string name );
    bool            writeBlock( DRW_Block* ent );
    bool            writeInsert( DRW_Insert* ent );
    bool            writeMText( DRW_MText* ent );
    bool            writeText( DRW_Text* ent );
    bool            writeHatch( DRW_Hatch* ent );
    bool            writeViewport( DRW_Viewport* ent );
    DRW_ImageDef*   writeImage( DRW_Image* ent, std::string name );
    bool            writeLeader( DRW_Leader* ent );
    bool            writeDimension( DRW_Dimension* ent );

    void setEllipseParts( int parts ) { elParts = parts; }    /*!< set parts munber when convert ellipse to polyline */

private:
    /// used by read() to parse the content of the file
    bool    processDxf();
    bool    processHeader();
    bool    processTables();
    bool    processBlocks();
    bool    processBlock();
    bool    processEntities( bool isblock );
    bool    processObjects();

    bool    processLType();
    bool    processLayer();
    bool    processDimStyle();
    bool    processTextStyle();
    bool    processVports();
    bool    processAppId();

    bool    processPoint();
    bool    processLine();
    bool    processRay();
    bool    processXline();
    bool    processCircle();
    bool    processArc();
    bool    processEllipse();
    bool    processTrace();
    bool    processSolid();
    bool    processInsert();
    bool    processLWPolyline();
    bool    processPolyline();
    bool    processVertex( DRW_Polyline* pl );
    bool    processText();
    bool    processMText();
    bool    processHatch();
    bool    processSpline();
    bool    process3dface();
    bool    processViewport();
    bool    processImage();
    bool    processImageDef();
    bool    processDimension();
    bool    processLeader();

// bool writeHeader();
    bool        writeEntity( DRW_Entity* ent );
    bool        writeTables();
    bool        writeBlocks();
    bool        writeObjects();
    bool        writeExtData( const std::vector<DRW_Variant*>& ed );
    std::string toHexStr( int n );

private:
    DRW::Version    version;
    std::string     fileName;
    std::string     codePage;
    bool binary;
    dxfReader*  reader;
    dxfWriter*  writer;
    DRW_Interface* iface;
    DRW_Header header;
// int section;
    std::string nextentity;
    int entCount;
    bool    wlayer0;
    bool    dimstyleStd;
    bool    applyExt;
    bool    writingBlock;
    int     elParts;                        /*!< parts munber when convert ellipse to polyline */
    std::map<std::string, int>  blockMap;
    std::vector<DRW_ImageDef*>  imageDef;   /*!< imageDef list */

    int currHandle;
};

#endif    // LIBDXFRW_H