]> Shamusworld >> Repos - architektonas/blob - dxflib/src/dl_creationinterface.h
Refactored CAD tool bars to use predefined actions.
[architektonas] / dxflib / src / dl_creationinterface.h
1 /****************************************************************************
2 ** $Id: dl_creationinterface.h 2397 2005-06-06 18:11:14Z andrew $
3 **
4 ** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
5 **
6 ** This file is part of the dxflib project.
7 **
8 ** This file may be distributed and/or modified under the terms of the
9 ** GNU General Public License version 2 as published by the Free Software
10 ** Foundation and appearing in the file LICENSE.GPL included in the
11 ** packaging of this file.
12 **
13 ** Licensees holding valid dxflib Professional Edition licenses may use 
14 ** this file in accordance with the dxflib Commercial License
15 ** Agreement provided with the Software.
16 **
17 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
18 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19 **
20 ** See http://www.ribbonsoft.com for further details.
21 **
22 ** Contact info@ribbonsoft.com if any conditions of this licensing are
23 ** not clear to you.
24 **
25 **********************************************************************/
26
27 #ifndef DL_CREATIONINTERFACE_H
28 #define DL_CREATIONINTERFACE_H
29
30 #include <string.h>
31
32 #include "dl_attributes.h"
33 #include "dl_codes.h"
34 #include "dl_entities.h"
35 #include "dl_extrusion.h"
36
37 /**
38  * Abstract class (interface) for the creation of new entities.
39  * Inherit your class which takes care of the entities in the 
40  * processed DXF file from this interface. 
41  *
42  * Double arrays passed to your implementation contain 3 double 
43  * values for x, y, z coordinates unless stated differently.
44  *
45  * @author Andrew Mustun
46  */
47 class DL_CreationInterface {
48 public:
49     DL_CreationInterface() {
50         extrusion = new DL_Extrusion;
51     }
52     virtual ~DL_CreationInterface() {
53         delete extrusion;
54     }
55
56     /**
57      * Called for every layer.
58      */
59     virtual void addLayer(const DL_LayerData& data) = 0;
60
61     /**
62      * Called for every block. Note: all entities added after this
63      * command go into this block until endBlock() is called.
64     *
65      * @see endBlock()
66      */
67     virtual void addBlock(const DL_BlockData& data) = 0;
68
69     /** Called to end the current block */
70     virtual void endBlock() = 0;
71
72     /** Called for every point */
73     virtual void addPoint(const DL_PointData& data) = 0;
74
75     /** Called for every line */
76     virtual void addLine(const DL_LineData& data) = 0;
77
78     /** Called for every arc */
79     virtual void addArc(const DL_ArcData& data) = 0;
80
81     /** Called for every circle */
82     virtual void addCircle(const DL_CircleData& data) = 0;
83
84     /** Called for every ellipse */
85     virtual void addEllipse(const DL_EllipseData& data) = 0;
86
87     /** Called for every polyline start */
88     virtual void addPolyline(const DL_PolylineData& data) = 0;
89
90     /** Called for every polyline vertex */
91     virtual void addVertex(const DL_VertexData& data) = 0;
92         
93         /** Called for every spline */
94     virtual void addSpline(const DL_SplineData& data) = 0;
95         
96         /** Called for every spline control point */
97     virtual void addControlPoint(const DL_ControlPointData& data) = 0;
98         
99         /** Called for every spline knot value */
100     virtual void addKnot(const DL_KnotData& data) = 0;
101
102     /** Called for every insert. */
103     virtual void addInsert(const DL_InsertData& data) = 0;
104     
105     /** Called for every trace start */
106     virtual void addTrace(const DL_TraceData& data) = 0;
107
108     /** Called for every solid start */
109     virtual void addSolid(const DL_SolidData& data) = 0;
110
111
112     /** Called for every Multi Text entity. */
113     virtual void addMText(const DL_MTextData& data) = 0;
114
115     /**
116      * Called for additional text chunks for MTEXT entities.
117      * The chunks come at 250 character in size each. Note that 
118      * those chunks come <b>before</b> the actual MTEXT entity.
119      */
120     virtual void addMTextChunk(const char* text) = 0;
121
122     /** Called for every Text entity. */
123     virtual void addText(const DL_TextData& data) = 0;
124
125     /**
126      * Called for every aligned dimension entity. 
127      */
128     virtual void addDimAlign(const DL_DimensionData& data,
129                              const DL_DimAlignedData& edata) = 0;
130     /**
131      * Called for every linear or rotated dimension entity. 
132      */
133     virtual void addDimLinear(const DL_DimensionData& data,
134                               const DL_DimLinearData& edata) = 0;
135
136         /**
137      * Called for every radial dimension entity. 
138      */
139     virtual void addDimRadial(const DL_DimensionData& data,
140                               const DL_DimRadialData& edata) = 0;
141
142         /**
143      * Called for every diametric dimension entity. 
144      */
145     virtual void addDimDiametric(const DL_DimensionData& data,
146                               const DL_DimDiametricData& edata) = 0;
147
148         /**
149      * Called for every angular dimension (2 lines version) entity. 
150      */
151     virtual void addDimAngular(const DL_DimensionData& data,
152                               const DL_DimAngularData& edata) = 0;
153
154         /**
155      * Called for every angular dimension (3 points version) entity. 
156      */
157     virtual void addDimAngular3P(const DL_DimensionData& data,
158                               const DL_DimAngular3PData& edata) = 0;
159     
160     /** 
161          * Called for every leader start. 
162          */
163     virtual void addLeader(const DL_LeaderData& data) = 0;
164         
165         /** 
166          * Called for every leader vertex 
167          */
168     virtual void addLeaderVertex(const DL_LeaderVertexData& data) = 0;
169         
170         /** 
171          * Called for every hatch entity. 
172          */
173     virtual void addHatch(const DL_HatchData& data) = 0;
174         
175         /** 
176          * Called for every image entity. 
177          */
178     virtual void addImage(const DL_ImageData& data) = 0;
179
180         /**
181          * Called for every image definition.
182          */
183         virtual void linkImage(const DL_ImageDefData& data) = 0;
184
185         /** 
186          * Called for every hatch loop. 
187          */
188     virtual void addHatchLoop(const DL_HatchLoopData& data) = 0;
189
190         /** 
191          * Called for every hatch edge entity. 
192          */
193     virtual void addHatchEdge(const DL_HatchEdgeData& data) = 0;
194         
195         /** 
196          * Called after an entity has been completed.  
197          */
198     virtual void endEntity() = 0;
199
200     /**
201      * Called for every vector variable in the DXF file (e.g. "$EXTMIN").
202      */
203     virtual void setVariableVector(const char* key, 
204                        double v1, double v2, double v3, int code) = 0;
205         
206     /**
207      * Called for every string variable in the DXF file (e.g. "$ACADVER").
208      */
209     virtual void setVariableString(const char* key, const char* value, int code) = 0;
210         
211     /**
212      * Called for every int variable in the DXF file (e.g. "$ACADMAINTVER").
213      */
214     virtual void setVariableInt(const char* key, int value, int code) = 0;
215         
216     /**
217      * Called for every double variable in the DXF file (e.g. "$DIMEXO").
218      */
219     virtual void setVariableDouble(const char* key, double value, int code) = 0;
220         
221      /**
222       * Called when a SEQEND occurs (when a POLYLINE or ATTRIB is done)
223       */
224      virtual void endSequence() = 0;
225
226     /** Sets the current attributes for entities. */
227     void setAttributes(const DL_Attributes& attrib) {
228         attributes = attrib;
229     }
230
231     /** @return the current attributes used for new entities. */
232     DL_Attributes getAttributes() {
233         return attributes;
234     }
235
236     /** Sets the current attributes for entities. */
237     void setExtrusion(double dx, double dy, double dz, double elevation) {
238         extrusion->setDirection(dx, dy, dz);
239                 extrusion->setElevation(elevation);
240     }
241
242     /** @return the current attributes used for new entities. */
243     DL_Extrusion* getExtrusion() {
244         return extrusion;
245     }
246
247 protected:
248     DL_Attributes attributes;
249     DL_Extrusion *extrusion;
250 };
251
252 #endif