This article is relevant for layers constructed with the |
You can customize the styling of Lightspeed layers constructed with the
TLsp3DTileLayerBuilder
by specifying a
TLspPointCloudStyle
on the builder.
The TLspPointCloudStyle
uses the ILcdExpression
API for efficient, data-dependent customization of the size, color, opacity, and visibility of points.
See the
Introduction to data-driven styling
for more information about the ILcdExpression
API.
In this example, we also make use of the TLspEyeDomeLightingSettings
API in the point cloud style, to improve depth perception. Eye-dome lighting helps accentuate the shapes of objects by shading
their outlines.
//In this example we use an OGC 3D Tiles point cloud model, but you can do the same for // other point cloud formats which use the TLsp3DTileLayerBuilder for visualization TLcdOGC3DTilesModelDecoder decoder = new TLcdOGC3DTilesModelDecoder(); String sourceName = "https://sampleservices.luciad.com/ogc/3dtiles/marseille-lidar/tileset.json"; ILcdModel model = decoder.decode(sourceName); // Extract the data type for the point cloud data. // See the class javadoc of TLcdOGC3DTilesModelDecoder for more info TLcdDataType domainObjectType = ((ILcdDataModelDescriptor) model.getModelDescriptor()) .getModelTypes().iterator().next(); TLcdDataProperty classificationProperty = domainObjectType.getProperty("Classification"); // Create an expression to filter points based on the "Classification" attribute ILcdExpression<Boolean> visibilityExpression = eq(attribute(Byte.class, classificationProperty), constant((byte) 3)); // Create eye-dome lighting settings that will apply a red shade to the view to enhance depth perception TLspEyeDomeLightingSettings eyeDomeLighting = TLspEyeDomeLightingSettings.newBuilder() .color(Color.RED) .build(); // Create a point cloud style that // - uses a fixed point size of 8 pixels // - uses the visibilityExpression and eyeDomeLighting created earlier TLspPointCloudStyle pointCloudStyle = TLspPointCloudStyle .newBuilder() .scalingMode(TLspPointCloudStyle.ScalingMode.PIXEL_SIZE) .scale(constant(8f)) .visibility(visibilityExpression) .eyeDomeLighting(eyeDomeLighting) .build(); // Specify the style on the builder TLspLayer layer = TLsp3DTileLayerBuilder.newBuilder() .model(model) .bodyStyles(TLspPaintState.REGULAR, pointCloudStyle) .build();