17
17
18
18
#include " qgsapplication.h"
19
19
#include " qgsdxfexport.h"
20
+ #include " qgsfillsymbollayer.h"
21
+ #include " qgsgeometrygeneratorsymbollayer.h"
20
22
#include " qgsproject.h"
21
23
#include " qgsvectorlayer.h"
22
24
#include " qgsfontutils.h"
23
25
#include " qgsnullsymbolrenderer.h"
24
26
#include " qgstextrenderer.h"
25
27
#include " qgspallabeling.h"
26
28
#include " qgslabelingengine.h"
29
+ #include " qgssinglesymbolrenderer.h"
27
30
#include " qgsvectorlayerlabeling.h"
28
31
#include < QTemporaryFile>
29
32
@@ -45,10 +48,12 @@ class TestQgsDxfExport : public QObject
45
48
void testMTextNoSymbology (); // tests if label export works if layer has vector renderer type 'no symbols'
46
49
void testMTextEscapeSpaces ();
47
50
void testText ();
51
+ void testGeometryGeneratorExport ();
48
52
49
53
private:
50
54
QgsVectorLayer *mPointLayer = nullptr ;
51
55
QgsVectorLayer *mPointLayerNoSymbols = nullptr ;
56
+ QgsVectorLayer *mPointLayerGeometryGenerator = nullptr ;
52
57
QgsVectorLayer *mLineLayer = nullptr ;
53
58
QgsVectorLayer *mPolygonLayer = nullptr ;
54
59
@@ -77,14 +82,36 @@ void TestQgsDxfExport::cleanupTestCase()
77
82
void TestQgsDxfExport::init ()
78
83
{
79
84
QString filename = QStringLiteral ( TEST_DATA_DIR ) + " /points.shp" ;
85
+
80
86
mPointLayer = new QgsVectorLayer ( filename, QStringLiteral ( " points" ), QStringLiteral ( " ogr" ) );
81
87
QVERIFY ( mPointLayer ->isValid () );
82
88
QgsProject::instance ()->addMapLayer ( mPointLayer );
89
+
83
90
mPointLayerNoSymbols = new QgsVectorLayer ( filename, QStringLiteral ( " points" ), QStringLiteral ( " ogr" ) );
84
91
QVERIFY ( mPointLayerNoSymbols ->isValid () );
85
92
mPointLayerNoSymbols ->setRenderer ( new QgsNullSymbolRenderer () );
86
93
mPointLayerNoSymbols ->addExpressionField ( QStringLiteral ( " 'A text with spaces'" ), QgsField ( QStringLiteral ( " Spacestest" ), QVariant::String ) );
87
94
QgsProject::instance ()->addMapLayer ( mPointLayerNoSymbols );
95
+
96
+ // Point layer with geometry generator symbolizer
97
+ mPointLayerGeometryGenerator = new QgsVectorLayer ( filename, QStringLiteral ( " points" ), QStringLiteral ( " ogr" ) );
98
+ QVERIFY ( mPointLayerGeometryGenerator );
99
+
100
+ QgsStringMap ggProps;
101
+ ggProps.insert ( QStringLiteral ( " SymbolType" ), QStringLiteral ( " Fill" ) );
102
+ ggProps.insert ( QStringLiteral ( " geometryModifier" ), QStringLiteral ( " buffer( $geometry, 0.1 )" ) );
103
+ QgsSymbolLayer *ggSymbolLayer = QgsGeometryGeneratorSymbolLayer::create ( ggProps );
104
+ QgsSymbolLayerList fillSymbolLayerList;
105
+ fillSymbolLayerList << new QgsSimpleFillSymbolLayer ();
106
+ ggSymbolLayer->setSubSymbol ( new QgsFillSymbol ( fillSymbolLayerList ) );
107
+ QgsSymbolLayerList slList;
108
+ slList << ggSymbolLayer;
109
+ QgsMarkerSymbol *markerSymbol = new QgsMarkerSymbol ( slList );
110
+ QgsSingleSymbolRenderer *sr = new QgsSingleSymbolRenderer ( markerSymbol );
111
+ mPointLayerGeometryGenerator ->setRenderer ( sr );
112
+
113
+ QgsProject::instance ()->addMapLayer ( mPointLayerGeometryGenerator );
114
+
88
115
filename = QStringLiteral ( TEST_DATA_DIR ) + " /lines.shp" ;
89
116
mLineLayer = new QgsVectorLayer ( filename, QStringLiteral ( " lines" ), QStringLiteral ( " ogr" ) );
90
117
QVERIFY ( mLineLayer ->isValid () );
@@ -98,6 +125,10 @@ void TestQgsDxfExport::init()
98
125
void TestQgsDxfExport::cleanup ()
99
126
{
100
127
QgsProject::instance ()->removeMapLayer ( mPointLayer ->id () );
128
+ QgsProject::instance ()->removeMapLayer ( mPointLayerNoSymbols ->id () );
129
+ QgsProject::instance ()->removeMapLayer ( mPointLayerGeometryGenerator ->id () );
130
+ QgsProject::instance ()->removeMapLayer ( mLineLayer ->id () );
131
+ QgsProject::instance ()->removeMapLayer ( mPolygonLayer ->id () );
101
132
mPointLayer = nullptr ;
102
133
}
103
134
@@ -362,6 +393,31 @@ bool TestQgsDxfExport::testMtext( QgsVectorLayer *vlayer, const QString &tempFil
362
393
" 0" ) );
363
394
}
364
395
396
+ void TestQgsDxfExport::testGeometryGeneratorExport ()
397
+ {
398
+ QgsDxfExport d;
399
+ d.addLayers ( QList< QgsDxfExport::DxfLayer >() << QgsDxfExport::DxfLayer ( mPointLayerGeometryGenerator ) );
400
+
401
+ QgsMapSettings mapSettings;
402
+ QSize size ( 640 , 480 );
403
+ mapSettings.setOutputSize ( size );
404
+ mapSettings.setExtent ( mPointLayerGeometryGenerator ->extent () );
405
+ mapSettings.setLayers ( QList<QgsMapLayer *>() << mPointLayerGeometryGenerator );
406
+ mapSettings.setOutputDpi ( 96 );
407
+ mapSettings.setDestinationCrs ( mPointLayerGeometryGenerator ->crs () );
408
+
409
+ d.setMapSettings ( mapSettings );
410
+ d.setSymbologyScale ( 6000000 );
411
+ d.setSymbologyExport ( QgsDxfExport::FeatureSymbology );
412
+
413
+ QString file = getTempFileName ( " geometry_generator_dxf" );
414
+ QFile dxfFile ( file );
415
+ QCOMPARE ( d.writeToFile ( &dxfFile, QStringLiteral ( " CP1252" ) ), 0 );
416
+ dxfFile.close ();
417
+
418
+ QVERIFY ( fileContainsText ( file, " HATCH" ) );
419
+ }
420
+
365
421
bool TestQgsDxfExport::fileContainsText ( const QString &path, const QString &text ) const
366
422
{
367
423
QStringList searchLines = text.split ( ' \n ' );
0 commit comments