Class TLspShapePainter
- All Implemented Interfaces:
ILspPaintGroupsChangeListener
,ILspEditableStyledPainter
,ILspPainter
ILspShapeDiscretizer
is used to create a discretized representation of the shape's geometry. By default,
TLspShapeDiscretizer
is used. By consequence, this painter supports all shapes supported by this discretizer. Adding
support for additional shape types will usually be done by extending the shape discretizer, and
calling setShapeDiscretizer
.
The geometry that is painted for a given style is retrieved using the corresponding ALspStyleTargetProvider
. If a style target provider is not available, the object will be passed
to the shape discretizer directly, which supports most ILcdShape
implementations
by default.
Geo-referenced meshes are not passed to the discretizer, as the meshes are assumed to be discretized.
Styling of the painted shapes and meshes is performed through the set ILspStyler
. Separate
stylers can be configured depending on the TLspPaintState
. This allows different styles for, regular, selected, or edited objects.
Note that you should avoid using this painter directly, have a look at TLspShapeLayerBuilder
instead.
In all cases, the painting is conditional based on the presence of an appropriate
style in the output of the ILspStyler
. The following styles are supported:
TLspFillStyle
: can be applied to closed shapes such as circles or polygonsTLspLineStyle
: can be applied to closed and non-closed shapes such as arcs and polylinesTLspLineStyle
: can be applied to polylinesTLspComplexStrokedLineStyle
: can be applied to closed and non-closed shapes such as arcs and polylinesTLspWorldSizedLineStyle
: can be applied to closed and non-closed shapes such as arcs and polylinesTLspIconStyle
: can be applied to point shapes and point listsTLspIconStyle
: can be applied to point shapes and point listsTLsp3DIconStyle
: can be applied to point shapes and point listsTLspVerticalLineStyle
: can be applied to point shapes and point listsTLsp3DMeshStyle
: can be applied to geo-referenced meshes
TLspFillStyle
and TLsp3DMeshStyle
. You can for instance specify
two icon styles for a point, in which case both icons will be shown on top of each other.
Visualizing density plots
This painter can also be used to visualize density plots.
This is done by letting the styler submit TLspDensityLineStyle
, TLspDensityLineStyle
or TLspDensityPointStyle
instances.
The colors used for the density plot can be controlled by also passing a TLspIndexColorModelStyle
instance.
Limitations
- Selection and editing is not supported for density plots. For those paint states, the painter won't paint anything.
- Only one elevation mode is supported for the whole density plot. Using a mix of different elevation modes in the density styles will have no effect.
-
Only one
TLspIndexColorModelStyle
can be used for the whole density plot. Submitting multiple ones in the styler will have no effect. Note that the sameTLspIndexColorModelStyle
must be submitted for each object. -
Mixing
ALspDensityStyle
instances with regular styles is not supported and will throw exceptions. When painting density plots, the styler should only submitALspDensityStyle
instances and optionally a singleTLspIndexColorModelStyle
.
- Since:
- 2012.0
-
Nested Class Summary
Nested classes/interfaces inherited from interface com.luciad.view.lightspeed.layer.paintgroup.ILspPaintGroupsChangeListener
ILspPaintGroupsChangeListener.Callback
-
Constructor Summary
ConstructorDescriptionConstructs a shape painter that will be initialized with default styling that allows basic visualization of most geometries supported by this painter.TLspShapePainter
(ILspStyler aDefaultStyler) Creates a new shape painter using the given styler for default styles. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addPropertyChangeListener
(PropertyChangeListener aListener) Adds aPropertyChangeListener
to the list of listeners that must be notified when any of the properties of thisILspPainter
changes.void
commitChanges
(Object aEventId) Called when the changes for a specified event should be committed.getHints()
Returns the current set of performance/quality hints used by the painter.Returns the minimum required OpenGL profile that a view must support in order to be compatible with this painter.Gets the shape discretizer.getStyler
(TLspPaintState aPaintState) Returns the styler used by this painter for the givenPaintState
.paintObjects
(ILcdGLDrawable aGLDrawable, List<TLspPaintGroup> aPaintGroups, TLspPaintPass aPass, TLspContext aContext) Paints the specified groups of objects into a view.void
prepareChanges
(List<TLspPaintGroupsChangedEvent> aEvents, Object aEventId, ILspPaintGroupsChangeListener.Callback aCallback) Called when the paint groups will change.<T> boolean
query
(List<TLspPaintGroup> aPaintGroups, ALspPaintQuery<T> aQuery, TLspPaintRepresentationState aPaintRepresentationState, TLspContext aContext) Retrieves a set of domain objects and data based on the parameters given by the query.void
registerLayer
(ILspInteractivePaintableLayer aLayer, TLspPaintRepresentation aPaintRepresentation) Registers a layer with this painter.void
Removes aPropertyChangeListener
from the list of listeners.void
setHints
(TLspShapePaintingHints aHints) Sets the performance/quality hints to be used by the painter.void
setShapeDiscretizer
(ILspShapeDiscretizer aShapeDiscretizer) Sets the shape discretizer.void
setStyler
(TLspPaintState aPaintState, ILspStyler aStyler) Sets the styler used by this object for the givenPaintState
.toString()
void
unregisterLayer
(ILspInteractivePaintableLayer aLayer, TLspPaintRepresentation aPaintRepresentation) Unregisters a layer from this painter.
-
Constructor Details
-
TLspShapePainter
Creates a new shape painter using the given styler for default styles.- Parameters:
aDefaultStyler
- The styler that will be used forPaintState.DEFAULT
.
-
TLspShapePainter
public TLspShapePainter()Constructs a shape painter that will be initialized with default styling that allows basic visualization of most geometries supported by this painter. Default styling is available for surfaces, curves and points, and is defined by the defaults in the styles themselves. AnILspCustomizableStyler
is used, so the default styles can be enabled/disabled or replaced.- See Also:
-
-
Method Details
-
getStyler
Description copied from interface:ILspPainter
Returns the styler used by this painter for the givenPaintState
. Can return null in case the painter does not use or expose a styler.- Specified by:
getStyler
in interfaceILspPainter
- Parameters:
aPaintState
- the paint state for which a styler is requested- Returns:
- the styler used by this object, or null.
-
registerLayer
public void registerLayer(ILspInteractivePaintableLayer aLayer, TLspPaintRepresentation aPaintRepresentation) Description copied from interface:ILspPainter
Registers a layer with this painter. This notifies the painter that it is going to be used in combination with the given layer, for the given paint representation. This allows it to implement setup code if necessary, or to keep track of all layers on which it is set. Layers registered with this method must be unregistered when the layer stops using this painter, usingILspPainter.unregisterLayer(ILspInteractivePaintableLayer, com.luciad.view.lightspeed.layer.TLspPaintRepresentation)
.- Specified by:
registerLayer
in interfaceILspPainter
- Parameters:
aLayer
- A layer with which this painter will be used.aPaintRepresentation
- The paint representation for which this painter will be used.
-
unregisterLayer
public void unregisterLayer(ILspInteractivePaintableLayer aLayer, TLspPaintRepresentation aPaintRepresentation) Description copied from interface:ILspPainter
Unregisters a layer from this painter. This notifies the painter that it will no longer be used in combination with the given layer, for the given paint representation. This allows it to implement cleanup code if necessary. Layers unregistered with this method must have been registered before calling this method with the methodILspPainter.registerLayer(ILspInteractivePaintableLayer, com.luciad.view.lightspeed.layer.TLspPaintRepresentation)
.- Specified by:
unregisterLayer
in interfaceILspPainter
- Parameters:
aLayer
- A layer that needs to be unregisteredaPaintRepresentation
- The paint representation for which this painter was used with aLayer
-
setStyler
Description copied from interface:ILspEditableStyledPainter
Sets the styler used by this object for the givenPaintState
.- Specified by:
setStyler
in interfaceILspEditableStyledPainter
- Parameters:
aPaintState
- the paint state for which to set a styleraStyler
- the new styler for the painter
-
addPropertyChangeListener
Description copied from interface:ILspPainter
Adds aPropertyChangeListener
to the list of listeners that must be notified when any of the properties of thisILspPainter
changes.- Specified by:
addPropertyChangeListener
in interfaceILspPainter
- Parameters:
aListener
- the listener that from now on will be notified of all changes to properties of this painter
-
removePropertyChangeListener
Description copied from interface:ILspPainter
Removes aPropertyChangeListener
from the list of listeners. This listener will no longer be notified of any changes to the properties of thisILspPainter
- Specified by:
removePropertyChangeListener
in interfaceILspPainter
- Parameters:
aListener
- the listener that no longer will be notified of any changes to properties of this painter
-
paintObjects
public TLspPaintProgress paintObjects(ILcdGLDrawable aGLDrawable, List<TLspPaintGroup> aPaintGroups, TLspPaintPass aPass, TLspContext aContext) Description copied from interface:ILspPainter
Paints the specified groups of objects into a view. The objects are partitioned into
TLspPaintGroup
s, which are created by the layer which invoked this painter. Painters are advised to also implementILspPaintGroupsChangeListener
, which allows them to keep track of changes to the supplied list of paint groups. This way, the painter can exploit temporal coherence and perform its work in the most optimal way.This method returns a
TLspPaintProgress
which describes the completeness of the paint operation. If the painter scheduled one or more tasks to be executed asynchronously, it may return from itspaintObjects()
method before having rendered all the objects it was given. In this case, the returned progress object can describe the amount of work that has been done and the work that is still remaining.- Specified by:
paintObjects
in interfaceILspPainter
- Parameters:
aGLDrawable
- theILcdGLDrawable
in which the objects are to be paintedaPaintGroups
- the objects to be paintedaPass
- the current paint passaContext
- provides context information to the painter- Returns:
- a
TLspPaintProgress
object describing the completeness of the paint operation
-
toString
-
getShapeDiscretizer
Gets the shape discretizer. The shape discretizer is responsible for converting the objects being painted into a mesh object.- Returns:
- the shape discretizer
-
setShapeDiscretizer
Sets the shape discretizer. The shape discretizer is responsible for converting the objects being painted into a mesh object.aShapeDiscretizer
should express the discretized positions int world coordinates.- Parameters:
aShapeDiscretizer
- the shape discretizer- See Also:
-
getRequiredOpenGLProfile
Description copied from interface:ILspPainter
Returns the minimum required OpenGL profile that a view must support in order to be compatible with this painter.- Specified by:
getRequiredOpenGLProfile
in interfaceILspPainter
- Returns:
- a
TLspGLProfile
-
prepareChanges
public void prepareChanges(List<TLspPaintGroupsChangedEvent> aEvents, Object aEventId, ILspPaintGroupsChangeListener.Callback aCallback) Description copied from interface:ILspPaintGroupsChangeListener
Called when the paint groups will change. The listener should prepare the necessary changes for the events but not commit them yet. TheILspPaintGroupsChangeListener.Callback.changesReady(java.lang.Object)
method must be invoked when the listener is ready to commit the changes. IfaEventId
isnull
then the changes may be committed immediately. In this case there will be no call toILspPaintGroupsChangeListener.commitChanges(Object)
.Note that it is not mandatory to do this two-phased commit cycle. You may commit or apply the changes immediately, but you still must invoke the callback.
- Specified by:
prepareChanges
in interfaceILspPaintGroupsChangeListener
- Parameters:
aEvents
- the changesaEventId
- the event id ornull
aCallback
- the callback ornull
-
commitChanges
Description copied from interface:ILspPaintGroupsChangeListener
Called when the changes for a specified event should be committed.- Specified by:
commitChanges
in interfaceILspPaintGroupsChangeListener
- Parameters:
aEventId
- the event id
-
query
public <T> boolean query(List<TLspPaintGroup> aPaintGroups, ALspPaintQuery<T> aQuery, TLspPaintRepresentationState aPaintRepresentationState, TLspContext aContext) Description copied from interface:ILspPainter
Retrieves a set of domain objects and data based on the parameters given by the query.- Specified by:
query
in interfaceILspPainter
- Parameters:
aPaintGroups
- the paint groupsaQuery
- the queryaPaintRepresentationState
- the paint representation state for which the query should be performedaContext
- the context- Returns:
true
if the query completed,false
if it was aborted.
-
setHints
Sets the performance/quality hints to be used by the painter.- Parameters:
aHints
- the shape painting hints
-
getHints
Returns the current set of performance/quality hints used by the painter.- Returns:
- the current shape painting hints
-