16
16
***************************************************************************/
17
17
18
18
#include " qgsdxfexport.h"
19
+ #include " qgsdxfpallabeling.h"
19
20
#include " qgsvectordataprovider.h"
20
21
#include " qgspoint.h"
21
22
#include " qgsrendererv2.h"
@@ -473,6 +474,26 @@ void QgsDxfExport::writeTables()
473
474
writeGroup ( 6 , " CONTINUOUS" );
474
475
}
475
476
writeGroup ( 0 , " ENDTAB" );
477
+
478
+ // STYLE
479
+ writeGroup ( 0 , " TABLE" );
480
+ writeGroup ( 2 , " STYLE" );
481
+ writeGroup ( 70 , 1 );
482
+
483
+ // provide only standard font for the moment
484
+ writeGroup ( 0 , " STYLE" );
485
+ writeGroup ( 2 , " STANDARD" );
486
+ writeGroup ( 70 , 64 );
487
+ writeGroup ( 40 , 0.0 );
488
+ writeGroup ( 41 , 1.0 );
489
+ writeGroup ( 50 , 0.0 );
490
+ writeGroup ( 71 , 0 );
491
+ writeGroup ( 42 , 5.0 );
492
+ writeGroup ( 3 , " romans.shx" );
493
+ writeGroup ( 4 , " " );
494
+
495
+ writeGroup ( 0 , " ENDTAB" );
496
+
476
497
endSection ();
477
498
}
478
499
@@ -537,6 +558,10 @@ void QgsDxfExport::writeEntities()
537
558
startSection ();
538
559
writeGroup ( 2 , " ENTITIES" );
539
560
561
+ // label engine
562
+ QgsDxfPalLabeling labelEngine ( this , mExtent .isEmpty () ? dxfExtent () : mExtent , mSymbologyScaleDenominator );
563
+ QgsRenderContext& ctx = labelEngine.renderContext ();
564
+
540
565
// iterate through the maplayers
541
566
QList< QgsMapLayer* >::iterator layerIt = mLayers .begin ();
542
567
for ( ; layerIt != mLayers .end (); ++layerIt )
@@ -547,21 +572,32 @@ void QgsDxfExport::writeEntities()
547
572
continue ;
548
573
}
549
574
550
- QgsRenderContext ctx = renderContext ();
551
- ctx.setRendererScale ( mSymbologyScaleDenominator );
552
575
QgsSymbolV2RenderContext sctx ( ctx, QgsSymbolV2::MM , 1.0 , false , 0 , 0 );
553
576
QgsFeatureRendererV2* renderer = vl->rendererV2 ();
554
577
renderer->startRender ( ctx, vl );
555
578
579
+ // todo: call mLabeling.prepareLayer(...)
580
+ QSet<int > attrIndex;
581
+ bool labelLayer = ( labelEngine.prepareLayer ( vl, attrIndex, ctx ) != 0 );
582
+
556
583
if ( mSymbologyExport == QgsDxfExport::SymbolLayerSymbology && renderer->usingSymbolLevels () )
557
584
{
558
585
writeEntitiesSymbolLevels ( vl );
559
586
renderer->stopRender ( ctx );
560
587
continue ;
561
588
}
562
589
590
+ // combine renderer and label attributes
591
+ const QgsFields& fields = vl->pendingFields ();
592
+ QList<QString> attributes = renderer->usedAttributes ();
593
+ QSet<int >::const_iterator attrIndexIt = attrIndex.constBegin ();
594
+ for ( ; attrIndexIt != attrIndex.constEnd (); ++attrIndexIt )
595
+ {
596
+ attributes.append ( fields.at ( *attrIndexIt ).name () );
597
+ }
598
+
563
599
QgsFeatureRequest freq = QgsFeatureRequest ().setSubsetOfAttributes (
564
- renderer-> usedAttributes () , vl->pendingFields () );
600
+ attributes , vl->pendingFields () );
565
601
if ( !mExtent .isEmpty () )
566
602
{
567
603
freq.setFilterRect ( mExtent );
@@ -609,11 +645,18 @@ void QgsDxfExport::writeEntities()
609
645
}
610
646
addFeature ( sctx, dxfLayerName ( vl->name () ), s->symbolLayer ( 0 ), s );
611
647
}
648
+
649
+ if ( labelLayer )
650
+ {
651
+ labelEngine.registerFeature ( vl, fet, ctx );
652
+ }
612
653
}
613
654
}
614
655
renderer->stopRender ( ctx );
615
656
}
616
657
658
+ labelEngine.drawLabeling ( ctx );
659
+
617
660
endSection ();
618
661
}
619
662
@@ -828,6 +871,20 @@ void QgsDxfExport::writeCircle( const QString& layer, int color, const QgsPoint&
828
871
writeGroup ( 40 , radius );
829
872
}
830
873
874
+ void QgsDxfExport::writeText ( const QString& layer, const QString& text, const QgsPoint& pt, double size, double angle )
875
+ {
876
+ writeGroup ( 0 , " TEXT" );
877
+ writeGroup ( 8 , layer );
878
+ // todo: color with code 64
879
+ writeGroup ( 10 , pt.x () );
880
+ writeGroup ( 20 , pt.y () );
881
+ writeGroup ( 30 , 0 );
882
+ writeGroup ( 40 , size );
883
+ writeGroup ( 1 , text );
884
+ writeGroup ( 50 , angle );
885
+ writeGroup ( 7 , " STANDARD" ); // so far only support for standard font
886
+ }
887
+
831
888
void QgsDxfExport::writeSolid ( const QString& layer, int color, const QgsPoint& pt1, const QgsPoint& pt2, const QgsPoint& pt3, const QgsPoint& pt4 )
832
889
{
833
890
writeGroup ( 0 , " SOLID" );
0 commit comments