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