Skip to content

Commit 32221fd

Browse files
committed
Dxf: add more header fields, min/max extent and a test linestyle
1 parent 06e9339 commit 32221fd

File tree

2 files changed

+82
-2
lines changed

2 files changed

+82
-2
lines changed

src/core/qgsdxfexport.cpp

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,48 @@ void QgsDxfExport::writeHeader( QTextStream& stream )
5959
startSection( stream );
6060
stream << " 2\n";
6161
stream << "HEADER\n";
62+
//ACADVER
6263
stream << " 9\n";
63-
stream << "$ACADVER";
64+
stream << "$ACADVER\n";
65+
stream << " 1\n";
6466
stream << "AC1009\n";
67+
68+
QgsRectangle ext = dxfExtent();
69+
if ( !ext.isEmpty() )
70+
{
71+
//EXTMIN
72+
stream << " 9\n";
73+
stream << "$EXTMIN\n";
74+
stream << " 10\n";
75+
stream << ext.xMinimum() << "\n";
76+
stream << " 20\n";
77+
stream << ext.yMinimum() << "\n";
78+
stream << " 30\n";
79+
stream << "0\n";
80+
//EXTMAX
81+
stream << " 9\n";
82+
stream << "$EXTMAX\n";
83+
stream << " 10\n";
84+
stream << ext.xMaximum() << "\n";
85+
stream << " 20\n";
86+
stream << ext.yMaximum() << "\n";
87+
stream << " 30\n";
88+
stream << "0\n";
89+
}
90+
//LTSCALE
6591
stream << " 9\n";
6692
stream << "$LTSCALE\n";
6793
stream << " 40\n";
94+
stream << "1.0\n";
95+
//PDMODE
96+
stream << " 9\n";
97+
stream << "$PDMODE\n";
98+
stream << " 70\n";
99+
stream << "33\n";
100+
//PDSIZE
101+
stream << " 9\n";
102+
stream << "$PDSIZE\n";
103+
stream << " 40\n";
68104
stream << "1\n";
69105
endSection( stream );
70106
}
@@ -75,7 +111,27 @@ void QgsDxfExport::writeTables( QTextStream& stream )
75111
stream << " 2\n";
76112
stream << "TABLES\n";
77113

78-
//
114+
//LTYPE
115+
stream << " 0\n";
116+
stream << "TABLE\n";
117+
stream << " 0\n";
118+
stream << "LTYPE\n";
119+
stream << " 2\n";
120+
stream << "CONTINUOUS\n";
121+
stream << " 70\n";
122+
stream << "64\n";
123+
stream << " 3\n";
124+
stream << "Defaultstyle\n";
125+
stream << " 72\n";
126+
stream << "65\n";
127+
stream << " 73\n";
128+
stream << "0\n";
129+
stream << " 40\n"; //todo: add segments in group 49
130+
stream << "0\n";
131+
stream << " 0\n";
132+
stream << "ENDTAB\n";
133+
134+
//LAYER
79135
stream << " 0\n";
80136
stream << "TABLE\n";
81137
stream << " 0\n";
@@ -192,3 +248,25 @@ void QgsDxfExport::writeVertex( QTextStream& stream, const QgsPoint& pt, const Q
192248
stream << " 30\n";
193249
stream << "0.0\n";
194250
}
251+
252+
QgsRectangle QgsDxfExport::dxfExtent() const
253+
{
254+
QgsRectangle extent;
255+
QList< QgsMapLayer* >::const_iterator layerIt = mLayers.constBegin();
256+
for ( ; layerIt != mLayers.constEnd(); ++layerIt )
257+
{
258+
if ( *layerIt )
259+
{
260+
if ( extent.isEmpty() )
261+
{
262+
extent = ( *layerIt )->extent();
263+
}
264+
else
265+
{
266+
QgsRectangle layerExtent = ( *layerIt )->extent();
267+
extent.combineExtentWith( &layerExtent );
268+
}
269+
}
270+
}
271+
return extent;
272+
}

src/core/qgsdxfexport.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class QgsDxfExport
5757
void writePolyline( QTextStream& stream, const QgsPolyline& line, const QString& layer, bool closed = false );
5858
void writeVertex( QTextStream& stream, const QgsPoint& pt, const QString& layer );
5959

60+
QgsRectangle dxfExtent() const;
61+
6062
//collect styles
6163
//writeEntities
6264

0 commit comments

Comments
 (0)