LuciadCPillar 2026.1
Loading...
Searching...
No Matches
styles

Support for styling data on a Map. More...

Topics

 complexstrokes
 Support for complex stroke linestyles and the patterns used to make them.
 expressions
 Support for expressions for styling data on a Map.

Classes

class  luciad::BloomStyle
 This class contains styling properties that determine how bloom is applied to individual shapes and objects. More...
class  luciad::FillStyle
 This class contains styling properties to determine how an area is filled. More...
class  luciad::GaussianSplatsStyle
 This class contains styling properties to determine how 3D Gaussian splats are painted. More...
class  luciad::LineOfSightStyle
 Style for line-of-sight (LOS) features. More...
class  luciad::LineStyle
 This class contains styling properties to determine how a line is painted. More...
class  luciad::MeshStyle
 This class contains styling properties to determine how a mesh is painted. More...
class  luciad::OnPathLabelStyle
 This class contains styling properties to determine how a label is placed on a path. More...
class  luciad::ParameterizedFillStyle
 This class contains styling properties to determine how a parameterized area is filled. More...
class  luciad::ParameterizedLineStyle
 This class contains styling properties to determine how a parameterized line is drawn. More...
class  luciad::PbrShadingModel
 Shading model that applies physically based rendering (PBR) to a mesh. More...
class  luciad::PinStyle
 This class contains styling properties that can be used to configure pins for labels, see FeatureCanvas::LabelDrawCommand::pinStyle. More...
class  luciad::PointCloudStyle
 A class representing how point cloud data should be styled. More...
class  luciad::ProjectedImageryStyle
 Style for projected imagery: single images, video, and panoramas. More...
class  luciad::RasterStyle
 Style for rasters. More...
class  luciad::ShadingModel
 Base class for a shading model that determines how an object, such as a mesh or 3D icon, is shaded. More...
class  luciad::SimpleShadingModel
 Shading model that applies simple, non-physically-based lighting to a mesh. More...

Enumerations

enum class  luciad::FacetCullingType { luciad::FacetCullingType::NoCulling , luciad::FacetCullingType::BackfaceCulling , luciad::FacetCullingType::FrontfaceCulling , luciad::FacetCullingType::BasedOnData }
 An enumeration to describe facet culling used for meshes. More...
enum class  luciad::OcclusionMode { luciad::OcclusionMode::VisibleOnly , luciad::OcclusionMode::AlwaysVisible , luciad::OcclusionMode::OccludedOnly }
 An enumeration describing when an object should be painted in 3D in relation to other 3D data. More...
enum class  luciad::PathLabelPosition {
  luciad::PathLabelPosition::Above , luciad::PathLabelPosition::Port , luciad::PathLabelPosition::Below , luciad::PathLabelPosition::Starboard ,
  luciad::PathLabelPosition::Center
}
 An enumeration describing the position of a label wrt a path. More...
enum class  luciad::ProjectedImageryTarget { luciad::ProjectedImageryTarget::AllSurfaces , luciad::ProjectedImageryTarget::ClosestSurface }
 Determines onto which surfaces projected imagery is projected. More...

Detailed Description

Support for styling data on a Map.

Styles are typically used to style feature data.

Enumeration Type Documentation

◆ FacetCullingType

enum class luciad::FacetCullingType
strong

An enumeration to describe facet culling used for meshes.

luciad/layers/styles/FacetCullingType.h

Since
2022.0
Enumerator
NoCulling 

Indicates that facet should not be culled.

This will paint a mesh with both its back-face and front-face.

BackfaceCulling 

Indicates that the back-face of a triangle should not be painted.

This facet culling type can improve performance over FacetCullingType::NoCulling, and is recommended if you have data with correctly oriented normals.

Back-face culling can have functional benefits as well. If you have a 3D scan of the interior of a building, you can use backface culling to see the interior while your camera is located on the outside of the mesh.

FrontfaceCulling 

Indicates that the front-face of a triangle should not be painted.

This facet culling type can improve performance over FacetCullingType::NoCulling.

It is not very common to cull the front-face of the triangles of your dataset, as it will make your dataset invisible from the intended viewing angle.

This facet culling mode can be used in very specialized applications, or in the case when your dataset has inverted normals.

BasedOnData 

Indicates that you know or assume that the data specifies the ideal face culling mode.

If the data does not specify anything, then FacetCullingType::NoCulling will be used as the fallback mode and both faces will be shown.

Use this face culling mode in these cases:

  • You are not sure what the ideal culling mode is, so you want FacetCullingType::NoCulling as the default mode unless there is a better option.
  • The data set uses GLTF version 2.0 which explicitly defines face culling.
  • The data set has a mix of double-sided and single-sided materials.

If the culling behavior of your data is not as you expected, you can still override with one of the other options.

Since
2023.1

◆ OcclusionMode

enum class luciad::OcclusionMode
strong

An enumeration describing when an object should be painted in 3D in relation to other 3D data.

luciad/layers/styles/OcclusionMode.h

See FeatureCanvas::IconDrawCommand::occlusionMode, FeatureCanvas::TextDrawCommand::occlusionMode and FeatureCanvas::GeometryDrawCommand::occlusionMode for details and limitations.

Note that when the occlusion mode is not OcclusionMode::VisibleOnly, features won't be queryable.

Since
2024.0
Enumerator
VisibleOnly 

Show only the part of a shape that is not obscured by other 3D data.

This is the default.

AlwaysVisible 

Show the entire shape even if behind other 3D data.

The shape appears in front of other objects.

OccludedOnly 

Shows only the part of the shape that is behind other 3D data.

You typically use this to display obscured shapes in combination with another style that uses OcclusionMode::VisibleOnly mode.

◆ PathLabelPosition

enum class luciad::PathLabelPosition
strong

An enumeration describing the position of a label wrt a path.

luciad/layers/styles/PathLabelPosition.h

Since
2020.2
Enumerator
Above 

Vertically align the position of the label such that it is always positioned above the path.

Port 

Align the position of the label such that it is always at the left side of the path when the path is followed from start to end.

Since
2021.0
Below 

Vertically align the position of the label such that it is always positioned below the path.

Starboard 

Align the position of the label such that it is always at the right side of the path when the path is followed from start to end.

Since
2021.0
Center 

Vertically align the position of the label such that it is positioned on the path.

◆ ProjectedImageryTarget

enum class luciad::ProjectedImageryTarget
strong

Determines onto which surfaces projected imagery is projected.

luciad/layers/styles/ProjectedImageryTarget.h

The two options are ProjectedImageryTarget::AllSurfaces and ProjectedImageryTarget::ClosestSurface.

The difference between these is most apparent when the camera is not at a projection position, when transitioning between 2 panoramas or when freely moving the camera for example. In these cases, the camera typically can see things that are not visible in the projection position and thus the imagery does not cover these areas.

When projecting on all surfaces, the resulting view may be somewhat confusing because walls and objects do not block the projection.

When projecting on the closest surface, the geometries in the vicinity of the projection are taken into account. This means that the projection only covers what is actually visible for that projection. For example, if there is a wall in the imagery and that wall is also in the loaded geometry data, the projection will cover the wall but nothing behind the wall. The images below illustrate the difference.

Projection target AllSurfaces
Projection target ClosestSurface

Using ProjectedImageryTarget::ClosestSurface, the projections are painted in 2 distinct steps. This has a consequence for the opacity styling.

  1. First, a base layer is painted. In this layer, when certain areas are in the line of sight of multiple projections, the images of the closest projection are used. So, a single projection is used for every projected pixel but different pixels may be projected from different projections. The base layer is typically used when showing overviews of multiple panoramas or when transitioning between 2 panoramas.
    You can adjust the opacity of the base layer with the baseOpacity property of the style. By default this is set to 0 so only the layer explained next, in item 2, is visible. This makes the default behavior of ProjectedImageryTarget::ClosestSurface more consistent with the behavior of ProjectedImageryTarget::AllSurfaces.
  2. On top of the base layer, a layer is painted in which all the projections in the line of sight are used. If, for a certain pixel, multiple projections are in the line of sight, they are painted on top of each other. You can use the opacity property of the style to blend these projections however you like.

Note that:

Since
2026.1
Enumerator
AllSurfaces 

Project the image onto every surface intersected by the projection frustum.

Surfaces that are further away from the projector are also projected, even when other surfaces are between them and the projector.

ClosestSurface 

Project the image only onto the surface closest to the camera along each projected ray.

Images are not projected on surfaces that are occluded by other surfaces (from the camera's point of view).