You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

385 lines
11 KiB

  1. /****************************************************************************
  2. ** Copyright (C) 2001-2013 RibbonSoft, GmbH. All rights reserved.
  3. **
  4. ** This file is part of the dxflib project.
  5. **
  6. ** This file is free software; you can redistribute it and/or modify
  7. ** it under the terms of the GNU General Public License as published by
  8. ** the Free Software Foundation; either version 2 of the License, or
  9. ** (at your option) any later version.
  10. **
  11. ** Licensees holding valid dxflib Professional Edition licenses may use
  12. ** this file in accordance with the dxflib Commercial License
  13. ** Agreement provided with the Software.
  14. **
  15. ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  16. ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  17. **
  18. ** See http://www.ribbonsoft.com for further details.
  19. **
  20. ** Contact info@ribbonsoft.com if any conditions of this licensing are
  21. ** not clear to you.
  22. **
  23. **********************************************************************/
  24. #ifndef DL_CREATIONINTERFACE_H
  25. #define DL_CREATIONINTERFACE_H
  26. #include "dl_global.h"
  27. #include <string.h>
  28. #include "dl_attributes.h"
  29. #include "dl_codes.h"
  30. #include "dl_entities.h"
  31. #include "dl_extrusion.h"
  32. /**
  33. * Abstract class (interface) for the creation of new entities.
  34. * Inherit your class which takes care of the entities in the
  35. * processed DXF file from this interface.
  36. *
  37. * Double arrays passed to your implementation contain 3 double
  38. * values for x, y, z coordinates unless stated differently.
  39. *
  40. * @author Andrew Mustun
  41. */
  42. class DXFLIB_EXPORT DL_CreationInterface
  43. {
  44. public:
  45. DL_CreationInterface()
  46. {
  47. extrusion = new DL_Extrusion;
  48. }
  49. virtual ~DL_CreationInterface()
  50. {
  51. delete extrusion;
  52. }
  53. /**
  54. * Called for every code / value tuple of the DXF file. The complete DXF file
  55. * contents can be handled by the implemetation of this function.
  56. */
  57. virtual void processCodeValuePair( unsigned int groupCode, const std::string& groupValue ) = 0;
  58. /**
  59. * Called when a section (entity, table entry, etc.) is finished.
  60. */
  61. virtual void endSection() = 0;
  62. /**
  63. * Called for every layer.
  64. */
  65. virtual void addLayer( const DL_LayerData& data ) = 0;
  66. /**
  67. * Called for every linetype.
  68. */
  69. virtual void addLinetype( const DL_LinetypeData& data ) = 0;
  70. /**
  71. * Called for every dash in linetype pattern
  72. */
  73. virtual void addLinetypeDash( double length ) = 0;
  74. /**
  75. * Called for every block. Note: all entities added after this
  76. * command go into this block until endBlock() is called.
  77. *
  78. * @see endBlock()
  79. */
  80. virtual void addBlock( const DL_BlockData& data ) = 0;
  81. /** Called to end the current block */
  82. virtual void endBlock() = 0;
  83. /** Called for every text style */
  84. virtual void addTextStyle( const DL_StyleData& data ) = 0;
  85. /** Called for every point */
  86. virtual void addPoint( const DL_PointData& data ) = 0;
  87. /** Called for every line */
  88. virtual void addLine( const DL_LineData& data ) = 0;
  89. /** Called for every xline */
  90. virtual void addXLine( const DL_XLineData& data ) = 0;
  91. /** Called for every ray */
  92. virtual void addRay( const DL_RayData& data ) = 0;
  93. /** Called for every arc */
  94. virtual void addArc( const DL_ArcData& data ) = 0;
  95. /** Called for every circle */
  96. virtual void addCircle( const DL_CircleData& data ) = 0;
  97. /** Called for every ellipse */
  98. virtual void addEllipse( const DL_EllipseData& data ) = 0;
  99. /** Called for every polyline start */
  100. virtual void addPolyline( const DL_PolylineData& data ) = 0;
  101. /** Called for every polyline vertex */
  102. virtual void addVertex( const DL_VertexData& data ) = 0;
  103. /** Called for every spline */
  104. virtual void addSpline( const DL_SplineData& data ) = 0;
  105. /** Called for every spline control point */
  106. virtual void addControlPoint( const DL_ControlPointData& data ) = 0;
  107. /** Called for every spline fit point */
  108. virtual void addFitPoint( const DL_FitPointData& data ) = 0;
  109. /** Called for every spline knot value */
  110. virtual void addKnot( const DL_KnotData& data ) = 0;
  111. /** Called for every insert. */
  112. virtual void addInsert( const DL_InsertData& data ) = 0;
  113. /** Called for every trace start */
  114. virtual void addTrace( const DL_TraceData& data ) = 0;
  115. /** Called for every 3dface start */
  116. virtual void add3dFace( const DL_3dFaceData& data ) = 0;
  117. /** Called for every solid start */
  118. virtual void addSolid( const DL_SolidData& data ) = 0;
  119. /** Called for every multi Text entity. */
  120. virtual void addMText( const DL_MTextData& data ) = 0;
  121. /**
  122. * Called for additional text chunks for MTEXT entities.
  123. * The chunks come at 250 character in size each. Note that
  124. * those chunks come <b>before</b> the actual MTEXT entity.
  125. */
  126. virtual void addMTextChunk( const std::string& text ) = 0;
  127. /** Called for every text entity. */
  128. virtual void addText( const DL_TextData& data ) = 0;
  129. /** Called for every arc aligned text entity. */
  130. virtual void addArcAlignedText( const DL_ArcAlignedTextData& data ) = 0;
  131. /** Called for every block Attribute entity. */
  132. virtual void addAttribute( const DL_AttributeData& data ) = 0;
  133. /**
  134. * Called for every aligned dimension entity.
  135. */
  136. virtual void addDimAlign( const DL_DimensionData& data,
  137. const DL_DimAlignedData& edata ) = 0;
  138. /**
  139. * Called for every linear or rotated dimension entity.
  140. */
  141. virtual void addDimLinear( const DL_DimensionData& data,
  142. const DL_DimLinearData& edata ) = 0;
  143. /**
  144. * Called for every radial dimension entity.
  145. */
  146. virtual void addDimRadial( const DL_DimensionData& data,
  147. const DL_DimRadialData& edata ) = 0;
  148. /**
  149. * Called for every diametric dimension entity.
  150. */
  151. virtual void addDimDiametric( const DL_DimensionData& data,
  152. const DL_DimDiametricData& edata ) = 0;
  153. /**
  154. * Called for every angular dimension (2 lines version) entity.
  155. */
  156. virtual void addDimAngular( const DL_DimensionData& data,
  157. const DL_DimAngularData& edata ) = 0;
  158. /**
  159. * Called for every angular dimension (3 points version) entity.
  160. */
  161. virtual void addDimAngular3P( const DL_DimensionData& data,
  162. const DL_DimAngular3PData& edata ) = 0;
  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. * Called for every leader start.
  170. */
  171. virtual void addLeader( const DL_LeaderData& data ) = 0;
  172. /**
  173. * Called for every leader vertex
  174. */
  175. virtual void addLeaderVertex( const DL_LeaderVertexData& data ) = 0;
  176. /**
  177. * Called for every hatch entity.
  178. */
  179. virtual void addHatch( const DL_HatchData& data ) = 0;
  180. /**
  181. * Called for every image entity.
  182. */
  183. virtual void addImage( const DL_ImageData& data ) = 0;
  184. /**
  185. * Called for every image definition.
  186. */
  187. virtual void linkImage( const DL_ImageDefData& data ) = 0;
  188. /**
  189. * Called for every hatch loop.
  190. */
  191. virtual void addHatchLoop( const DL_HatchLoopData& data ) = 0;
  192. /**
  193. * Called for every hatch edge entity.
  194. */
  195. virtual void addHatchEdge( const DL_HatchEdgeData& data ) = 0;
  196. /**
  197. * Called for every XRecord with the given handle.
  198. */
  199. virtual void addXRecord( const std::string& handle ) = 0;
  200. /**
  201. * Called for XRecords of type string.
  202. */
  203. virtual void addXRecordString( int code, const std::string& value ) = 0;
  204. /**
  205. * Called for XRecords of type double.
  206. */
  207. virtual void addXRecordReal( int code, double value ) = 0;
  208. /**
  209. * Called for XRecords of type int.
  210. */
  211. virtual void addXRecordInt( int code, int value ) = 0;
  212. /**
  213. * Called for XRecords of type bool.
  214. */
  215. virtual void addXRecordBool( int code, bool value ) = 0;
  216. /**
  217. * Called for every beginning of an XData section of the given application.
  218. */
  219. virtual void addXDataApp( const std::string& appId ) = 0;
  220. /**
  221. * Called for XData tuples.
  222. */
  223. virtual void addXDataString( int code, const std::string& value ) = 0;
  224. /**
  225. * Called for XData tuples.
  226. */
  227. virtual void addXDataReal( int code, double value ) = 0;
  228. /**
  229. * Called for XData tuples.
  230. */
  231. virtual void addXDataInt( int code, int value ) = 0;
  232. /**
  233. * Called for dictionary objects.
  234. */
  235. virtual void addDictionary( const DL_DictionaryData& data ) = 0;
  236. /**
  237. * Called for dictionary entries.
  238. */
  239. virtual void addDictionaryEntry( const DL_DictionaryEntryData& data ) = 0;
  240. /**
  241. * Called after an entity has been completed.
  242. */
  243. virtual void endEntity() = 0;
  244. /**
  245. * Called for every comment in the DXF file (code 999).
  246. */
  247. virtual void addComment( const std::string& comment ) = 0;
  248. /**
  249. * Called for every vector variable in the DXF file (e.g. "$EXTMIN").
  250. */
  251. virtual void setVariableVector( const std::string& key,
  252. double v1,
  253. double v2,
  254. double v3,
  255. int code ) = 0;
  256. /**
  257. * Called for every string variable in the DXF file (e.g. "$ACADVER").
  258. */
  259. virtual void setVariableString( const std::string& key, const std::string& value,
  260. int code ) = 0;
  261. /**
  262. * Called for every int variable in the DXF file (e.g. "$ACADMAINTVER").
  263. */
  264. virtual void setVariableInt( const std::string& key, int value, int code ) = 0;
  265. /**
  266. * Called for every double variable in the DXF file (e.g. "$DIMEXO").
  267. */
  268. virtual void setVariableDouble( const std::string& key, double value, int code ) = 0;
  269. #ifdef DL_COMPAT
  270. virtual void setVariableVector( const char* key, double v1, double v2, double v3,
  271. int code ) = 0;
  272. virtual void setVariableString( const char* key, const char* value, int code ) = 0;
  273. virtual void setVariableInt( const char* key, int value, int code ) = 0;
  274. virtual void setVariableDouble( const char* key, double value, int code ) = 0;
  275. virtual void processCodeValuePair( unsigned int groupCode, char* groupValue ) = 0;
  276. virtual void addComment( const char* comment ) = 0;
  277. virtual void addMTextChunk( const char* text ) = 0;
  278. #endif
  279. /**
  280. * Called when a SEQEND occurs (when a POLYLINE or ATTRIB is done)
  281. */
  282. virtual void endSequence() = 0;
  283. /** Sets the current attributes for entities. */
  284. void setAttributes( const DL_Attributes& attrib )
  285. {
  286. attributes = attrib;
  287. }
  288. /** @return the current attributes used for new entities. */
  289. DL_Attributes getAttributes()
  290. {
  291. return attributes;
  292. }
  293. /** Sets the current attributes for entities. */
  294. void setExtrusion( double dx, double dy, double dz, double elevation )
  295. {
  296. extrusion->setDirection( dx, dy, dz );
  297. extrusion->setElevation( elevation );
  298. }
  299. /** @return the current attributes used for new entities. */
  300. DL_Extrusion* getExtrusion()
  301. {
  302. return extrusion;
  303. }
  304. protected:
  305. DL_Attributes attributes;
  306. DL_Extrusion* extrusion;
  307. };
  308. #endif