QGIS API Documentation 3.40.0-Bratislava (b56115d8743)
Loading...
Searching...
No Matches
qgsvectorlayer3drenderer.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectorlayer3drenderer.cpp
3 --------------------------------------
4 Date : July 2017
5 Copyright : (C) 2017 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgs3dutils.h"
20
21#include "qgsvectorlayer.h"
22#include "qgsxmlutils.h"
23#include "qgsapplication.h"
24#include "qgs3dsymbolregistry.h"
25
26
31
33{
35 r->readXml( elem, context );
36 return r;
37}
38
39
40// ---------
41
42
47
49{
50 QgsVectorLayer3DRenderer *r = new QgsVectorLayer3DRenderer( mSymbol ? mSymbol->clone() : nullptr );
52 return r;
53}
54
56{
57 mSymbol.reset( symbol );
58}
59
61{
62 return mSymbol.get();
63}
64
66{
67 QgsVectorLayer *vl = layer();
68
69 if ( !mSymbol || !vl )
70 return nullptr;
71
72 // we start with a maximal z range because we can't know this upfront. There's too many
73 // factors to consider eg vertex z data, terrain heights, data defined offsets and extrusion heights,...
74 // This range will be refined after populating the nodes to the actual z range of the generated chunks nodes.
75 // Assuming the vertical height is in meter, then it's extremely unlikely that a real vertical
76 // height will exceed this amount!
77 constexpr double MINIMUM_VECTOR_Z_ESTIMATE = -100000;
78 constexpr double MAXIMUM_VECTOR_Z_ESTIMATE = 100000;
79 return new QgsVectorLayerChunkedEntity( map, vl, MINIMUM_VECTOR_Z_ESTIMATE, MAXIMUM_VECTOR_Z_ESTIMATE, tilingSettings(), mSymbol.get() );
80}
81
82void QgsVectorLayer3DRenderer::writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const
83{
84 QDomDocument doc = elem.ownerDocument();
85
86 writeXmlBaseProperties( elem, context );
87
88 QDomElement elemSymbol = doc.createElement( QStringLiteral( "symbol" ) );
89 if ( mSymbol )
90 {
91 elemSymbol.setAttribute( QStringLiteral( "type" ), mSymbol->type() );
92 mSymbol->writeXml( elemSymbol, context );
93 }
94 elem.appendChild( elemSymbol );
95}
96
97void QgsVectorLayer3DRenderer::readXml( const QDomElement &elem, const QgsReadWriteContext &context )
98{
99 readXmlBaseProperties( elem, context );
100
101 const QDomElement elemSymbol = elem.firstChildElement( QStringLiteral( "symbol" ) );
102 const QString symbolType = elemSymbol.attribute( QStringLiteral( "type" ) );
103 mSymbol.reset( QgsApplication::symbol3DRegistry()->createSymbol( symbolType ) );
104 if ( mSymbol )
105 mSymbol->readXml( elemSymbol, context );
106}
Base metadata class for 3D renderers.
Base class for all renderers that may to participate in 3D view.
QgsVectorLayer3DTilingSettings tilingSettings() const
Returns tiling settings of the renderer.
void writeXmlBaseProperties(QDomElement &elem, const QgsReadWriteContext &context) const
Writes common properties of this object to DOM element.
void readXmlBaseProperties(const QDomElement &elem, const QgsReadWriteContext &context)
Reads common properties of this object from DOM element.
void copyBaseProperties(QgsAbstractVectorLayer3DRenderer *r) const
Copies common properties of this object to another object.
QgsVectorLayer * layer() const
Returns vector layer associated with the renderer.
static Qgs3DSymbolRegistry * symbol3DRegistry()
Returns registry of available 3D symbols.
The class is used as a container of context for various read/write operations on other objects.
QgsAbstract3DRenderer * createRenderer(QDomElement &elem, const QgsReadWriteContext &context) override
Creates an instance of a 3D renderer based on a DOM element with renderer configuration.
3D renderer that renders all features of a vector layer with the same 3D symbol.
void setSymbol(QgsAbstract3DSymbol *symbol)
Sets 3D symbol associated with the renderer. Takes ownership of the symbol.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
Reads renderer's properties from given XML element.
Qt3DCore::QEntity * createEntity(Qgs3DMapSettings *map) const override
Returns a 3D entity that will be used to show renderer's data in 3D scene.
QgsVectorLayer3DRenderer * clone() const override
Returns a cloned instance.
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
Writes renderer's properties to given XML element.
const QgsAbstract3DSymbol * symbol() const
Returns 3D symbol associated with the renderer.
QgsVectorLayer3DRenderer(QgsAbstract3DSymbol *s=nullptr)
Takes ownership of the symbol object.
Represents a vector layer which manages a vector based data sets.