1 /**************************************************************************** 2 ** 3 ** This file is part of the LibreCAD project, a 2D CAD program 4 ** 5 ** Copyright (C) 2010 R. van Twisk (librecad@rvt.dds.nl) 6 ** Copyright (C) 2001-2003 RibbonSoft. All rights reserved. 7 ** 8 ** 9 ** This file may be distributed and/or modified under the terms of the 10 ** GNU General Public License version 2 as published by the Free Software 11 ** Foundation and appearing in the file gpl-2.0.txt included in the 12 ** packaging of this file. 13 ** 14 ** This program is distributed in the hope that it will be useful, 15 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 16 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 ** GNU General Public License for more details. 18 ** 19 ** You should have received a copy of the GNU General Public License 20 ** along with this program; if not, write to the Free Software 21 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 ** 23 ** This copyright notice MUST APPEAR in all copies of the script! 24 ** 25 **********************************************************************/ 26 27 #ifndef DL_CREATIONINTERFACE_H 28 #define DL_CREATIONINTERFACE_H 29 30 #include <cstring> 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: DL_CreationInterface()49 DL_CreationInterface() { 50 extrusion = new DL_Extrusion; 51 } ~DL_CreationInterface()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 3dface start */ 109 virtual void add3dFace(const DL_3dFaceData& data) = 0; 110 111 /** Called for every solid start */ 112 virtual void addSolid(const DL_SolidData& data) = 0; 113 114 115 /** Called for every Multi Text entity. */ 116 virtual void addMText(const DL_MTextData& data) = 0; 117 118 /** 119 * Called for additional text chunks for MTEXT entities. 120 * The chunks come at 250 character in size each. Note that 121 * those chunks come <b>before</b> the actual MTEXT entity. 122 */ 123 virtual void addMTextChunk(const char* text) = 0; 124 125 /** Called for every Text entity. */ 126 virtual void addText(const DL_TextData& data) = 0; 127 128 /** 129 * Called for every aligned dimension entity. 130 */ 131 virtual void addDimAlign(const DL_DimensionData& data, 132 const DL_DimAlignedData& edata) = 0; 133 /** 134 * Called for every linear or rotated dimension entity. 135 */ 136 virtual void addDimLinear(const DL_DimensionData& data, 137 const DL_DimLinearData& edata) = 0; 138 139 /** 140 * Called for every radial dimension entity. 141 */ 142 virtual void addDimRadial(const DL_DimensionData& data, 143 const DL_DimRadialData& edata) = 0; 144 145 /** 146 * Called for every diametric dimension entity. 147 */ 148 virtual void addDimDiametric(const DL_DimensionData& data, 149 const DL_DimDiametricData& edata) = 0; 150 151 /** 152 * Called for every angular dimension (2 lines version) entity. 153 */ 154 virtual void addDimAngular(const DL_DimensionData& data, 155 const DL_DimAngularData& edata) = 0; 156 157 /** 158 * Called for every angular dimension (3 points version) entity. 159 */ 160 virtual void addDimAngular3P(const DL_DimensionData& data, 161 const DL_DimAngular3PData& edata) = 0; 162 163 /** 164 * Called for every ordinate dimension entity. 165 */ 166 virtual void addDimOrdinate(const DL_DimensionData& data, 167 const DL_DimOrdinateData& edata) = 0; 168 169 /** 170 * Called for every leader start. 171 */ 172 virtual void addLeader(const DL_LeaderData& data) = 0; 173 174 /** 175 * Called for every leader vertex 176 */ 177 virtual void addLeaderVertex(const DL_LeaderVertexData& data) = 0; 178 179 /** 180 * Called for every hatch entity. 181 */ 182 virtual void addHatch(const DL_HatchData& data) = 0; 183 184 /** 185 * Called for every image entity. 186 */ 187 virtual void addImage(const DL_ImageData& data) = 0; 188 189 /** 190 * Called for every image definition. 191 */ 192 virtual void linkImage(const DL_ImageDefData& data) = 0; 193 194 /** 195 * Called for every hatch loop. 196 */ 197 virtual void addHatchLoop(const DL_HatchLoopData& data) = 0; 198 199 /** 200 * Called for every hatch edge entity. 201 */ 202 virtual void addHatchEdge(const DL_HatchEdgeData& data) = 0; 203 204 /** 205 * Called after an entity has been completed. 206 */ 207 virtual void endEntity() = 0; 208 209 /** 210 * Called for every comment in the DXF file (code 999). 211 */ 212 virtual void addComment(const char* comment) = 0; 213 214 /** 215 * Called for every vector variable in the DXF file (e.g. "$EXTMIN"). 216 */ 217 virtual void setVariableVector(const char* key, 218 double v1, double v2, double v3, int code) = 0; 219 220 /** 221 * Called for every string variable in the DXF file (e.g. "$ACADVER"). 222 */ 223 virtual void setVariableString(const char* key, const char* value, int code) = 0; 224 225 /** 226 * Called for every int variable in the DXF file (e.g. "$ACADMAINTVER"). 227 */ 228 virtual void setVariableInt(const char* key, int value, int code) = 0; 229 230 /** 231 * Called for every double variable in the DXF file (e.g. "$DIMEXO"). 232 */ 233 virtual void setVariableDouble(const char* key, double value, int code) = 0; 234 235 /** 236 * Called when a SEQEND occurs (when a POLYLINE or ATTRIB is done) 237 */ 238 virtual void endSequence() = 0; 239 240 /** Sets the current attributes for entities. */ setAttributes(const DL_Attributes & attrib)241 void setAttributes(const DL_Attributes& attrib) { 242 attributes = attrib; 243 } 244 245 /** @return the current attributes used for new entities. */ getAttributes()246 DL_Attributes getAttributes() { 247 return attributes; 248 } 249 250 /** Sets the current attributes for entities. */ setExtrusion(double dx,double dy,double dz,double elevation)251 void setExtrusion(double dx, double dy, double dz, double elevation) { 252 extrusion->setDirection(dx, dy, dz); 253 extrusion->setElevation(elevation); 254 } 255 256 /** @return the current attributes used for new entities. */ getExtrusion()257 DL_Extrusion* getExtrusion() { 258 return extrusion; 259 } 260 261 protected: 262 DL_Attributes attributes; 263 DL_Extrusion *extrusion; 264 }; 265 266 #endif 267