QCAD
Open Source 2D CAD
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RDxfImporter.h
Go to the documentation of this file.
1 
20 #ifndef RDXFIMPORTER_H
21 #define RDXFIMPORTER_H
22 
23 #include "dxf_global.h"
24 
26 
27 #include "RDimensionEntity.h"
28 #include "RDocument.h"
29 #include "RDxfServices.h"
30 #include "RFileImporter.h"
31 #include "RHatchData.h"
32 #include "RLeaderData.h"
33 #include "RPolyline.h"
34 #include "RSpline.h"
35 
36 class RDxfImporter;
37 class RImageEntity;
38 class RMessageHandler;
39 class RProgressHandler;
40 class RVector;
41 
42 
48 public:
49  RDxfTextStyle() : bold(false), italic(false) {}
50 
51  QString font;
52  bool bold;
53  bool italic;
54 };
55 
56 
63 public:
64  RDxfImporter(RDocument& document,
65  RMessageHandler* messageHandler = NULL, RProgressHandler* progressHandler = NULL);
66  virtual ~RDxfImporter();
67 
68  virtual bool importFile(const QString& fileName, const QString& nameFilter);
69 
70  virtual void processCodeValuePair(unsigned int groupCode, char* groupValue);
71 
72 private:
73  // Methods from DL_CreationInterface:
74  virtual void addLayer(const DL_LayerData& data);
75  virtual void addBlock(const DL_BlockData& data);
76  virtual void endBlock();
77  virtual void addPoint(const DL_PointData& data);
78  virtual void addLine(const DL_LineData& data);
79  virtual void addXLine(const DL_XLineData& data);
80  virtual void addRay(const DL_RayData& data);
81  virtual void addArc(const DL_ArcData& data);
82  virtual void addEllipse(const DL_EllipseData& data);
83  virtual void addCircle(const DL_CircleData& data);
84  virtual void addPolyline(const DL_PolylineData& data);
85  virtual void addVertex(const DL_VertexData& data);
86  virtual void endEntity();
87  virtual void endSection();
88  virtual void addSpline(const DL_SplineData& data);
89  virtual void addControlPoint(const DL_ControlPointData& data);
90  virtual void addFitPoint(const DL_FitPointData& data);
91  virtual void addKnot(const DL_KnotData& data);
92  virtual void addInsert(const DL_InsertData& data);
93  virtual void addSolid(const DL_SolidData& data);
94  virtual void addTrace(const DL_TraceData& data);
95  virtual void addTextStyle(const DL_StyleData& data);
96  virtual void addMTextChunk(const std::string& text);
97  virtual void addMText(const DL_MTextData& data);
98  virtual void addText(const DL_TextData& data);
99  virtual RDimensionData convDimensionData(const DL_DimensionData& data);
100  virtual void addDimAlign(const DL_DimensionData& data, const DL_DimAlignedData& edata);
101  virtual void addDimLinear(const DL_DimensionData& data, const DL_DimLinearData& edata);
102  virtual void addDimRadial(const DL_DimensionData& data, const DL_DimRadialData& edata);
103  virtual void addDimDiametric(const DL_DimensionData& data, const DL_DimDiametricData& edata);
104  virtual void addDimAngular(const DL_DimensionData& data, const DL_DimAngularData& edata);
105  virtual void addDimAngular3P(const DL_DimensionData& data, const DL_DimAngular3PData& edata);
106  virtual void addDimOrdinate(const DL_DimensionData& data, const DL_DimOrdinateData& edata);
107  virtual void addLeader(const DL_LeaderData &data);
108  virtual void addLeaderVertex(const DL_LeaderVertexData &data);
109  virtual void addHatch(const DL_HatchData& data);
110  virtual void addHatchLoop(const DL_HatchLoopData& data);
111  virtual void addHatchEdge(const DL_HatchEdgeData& data);
112  virtual void addImage(const DL_ImageData &data);
113  virtual void linkImage(const DL_ImageDefData &data);
114 
115  virtual void addXRecord(const std::string& handle);
116  virtual void addXRecordString(int code, const std::string& value);
117  virtual void addXRecordReal(int code, double value);
118  virtual void addXRecordInt(int code, int value);
119  virtual void addXRecordBool(int code, bool value);
120 
121  virtual void addXDataApp(const std::string& appId);
122  virtual void addXDataString(int code, const std::string& value);
123  virtual void addXDataReal(int code, double value);
124  virtual void addXDataInt(int code, int value);
125 
126  virtual void addDictionary(const DL_DictionaryData& data);
127  virtual void addDictionaryEntry(const DL_DictionaryEntryData& data);
128 
129  virtual void setVariableVector(const std::string& key, double v1, double v2, double v3, int code);
130  virtual void setVariableString(const std::string& key, const std::string& value, int code);
131  virtual void setVariableInt(const std::string& key, int value, int code);
132  virtual void setVariableDouble(const std::string& key, double value, int code);
133 
134  static QString decode(const QString& str);
135 
136 private:
137  static QString getEncoding(const QString& str);
138 
139  void importEntity(QSharedPointer<REntity> entity);
140 
141  QString getXDataString(const QString& appId, int code, int pos=0);
142  int getXDataInt(const QString& appId, int code, int pos=0);
143 
144 private:
145  QString fileName;
147  // list of locked layers. layers are locked after importing all entities:
148  QStringList lockedLayers;
149 
154  QByteArray mtext;
155  QMap<QString, RDxfTextStyle> textStyles;
156  QMultiMap<int, RObject::Id> images;
157 
158  // Current app id for XData:
159  QString xDataAppId;
160  // AppID -> list of code / value pairs
161  QMap<QString, QList<QPair<int, QVariant> > > xData;
162  QString qcadDictHandle;
163  bool inDict;
164  // Dictionary handles -> names
165  QMap<QString, QString> qcadDict;
166  QString variableKey;
167 };
168 
171 
172 #endif