41
41
#include " qgstextlabelfeature.h"
42
42
#include " qgscrscache.h"
43
43
#include " qgslogger.h"
44
+ #include " qgsmaplayerstylemanager.h"
44
45
45
46
#include " qgswkbtypes.h"
46
47
#include " qgspointv2.h"
@@ -382,9 +383,10 @@ QgsDxfExport::QgsDxfExport( const QgsDxfExport& dxfExport )
382
383
*this = dxfExport;
383
384
}
384
385
385
- QgsDxfExport& QgsDxfExport::operator =( const QgsDxfExport & dxfExport )
386
+ QgsDxfExport & QgsDxfExport::operator =( const QgsDxfExport & dxfExport )
386
387
{
387
- mLayers = dxfExport.mLayers ;
388
+ mMapSettings = dxfExport.mMapSettings ;
389
+ mLayerNameAttribute = dxfExport.mLayerNameAttribute ;
388
390
mSymbologyScaleDenominator = dxfExport.mSymbologyScaleDenominator ;
389
391
mSymbologyExport = dxfExport.mSymbologyExport ;
390
392
mMapUnits = dxfExport.mMapUnits ;
@@ -397,9 +399,26 @@ QgsDxfExport& QgsDxfExport::operator=( const QgsDxfExport & dxfExport )
397
399
return *this ;
398
400
}
399
401
402
+ void QgsDxfExport::setMapSettings ( const QgsMapSettings &settings )
403
+ {
404
+ mMapSettings = settings;
405
+ }
406
+
400
407
void QgsDxfExport::addLayers ( const QList< QPair< QgsVectorLayer *, int > > &layers )
401
408
{
402
- mLayers = layers;
409
+ QList<QgsMapLayer*> layerList;
410
+
411
+ mLayerNameAttribute .clear ();
412
+
413
+ QList< QPair< QgsVectorLayer*, int > >::const_iterator layerIt = layers.constBegin ();
414
+ for ( ; layerIt != layers.constEnd (); ++layerIt )
415
+ {
416
+ layerList << layerIt->first ;
417
+ if ( layerIt->second >= 0 )
418
+ mLayerNameAttribute .insert ( layerIt->first ->id (), layerIt->second );
419
+ }
420
+
421
+ mMapSettings .setLayers ( layerList );
403
422
}
404
423
405
424
void QgsDxfExport::writeGroup ( int code, int i )
@@ -497,22 +516,22 @@ int QgsDxfExport::writeToFile( QIODevice* d, const QString& encoding )
497
516
498
517
if ( mExtent .isEmpty () )
499
518
{
500
- QList< QPair<QgsVectorLayer*, int > >::const_iterator layerIt = mLayers .constBegin ();
501
- for ( ; layerIt != mLayers .constEnd (); ++layerIt )
519
+ Q_FOREACH ( QgsMapLayer *ml, mMapSettings .layers () )
502
520
{
503
- if ( layerIt->first )
504
- {
505
- QgsRectangle layerExtent = layerIt->first ->extent ();
506
- layerExtent = mMapSettings .layerToMapCoordinates ( layerIt->first , layerExtent );
521
+ QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( ml );
522
+ if ( !vl )
523
+ continue ;
507
524
508
- if ( mExtent .isEmpty () )
509
- {
510
- mExtent = layerExtent;
511
- }
512
- else
513
- {
514
- mExtent .combineExtentWith ( layerExtent );
515
- }
525
+ QgsRectangle layerExtent = vl->extent ();
526
+ layerExtent = mMapSettings .layerToMapCoordinates ( vl, layerExtent );
527
+
528
+ if ( mExtent .isEmpty () )
529
+ {
530
+ mExtent = layerExtent;
531
+ }
532
+ else
533
+ {
534
+ mExtent .combineExtentWith ( layerExtent );
516
535
}
517
536
}
518
537
}
@@ -747,27 +766,28 @@ void QgsDxfExport::writeTables()
747
766
writeGroup ( 70 , 0 );
748
767
writeGroup ( 0 , QStringLiteral ( " ENDTAB" ) );
749
768
750
- QList< QPair<QgsVectorLayer*, int > >::const_iterator layerIt = mLayers .constBegin ();
751
769
QSet<QString> layerNames;
752
- for ( ; layerIt != mLayers . constEnd (); ++layerIt )
770
+ Q_FOREACH ( QgsMapLayer *ml, mMapSettings . layers () )
753
771
{
754
- if ( !layerIsScaleBasedVisible ( layerIt-> first ) )
772
+ if ( !layerIsScaleBasedVisible ( ml ) )
755
773
continue ;
756
774
757
- if ( layerIt->first )
775
+ QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( ml );
776
+ if ( !vl )
777
+ continue ;
778
+
779
+ int attrIdx = mLayerNameAttribute .value ( vl->id (), -1 );
780
+ if ( attrIdx < 0 )
758
781
{
759
- if ( layerIt->second < 0 )
760
- {
761
- layerNames << dxfLayerName ( layerName ( layerIt->first ) );
762
- }
763
- else
782
+ layerNames << dxfLayerName ( layerName ( vl ) );
783
+ }
784
+ else
785
+ {
786
+ QList<QVariant> values;
787
+ vl->uniqueValues ( attrIdx, values );
788
+ Q_FOREACH ( const QVariant& v, values )
764
789
{
765
- QList<QVariant> values;
766
- layerIt->first ->uniqueValues ( layerIt->second , values );
767
- Q_FOREACH ( const QVariant& v, values )
768
- {
769
- layerNames << dxfLayerName ( v.toString () );
770
- }
790
+ layerNames << dxfLayerName ( v.toString () );
771
791
}
772
792
}
773
793
}
@@ -946,27 +966,40 @@ void QgsDxfExport::writeEntities()
946
966
engine.setMapSettings ( mMapSettings );
947
967
948
968
// iterate through the maplayers
949
- QList< QPair< QgsVectorLayer*, int > >::const_iterator layerIt = mLayers .constBegin ();
950
- for ( ; layerIt != mLayers .constEnd (); ++layerIt )
969
+ Q_FOREACH ( QgsMapLayer *ml, mMapSettings .layers () )
951
970
{
952
- QgsVectorLayer* vl = layerIt-> first ;
971
+ QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml ) ;
953
972
if ( !vl || !layerIsScaleBasedVisible ( vl ) )
954
973
{
955
974
continue ;
956
975
}
957
976
977
+ bool hasStyleOverride = mMapSettings .layerStyleOverrides ().contains ( vl->id () );
978
+ if ( hasStyleOverride )
979
+ {
980
+ QgsDebugMsg ( QString ( " %1: apply override style" ).arg ( vl->id () ) );
981
+ vl->styleManager ()->setOverrideStyle ( mMapSettings .layerStyleOverrides ().value ( vl->id () ) );
982
+ }
983
+ else
984
+ {
985
+ QgsDebugMsg ( QString ( " %1: not override style" ).arg ( vl->id () ) );
986
+ }
987
+
958
988
QgsSymbolRenderContext sctx ( ctx, QgsUnitTypes::RenderMillimeters, 1.0 , false , 0 , nullptr );
959
989
QgsFeatureRenderer* renderer = vl->renderer ();
960
990
if ( !renderer )
961
991
{
992
+ if ( hasStyleOverride )
993
+ vl->styleManager ()->restoreOverrideStyle ();
962
994
continue ;
963
995
}
964
996
renderer->startRender ( ctx, vl->fields () );
965
997
966
998
QSet<QString> attributes = renderer->usedAttributes ( ctx );
967
- if ( vl->fields ().exists ( layerIt->second ) )
999
+ int attrIdx = mLayerNameAttribute .value ( vl->id (), 1 );
1000
+ if ( vl->fields ().exists ( attrIdx ) )
968
1001
{
969
- QString layerAttr = vl->fields ().at ( layerIt-> second ).name ();
1002
+ QString layerAttr = vl->fields ().at ( attrIdx ).name ();
970
1003
attributes << layerAttr;
971
1004
}
972
1005
@@ -1003,6 +1036,10 @@ void QgsDxfExport::writeEntities()
1003
1036
{
1004
1037
writeEntitiesSymbolLevels ( vl );
1005
1038
renderer->stopRender ( ctx );
1039
+
1040
+ if ( hasStyleOverride )
1041
+ vl->styleManager ()->restoreOverrideStyle ();
1042
+
1006
1043
continue ;
1007
1044
}
1008
1045
@@ -1017,7 +1054,7 @@ void QgsDxfExport::writeEntities()
1017
1054
while ( featureIt.nextFeature ( fet ) )
1018
1055
{
1019
1056
ctx.expressionContext ().setFeature ( fet );
1020
- QString lName ( dxfLayerName ( layerIt-> second == - 1 ? layerName ( vl ) : fet.attribute ( layerIt-> second ).toString () ) );
1057
+ QString lName ( dxfLayerName ( attrIdx < 0 ? layerName ( vl ) : fet.attribute ( attrIdx ).toString () ) );
1021
1058
1022
1059
sctx.setFeature ( &fet );
1023
1060
if ( mSymbologyExport == NoSymbology )
@@ -1067,6 +1104,9 @@ void QgsDxfExport::writeEntities()
1067
1104
}
1068
1105
1069
1106
renderer->stopRender ( ctx );
1107
+
1108
+ if ( hasStyleOverride )
1109
+ vl->styleManager ()->restoreOverrideStyle ();
1070
1110
}
1071
1111
1072
1112
engine.run ( ctx );
@@ -3936,11 +3976,9 @@ QList< QPair< QgsSymbolLayer*, QgsSymbol* > > QgsDxfExport::symbolLayers( QgsRen
3936
3976
{
3937
3977
QList< QPair< QgsSymbolLayer*, QgsSymbol* > > symbolLayers;
3938
3978
3939
- QList< QPair< QgsVectorLayer*, int > >::const_iterator lIt = mLayers .constBegin ();
3940
- for ( ; lIt != mLayers .constEnd (); ++lIt )
3979
+ Q_FOREACH ( QgsMapLayer *ml, mMapSettings .layers () )
3941
3980
{
3942
- // cast to vector layer
3943
- QgsVectorLayer* vl = lIt->first ;
3981
+ QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml );
3944
3982
if ( !vl )
3945
3983
{
3946
3984
continue ;
@@ -4192,12 +4230,13 @@ bool QgsDxfExport::layerIsScaleBasedVisible( const QgsMapLayer* layer ) const
4192
4230
4193
4231
QString QgsDxfExport::layerName ( const QString &id, const QgsFeature &f ) const
4194
4232
{
4195
- QList< QPair<QgsVectorLayer*, int > >::const_iterator layerIt = mLayers .constBegin ();
4196
- for ( ; layerIt != mLayers .constEnd (); ++layerIt )
4233
+ Q_FOREACH ( QgsMapLayer *ml, mMapSettings .layers () )
4197
4234
{
4198
- if ( layerIt->first && layerIt->first ->id () == id )
4235
+ QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( ml );
4236
+ if ( vl && vl->id () == id )
4199
4237
{
4200
- return dxfLayerName ( layerIt->second < 0 ? layerName ( layerIt->first ) : f.attribute ( layerIt->second ).toString () );
4238
+ int attrIdx = mLayerNameAttribute .value ( vl->id (), -1 );
4239
+ return dxfLayerName ( attrIdx < 0 ? layerName ( vl ) : f.attribute ( attrIdx ).toString () );
4201
4240
}
4202
4241
}
4203
4242
0 commit comments