-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgspoint3dsymbol.h
121 lines (100 loc) · 4.78 KB
/
qgspoint3dsymbol.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/***************************************************************************
qgspoint3dsymbol.h
--------------------------------------
Date : July 2017
Copyright : (C) 2017 by Martin Dobias
Email : wonder dot sk at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPOINT3DSYMBOL_H
#define QGSPOINT3DSYMBOL_H
#include "qgis_3d.h"
#include "qgsabstract3dsymbol.h"
#include "qgsphongmaterialsettings.h"
#include "qgs3dtypes.h"
#include "qgssymbol.h"
#include <QMatrix4x4>
/**
* \ingroup 3d
* 3D symbol that draws point geometries as 3D objects using one of the predefined shapes.
*
* \warning This is not considered stable API, and may change in future QGIS releases. It is
* exposed to the Python bindings as a tech preview only.
*
* \since QGIS 3.0
*/
class _3D_EXPORT QgsPoint3DSymbol : public QgsAbstract3DSymbol
{
public:
//! Constructor for QgsPoint3DSymbol with default QgsMarkerSymbol as the billboardSymbol
QgsPoint3DSymbol();
//! Copy Constructor for QgsPoint3DSymbol
QgsPoint3DSymbol( const QgsPoint3DSymbol &other );
QString type() const override { return "point"; }
QgsAbstract3DSymbol *clone() const override SIP_FACTORY;
void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const override;
void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) override;
//! Returns method that determines altitude (whether to clamp to feature to terrain)
Qgs3DTypes::AltitudeClamping altitudeClamping() const { return mAltClamping; }
//! Sets method that determines altitude (whether to clamp to feature to terrain)
void setAltitudeClamping( Qgs3DTypes::AltitudeClamping altClamping ) { mAltClamping = altClamping; }
//! Returns material used for shading of the symbol
QgsPhongMaterialSettings material() const { return mMaterial; }
//! Sets material used for shading of the symbol
void setMaterial( const QgsPhongMaterialSettings &material ) { mMaterial = material; }
//! 3D shape types supported by the symbol
enum Shape
{
Cylinder,
Sphere,
Cone,
Cube,
Torus,
Plane,
ExtrudedText, //!< Supported in Qt 5.9+
Model,
Billboard,
};
//! Returns shape enum value from a string
static Shape shapeFromString( const QString &shape );
//! Returns string from a shape enum value
static QString shapeToString( Shape shape );
//! Returns 3D shape for points
Shape shape() const { return mShape; }
//! Sets 3D shape for points
void setShape( Shape shape ) { mShape = shape; }
//! Returns a key-value dictionary of point shape properties
QVariantMap shapeProperties() const { return mShapeProperties; }
//! Sets a key-value dictionary of point shape properties
void setShapeProperties( const QVariantMap &properties ) { mShapeProperties = properties; }
//! Returns a symbol for billboard
QgsMarkerSymbol *billboardSymbol() const { return mBillboardSymbol.get(); }
//! Set symbol for billboard and the ownership is transferred
void setBillboardSymbol( QgsMarkerSymbol *symbol ) { mBillboardSymbol.reset( symbol ); }
//! Returns transform for individual objects represented by the symbol
QMatrix4x4 transform() const { return mTransform; }
//! Sets transform for individual objects represented by the symbol
void setTransform( const QMatrix4x4 &transform ) { mTransform = transform; }
//! Returns transform for billboards
QMatrix4x4 billboardTransform() const;
private:
//! how to handle altitude of vector features
Qgs3DTypes::AltitudeClamping mAltClamping = Qgs3DTypes::AltClampRelative;
QgsPhongMaterialSettings mMaterial; //!< Defines appearance of objects
Shape mShape = Cylinder; //!< What kind of shape to use
QVariantMap mShapeProperties; //!< Key-value dictionary of shape's properties (different keys for each shape)
QMatrix4x4 mTransform; //!< Transform of individual instanced models
std::unique_ptr<QgsMarkerSymbol> mBillboardSymbol;
#ifdef SIP_RUN
QgsPoint3DSymbol &operator=( const QgsPoint3DSymbol & );
#else
QgsPoint3DSymbol &operator=( const QgsPoint3DSymbol & ) = delete;
#endif
};
#endif // QGSPOINT3DSYMBOL_H