Skip to content

Commit fc28a97

Browse files
committed
3D symbols: private members + public getters/setters ... just like big kids
1 parent 870d96e commit fc28a97

13 files changed

+212
-147
lines changed

src/3d/lineentity.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ Qt3DExtras::QPhongMaterial *LineEntity::material( const QgsLine3DSymbol &symbol
2222
{
2323
Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial;
2424

25-
material->setAmbient( symbol.material.ambient() );
26-
material->setDiffuse( symbol.material.diffuse() );
27-
material->setSpecular( symbol.material.specular() );
28-
material->setShininess( symbol.material.shininess() );
25+
material->setAmbient( symbol.material().ambient() );
26+
material->setDiffuse( symbol.material().diffuse() );
27+
material->setSpecular( symbol.material().specular() );
28+
material->setShininess( symbol.material().shininess() );
2929

3030
return material;
3131
}
@@ -102,12 +102,12 @@ Qt3DRender::QGeometryRenderer *LineEntityNode::renderer( const Map3D &map, const
102102
QgsAbstractGeometry *g = geom.geometry();
103103

104104
QgsGeos engine( g );
105-
QgsAbstractGeometry *buffered = engine.buffer( symbol.width / 2., nSegments, endCapStyle, joinStyle, mitreLimit ); // factory
105+
QgsAbstractGeometry *buffered = engine.buffer( symbol.width() / 2., nSegments, endCapStyle, joinStyle, mitreLimit ); // factory
106106

107107
if ( QgsWkbTypes::flatType( buffered->wkbType() ) == QgsWkbTypes::Polygon )
108108
{
109109
QgsPolygonV2 *polyBuffered = static_cast<QgsPolygonV2 *>( buffered );
110-
Utils::clampAltitudes( polyBuffered, symbol.altClamping, symbol.altBinding, symbol.height, map );
110+
Utils::clampAltitudes( polyBuffered, symbol.altitudeClamping(), symbol.altitudeBinding(), symbol.height(), map );
111111
polygons.append( polyBuffered );
112112
}
113113
else if ( QgsWkbTypes::flatType( buffered->wkbType() ) == QgsWkbTypes::MultiPolygon )
@@ -118,15 +118,15 @@ Qt3DRender::QGeometryRenderer *LineEntityNode::renderer( const Map3D &map, const
118118
QgsAbstractGeometry *partBuffered = mpolyBuffered->geometryN( i );
119119
Q_ASSERT( QgsWkbTypes::flatType( partBuffered->wkbType() ) == QgsWkbTypes::Polygon );
120120
QgsPolygonV2 *polyBuffered = static_cast<QgsPolygonV2 *>( partBuffered )->clone(); // need to clone individual geometry parts
121-
Utils::clampAltitudes( polyBuffered, symbol.altClamping, symbol.altBinding, symbol.height, map );
121+
Utils::clampAltitudes( polyBuffered, symbol.altitudeClamping(), symbol.altitudeBinding(), symbol.height(), map );
122122
polygons.append( polyBuffered );
123123
}
124124
delete buffered;
125125
}
126126
}
127127

128128
mGeometry = new PolygonGeometry;
129-
mGeometry->setPolygons( polygons, origin, /*symbol.height,*/ symbol.extrusionHeight );
129+
mGeometry->setPolygons( polygons, origin, symbol.extrusionHeight() );
130130

131131
Qt3DRender::QGeometryRenderer *renderer = new Qt3DRender::QGeometryRenderer;
132132
renderer->setGeometry( mGeometry );

src/3d/pointentity.cpp

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
PointEntity::PointEntity( const Map3D &map, QgsVectorLayer *layer, const QgsPoint3DSymbol &symbol, Qt3DCore::QNode *parent )
3838
: Qt3DCore::QEntity( parent )
3939
{
40-
if ( symbol.shapeProperties["shape"].toString() == "model" )
40+
if ( symbol.shapeProperties()["shape"].toString() == "model" )
4141
{
4242
Model3DPointEntityFactory::addEntitiesForSelectedPoints( map, layer, symbol, this );
4343
Model3DPointEntityFactory::addEntitiesForNotSelectedPoints( map, layer, symbol, this );
@@ -80,12 +80,12 @@ Qt3DRender::QMaterial *InstancedPointEntityFactory::material( const QgsPoint3DSy
8080
Qt3DRender::QParameter *specularParameter = new Qt3DRender::QParameter( QStringLiteral( "ks" ), QColor::fromRgbF( 0.01f, 0.01f, 0.01f, 1.0f ) );
8181
Qt3DRender::QParameter *shininessParameter = new Qt3DRender::QParameter( QStringLiteral( "shininess" ), 150.0f );
8282

83-
diffuseParameter->setValue( symbol.material.diffuse() );
84-
ambientParameter->setValue( symbol.material.ambient() );
85-
specularParameter->setValue( symbol.material.specular() );
86-
shininessParameter->setValue( symbol.material.shininess() );
83+
diffuseParameter->setValue( symbol.material().diffuse() );
84+
ambientParameter->setValue( symbol.material().ambient() );
85+
specularParameter->setValue( symbol.material().specular() );
86+
shininessParameter->setValue( symbol.material().shininess() );
8787

88-
QMatrix4x4 transformMatrix = symbol.transform;
88+
QMatrix4x4 transformMatrix = symbol.transform();
8989
QMatrix3x3 normalMatrix = transformMatrix.normalMatrix(); // transponed inverse of 3x3 sub-matrix
9090

9191
// QMatrix3x3 is not supported for passing to shaders, so we pass QMatrix4x4
@@ -198,19 +198,20 @@ Qt3DRender::QGeometryRenderer *InstancedPointEntityNode::renderer( const QgsPoin
198198
instanceDataAttribute->setByteStride( 3 * sizeof( float ) );
199199

200200
Qt3DRender::QGeometry *geometry = nullptr;
201-
QString shape = symbol.shapeProperties["shape"].toString();
201+
QVariantMap shapeProperties = symbol.shapeProperties();
202+
QString shape = shapeProperties["shape"].toString();
202203
if ( shape == "sphere" )
203204
{
204-
float radius = symbol.shapeProperties["radius"].toFloat();
205+
float radius = shapeProperties["radius"].toFloat();
205206
Qt3DExtras::QSphereGeometry *g = new Qt3DExtras::QSphereGeometry;
206207
g->setRadius( radius ? radius : 10 );
207208
geometry = g;
208209
}
209210
else if ( shape == "cone" )
210211
{
211-
float length = symbol.shapeProperties["length"].toFloat();
212-
float bottomRadius = symbol.shapeProperties["bottomRadius"].toFloat();
213-
float topRadius = symbol.shapeProperties["topRadius"].toFloat();
212+
float length = shapeProperties["length"].toFloat();
213+
float bottomRadius = shapeProperties["bottomRadius"].toFloat();
214+
float topRadius = shapeProperties["topRadius"].toFloat();
214215
Qt3DExtras::QConeGeometry *g = new Qt3DExtras::QConeGeometry;
215216
g->setLength( length ? length : 10 );
216217
g->setBottomRadius( bottomRadius );
@@ -221,7 +222,7 @@ Qt3DRender::QGeometryRenderer *InstancedPointEntityNode::renderer( const QgsPoin
221222
}
222223
else if ( shape == "cube" )
223224
{
224-
float size = symbol.shapeProperties["size"].toFloat();
225+
float size = shapeProperties["size"].toFloat();
225226
Qt3DExtras::QCuboidGeometry *g = new Qt3DExtras::QCuboidGeometry;
226227
g->setXExtent( size ? size : 10 );
227228
g->setYExtent( size ? size : 10 );
@@ -230,16 +231,16 @@ Qt3DRender::QGeometryRenderer *InstancedPointEntityNode::renderer( const QgsPoin
230231
}
231232
else if ( shape == "torus" )
232233
{
233-
float radius = symbol.shapeProperties["radius"].toFloat();
234-
float minorRadius = symbol.shapeProperties["minorRadius"].toFloat();
234+
float radius = shapeProperties["radius"].toFloat();
235+
float minorRadius = shapeProperties["minorRadius"].toFloat();
235236
Qt3DExtras::QTorusGeometry *g = new Qt3DExtras::QTorusGeometry;
236237
g->setRadius( radius ? radius : 10 );
237238
g->setMinorRadius( minorRadius ? minorRadius : 5 );
238239
geometry = g;
239240
}
240241
else if ( shape == "plane" )
241242
{
242-
float size = symbol.shapeProperties["size"].toFloat();
243+
float size = shapeProperties["size"].toFloat();
243244
Qt3DExtras::QPlaneGeometry *g = new Qt3DExtras::QPlaneGeometry;
244245
g->setWidth( size ? size : 10 );
245246
g->setHeight( size ? size : 10 );
@@ -248,8 +249,8 @@ Qt3DRender::QGeometryRenderer *InstancedPointEntityNode::renderer( const QgsPoin
248249
#if QT_VERSION >= 0x050900
249250
else if ( shape == "extrudedText" )
250251
{
251-
float depth = symbol.shapeProperties["depth"].toFloat();
252-
QString text = symbol.shapeProperties["text"].toString();
252+
float depth = shapeProperties["depth"].toFloat();
253+
QString text = shapeProperties["text"].toString();
253254
Qt3DExtras::QExtrudedTextGeometry *g = new Qt3DExtras::QExtrudedTextGeometry;
254255
g->setDepth( depth ? depth : 1 );
255256
g->setText( text );
@@ -258,8 +259,8 @@ Qt3DRender::QGeometryRenderer *InstancedPointEntityNode::renderer( const QgsPoin
258259
#endif
259260
else // shape == "cylinder" or anything else
260261
{
261-
float radius = symbol.shapeProperties["radius"].toFloat();
262-
float length = symbol.shapeProperties["length"].toFloat();
262+
float radius = shapeProperties["radius"].toFloat();
263+
float length = shapeProperties["length"].toFloat();
263264
Qt3DExtras::QCylinderGeometry *g = new Qt3DExtras::QCylinderGeometry;
264265
//g->setRings(2); // how many vertices vertically
265266
//g->setSlices(8); // how many vertices on circumference
@@ -284,10 +285,10 @@ static Qt3DExtras::QPhongMaterial *phongMaterial( const QgsPoint3DSymbol &symbol
284285
{
285286
Qt3DExtras::QPhongMaterial *phong = new Qt3DExtras::QPhongMaterial;
286287

287-
phong->setAmbient( symbol.material.ambient() );
288-
phong->setDiffuse( symbol.material.diffuse() );
289-
phong->setSpecular( symbol.material.specular() );
290-
phong->setShininess( symbol.material.shininess() );
288+
phong->setAmbient( symbol.material().ambient() );
289+
phong->setDiffuse( symbol.material().diffuse() );
290+
phong->setSpecular( symbol.material().specular() );
291+
phong->setShininess( symbol.material().shininess() );
291292

292293
return phong;
293294
}
@@ -312,7 +313,7 @@ void Model3DPointEntityFactory::addEntitiesForNotSelectedPoints( const Map3D &ma
312313
notSelected.subtract( layer->selectedFeatureIds() );
313314
req.setFilterFids( notSelected );
314315

315-
if ( symbol.shapeProperties["overwriteMaterial"].toBool() )
316+
if ( symbol.shapeProperties()["overwriteMaterial"].toBool() )
316317
{
317318
addMeshEntities( map, layer, req, symbol, parent, false );
318319
}
@@ -330,7 +331,7 @@ void Model3DPointEntityFactory::addSceneEntities( const Map3D &map, QgsVectorLay
330331
// build the entity
331332
Qt3DCore::QEntity *entity = new Qt3DCore::QEntity;
332333

333-
QUrl url = QUrl::fromLocalFile( symbol.shapeProperties["model"].toString() );
334+
QUrl url = QUrl::fromLocalFile( symbol.shapeProperties()["model"].toString() );
334335
Qt3DRender::QSceneLoader *modelLoader = new Qt3DRender::QSceneLoader;
335336
modelLoader->setSource( url );
336337

@@ -358,7 +359,7 @@ void Model3DPointEntityFactory::addMeshEntities( const Map3D &map, QgsVectorLaye
358359
// build the entity
359360
Qt3DCore::QEntity *entity = new Qt3DCore::QEntity;
360361

361-
QUrl url = QUrl::fromLocalFile( symbol.shapeProperties["model"].toString() );
362+
QUrl url = QUrl::fromLocalFile( symbol.shapeProperties()["model"].toString() );
362363
Qt3DRender::QMesh *mesh = new Qt3DRender::QMesh;
363364
mesh->setSource( url );
364365

@@ -372,7 +373,7 @@ void Model3DPointEntityFactory::addMeshEntities( const Map3D &map, QgsVectorLaye
372373
Qt3DCore::QTransform *Model3DPointEntityFactory::transform( const QVector3D &position, const QgsPoint3DSymbol &symbol )
373374
{
374375
Qt3DCore::QTransform *tr = new Qt3DCore::QTransform;
375-
tr->setMatrix( symbol.transform );
376+
tr->setMatrix( symbol.transform() );
376377
tr->setTranslation( position + tr->translation() );
377378
return tr;
378379
}

src/3d/polygonentity.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ void PolygonEntity::addEntityForNotSelectedPolygons( const Map3D &map, QgsVector
7272
Qt3DExtras::QPhongMaterial *PolygonEntity::material( const QgsPolygon3DSymbol &symbol ) const
7373
{
7474
Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial;
75-
material->setAmbient( symbol.material.ambient() );
76-
material->setDiffuse( symbol.material.diffuse() );
77-
material->setSpecular( symbol.material.specular() );
78-
material->setShininess( symbol.material.shininess() );
75+
material->setAmbient( symbol.material().ambient() );
76+
material->setDiffuse( symbol.material().diffuse() );
77+
material->setSpecular( symbol.material().specular() );
78+
material->setShininess( symbol.material().shininess() );
7979
return material;
8080
}
8181

@@ -115,7 +115,7 @@ Qt3DRender::QGeometryRenderer *PolygonEntityNode::renderer( const Map3D &map, co
115115
{
116116
QgsPolygonV2 *poly = static_cast<QgsPolygonV2 *>( g );
117117
QgsPolygonV2 *polyClone = poly->clone();
118-
Utils::clampAltitudes( polyClone, symbol.altClamping, symbol.altBinding, symbol.height, map );
118+
Utils::clampAltitudes( polyClone, symbol.altitudeClamping(), symbol.altitudeBinding(), symbol.height(), map );
119119
polygons.append( polyClone );
120120
}
121121
else if ( QgsWkbTypes::flatType( g->wkbType() ) == QgsWkbTypes::MultiPolygon )
@@ -126,7 +126,7 @@ Qt3DRender::QGeometryRenderer *PolygonEntityNode::renderer( const Map3D &map, co
126126
QgsAbstractGeometry *g2 = mpoly->geometryN( i );
127127
Q_ASSERT( QgsWkbTypes::flatType( g2->wkbType() ) == QgsWkbTypes::Polygon );
128128
QgsPolygonV2 *polyClone = static_cast<QgsPolygonV2 *>( g2 )->clone();
129-
Utils::clampAltitudes( polyClone, symbol.altClamping, symbol.altBinding, symbol.height, map );
129+
Utils::clampAltitudes( polyClone, symbol.altitudeClamping(), symbol.altitudeBinding(), symbol.height(), map );
130130
polygons.append( polyClone );
131131
}
132132
}
@@ -135,7 +135,7 @@ Qt3DRender::QGeometryRenderer *PolygonEntityNode::renderer( const Map3D &map, co
135135
}
136136

137137
mGeometry = new PolygonGeometry;
138-
mGeometry->setPolygons( polygons, origin, symbol.extrusionHeight );
138+
mGeometry->setPolygons( polygons, origin, symbol.extrusionHeight() );
139139

140140
Qt3DRender::QGeometryRenderer *renderer = new Qt3DRender::QGeometryRenderer;
141141
renderer->setGeometry( mGeometry );

src/3d/symbols/qgsline3dsymbol.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#include "qgsline3dsymbol.h"
22

33
QgsLine3DSymbol::QgsLine3DSymbol()
4-
: altClamping( AltClampRelative )
5-
, altBinding( AltBindCentroid )
6-
, height( 0 )
7-
, extrusionHeight( 0 )
8-
, width( 2 )
4+
: mAltClamping( AltClampRelative )
5+
, mAltBinding( AltBindCentroid )
6+
, mWidth( 2 )
7+
, mHeight( 0 )
8+
, mExtrusionHeight( 0 )
99
{
1010

1111
}
@@ -22,15 +22,15 @@ void QgsLine3DSymbol::writeXml( QDomElement &elem, const QgsReadWriteContext &co
2222
QDomDocument doc = elem.ownerDocument();
2323

2424
QDomElement elemDataProperties = doc.createElement( "data" );
25-
elemDataProperties.setAttribute( "alt-clamping", Utils::altClampingToString( altClamping ) );
26-
elemDataProperties.setAttribute( "alt-binding", Utils::altBindingToString( altBinding ) );
27-
elemDataProperties.setAttribute( "height", height );
28-
elemDataProperties.setAttribute( "extrusion-height", extrusionHeight );
29-
elemDataProperties.setAttribute( "width", width );
25+
elemDataProperties.setAttribute( "alt-clamping", Utils::altClampingToString( mAltClamping ) );
26+
elemDataProperties.setAttribute( "alt-binding", Utils::altBindingToString( mAltBinding ) );
27+
elemDataProperties.setAttribute( "height", mHeight );
28+
elemDataProperties.setAttribute( "extrusion-height", mExtrusionHeight );
29+
elemDataProperties.setAttribute( "width", mWidth );
3030
elem.appendChild( elemDataProperties );
3131

3232
QDomElement elemMaterial = doc.createElement( "material" );
33-
material.writeXml( elemMaterial );
33+
mMaterial.writeXml( elemMaterial );
3434
elem.appendChild( elemMaterial );
3535
}
3636

@@ -39,12 +39,12 @@ void QgsLine3DSymbol::readXml( const QDomElement &elem, const QgsReadWriteContex
3939
Q_UNUSED( context );
4040

4141
QDomElement elemDataProperties = elem.firstChildElement( "data" );
42-
altClamping = Utils::altClampingFromString( elemDataProperties.attribute( "alt-clamping" ) );
43-
altBinding = Utils::altBindingFromString( elemDataProperties.attribute( "alt-binding" ) );
44-
height = elemDataProperties.attribute( "height" ).toFloat();
45-
extrusionHeight = elemDataProperties.attribute( "extrusion-height" ).toFloat();
46-
width = elemDataProperties.attribute( "width" ).toFloat();
42+
mAltClamping = Utils::altClampingFromString( elemDataProperties.attribute( "alt-clamping" ) );
43+
mAltBinding = Utils::altBindingFromString( elemDataProperties.attribute( "alt-binding" ) );
44+
mHeight = elemDataProperties.attribute( "height" ).toFloat();
45+
mExtrusionHeight = elemDataProperties.attribute( "extrusion-height" ).toFloat();
46+
mWidth = elemDataProperties.attribute( "width" ).toFloat();
4747

4848
QDomElement elemMaterial = elem.firstChildElement( "material" );
49-
material.readXml( elemMaterial );
49+
mMaterial.readXml( elemMaterial );
5050
}

src/3d/symbols/qgsline3dsymbol.h

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,32 @@ class _3D_EXPORT QgsLine3DSymbol : public QgsAbstract3DSymbol
2020
void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const override;
2121
void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) override;
2222

23-
AltitudeClamping altClamping; //! how to handle altitude of vector features
24-
AltitudeBinding altBinding; //! how to handle clamping of vertices of individual features
23+
AltitudeClamping altitudeClamping() const { return mAltClamping; }
24+
void setAltitudeClamping( AltitudeClamping altClamping ) { mAltClamping = altClamping; }
2525

26-
float height; //!< Base height of polygons
27-
float extrusionHeight; //!< How much to extrude (0 means no walls)
28-
PhongMaterialSettings material; //!< Defines appearance of objects
26+
AltitudeBinding altitudeBinding() const { return mAltBinding; }
27+
void setAltitudeBinding( AltitudeBinding altBinding ) { mAltBinding = altBinding; }
2928

30-
float width; //!< Line width (horizontally)
29+
float width() const { return mWidth; }
30+
void setWidth( float width ) { mWidth = width; }
31+
32+
float height() const { return mHeight; }
33+
void setHeight( float height ) { mHeight = height; }
34+
35+
float extrusionHeight() const { return mExtrusionHeight; }
36+
void setExtrusionHeight( float extrusionHeight ) { mExtrusionHeight = extrusionHeight; }
37+
38+
PhongMaterialSettings material() const { return mMaterial; }
39+
void setMaterial( const PhongMaterialSettings &material ) { mMaterial = material; }
40+
41+
private:
42+
AltitudeClamping mAltClamping; //! how to handle altitude of vector features
43+
AltitudeBinding mAltBinding; //! how to handle clamping of vertices of individual features
44+
45+
float mWidth; //!< Line width (horizontally)
46+
float mHeight; //!< Base height of polygons
47+
float mExtrusionHeight; //!< How much to extrude (0 means no walls)
48+
PhongMaterialSettings mMaterial; //!< Defines appearance of objects
3149
};
3250

3351

src/3d/symbols/qgspoint3dsymbol.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,30 @@ void QgsPoint3DSymbol::writeXml( QDomElement &elem, const QgsReadWriteContext &c
1818
QDomDocument doc = elem.ownerDocument();
1919

2020
QDomElement elemMaterial = doc.createElement( "material" );
21-
material.writeXml( elemMaterial );
21+
mMaterial.writeXml( elemMaterial );
2222
elem.appendChild( elemMaterial );
2323

24-
QVariantMap shapePropertiesCopy( shapeProperties );
24+
QVariantMap shapePropertiesCopy( mShapeProperties );
2525
shapePropertiesCopy["model"] = QVariant( context.pathResolver().writePath( shapePropertiesCopy["model"].toString() ) );
2626

2727
QDomElement elemShapeProperties = doc.createElement( "shape-properties" );
2828
elemShapeProperties.appendChild( QgsXmlUtils::writeVariant( shapePropertiesCopy, doc ) );
2929
elem.appendChild( elemShapeProperties );
3030

3131
QDomElement elemTransform = doc.createElement( "transform" );
32-
elemTransform.setAttribute( "matrix", Utils::matrix4x4toString( transform ) );
32+
elemTransform.setAttribute( "matrix", Utils::matrix4x4toString( mTransform ) );
3333
elem.appendChild( elemTransform );
3434
}
3535

3636
void QgsPoint3DSymbol::readXml( const QDomElement &elem, const QgsReadWriteContext &context )
3737
{
3838
QDomElement elemMaterial = elem.firstChildElement( "material" );
39-
material.readXml( elemMaterial );
39+
mMaterial.readXml( elemMaterial );
4040

4141
QDomElement elemShapeProperties = elem.firstChildElement( "shape-properties" );
42-
shapeProperties = QgsXmlUtils::readVariant( elemShapeProperties.firstChildElement() ).toMap();
43-
shapeProperties["model"] = QVariant( context.pathResolver().readPath( shapeProperties["model"].toString() ) );
42+
mShapeProperties = QgsXmlUtils::readVariant( elemShapeProperties.firstChildElement() ).toMap();
43+
mShapeProperties["model"] = QVariant( context.pathResolver().readPath( mShapeProperties["model"].toString() ) );
4444

4545
QDomElement elemTransform = elem.firstChildElement( "transform" );
46-
transform = Utils::stringToMatrix4x4( elemTransform.attribute( "matrix" ) );
46+
mTransform = Utils::stringToMatrix4x4( elemTransform.attribute( "matrix" ) );
4747
}

0 commit comments

Comments
 (0)