6
6
#include " terraingenerator.h"
7
7
#include " utils.h"
8
8
9
- #include < Qt3DExtras/QPhongMaterial>
10
- #include < Qt3DRender/QGeometryRenderer>
11
-
12
9
#include " qgsvectorlayer.h"
13
10
#include " qgsmultipolygon.h"
14
11
#include " qgsgeos.h"
17
14
LineEntity::LineEntity ( const Map3D &map, QgsVectorLayer *layer, const Line3DSymbol &symbol, Qt3DCore::QNode *parent )
18
15
: Qt3DCore::QEntity( parent )
19
16
{
20
- QgsPointXY origin ( map.originX , map.originY );
17
+ addEntityForSelectedLines ( map, layer, symbol );
18
+ addEntityForNotSelectedLines ( map, layer, symbol );
19
+ }
21
20
21
+ Qt3DExtras::QPhongMaterial *LineEntity::material ( const Line3DSymbol &symbol ) const
22
+ {
22
23
Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial;
24
+
23
25
material->setAmbient ( symbol.material .ambient () );
24
26
material->setDiffuse ( symbol.material .diffuse () );
25
27
material->setSpecular ( symbol.material .specular () );
26
28
material->setShininess ( symbol.material .shininess () );
27
- addComponent ( material );
29
+
30
+ return material;
31
+ }
32
+
33
+ void LineEntity::addEntityForSelectedLines ( const Map3D &map, QgsVectorLayer *layer, const Line3DSymbol &symbol )
34
+ {
35
+ // build the default material
36
+ Qt3DExtras::QPhongMaterial *mat = material ( symbol );
37
+
38
+ // update the material with selection colors
39
+ mat->setDiffuse ( map.selectionColor () );
40
+ mat->setAmbient ( map.selectionColor ().darker () );
41
+
42
+ // build the feature request to select features
43
+ QgsFeatureRequest req;
44
+ req.setDestinationCrs ( map.crs );
45
+ req.setFilterFids ( layer->selectedFeatureIds () );
46
+
47
+ // build the entity
48
+ LineEntityNode *entity = new LineEntityNode ( map, layer, symbol, req );
49
+ entity->addComponent ( mat );
50
+ entity->setParent ( this );
51
+ }
52
+
53
+ void LineEntity::addEntityForNotSelectedLines ( const Map3D &map, QgsVectorLayer *layer, const Line3DSymbol &symbol )
54
+ {
55
+ // build the default material
56
+ Qt3DExtras::QPhongMaterial *mat = material ( symbol );
57
+
58
+ // build the feature request to select features
59
+ QgsFeatureRequest req;
60
+ req.setDestinationCrs ( map.crs );
61
+
62
+ QgsFeatureIds notSelected = layer->allFeatureIds ();
63
+ notSelected.subtract ( layer->selectedFeatureIds () );
64
+ req.setFilterFids ( notSelected );
65
+
66
+ // build the entity
67
+ LineEntityNode *entity = new LineEntityNode ( map, layer, symbol, req );
68
+ entity->addComponent ( mat );
69
+ entity->setParent ( this );
70
+ }
71
+
72
+ LineEntityNode::LineEntityNode ( const Map3D &map, QgsVectorLayer *layer, const Line3DSymbol &symbol, const QgsFeatureRequest &req, Qt3DCore::QNode *parent )
73
+ : Qt3DCore::QEntity( parent )
74
+ {
75
+ addComponent ( renderer ( map, symbol, layer, req ) );
76
+ }
77
+
78
+ Qt3DRender::QGeometryRenderer *LineEntityNode::renderer ( const Map3D &map, const Line3DSymbol &symbol, const QgsVectorLayer *layer, const QgsFeatureRequest &request )
79
+ {
80
+ QgsPointXY origin ( map.originX , map.originY );
28
81
29
82
// TODO: configurable
30
83
int nSegments = 4 ;
@@ -34,8 +87,6 @@ LineEntity::LineEntity( const Map3D &map, QgsVectorLayer *layer, const Line3DSym
34
87
35
88
QList<QgsPolygonV2 *> polygons;
36
89
QgsFeature f;
37
- QgsFeatureRequest request;
38
- request.setDestinationCrs ( map.crs );
39
90
QgsFeatureIterator fi = layer->getFeatures ( request );
40
91
while ( fi.nextFeature ( f ) )
41
92
{
@@ -68,10 +119,11 @@ LineEntity::LineEntity( const Map3D &map, QgsVectorLayer *layer, const Line3DSym
68
119
}
69
120
}
70
121
71
- geometry = new PolygonGeometry;
72
- geometry ->setPolygons ( polygons, origin, /* symbol.height,*/ symbol.extrusionHeight );
122
+ mGeometry = new PolygonGeometry;
123
+ mGeometry ->setPolygons ( polygons, origin, /* symbol.height,*/ symbol.extrusionHeight );
73
124
74
125
Qt3DRender::QGeometryRenderer *renderer = new Qt3DRender::QGeometryRenderer;
75
- renderer->setGeometry ( geometry );
76
- addComponent ( renderer );
126
+ renderer->setGeometry ( mGeometry );
127
+
128
+ return renderer;
77
129
}
0 commit comments