public class TLspShapePainter extends Object implements ILspEditableStyledPainter
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 meshesTLspFillStyle
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.
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
TLspIndexColorModelStyle
can be used for the whole density plot.
Submitting multiple ones in the styler will have no effect.
Note that the same TLspIndexColorModelStyle
must be submitted for each object.
ALspDensityStyle
instances with regular styles is not supported and will throw exceptions.
When painting density plots, the styler should only submit ALspDensityStyle
instances and optionally a
single TLspIndexColorModelStyle
.
ILspPaintGroupsChangeListener.Callback
Constructor and Description |
---|
TLspShapePainter()
Constructs 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.
|
Modifier and Type | Method and Description |
---|---|
void |
addPropertyChangeListener(PropertyChangeListener aListener)
Adds a
PropertyChangeListener
to the list of listeners that must be notified when
any of the properties of this ILspPainter changes. |
void |
commitChanges(Object aEventId)
Called when the changes for a specified event should be committed.
|
TLspShapePaintingHints |
getHints()
Returns the current set of performance/quality hints used by the painter.
|
TLspOpenGLProfile |
getRequiredOpenGLProfile()
Returns the minimum required OpenGL profile that a view must support in
order to be compatible with this painter.
|
ILspShapeDiscretizer |
getShapeDiscretizer()
Gets the shape discretizer.
|
ILspStyler |
getStyler(TLspPaintState aPaintState)
Returns the styler used by this painter for the given
PaintState . |
TLspPaintProgress |
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 |
removePropertyChangeListener(PropertyChangeListener aListener)
Removes a
PropertyChangeListener 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 given
PaintState . |
String |
toString() |
void |
unregisterLayer(ILspInteractivePaintableLayer aLayer,
TLspPaintRepresentation aPaintRepresentation)
Unregisters a layer from this painter.
|
public TLspShapePainter(ILspStyler aDefaultStyler)
aDefaultStyler
- The styler that will be used for PaintState.DEFAULT
.public TLspShapePainter()
ILspCustomizableStyler
is used, so the default styles can be
enabled/disabled or replaced.TLspFillStyle
,
TLspLineStyle
,
TLspIconStyle
public ILspStyler getStyler(TLspPaintState aPaintState)
ILspPainter
PaintState
. Can return null
in case the painter does not use or expose a styler.getStyler
in interface ILspPainter
aPaintState
- the paint state for which a styler is requestedpublic void registerLayer(ILspInteractivePaintableLayer aLayer, TLspPaintRepresentation aPaintRepresentation)
ILspPainter
ILspPainter.unregisterLayer(ILspInteractivePaintableLayer, com.luciad.view.lightspeed.layer.TLspPaintRepresentation)
.registerLayer
in interface ILspPainter
aLayer
- A layer with which this painter will be used.aPaintRepresentation
- The paint representation for which this painter will be used.public void unregisterLayer(ILspInteractivePaintableLayer aLayer, TLspPaintRepresentation aPaintRepresentation)
ILspPainter
ILspPainter.registerLayer(ILspInteractivePaintableLayer, com.luciad.view.lightspeed.layer.TLspPaintRepresentation)
.unregisterLayer
in interface ILspPainter
aLayer
- A layer that needs to be unregisteredaPaintRepresentation
- The paint representation for which this painter was used with
aLayerpublic void setStyler(TLspPaintState aPaintState, ILspStyler aStyler)
ILspEditableStyledPainter
PaintState
.setStyler
in interface ILspEditableStyledPainter
aPaintState
- the paint state for which to set a styleraStyler
- the new styler for the painterpublic void addPropertyChangeListener(PropertyChangeListener aListener)
ILspPainter
PropertyChangeListener
to the list of listeners that must be notified when
any of the properties of this ILspPainter
changes.addPropertyChangeListener
in interface ILspPainter
aListener
- the listener that from now on will be notified of all changes
to
properties of this painterpublic void removePropertyChangeListener(PropertyChangeListener aListener)
ILspPainter
PropertyChangeListener
from the list of listeners.
This listener will no longer be notified of any changes to the properties
of this ILspPainter
removePropertyChangeListener
in interface ILspPainter
aListener
- the listener that no longer will be notified of any changes to
properties of this painterpublic TLspPaintProgress paintObjects(ILcdGLDrawable aGLDrawable, List<TLspPaintGroup> aPaintGroups, TLspPaintPass aPass, TLspContext aContext)
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 implement ILspPaintGroupsChangeListener
,
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 its paintObjects()
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.
paintObjects
in interface ILspPainter
aGLDrawable
- the ILcdGLDrawable
in which the objects are to be paintedaPaintGroups
- the objects to be paintedaPass
- the current paint passaContext
- provides context information to the painterTLspPaintProgress
object describing the completeness of the paint operationpublic ILspShapeDiscretizer getShapeDiscretizer()
public void setShapeDiscretizer(ILspShapeDiscretizer aShapeDiscretizer)
aShapeDiscretizer
should express the discretized positions
int world coordinates.aShapeDiscretizer
- the shape discretizerILspShapeDiscretizer.discretizeSFCT(Object, com.luciad.view.lightspeed.geometry.discretization.TLspShapeDiscretizationParameters, com.luciad.view.lightspeed.TLspContext, com.luciad.view.lightspeed.geometry.discretization.ALspEditable3DMesh)
public TLspOpenGLProfile getRequiredOpenGLProfile()
ILspPainter
getRequiredOpenGLProfile
in interface ILspPainter
TLspGLProfile
public void prepareChanges(List<TLspPaintGroupsChangedEvent> aEvents, Object aEventId, ILspPaintGroupsChangeListener.Callback aCallback)
ILspPaintGroupsChangeListener
ILspPaintGroupsChangeListener.Callback.changesReady(java.lang.Object)
method must be invoked when the listener is
ready to commit the changes.
If aEventId
is null
then the changes may be committed immediately. In this case
there will be no call to ILspPaintGroupsChangeListener.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.
prepareChanges
in interface ILspPaintGroupsChangeListener
aEvents
- the changesaEventId
- the event id or null
aCallback
- the callback or null
public void commitChanges(Object aEventId)
ILspPaintGroupsChangeListener
commitChanges
in interface ILspPaintGroupsChangeListener
aEventId
- the event idpublic <T> boolean query(List<TLspPaintGroup> aPaintGroups, ALspPaintQuery<T> aQuery, TLspPaintRepresentationState aPaintRepresentationState, TLspContext aContext)
ILspPainter
query
in interface ILspPainter
aPaintGroups
- the paint groupsaQuery
- the queryaPaintRepresentationState
- the paint representation state for which the query should be
performedaContext
- the contexttrue
if the query completed, false
if it was aborted.public void setHints(TLspShapePaintingHints aHints)
aHints
- the shape painting hintspublic TLspShapePaintingHints getHints()