QCAD
Open Source 2D CAD
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, const std::string& 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 addArcAlignedText(const DL_ArcAlignedTextData& data);
103  virtual void addAttribute(const DL_AttributeData& data);
104  virtual RDimensionData convDimensionData(const DL_DimensionData& data);
105  virtual void addDimAlign(const DL_DimensionData& data, const DL_DimAlignedData& edata);
106  virtual void addDimLinear(const DL_DimensionData& data, const DL_DimLinearData& edata);
107  virtual void addDimRadial(const DL_DimensionData& data, const DL_DimRadialData& edata);
108  virtual void addDimDiametric(const DL_DimensionData& data, const DL_DimDiametricData& edata);
109  virtual void addDimAngular(const DL_DimensionData& data, const DL_DimAngular2LData& edata);
110  virtual void addDimAngular3P(const DL_DimensionData& data, const DL_DimAngular3PData& edata);
111  virtual void addDimOrdinate(const DL_DimensionData& data, const DL_DimOrdinateData& edata);
112  virtual void addLeader(const DL_LeaderData &data);
113  virtual void addLeaderVertex(const DL_LeaderVertexData &data);
114  virtual void addHatch(const DL_HatchData& data);
115  virtual void addHatchLoop(const DL_HatchLoopData& data);
116  virtual void addHatchEdge(const DL_HatchEdgeData& data);
117  virtual void addImage(const DL_ImageData &data);
118  virtual void linkImage(const DL_ImageDefData &data);
119 
120  virtual void addXRecord(const std::string& handle);
121  virtual void addXRecordString(int code, const std::string& value);
122  virtual void addXRecordReal(int code, double value);
123  virtual void addXRecordInt(int code, int value);
124  virtual void addXRecordBool(int code, bool value);
125 
126  virtual void addXDataApp(const std::string& appId);
127  virtual void addXDataString(int code, const std::string& value);
128  virtual void addXDataReal(int code, double value);
129  virtual void addXDataInt(int code, int value);
130 
131  virtual void addDictionary(const DL_DictionaryData& data);
132  virtual void addDictionaryEntry(const DL_DictionaryEntryData& data);
133 
134  virtual void setVariableVector(const std::string& key, double v1, double v2, double v3, int code);
135  virtual void setVariableString(const std::string& key, const std::string& value, int code);
136  virtual void setVariableInt(const std::string& key, int value, int code);
137  virtual void setVariableDouble(const std::string& key, double value, int code);
138 
139  static QString decode(const QString& str);
140 
141 private:
142  static QString getEncoding(const QString& str);
143 
144  void importEntity(QSharedPointer<REntity> entity);
145 
146  QString getXDataString(const QString& appId, int code, int pos=0);
147  int getXDataInt(const QString& appId, int code, int pos=0);
148 
149 private:
150  QString fileName;
152  // list of locked layers. layers are locked after importing all entities:
153  QStringList lockedLayers;
154 
161  QByteArray mtext;
162  QMap<QString, RDxfTextStyle> textStyles;
163  QMultiMap<int, RObject::Id> images;
164  // pattern for linetype
165  QList<double> pattern;
166 
167  // Current app id for XData:
168  QString xDataAppId;
169  // AppID -> list of code / value pairs
170  QMap<QString, QList<QPair<int, QVariant> > > xData;
171  QString qcadDictHandle;
172  bool inDict;
173  // Dictionary handles -> names
174  QMap<QString, QString> qcadDict;
175  QString variableKey;
176 };
177 
180 
181 #endif
DL_CreationAdapter::addVertex
virtual void addVertex(const DL_VertexData &)
Called for every polyline vertex.
Definition: dl_creationadapter.h:83
DL_LeaderVertexData
Leader Vertex Data.
Definition: dl_entities.h:1446
DL_CreationAdapter::addTextStyle
virtual void addTextStyle(const DL_StyleData &)
Called for every text style.
Definition: dl_creationadapter.h:72
DL_VertexData
Vertex Data.
Definition: dl_entities.h:416
DL_DimLinearData
Linear (rotated) Dimension Data.
Definition: dl_entities.h:1139
RDxfImporter::xData
QMap< QString, QList< QPair< int, QVariant > > > xData
Definition: RDxfImporter.h:170
DL_ImageData
Image Data.
Definition: dl_entities.h:1709
RHatchData
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RHatchData.h:44
RLeaderData
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RLeaderData.h:37
DL_CreationAdapter::addSolid
virtual void addSolid(const DL_SolidData &)
Called for every solid start.
Definition: dl_creationadapter.h:119
DL_FitPointData
Spline fit point data.
Definition: dl_entities.h:602
DL_CreationAdapter::addXRecordInt
virtual void addXRecordInt(int, int)
Called for XRecords of type int.
Definition: dl_creationadapter.h:129
RMessageHandler
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RMessageHandler.h:33
DL_CreationAdapter::addTrace
virtual void addTrace(const DL_TraceData &)
Called for every trace start.
Definition: dl_creationadapter.h:117
DL_CreationAdapter::addXRecord
virtual void addXRecord(const std::string &)
Called for every XRecord with the given handle.
Definition: dl_creationadapter.h:126
RProgressHandler
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RProgressHandler.h:33
DL_CreationAdapter::addDimAlign
virtual void addDimAlign(const DL_DimensionData &, const DL_DimAlignedData &)
Called for every aligned dimension entity.
Definition: dl_creationadapter.h:98
RSpline
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RSpline.h:54
DL_CreationAdapter::addDictionaryEntry
virtual void addDictionaryEntry(const DL_DictionaryEntryData &)
Called for dictionary entries.
Definition: dl_creationadapter.h:138
DL_CreationAdapter::addDimLinear
virtual void addDimLinear(const DL_DimensionData &, const DL_DimLinearData &)
Called for every linear or rotated dimension entity.
Definition: dl_creationadapter.h:100
DL_CreationAdapter::addSpline
virtual void addSpline(const DL_SplineData &)
Called for every spline.
Definition: dl_creationadapter.h:85
DL_CreationAdapter::addXRecordString
virtual void addXRecordString(int, const std::string &)
Called for XRecords of type string.
Definition: dl_creationadapter.h:127
DL_CircleData
Circle Data.
Definition: dl_entities.h:352
DL_CreationAdapter::addXDataReal
virtual void addXDataReal(int, double)
Called for XData tuples.
Definition: dl_creationadapter.h:134
DL_TextData
Text Data.
Definition: dl_entities.h:800
RDxfImporter::mtext
QByteArray mtext
Definition: RDxfImporter.h:161
DL_CreationAdapter::setVariableVector
virtual void setVariableVector(const std::string &, double, double, double, int)
Called for every vector variable in the DXF file (e.g.
Definition: dl_creationadapter.h:144
RDxfImporter::spline
RSpline spline
Definition: RDxfImporter.h:157
DL_ArcAlignedTextData
Arc Aligned Text Data.
Definition: dl_entities.h:870
DL_CreationAdapter::addDimDiametric
virtual void addDimDiametric(const DL_DimensionData &, const DL_DimDiametricData &)
Called for every diametric dimension entity.
Definition: dl_creationadapter.h:104
DL_CreationAdapter::addHatchLoop
virtual void addHatchLoop(const DL_HatchLoopData &)
Called for every hatch loop.
Definition: dl_creationadapter.h:123
DL_AttributeData
Block attribute data.
Definition: dl_entities.h:950
RDxfImporter::fileName
QString fileName
Definition: RDxfImporter.h:150
DL_CreationAdapter::addMTextChunk
virtual void addMTextChunk(const std::string &)
Called for additional text chunks for MTEXT entities.
Definition: dl_creationadapter.h:93
DL_CreationAdapter::addLeader
virtual void addLeader(const DL_LeaderData &)
Called for every leader start.
Definition: dl_creationadapter.h:112
RDxfImporter::xDataAppId
QString xDataAppId
Definition: RDxfImporter.h:168
RDxfImporter::polyline
RPolyline polyline
Definition: RDxfImporter.h:155
RFileImporter.h
RVector
Represents a 3d vector (x/y/z).
Definition: RVector.h:46
DL_CreationAdapter::endEntity
virtual void endEntity()
Called after an entity has been completed.
Definition: dl_creationadapter.h:140
DL_KnotData
Spline knot data.
Definition: dl_entities.h:556
DL_DimRadialData
Radial Dimension Data.
Definition: dl_entities.h:1185
DL_CreationAdapter::addXDataString
virtual void addXDataString(int, const std::string &)
Called for XData tuples.
Definition: dl_creationadapter.h:133
RFileImporter
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RFileImporter.h:37
DL_CreationAdapter::addArc
virtual void addArc(const DL_ArcData &)
Called for every arc.
Definition: dl_creationadapter.h:78
DL_DimAngular2LData
Angular Dimension Data.
Definition: dl_entities.h:1243
DL_CreationAdapter::addMText
virtual void addMText(const DL_MTextData &)
Called for every multi Text entity.
Definition: dl_creationadapter.h:92
DL_CreationAdapter::addDimOrdinate
virtual void addDimOrdinate(const DL_DimensionData &, const DL_DimOrdinateData &)
Called for every ordinate dimension entity.
Definition: dl_creationadapter.h:110
DL_CreationAdapter::addArcAlignedText
virtual void addArcAlignedText(const DL_ArcAlignedTextData &)
Called for every arc aligned text entity.
Definition: dl_creationadapter.h:95
DL_TraceData
Trace Data / solid data / 3d face data.
Definition: dl_entities.h:444
DL_CreationAdapter::addKnot
virtual void addKnot(const DL_KnotData &)
Called for every spline knot value.
Definition: dl_creationadapter.h:88
DL_CreationAdapter::addDimAngular3P
virtual void addDimAngular3P(const DL_DimensionData &, const DL_DimAngular3PData &)
Called for every angular dimension (3 points version) entity.
Definition: dl_creationadapter.h:108
DL_CreationAdapter::setVariableString
virtual void setVariableString(const std::string &, const std::string &, int)
Called for every string variable in the DXF file (e.g.
Definition: dl_creationadapter.h:145
RDxfServices
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RDxfServices.h:39
DL_CreationAdapter::addXLine
virtual void addXLine(const DL_XLineData &)
Called for every xline.
Definition: dl_creationadapter.h:75
QCADDXF_EXPORT
#define QCADDXF_EXPORT
Definition: dxf_global.h:10
RDxfTextStyle::italic
bool italic
Definition: RDxfImporter.h:53
DL_CreationAdapter::endSection
virtual void endSection()
Called when a section (entity, table entry, etc.) is finished.
Definition: dl_creationadapter.h:66
DL_CreationAdapter::addInsert
virtual void addInsert(const DL_InsertData &)
Called for every insert.
Definition: dl_creationadapter.h:90
DL_DimAlignedData
Aligned Dimension Data.
Definition: dl_entities.h:1102
DL_CreationAdapter::addCircle
virtual void addCircle(const DL_CircleData &)
Called for every circle.
Definition: dl_creationadapter.h:79
DL_CreationAdapter::addXDataInt
virtual void addXDataInt(int, int)
Called for XData tuples.
Definition: dl_creationadapter.h:135
DL_CreationAdapter::addXRecordBool
virtual void addXRecordBool(int, bool)
Called for XRecords of type bool.
Definition: dl_creationadapter.h:130
DL_CreationAdapter::addLine
virtual void addLine(const DL_LineData &)
Called for every line.
Definition: dl_creationadapter.h:74
DL_CreationAdapter::setVariableDouble
virtual void setVariableDouble(const std::string &, double, int)
Called for every double variable in the DXF file (e.g.
Definition: dl_creationadapter.h:147
DL_CreationAdapter::linkImage
virtual void linkImage(const DL_ImageDefData &)
Called for every image definition.
Definition: dl_creationadapter.h:122
DL_CreationAdapter
An abstract adapter class for receiving DXF events when a DXF file is being read.
Definition: dl_creationadapter.h:39
DL_DimensionData
Generic Dimension Data.
Definition: dl_entities.h:990
DL_CreationAdapter::setVariableInt
virtual void setVariableInt(const std::string &, int, int)
Called for every int variable in the DXF file (e.g.
Definition: dl_creationadapter.h:146
dxf_global.h
RDxfImporter::leaderArrowHead
bool leaderArrowHead
Definition: RDxfImporter.h:159
DL_CreationAdapter::addDimAngular
virtual void addDimAngular(const DL_DimensionData &, const DL_DimAngular2LData &)
Called for every angular dimension (2 lines version) entity.
Definition: dl_creationadapter.h:106
RDxfImporter::textStyles
QMap< QString, RDxfTextStyle > textStyles
Definition: RDxfImporter.h:162
DL_CreationAdapter::addFitPoint
virtual void addFitPoint(const DL_FitPointData &)
Called for every spline fit point.
Definition: dl_creationadapter.h:87
RDxfImporter::qcadDict
QMap< QString, QString > qcadDict
Definition: RDxfImporter.h:174
RDocument.h
RHatchData.h
RDxfImporter::variableKey
QString variableKey
Definition: RDxfImporter.h:175
DL_LayerData
Layer Data.
Definition: dl_entities.h:36
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(RMath *)
DL_ControlPointData
Spline control point data.
Definition: dl_entities.h:575
RFileImporter::importFile
virtual bool importFile(const QString &fileName, const QString &nameFilter)=0
Must be implemented by file importers to import the given file into the document.
DL_CreationAdapter::addDictionary
virtual void addDictionary(const DL_DictionaryData &)
Called for dictionary objects.
Definition: dl_creationadapter.h:137
DL_ImageDefData
Image Definition Data.
Definition: dl_entities.h:1775
RDxfImporter::images
QMultiMap< int, RObject::Id > images
Definition: RDxfImporter.h:163
DL_CreationAdapter::addDimRadial
virtual void addDimRadial(const DL_DimensionData &, const DL_DimRadialData &)
Called for every radial dimension entity.
Definition: dl_creationadapter.h:102
DL_CreationAdapter::processCodeValuePair
virtual void processCodeValuePair(unsigned int, const std::string &)
Called for every code / value tuple of the DXF file.
Definition: dl_creationadapter.h:65
DL_CreationAdapter::addHatchEdge
virtual void addHatchEdge(const DL_HatchEdgeData &)
Called for every hatch edge entity.
Definition: dl_creationadapter.h:124
RDxfImporter::dxfServices
RDxfServices dxfServices
Definition: RDxfImporter.h:151
DL_LinetypeData
Line Type Data.
Definition: dl_entities.h:90
DL_CreationAdapter::addRay
virtual void addRay(const DL_RayData &)
Called for every ray.
Definition: dl_creationadapter.h:76
DL_HatchData
Hatch data.
Definition: dl_entities.h:1470
DL_CreationAdapter::addBlock
virtual void addBlock(const DL_BlockData &)
Called for every block.
Definition: dl_creationadapter.h:70
DL_CreationAdapter::addPolyline
virtual void addPolyline(const DL_PolylineData &)
Called for every polyline start.
Definition: dl_creationadapter.h:82
RDxfImporter::hatch
RHatchData hatch
Definition: RDxfImporter.h:160
DL_PolylineData
Polyline Data.
Definition: dl_entities.h:382
RLeaderData.h
RDocument
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition: RDocument.h:72
DL_CreationAdapter::addLinetypeDash
virtual void addLinetypeDash(double)
Called for every dash in linetype pattern.
Definition: dl_creationadapter.h:69
RTextBasedData
Stores and manages all data that defines the geometry and appearance of a text based entity (text,...
Definition: RTextBasedData.h:44
DL_ArcData
Arc Data.
Definition: dl_entities.h:315
RDxfServices.h
DL_CreationAdapter::addLeaderVertex
virtual void addLeaderVertex(const DL_LeaderVertexData &)
Called for every leader vertex.
Definition: dl_creationadapter.h:113
DL_XLineData
XLine Data.
Definition: dl_entities.h:255
RDxfImporter::leader
RLeaderData leader
Definition: RDxfImporter.h:158
RDxfImporter::pattern
QList< double > pattern
Definition: RDxfImporter.h:165
DL_CreationAdapter::addLayer
virtual void addLayer(const DL_LayerData &)
Called for every layer.
Definition: dl_creationadapter.h:67
DL_StyleData
Text style data.
Definition: dl_entities.h:130
DL_CreationAdapter::addPoint
virtual void addPoint(const DL_PointData &)
Called for every point.
Definition: dl_creationadapter.h:73
DL_PointData
Point Data.
Definition: dl_entities.h:197
DL_CreationAdapter::addText
virtual void addText(const DL_TextData &)
Called for every text entity.
Definition: dl_creationadapter.h:94
DL_EllipseData
Ellipse Data.
Definition: dl_entities.h:622
DL_DimAngular3PData
Angular Dimension Data (3 points version).
Definition: dl_entities.h:1303
RDxfImporter
Importer for the DXF format, based on the dxflib library.
Definition: RDxfImporter.h:62
DL_CreationAdapter::addControlPoint
virtual void addControlPoint(const DL_ControlPointData &)
Called for every spline control point.
Definition: dl_creationadapter.h:86
DL_RayData
Ray Data.
Definition: dl_entities.h:284
DL_HatchLoopData
Hatch boundary path (loop) data.
Definition: dl_entities.h:1517
RPolyline.h
RDxfImporter::polylinePlineGen
bool polylinePlineGen
Definition: RDxfImporter.h:156
RDxfImporter::qcadDictHandle
QString qcadDictHandle
Definition: RDxfImporter.h:171
RDimensionData
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RDimensionData.h:38
RDxfTextStyle::bold
bool bold
Definition: RDxfImporter.h:52
dl_creationadapter.h
DL_DimOrdinateData
Ordinate Dimension Data.
Definition: dl_entities.h:1352
DL_DictionaryData
Dictionary data.
Definition: dl_entities.h:1799
DL_DimDiametricData
Diametric Dimension Data.
Definition: dl_entities.h:1214
DL_CreationAdapter::endBlock
virtual void endBlock()
Called to end the current block.
Definition: dl_creationadapter.h:71
RDxfTextStyle
Represents a text style.
Definition: RDxfImporter.h:47
DL_MTextData
MText Data.
Definition: dl_entities.h:719
DL_DictionaryEntryData
Dictionary entry data.
Definition: dl_entities.h:1809
DL_HatchEdgeData
Hatch edge data.
Definition: dl_entities.h:1539
DL_CreationAdapter::addXDataApp
virtual void addXDataApp(const std::string &)
Called for every beginning of an XData section of the given application.
Definition: dl_creationadapter.h:132
RDxfTextStyle::font
QString font
Definition: RDxfImporter.h:51
RDxfImporter::lockedLayers
QStringList lockedLayers
Definition: RDxfImporter.h:153
RImageEntity
Point entity.
Definition: RImageEntity.h:38
DL_InsertData
Insert Data.
Definition: dl_entities.h:669
DL_SplineData
Spline Data.
Definition: dl_entities.h:511
RDxfImporter::inDict
bool inDict
Definition: RDxfImporter.h:172
RPolyline
Low-level mathematical representation of an open polyline or closed polyline (= polygon).
Definition: RPolyline.h:49
DL_CreationAdapter::addXRecordReal
virtual void addXRecordReal(int, double)
Called for XRecords of type double.
Definition: dl_creationadapter.h:128
RSpline.h
DL_LineData
Line Data.
Definition: dl_entities.h:221
DL_CreationAdapter::addAttribute
virtual void addAttribute(const DL_AttributeData &)
Called for every block Attribute entity.
Definition: dl_creationadapter.h:96
RDimensionEntity.h
DL_BlockData
Block Data.
Definition: dl_entities.h:59
RDxfTextStyle::RDxfTextStyle
RDxfTextStyle()
Definition: RDxfImporter.h:49
DL_CreationAdapter::addLinetype
virtual void addLinetype(const DL_LinetypeData &)
Called for every linetype.
Definition: dl_creationadapter.h:68
DL_CreationAdapter::addHatch
virtual void addHatch(const DL_HatchData &)
Called for every hatch entity.
Definition: dl_creationadapter.h:115
DL_CreationAdapter::addEllipse
virtual void addEllipse(const DL_EllipseData &)
Called for every ellipse.
Definition: dl_creationadapter.h:80
DL_CreationAdapter::addImage
virtual void addImage(const DL_ImageData &)
Called for every image entity.
Definition: dl_creationadapter.h:121
DL_LeaderData
Leader (arrow).
Definition: dl_entities.h:1395