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 addLinetype(const DL_LinetypeData& data);
76  virtual void addLinetypeDash(double length);
77  virtual void addBlock(const DL_BlockData& data);
78  virtual void endBlock();
79  virtual void addPoint(const DL_PointData& data);
80  virtual void addLine(const DL_LineData& data);
81  virtual void addXLine(const DL_XLineData& data);
82  virtual void addRay(const DL_RayData& data);
83  virtual void addArc(const DL_ArcData& data);
84  virtual void addEllipse(const DL_EllipseData& data);
85  virtual void addCircle(const DL_CircleData& data);
86  virtual void addPolyline(const DL_PolylineData& data);
87  virtual void addVertex(const DL_VertexData& data);
88  virtual void endEntity();
89  virtual void endSection();
90  virtual void addSpline(const DL_SplineData& data);
91  virtual void addControlPoint(const DL_ControlPointData& data);
92  virtual void addFitPoint(const DL_FitPointData& data);
93  virtual void addKnot(const DL_KnotData& data);
94  virtual void addInsert(const DL_InsertData& data);
95  virtual void addSolid(const DL_SolidData& data);
96  virtual void addTrace(const DL_TraceData& data);
97  virtual void addTextStyle(const DL_StyleData& data);
98  virtual void addMTextChunk(const std::string& text);
99  virtual void addMText(const DL_MTextData& data);
100  RTextBasedData getTextBasedData(const DL_TextData& data);
101  virtual void addText(const DL_TextData& data);
102  virtual void addAttribute(const DL_AttributeData& data);
103  virtual RDimensionData convDimensionData(const DL_DimensionData& data);
104  virtual void addDimAlign(const DL_DimensionData& data, const DL_DimAlignedData& edata);
105  virtual void addDimLinear(const DL_DimensionData& data, const DL_DimLinearData& edata);
106  virtual void addDimRadial(const DL_DimensionData& data, const DL_DimRadialData& edata);
107  virtual void addDimDiametric(const DL_DimensionData& data, const DL_DimDiametricData& edata);
108  virtual void addDimAngular(const DL_DimensionData& data, const DL_DimAngularData& edata);
109  virtual void addDimAngular3P(const DL_DimensionData& data, const DL_DimAngular3PData& edata);
110  virtual void addDimOrdinate(const DL_DimensionData& data, const DL_DimOrdinateData& edata);
111  virtual void addLeader(const DL_LeaderData &data);
112  virtual void addLeaderVertex(const DL_LeaderVertexData &data);
113  virtual void addHatch(const DL_HatchData& data);
114  virtual void addHatchLoop(const DL_HatchLoopData& data);
115  virtual void addHatchEdge(const DL_HatchEdgeData& data);
116  virtual void addImage(const DL_ImageData &data);
117  virtual void linkImage(const DL_ImageDefData &data);
118 
119  virtual void addXRecord(const std::string& handle);
120  virtual void addXRecordString(int code, const std::string& value);
121  virtual void addXRecordReal(int code, double value);
122  virtual void addXRecordInt(int code, int value);
123  virtual void addXRecordBool(int code, bool value);
124 
125  virtual void addXDataApp(const std::string& appId);
126  virtual void addXDataString(int code, const std::string& value);
127  virtual void addXDataReal(int code, double value);
128  virtual void addXDataInt(int code, int value);
129 
130  virtual void addDictionary(const DL_DictionaryData& data);
131  virtual void addDictionaryEntry(const DL_DictionaryEntryData& data);
132 
133  virtual void setVariableVector(const std::string& key, double v1, double v2, double v3, int code);
134  virtual void setVariableString(const std::string& key, const std::string& value, int code);
135  virtual void setVariableInt(const std::string& key, int value, int code);
136  virtual void setVariableDouble(const std::string& key, double value, int code);
137 
138  static QString decode(const QString& str);
139 
140 private:
141  static QString getEncoding(const QString& str);
142 
143  void importEntity(QSharedPointer<REntity> entity);
144 
145  QString getXDataString(const QString& appId, int code, int pos=0);
146  int getXDataInt(const QString& appId, int code, int pos=0);
147 
148 private:
149  QString fileName;
151  // list of locked layers. layers are locked after importing all entities:
152  QStringList lockedLayers;
153 
158  QByteArray mtext;
159  QMap<QString, RDxfTextStyle> textStyles;
160  QMultiMap<int, RObject::Id> images;
161  // pattern for linetype
162  QList<double> pattern;
163 
164  // Current app id for XData:
165  QString xDataAppId;
166  // AppID -> list of code / value pairs
167  QMap<QString, QList<QPair<int, QVariant> > > xData;
168  QString qcadDictHandle;
169  bool inDict;
170  // Dictionary handles -> names
171  QMap<QString, QString> qcadDict;
172  QString variableKey;
173 };
174 
177 
178 #endif