1 #ifndef __FILTERDXF_H__
2 #define __FILTERDXF_H__
4 #include "filterinterface.h"
20 #include "dl_creationinterface.h"
26 * This format filter class can import and export DXF files.
27 * It depends on the dxflib library.
29 * @author Andrew Mustun
31 class FilterDXF: public FilterInterface, DL_CreationInterface
38 * @return RS2::FormatDXF.
40 //RS2::FormatType rtti() {
41 // return RS2::FormatDXF;
45 virtual bool canImport(RS2::FormatType t) {
46 return (t==RS2::FormatDXF);
49 virtual bool canExport(RS2::FormatType t) {
50 return (t==RS2::FormatDXF || t==RS2::FormatDXF12);
54 virtual bool fileImport(Drawing& g, const QString& file, RS2::FormatType /*type*/);
56 // Methods from DL_CreationInterface:
57 virtual void addLayer(const DL_LayerData & data);
58 virtual void addBlock(const DL_BlockData & data);
59 virtual void endBlock();
60 virtual void addPoint(const DL_PointData & data);
61 virtual void addLine(const DL_LineData & data);
62 virtual void addArc(const DL_ArcData & data);
63 virtual void addEllipse(const DL_EllipseData & data);
64 virtual void addCircle(const DL_CircleData & data);
65 virtual void addPolyline(const DL_PolylineData & data);
66 virtual void addVertex(const DL_VertexData & data);
67 virtual void addSpline(const DL_SplineData & data);
68 virtual void addKnot(const DL_KnotData &);
69 virtual void addControlPoint(const DL_ControlPointData & data);
70 virtual void addInsert(const DL_InsertData & data);
71 virtual void addTrace(const DL_TraceData &);
72 virtual void addSolid(const DL_SolidData &);
73 virtual void addMTextChunk(const char * text);
74 virtual void addMText(const DL_MTextData & data);
75 virtual void addText(const DL_TextData & data);
76 //virtual void addDimension(const DL_DimensionData& data);
77 DimensionData convDimensionData(const DL_DimensionData & data);
78 virtual void addDimAlign(const DL_DimensionData & data, const DL_DimAlignedData & edata);
79 virtual void addDimLinear(const DL_DimensionData & data, const DL_DimLinearData & edata);
80 virtual void addDimRadial(const DL_DimensionData & data, const DL_DimRadialData & edata);
81 virtual void addDimDiametric(const DL_DimensionData & data, const DL_DimDiametricData & edata);
82 virtual void addDimAngular(const DL_DimensionData & data, const DL_DimAngularData & edata);
83 virtual void addDimAngular3P(const DL_DimensionData & data, const DL_DimAngular3PData & edata);
84 virtual void addLeader(const DL_LeaderData & data);
85 virtual void addLeaderVertex(const DL_LeaderVertexData & data);
86 virtual void addHatch(const DL_HatchData & data);
87 virtual void addHatchLoop(const DL_HatchLoopData & data);
88 virtual void addHatchEdge(const DL_HatchEdgeData & data);
89 virtual void addImage(const DL_ImageData & data);
90 virtual void linkImage(const DL_ImageDefData & data);
91 virtual void endEntity();
92 virtual void endSequence();
94 virtual void setVariableVector(const char * key, double v1, double v2, double v3, int code);
95 virtual void setVariableString(const char * key, const char * value, int code);
96 virtual void setVariableInt(const char * key, int value, int code);
97 virtual void setVariableDouble(const char * key, double value, int code);
100 virtual bool fileExport(Drawing & g, const QString & file, RS2::FormatType type);
102 void writeVariables(DL_WriterA & dw);
103 void writeLayer(DL_WriterA & dw, Layer * l);
104 void writeLineType(DL_WriterA & dw, RS2::LineType t);
105 void writeAppid(DL_WriterA & dw, const char * appid);
106 void writeBlock(DL_WriterA & dw, Block * blk);
107 void writeEntity(DL_WriterA & dw, Entity * e);
108 void writeEntity(DL_WriterA & dw, Entity * e, const DL_Attributes & attrib);
109 void writePoint(DL_WriterA & dw, Point * p, const DL_Attributes & attrib);
110 void writeLine(DL_WriterA & dw, Line * l, const DL_Attributes & attrib);
111 void writePolyline(DL_WriterA & dw, Polyline * l, const DL_Attributes & attrib);
112 void writeSpline(DL_WriterA & dw, Spline * s, const DL_Attributes & attrib);
113 void writeCircle(DL_WriterA & dw, Circle * c, const DL_Attributes & attrib);
114 void writeArc(DL_WriterA & dw, Arc * a, const DL_Attributes & attrib);
115 void writeEllipse(DL_WriterA & dw, Ellipse * s, const DL_Attributes & attrib);
116 void writeInsert(DL_WriterA & dw, Insert * i, const DL_Attributes & attrib);
117 void writeText(DL_WriterA & dw, Text * t, const DL_Attributes & attrib);
118 void writeDimension(DL_WriterA & dw, Dimension * d, const DL_Attributes & attrib);
119 void writeLeader(DL_WriterA & dw, Leader * l, const DL_Attributes & attrib);
120 void writeHatch(DL_WriterA & dw, Hatch * h, const DL_Attributes & attrib);
121 void writeSolid(DL_WriterA & dw, Solid * s, const DL_Attributes & attrib);
122 void writeImage(DL_WriterA & dw, Image * i, const DL_Attributes & attrib);
123 void writeEntityContainer(DL_WriterA & dw, EntityContainer * con,
124 const DL_Attributes & attrib);
125 void writeAtomicEntities(DL_WriterA & dw, EntityContainer * c,
126 const DL_Attributes & attrib, RS2::ResolveLevel level);
128 void writeImageDef(DL_WriterA & dw, Image * i);
130 void setEntityAttributes(Entity * entity, const DL_Attributes& attrib);
131 DL_Attributes getEntityAttributes(Entity * entity);
133 static QString toDxfString(const QString & string);
134 static QString toNativeString(const QString & string);
137 Pen attributesToPen(const DL_Attributes & attrib) const;
139 static Color numberToColor(int num, bool comp = false);
140 static int colorToNumber(const Color & col);
142 static RS2::LineType nameToLineType(const QString& name);
143 static QString lineTypeToName(RS2::LineType lineType);
144 //static QString lineTypeToDescription(RS2::LineType lineType);
146 static RS2::LineWidth numberToWidth(int num);
147 static int widthToNumber(RS2::LineWidth width);
149 static RS2::AngleFormat numberToAngleFormat(int num);
150 static int angleFormatToNumber(RS2::AngleFormat af);
152 static RS2::Unit numberToUnit(int num);
153 static int unitToNumber(RS2::Unit unit);
155 static bool isVariableTwoDimensional(const QString & var);
158 /** Pointer to the graphic we currently operate on. */
160 /** File name. Used to find out the full path of images. */
162 /** string for concatinating text parts of MTEXT entities. */
164 /** Pointer to current polyline entity we're adding vertices to. */
166 /** Pointer to current spline entity we're adding control points to. */
168 /** Pointer to current leader entity we're adding vertices to. */
170 /** Pointer to current entity container (either block or graphic) */
171 EntityContainer * currentContainer;
173 /** Pointer to current hatch or NULL. */
175 /** Pointer to current hatch loop or NULL. */
176 EntityContainer * hatchLoop;
179 VariableDict variables;
182 #endif // __FILTERDXF_H__