24 #define ROOF_EXPRESSION \ 27 " cos( radians( eval( @qgis_25d_angle ) ) ) * eval( @qgis_25d_height )," \ 28 " sin( radians( eval( @qgis_25d_angle ) ) ) * eval( @qgis_25d_height )" \ 31 #define WALL_EXPRESSION \ 34 " segments_to_lines( $geometry )," \ 35 " cos( radians( eval( @qgis_25d_angle ) ) ) * eval( @qgis_25d_height )," \ 36 " sin( radians( eval( @qgis_25d_angle ) ) ) * eval( @qgis_25d_height )" \ 38 " 'distance( $geometry, translate( @map_extent_center, 1000 * @map_extent_width * cos( radians( @qgis_25d_angle + 180 ) ), 1000 * @map_extent_width * sin( radians( @qgis_25d_angle + 180 ) ) ))'," \ 42 #define ORDER_BY_EXPRESSION \ 46 " @map_extent_center," \ 47 " 1000 * @map_extent_width * cos( radians( @qgis_25d_angle + 180 ) )," \ 48 " 1000 * @map_extent_width * sin( radians( @qgis_25d_angle + 180 ) )" \ 52 #define WALL_SHADING_EXPRESSION \ 56 " 40 + 19 * abs( $pi - azimuth( " \ 57 " point_n( geometry_n($geometry, @geometry_part_num) , 1 ), " \ 58 " point_n( geometry_n($geometry, @geometry_part_num) , 2 )" \ 67 mSymbol->deleteSymbolLayer( 0 );
72 wallProperties.insert( QStringLiteral(
"geometryModifier" ),
WALL_EXPRESSION );
73 wallProperties.insert( QStringLiteral(
"symbolType" ), QStringLiteral(
"Fill" ) );
77 roofProperties.insert( QStringLiteral(
"geometryModifier" ),
ROOF_EXPRESSION );
78 roofProperties.insert( QStringLiteral(
"symbolType" ), QStringLiteral(
"Fill" ) );
83 mSymbol->appendSymbolLayer( floor );
84 mSymbol->appendSymbolLayer( walls );
85 mSymbol->appendSymbolLayer( roof );
117 rendererElem.setAttribute( QStringLiteral(
"type" ), QStringLiteral(
"25dRenderer" ) );
121 rendererElem.appendChild( symbolElem );
130 QDomNodeList
symbols = element.elementsByTagName( QStringLiteral(
"symbol" ) );
131 if ( symbols.size() )
143 mSymbol->startRender( context, fields );
150 mSymbol->stopRender( context );
155 return mSymbol->usedAttributes( context );
161 c->mSymbol.reset( mSymbol->clone() );
169 return mSymbol.get();
176 lst.append( mSymbol.get() );
182 return static_cast<QgsFillSymbolLayer *
>( mSymbol->symbolLayer( 2 )->subSymbol()->symbolLayer( 0 ) );
187 return static_cast<QgsFillSymbolLayer *
>( mSymbol->symbolLayer( 1 )->subSymbol()->symbolLayer( 0 ) );
198 return glowEffect()->
enabled();
208 return glowEffect()->
color();
213 glowEffect()->
setColor( shadowColor );
218 return glowEffect()->
spread();
260 if ( renderer->
type() == QLatin1String(
"25dRenderer" ) )
The class is used as a container of context for various read/write operations on other objects...
void stopRender(QgsRenderContext &context) override
Must be called when a render cycle has finished, to allow the renderer to clean up.
void setEnabled(const bool enabled)
Sets whether the effect is enabled.
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) override
store renderer info to XML element
void setLocked(bool locked)
void startRender(QgsRenderContext &context, const QgsFields &fields) override
Must be called when a new render cycle is started.
QColor wallColor() const
Get the wall color.
QgsSymbolList symbols(QgsRenderContext &context) override
Returns list of symbols used by the renderer.
QgsFeatureRequest::OrderBy orderBy() const
Get the order in which features shall be processed by this renderer.
QgsFeatureRenderer * clone() const override
Create a deep copy of this renderer.
static QgsProperty fromExpression(const QString &expression, bool isActive=true)
Returns a new ExpressionBasedProperty created from the specified expression.
Container of fields for a vector layer.
#define RENDERER_TAG_NAME
#define WALL_SHADING_EXPRESSION
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
static QgsSymbol * loadSymbol(const QDomElement &element, const QgsReadWriteContext &context)
Attempts to load a symbol from a DOM element.
QMap< QString, QString > QgsStringMap
void setBlurLevel(const int level)
Sets blur level (strength) for the glow.
bool shadowEnabled() const
Is the shadow enabled.
QList< QgsSymbol * > QgsSymbolList
void setShadowSpread(double shadowSpread)
Set the shadow's spread distance in map units.
QColor shadowColor() const
Get the shadow's color.
QgsPaintEffect * effect(int index) const
Returns a pointer to the effect at a specified index within the stack.
void setSpreadUnit(const QgsUnitTypes::RenderUnit unit)
Sets the units used for the glow spread distance.
void setActive(bool active)
Sets whether the property is currently active.
static Qgs25DRenderer * convertFromRenderer(QgsFeatureRenderer *renderer)
Try to convert from an existing renderer.
#define ORDER_BY_EXPRESSION
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the symbol layer's property collection, used for data defined overrides...
A paint effect which consists of a stack of other chained paint effects.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the layer.
bool enabled() const
Returns whether the effect is enabled.
void setSpread(const double spread)
Sets the spread distance for drawing the glow effect.
void appendEffect(QgsPaintEffect *effect)
Appends an effect to the end of the stack.
virtual void setStrokeColor(const QColor &color)
Set stroke color.
void setOrderBy(const QgsFeatureRequest::OrderBy &orderBy)
Define the order in which features shall be processed by this renderer.
A paint effect which draws a glow outside of a picture.
The OrderByClause class represents an order by clause for a QgsFeatureRequest.
QgsSymbol * symbolForFeature(QgsFeature &feature, QgsRenderContext &context) override
To be overridden.
QSet< QString > usedAttributes(const QgsRenderContext &context) const override
Return a list of attributes required by this renderer.
Contains information about the context of a rendering operation.
virtual void setFillColor(const QColor &color)
Set fill color.
double spread() const
Returns the spread distance used for drawing the glow effect.
static QgsFeatureRenderer * create(QDomElement &element, const QgsReadWriteContext &context)
Create a new 2.5D renderer from XML.
static QgsSymbolLayer * create(const QgsStringMap &properties=QgsStringMap())
static QgsSymbolLayer * create(const QgsStringMap &properties)
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
void setRoofColor(const QColor &roofColor)
Set the roof color.
bool wallShadingEnabled() const
Get wall shading enabled.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
void setShadowEnabled(bool value)
Enable or disable the shadow.
void setWallShadingEnabled(bool enabled)
Set wall shading enabled.
static QDomElement saveSymbol(const QString &symbolName, QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
QColor roofColor() const
Get the roof color.
double shadowSpread() const
Get the shadow's spread distance in map units.
virtual QColor fillColor() const
Get fill color.
void setShadowColor(const QColor &shadowColor)
Set the shadow's color.
void setColor(const QColor &color)
Sets the color for the glow.
void setWallColor(const QColor &wallColor)
Set the wall color.
void setOrderByEnabled(bool enabled)
Sets whether custom ordering should be applied before features are processed by this renderer...
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
bool isActive() const
Returns whether the property is currently active.
QgsProperty property(int key) const override
Returns a matching property from the collection, if one exists.
virtual void setDataDefinedProperty(Property key, const QgsProperty &property)
Sets a data defined property for the layer.
Represents a list of OrderByClauses, with the most important first and the least important last...
QColor color() const
Returns the color for the glow.