16
16
***************************************************************************/
17
17
18
18
#include " qgsdxfexport.h"
19
+ #include " qgsvectordataprovider.h"
20
+ #include " qgspoint.h"
21
+ #include " qgsrendererv2.h"
22
+ #include " qgsvectorlayer.h"
19
23
#include < QIODevice>
20
24
#include < QTextStream>
21
25
@@ -28,7 +32,7 @@ QgsDxfExport::~QgsDxfExport()
28
32
29
33
}
30
34
31
- int QgsDxfExport::writeToFile ( QIODevice* d )
35
+ int QgsDxfExport::writeToFile ( QIODevice* d, SymbologyExport s )
32
36
{
33
37
if ( !d )
34
38
{
@@ -42,6 +46,8 @@ int QgsDxfExport::writeToFile( QIODevice* d )
42
46
43
47
QTextStream outStream ( d );
44
48
writeHeader ( outStream );
49
+ writeEntities ( outStream );
50
+ writeEndFile ( outStream );
45
51
return 0 ;
46
52
}
47
53
@@ -61,8 +67,83 @@ void QgsDxfExport::writeHeader( QTextStream& stream )
61
67
stream << " ENDSEC\n " ;
62
68
}
63
69
70
+ void QgsDxfExport::writeEntities ( QTextStream& stream )
71
+ {
72
+ stream << " 0\n " ;
73
+ stream << " SECTION\n " ;
74
+ stream << " 2\n " ;
75
+ stream << " ENTITIES\n " ;
76
+
77
+ // iterate through the maplayers
78
+ QList< QgsMapLayer* >::iterator layerIt = mLayers .begin ();
79
+ for ( ; layerIt != mLayers .end (); ++layerIt )
80
+ {
81
+ QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( *layerIt );
82
+ if ( !vl )
83
+ {
84
+ continue ;
85
+ }
86
+ QgsVectorDataProvider* dp = vl->dataProvider ();
87
+ if ( !dp )
88
+ {
89
+ continue ;
90
+ }
91
+
92
+ QgsFeatureRendererV2* renderer = vl->rendererV2 ();
93
+ QgsFeatureIterator featureIt = vl->getFeatures ( QgsFeatureRequest ().setSubsetOfAttributes (
94
+ renderer->usedAttributes (), dp->fields () ) );
95
+ QgsFeature fet;
96
+ while ( featureIt.nextFeature ( fet ) )
97
+ {
98
+ // get geometry and write it. Todo: consider symbolisation
99
+ QgsGeometry* geom = fet.geometry ();
100
+ if ( geom )
101
+ {
102
+ // try with line first
103
+ writePolyline ( stream, geom->asPolyline (), vl->name () ); // todo.......
104
+ }
105
+ }
106
+ }
107
+
108
+ stream << " 0\n " ;
109
+ stream << " ENDSEC\n " ;
110
+ }
111
+
64
112
void QgsDxfExport::writeEndFile ( QTextStream& stream )
65
113
{
66
114
stream << " 0\n " ;
67
115
stream << " ENDSEC\n " ;
68
116
}
117
+
118
+ void QgsDxfExport::writePolyline ( QTextStream& stream, const QgsPolyline& line, const QString& layer, bool closed )
119
+ {
120
+ stream << " 0\n " ;
121
+ stream << " POLYLINE\n " ;
122
+ stream << " 8\n " ;
123
+ stream << layer << " \n " ;
124
+ stream << " 66\n " ;
125
+ stream << " 1\n " ;
126
+ stream << " 70\n " ;
127
+ int type = closed ? 32 : 0 ;
128
+ stream << type << " \n " ;
129
+
130
+ QgsPolyline::const_iterator lineIt = line.constBegin ();
131
+ for ( ; lineIt != line.constEnd (); ++lineIt )
132
+ {
133
+ writeVertex ( stream, *lineIt, layer );
134
+ }
135
+ }
136
+
137
+ void QgsDxfExport::writeVertex ( QTextStream& stream, const QgsPoint& pt, const QString& layer )
138
+ {
139
+ stream << " 0\n " ;
140
+ stream << " VERTEX\n " ;
141
+ stream << " 8\n " ;
142
+ stream << layer << " \n " ;
143
+ stream << " 10\n " ;
144
+ stream << pt.x () << " \n " ;
145
+ stream << " 20\n " ;
146
+ stream << pt.y () << " \n " ;
147
+ stream << " 30\n " ;
148
+ stream << " 0.0\n " ;
149
+ }
0 commit comments