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 DRW_INTERFACE_H
14 #define DRW_INTERFACE_H
15 
16 #include <cstring>
17 
18 #include "drw_entities.h"
19 #include "drw_objects.h"
20 #include "drw_header.h"
21 
22 /**
23  * Abstract class (interface) for comunicate dxfReader with the application.
24  * Inherit your class which takes care of the entities in the
25  * processed DXF file from this interface.
26  *
27  * @author Rallaz
28  */
29 class DRW_Interface
30 {
31   public:
DRW_Interface()32     DRW_Interface()
33     {
34     }
~DRW_Interface()35     virtual ~DRW_Interface()
36     {
37     }
38 
39     //! Called when header is parsed.
40     virtual void addHeader( const DRW_Header *data ) = 0;
41 
42     //! Called for every line Type.
43     virtual void addLType( const DRW_LType &data ) = 0;
44     //! Called for every layer.
45     virtual void addLayer( const DRW_Layer &data ) = 0;
46     //! Called for every dim style.
47     virtual void addDimStyle( const DRW_Dimstyle &data ) = 0;
48     //! Called for every VPORT table.
49     virtual void addVport( const DRW_Vport &data ) = 0;
50     //! Called for every text style.
51     virtual void addTextStyle( const DRW_Textstyle &data ) = 0;
52     //! Called for every AppId entry.
53     virtual void addAppId( const DRW_AppId &data ) = 0;
54 
55     /**
56      * Called for every block. Note: all entities added after this
57      * command go into this block until endBlock() is called.
58      *
59      * \see endBlock()
60      */
61     virtual void addBlock( const DRW_Block &data ) = 0;
62 
63     /**
64      * In DWG called when the following entities corresponding to a
65      * block different from the current. Note: all entities added after this
66      * command go into this block until setBlock() is called already.
67      *
68      * int handle are the value of DRW_Block::handleBlock added with addBlock()
69      */
70     virtual void setBlock( int handle ) = 0;
71 
72     //! Called to end the current block
73     virtual void endBlock() = 0;
74 
75     //! Called for every point
76     virtual void addPoint( const DRW_Point &data ) = 0;
77 
78     //! Called for every line
79     virtual void addLine( const DRW_Line &data ) = 0;
80 
81     //! Called for every ray
82     virtual void addRay( const DRW_Ray &data ) = 0;
83 
84     //! Called for every xline
85     virtual void addXline( const DRW_Xline &data ) = 0;
86 
87     //! Called for every arc
88     virtual void addArc( const DRW_Arc &data ) = 0;
89 
90     //! Called for every circle
91     virtual void addCircle( const DRW_Circle &data ) = 0;
92 
93     //! Called for every ellipse
94     virtual void addEllipse( const DRW_Ellipse &data ) = 0;
95 
96     //! Called for every lwpolyline
97     virtual void addLWPolyline( const DRW_LWPolyline &data ) = 0;
98 
99     //! Called for every polyline start
100     virtual void addPolyline( const DRW_Polyline &data ) = 0;
101 
102     //! Called for every spline
103     virtual void addSpline( const DRW_Spline *data ) = 0;
104 
105     //! Called for every spline knot value
106     virtual void addKnot( const DRW_Entity &data ) = 0;
107 
108     //! Called for every insert.
109     virtual void addInsert( const DRW_Insert &data ) = 0;
110 
111     //! Called for every trace start
112     virtual void addTrace( const DRW_Trace &data ) = 0;
113 
114     //! Called for every 3dface start
115     virtual void add3dFace( const DRW_3Dface &data ) = 0;
116 
117     //! Called for every solid start
118     virtual void addSolid( const DRW_Solid &data ) = 0;
119 
120 
121     //! Called for every Multi Text entity.
122     virtual void addMText( const DRW_MText &data ) = 0;
123 
124     //! Called for every Text entity.
125     virtual void addText( const DRW_Text &data ) = 0;
126 
127     //! Called for every aligned dimension entity.
128     virtual void addDimAlign( const DRW_DimAligned *data ) = 0;
129 
130     //! Called for every linear or rotated dimension entity.
131     virtual void addDimLinear( const DRW_DimLinear *data ) = 0;
132 
133     //! Called for every radial dimension entity.
134     virtual void addDimRadial( const DRW_DimRadial *data ) = 0;
135 
136     //! Called for every diametric dimension entity.
137     virtual void addDimDiametric( const DRW_DimDiametric *data ) = 0;
138 
139     //! Called for every angular dimension (2 lines version) entity.
140     virtual void addDimAngular( const DRW_DimAngular *data ) = 0;
141 
142     //! Called for every angular dimension (3 points version) entity.
143     virtual void addDimAngular3P( const DRW_DimAngular3p *data ) = 0;
144 
145     //! Called for every ordinate dimension entity.
146     virtual void addDimOrdinate( const DRW_DimOrdinate *data ) = 0;
147 
148     //! Called for every leader start.
149     virtual void addLeader( const DRW_Leader *data ) = 0;
150 
151     //! Called for every hatch entity.
152     virtual void addHatch( const DRW_Hatch *data ) = 0;
153 
154     //! Called for every viewport entity.
155     virtual void addViewport( const DRW_Viewport &data ) = 0;
156 
157     //! Called for every image entity.
158     virtual void addImage( const DRW_Image *data ) = 0;
159 
160     //! Called for every image definition.
161     virtual void linkImage( const DRW_ImageDef *data ) = 0;
162 
163     //! Called for every comment in the DXF file (code 999).
164     virtual void addComment( const char *comment ) = 0;
165 
166     virtual void writeHeader( DRW_Header &data ) = 0;
167     virtual void writeBlocks() = 0;
168     virtual void writeBlockRecords() = 0;
169     virtual void writeEntities() = 0;
170     virtual void writeLTypes() = 0;
171     virtual void writeLayers() = 0;
172     virtual void writeTextstyles() = 0;
173     virtual void writeVports() = 0;
174     virtual void writeDimstyles() = 0;
175     virtual void writeAppId() = 0;
176 };
177 
178 #endif
179