-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgsline3dsymbol.h
115 lines (94 loc) · 5.02 KB
/
qgsline3dsymbol.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
/***************************************************************************
qgsline3dsymbol.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 QGSLINE3DSYMBOL_H
#define QGSLINE3DSYMBOL_H
#include "qgis_3d.h"
#include "qgsabstract3dsymbol.h"
#include "qgs3dtypes.h"
class QgsAbstractMaterialSettings;
/**
* \ingroup 3d
* 3D symbol that draws linestring geometries as planar polygons (created from lines using a buffer with given thickness).
*
* \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 QgsLine3DSymbol : public QgsAbstract3DSymbol SIP_NODEFAULTCTORS
{
public:
//! Constructor for QgsLine3DSymbol
QgsLine3DSymbol();
~QgsLine3DSymbol() override;
/**
* Creates a new QgsLine3DSymbol.
*
* Caller takes ownership of the returned symbol.
*/
static QgsAbstract3DSymbol *create() SIP_FACTORY;
QString type() const override { return "line"; }
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 method that determines how altitude is bound to individual vertices
Qgs3DTypes::AltitudeBinding altitudeBinding() const { return mAltBinding; }
//! Sets method that determines how altitude is bound to individual vertices
void setAltitudeBinding( Qgs3DTypes::AltitudeBinding altBinding ) { mAltBinding = altBinding; }
//! Returns width of the line symbol (in map units)
float width() const { return mWidth; }
//! Sets width of the line symbol (in map units)
void setWidth( float width ) { mWidth = width; }
//! Returns height (altitude) of the symbol (in map units)
float height() const { return mHeight; }
//! Sets height (altitude) of the symbol (in map units)
void setHeight( float height ) { mHeight = height; }
//! Returns extrusion height (in map units)
float extrusionHeight() const { return mExtrusionHeight; }
//! Sets extrusion height (in map units)
void setExtrusionHeight( float extrusionHeight ) { mExtrusionHeight = extrusionHeight; }
//! Returns whether the renderer will render data with simple lines (otherwise it uses buffer)
bool renderAsSimpleLines() const { return mRenderAsSimpleLines; }
//! Sets whether the renderer will render data with simple lines (otherwise it uses buffer)
void setRenderAsSimpleLines( bool enabled ) { mRenderAsSimpleLines = enabled; }
//! Returns material used for shading of the symbol
QgsAbstractMaterialSettings *material() const;
/**
* Sets the \a material settings used for shading of the symbol.
*
* Ownership of \a material is transferred to the symbol.
*/
void setMaterial( QgsAbstractMaterialSettings *material SIP_TRANSFER );
/**
* Exports the geometries contained withing the hierarchy of entity.
* Returns whether any objects were exported
*/
bool exportGeometries( Qgs3DSceneExporter *exporter, Qt3DCore::QEntity *entity, const QString &objectNamePrefix ) const override;
private:
//! how to handle altitude of vector features
Qgs3DTypes::AltitudeClamping mAltClamping = Qgs3DTypes::AltClampRelative;
//! how to handle clamping of vertices of individual features
Qgs3DTypes::AltitudeBinding mAltBinding = Qgs3DTypes::AltBindCentroid;
float mWidth = 2.0f; //!< Line width (horizontally)
float mHeight = 0.0f; //!< Base height of polygons
float mExtrusionHeight = 0.0f; //!< How much to extrude (0 means no walls)
bool mRenderAsSimpleLines = false; //!< Whether to render data with simple lines (otherwise it uses buffer)
std::unique_ptr< QgsAbstractMaterialSettings > mMaterial; //!< Defines appearance of objects
};
#endif // QGSLINE3DSYMBOL_H