1717
1818#include " qgsapplication.h"
1919#include " qgsdxfexport.h"
20+ #include " qgsfillsymbollayer.h"
21+ #include " qgsgeometrygeneratorsymbollayer.h"
2022#include " qgsproject.h"
2123#include " qgsvectorlayer.h"
2224#include " qgsfontutils.h"
2325#include " qgsnullsymbolrenderer.h"
2426#include " qgstextrenderer.h"
2527#include " qgspallabeling.h"
2628#include " qgslabelingengine.h"
29+ #include " qgssinglesymbolrenderer.h"
2730#include " qgsvectorlayerlabeling.h"
2831#include < QTemporaryFile>
2932
@@ -45,10 +48,12 @@ class TestQgsDxfExport : public QObject
4548 void testMTextNoSymbology (); // tests if label export works if layer has vector renderer type 'no symbols'
4649 void testMTextEscapeSpaces ();
4750 void testText ();
51+ void testGeometryGeneratorExport ();
4852
4953 private:
5054 QgsVectorLayer *mPointLayer = nullptr ;
5155 QgsVectorLayer *mPointLayerNoSymbols = nullptr ;
56+ QgsVectorLayer *mPointLayerGeometryGenerator = nullptr ;
5257 QgsVectorLayer *mLineLayer = nullptr ;
5358 QgsVectorLayer *mPolygonLayer = nullptr ;
5459
@@ -77,14 +82,36 @@ void TestQgsDxfExport::cleanupTestCase()
7782void TestQgsDxfExport::init ()
7883{
7984 QString filename = QStringLiteral ( TEST_DATA_DIR ) + " /points.shp" ;
85+
8086 mPointLayer = new QgsVectorLayer ( filename, QStringLiteral ( " points" ), QStringLiteral ( " ogr" ) );
8187 QVERIFY ( mPointLayer ->isValid () );
8288 QgsProject::instance ()->addMapLayer ( mPointLayer );
89+
8390 mPointLayerNoSymbols = new QgsVectorLayer ( filename, QStringLiteral ( " points" ), QStringLiteral ( " ogr" ) );
8491 QVERIFY ( mPointLayerNoSymbols ->isValid () );
8592 mPointLayerNoSymbols ->setRenderer ( new QgsNullSymbolRenderer () );
8693 mPointLayerNoSymbols ->addExpressionField ( QStringLiteral ( " 'A text with spaces'" ), QgsField ( QStringLiteral ( " Spacestest" ), QVariant::String ) );
8794 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+
88115 filename = QStringLiteral ( TEST_DATA_DIR ) + " /lines.shp" ;
89116 mLineLayer = new QgsVectorLayer ( filename, QStringLiteral ( " lines" ), QStringLiteral ( " ogr" ) );
90117 QVERIFY ( mLineLayer ->isValid () );
@@ -98,6 +125,10 @@ void TestQgsDxfExport::init()
98125void TestQgsDxfExport::cleanup ()
99126{
100127 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 () );
101132 mPointLayer = nullptr ;
102133}
103134
@@ -362,6 +393,31 @@ bool TestQgsDxfExport::testMtext( QgsVectorLayer *vlayer, const QString &tempFil
362393 " 0" ) );
363394}
364395
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+
365421bool TestQgsDxfExport::fileContainsText ( const QString &path, const QString &text ) const
366422{
367423 QStringList searchLines = text.split ( ' \n ' );
0 commit comments