Class NFERenderer<V extends NFEGeoObject>
- java.lang.Object
-
- oracle.spatial.network.nfe.vis.maps.layer.BasicLayer
-
- oracle.spatial.network.nfe.vis.mapcanvas.render.NFERenderer<V>
-
- Type Parameters:
V- The type of elements rendered. It must be a subclass ofNFEGeoObject
- All Implemented Interfaces:
java.util.EventListener,javax.swing.event.ChangeListener,GeoObjectLayer,HoverableLayer,Layer,SelectableLayer,PropertySupport
- Direct Known Subclasses:
NFEFeatureLayerRenderer,NFENetworkRenderer,NFEPathRenderer
public abstract class NFERenderer<V extends NFEGeoObject> extends BasicLayer implements SelectableLayer, HoverableLayer, javax.swing.event.ChangeListener
Basic renderer for displaying NFE layers using the MapCanvas. This class provides common functions used for rendering NFE API content.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classNFERenderer.Tierprotected classNFERenderer.TierRenderingThread
-
Field Summary
Fields Modifier and Type Field Description protected AnimatedStrokeanimatedStrokeprotected java.awt.ColorboundaryColorprotected java.util.List<ContextualMenuHandler>contextualMenuHandlerListprotected booleaneditableprotected java.util.Map<java.lang.String,V>geoObjectsprotected java.awt.ColorhoverBorderColorprotected java.awt.ColorhoverColorprotected DefaultSelectionManager<GeoObject>hoverManagerprotected java.awt.StrokehoverStrokeprotected floatimageOpacityAlphaprotected java.awt.geom.Rectangle2DlastDataWindowprotected java.awt.geom.AffineTransformlastViewportTransformprotected AnimatedStrokenontargetAnimatedStrokeprotected java.util.concurrent.PriorityBlockingQueue<java.awt.geom.Rectangle2D>refreshRegionQueueprotected DefaultSelectionManager<GeoObject>selectionManagerprotected java.awt.StrokesimpleStrokeprotected java.awt.ColortextDefaultColorprotected java.awt.FonttextDefaultFontprotected java.util.List<NFERenderer.Tier>tiers-
Fields inherited from class oracle.spatial.network.nfe.vis.maps.layer.BasicLayer
canvas, properties
-
Fields inherited from interface oracle.spatial.network.nfe.vis.maps.core.Layer
PROPERTY_NAME, PROPERTY_PROVIDERID, PROPERTY_SRID, PROPERTY_VISIBLE
-
-
Constructor Summary
Constructors Constructor Description NFERenderer(MapCanvas canvas)Constructor called from a subclass constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)Add a contextual menu handlervoidaddSelectionListener(SelectionListener l)Adds a SelectionListenerprotected abstract booleanbelongsToTier(V geoObj, java.lang.String tierName)Tells whether the GeoObject is rendered by the given tiervoidclear()Clears all contents of this layer.booleanclearHover()Removes the hovering state from all the geo-objectsbooleanclearSelection()Clears all selected objectsprotected booleancontainsTag(java.lang.String tag)protected booleancontainsTag(Layer layer, java.lang.String tag)protected NFERenderer.TierfindTier(java.lang.String name)Gets the tier identified by the given namejava.awt.geom.Rectangle2DgetDataMBR()Always return null here.java.awt.geom.Rectangle2DgetFullExtent()VgetGeoObject(java.lang.String key)Gets the GeoObject identified by the given keyprotected abstract java.util.Collection<V>getGeoObjects(java.awt.geom.Area area)Gets all the GeoObjects interacting with the given areaprotected abstract java.util.Collection<V>getGeoObjects(java.awt.geom.Point2D point, int granularity)Gets all the GeoObjects interacting with the given pointprotected abstract java.util.Collection<V>getGeoObjects(java.awt.geom.Rectangle2D rect)Gets all the GeoObjects interacting with the given rectangleprotected abstract oracle.sdovis.style.StylegetGeoObjectStyle(V geoObj)Gets the style used for rendering the GeoObjectjava.util.List<GeoObject>getHover()Returns all the geo-object that are being hoveredfloatgetImageOpacityAlpha()Gets the opacityVgetObject(java.lang.Object key)Gets the GeoObject corresponding to the provided keyGeoObject[]getObjects()Gets all GeoObjects in this layerprotected doublegetScreenTolerance()java.util.List<GeoObject>getSelection()Returns all selected objectsjava.util.List<GeoObject>getSelection(GeoObject obj)Returns selected objects that are children of the provided objects GeoObject's isSubElementOf() determines if an object is children of another objectoracle.sdovis.edit.util.JGeometrySegmentPointgetSnapPoint(java.lang.Object key, java.awt.geom.Point2D point, double tolerance)doublegetTolerance()Gets the screen tolerance converted to the model's coordinate systembooleanhandleEvent(java.util.EventObject evt)The main method that performs event handling for this tool.java.util.List<GeoObject>hitTest(int x, int y, int granularity)Performs a hit test for the given mouse location (x,y).java.util.List<GeoObject>hitTest(java.awt.geom.Rectangle2D mbr, int granularity)Performs a hit test for the given rectangle.booleanisHover(GeoObject obj)Returns true if the geo-object is being hoveredbooleanisSelected(GeoObject obj)Checks if an object is selectedprotected abstract booleanisVisible(V geoObj)Tells whether the GeoObject is visiblevoidmapRegionChanged(MapRegionEvent e)When the associated canvas's map region is changed, this method is called to notify the layer of the change.intnumHovered()Returns the number of geo-objects that are being hoveredintnumSelected()Returns the number of selected objectsvoidrefresh()Refreshes the current data windowvoidrefresh(java.awt.geom.Rectangle2D dataWindow)Refreshes the data window at the given areaprotected voidrefreshAsync()protected voidrefreshAsync(java.awt.geom.Rectangle2D region)voidremoveContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)Remove a contextual menu handlervoidremoveSelectionListener(SelectionListener l)Removes the given SelectionListenerlongrender(java.awt.Graphics2D graphics)Renders the layer contents to the given Graphics.protected voidrenderGeoObject(V geoObj, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)protected voidrenderGeoObject(V geoObj, oracle.sdovis.style.Style style, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)protected voidrenderGeoObjects(NFERenderer.Tier tier, java.awt.geom.Area area, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)protected voidrenderGeoObjLabel(java.awt.Graphics2D g, java.awt.geom.AffineTransform transform, V geoObj, java.lang.String label, java.awt.Font font, java.awt.Color color)protected voidrenderHoveredObject(V hoverShape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)protected voidrenderHoveredObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)Renders the currently hovered GeoObjectsprotected voidrenderHoveredPoint(java.awt.geom.Point2D point, java.awt.Graphics2D graphics)protected voidrenderHoveredShape(V geoObj, java.awt.Shape shape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)protected voidrenderSelectedObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)protected voidrenderTier(NFERenderer.Tier tier, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)Renders the given tierprotected voidrenderTiers(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)Renders all the layer's tiers using the given graphics and affine transformbooleanselect(java.util.List<GeoObject> objs)Adds the provided objects to the selection listbooleansetHover(java.util.List<GeoObject> objs)A list of geo-objects being hoveredvoidsetImageOpacityAlpha(float imageOpacityAlpha)Sets the opacity for the layer's rendered imagesbooleansetSelection(java.util.List<GeoObject> selectedGeoObjects)Clears selection before setting the provided objects as selectedprotected voidsortTiers()Sorts tiers by its z order in an ascending wayvoidstateChanged(javax.swing.event.ChangeEvent event)booleanunselect(java.util.List<GeoObject> objs)Removes the provided objects from the selection listvoidupdate(long elapsedTime)updates the contents data model or structure.-
Methods inherited from class oracle.spatial.network.nfe.vis.maps.layer.BasicLayer
added, addPropertyChangeListener, addPropertyChangeListener, fromXMLElement, getCanvas, getIcon, getName, getProperties, getProperty, getProperty, getPropertyChangeListeners, getPropertyChangeListeners, getProviderID, getSRID, handleTheEvent, isMyEvent, isVisible, propagateEvent, removed, removePropertyChangeListener, removePropertyChangeListener, repaint, setCanvas, setMyCursor, setName, setProperty, setProviderID, setSRID, setVisible, toXMLElement
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface oracle.spatial.network.nfe.vis.maps.core.Layer
added, fromXMLElement, getCanvas, getIcon, getName, getProviderID, getSRID, isVisible, removed, repaint, setCanvas, setName, setProviderID, setSRID, setVisible, toXMLElement
-
Methods inherited from interface oracle.spatial.network.nfe.vis.maps.util.PropertySupport
addPropertyChangeListener, addPropertyChangeListener, getProperties, getProperty, getProperty, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener, setProperty
-
-
-
-
Field Detail
-
geoObjects
protected java.util.Map<java.lang.String,V extends NFEGeoObject> geoObjects
-
tiers
protected java.util.List<NFERenderer.Tier> tiers
-
lastViewportTransform
protected java.awt.geom.AffineTransform lastViewportTransform
-
lastDataWindow
protected java.awt.geom.Rectangle2D lastDataWindow
-
hoverColor
protected java.awt.Color hoverColor
-
hoverBorderColor
protected java.awt.Color hoverBorderColor
-
simpleStroke
protected java.awt.Stroke simpleStroke
-
hoverStroke
protected java.awt.Stroke hoverStroke
-
boundaryColor
protected java.awt.Color boundaryColor
-
animatedStroke
protected AnimatedStroke animatedStroke
-
nontargetAnimatedStroke
protected AnimatedStroke nontargetAnimatedStroke
-
textDefaultFont
protected java.awt.Font textDefaultFont
-
textDefaultColor
protected java.awt.Color textDefaultColor
-
selectionManager
protected DefaultSelectionManager<GeoObject> selectionManager
-
hoverManager
protected DefaultSelectionManager<GeoObject> hoverManager
-
editable
protected boolean editable
-
imageOpacityAlpha
protected float imageOpacityAlpha
-
contextualMenuHandlerList
protected java.util.List<ContextualMenuHandler> contextualMenuHandlerList
-
refreshRegionQueue
protected java.util.concurrent.PriorityBlockingQueue<java.awt.geom.Rectangle2D> refreshRegionQueue
-
-
Constructor Detail
-
NFERenderer
public NFERenderer(MapCanvas canvas)
Constructor called from a subclass constructor. It initializes the basic renderer state.- Parameters:
canvas- the MapCanvas where the layer will be rendered
-
-
Method Detail
-
getScreenTolerance
protected double getScreenTolerance()
-
getTolerance
public double getTolerance()
Gets the screen tolerance converted to the model's coordinate system- Returns:
- the tolerance value or zero if it is not specified or could not be converted
-
findTier
protected NFERenderer.Tier findTier(java.lang.String name)
Gets the tier identified by the given name- Parameters:
name- the tier's name- Returns:
- a tier or null if none was found
-
sortTiers
protected void sortTiers()
Sorts tiers by its z order in an ascending way
-
refresh
public void refresh()
Refreshes the current data window
-
refresh
public void refresh(java.awt.geom.Rectangle2D dataWindow)
Refreshes the data window at the given area- Parameters:
dataWindow- a region to be refreshed
-
renderTiers
protected void renderTiers(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)Renders all the layer's tiers using the given graphics and affine transform- Parameters:
graphics- a graphics objecttransform- the affine transform used
-
renderTier
protected void renderTier(NFERenderer.Tier tier, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
Renders the given tier- Parameters:
tier- a tier to be renderedgraphics- a graphics objecttransform- the affine transform used
-
renderHoveredObjects
protected void renderHoveredObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)Renders the currently hovered GeoObjects- Parameters:
graphics- a graphics objecttransform- the affine transform used
-
renderHoveredObject
protected void renderHoveredObject(V hoverShape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderSelectedObjects
protected void renderSelectedObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderHoveredShape
protected void renderHoveredShape(V geoObj, java.awt.Shape shape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderHoveredPoint
protected void renderHoveredPoint(java.awt.geom.Point2D point, java.awt.Graphics2D graphics)
-
renderGeoObjects
protected void renderGeoObjects(NFERenderer.Tier tier, java.awt.geom.Area area, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderGeoObject
protected void renderGeoObject(V geoObj, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderGeoObject
protected void renderGeoObject(V geoObj, oracle.sdovis.style.Style style, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
containsTag
protected boolean containsTag(java.lang.String tag)
-
containsTag
protected boolean containsTag(Layer layer, java.lang.String tag)
-
getImageOpacityAlpha
public float getImageOpacityAlpha()
Gets the opacity- Returns:
- the opacity value
-
setImageOpacityAlpha
public void setImageOpacityAlpha(float imageOpacityAlpha)
Sets the opacity for the layer's rendered images- Parameters:
imageOpacityAlpha- the opacity value
-
addContextualMenuHandler
public void addContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)
Add a contextual menu handler- Parameters:
contextualMenuHandler- contextual menu handler
-
removeContextualMenuHandler
public void removeContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)
Remove a contextual menu handler- Parameters:
contextualMenuHandler- contextual menu handler
-
renderGeoObjLabel
protected void renderGeoObjLabel(java.awt.Graphics2D g, java.awt.geom.AffineTransform transform, V geoObj, java.lang.String label, java.awt.Font font, java.awt.Color color)
-
getGeoObject
public V getGeoObject(java.lang.String key)
Gets the GeoObject identified by the given key- Parameters:
key- a GeoObject's key- Returns:
- a GeoObject or null if it was not found
-
getGeoObjects
protected abstract java.util.Collection<V> getGeoObjects(java.awt.geom.Point2D point, int granularity)
Gets all the GeoObjects interacting with the given point- Parameters:
point- a spatial point in screen coordinate systemgranularity-- Returns:
- a collection containing all the GeoObjects interacting with the point
-
getGeoObjects
protected abstract java.util.Collection<V> getGeoObjects(java.awt.geom.Rectangle2D rect)
Gets all the GeoObjects interacting with the given rectangle- Parameters:
rect- a rectangle in screen coordinate system- Returns:
- a collection containing all the GeoObjects interacting with the rectangle
-
getGeoObjects
protected abstract java.util.Collection<V> getGeoObjects(java.awt.geom.Area area)
Gets all the GeoObjects interacting with the given area- Parameters:
area- an area in screen coordinate system- Returns:
- a collection containing all the GeoObjects interacting with the area
-
getGeoObjectStyle
protected abstract oracle.sdovis.style.Style getGeoObjectStyle(V geoObj)
Gets the style used for rendering the GeoObject- Parameters:
geoObj- a GeoObject- Returns:
- the GeoObject's style
-
belongsToTier
protected abstract boolean belongsToTier(V geoObj, java.lang.String tierName)
Tells whether the GeoObject is rendered by the given tier- Parameters:
geoObj- a layer's GeoObjecttierName- a tier name- Returns:
- true if the GeoObject is rendered by (belongs to) the given tier
-
isVisible
protected abstract boolean isVisible(V geoObj)
Tells whether the GeoObject is visible- Parameters:
geoObj- a layer's GeoObject- Returns:
- true if the GeoObject is visible
-
isSelected
public boolean isSelected(GeoObject obj)
Description copied from interface:SelectableLayerChecks if an object is selected- Specified by:
isSelectedin interfaceSelectableLayer- Returns:
- true if the provided object is selected
-
clearSelection
public boolean clearSelection()
Description copied from interface:SelectableLayerClears all selected objects- Specified by:
clearSelectionin interfaceSelectableLayer- Returns:
- true if changes where made
-
numSelected
public int numSelected()
Description copied from interface:SelectableLayerReturns the number of selected objects- Specified by:
numSelectedin interfaceSelectableLayer- Returns:
- the number of selected objects
-
getSelection
public java.util.List<GeoObject> getSelection()
Description copied from interface:SelectableLayerReturns all selected objects- Specified by:
getSelectionin interfaceSelectableLayer- Returns:
-
getSelection
public java.util.List<GeoObject> getSelection(GeoObject obj)
Description copied from interface:SelectableLayerReturns selected objects that are children of the provided objects GeoObject's isSubElementOf() determines if an object is children of another object- Specified by:
getSelectionin interfaceSelectableLayer- Returns:
-
setSelection
public boolean setSelection(java.util.List<GeoObject> selectedGeoObjects)
Description copied from interface:SelectableLayerClears selection before setting the provided objects as selected- Specified by:
setSelectionin interfaceSelectableLayer- Returns:
-
select
public boolean select(java.util.List<GeoObject> objs)
Description copied from interface:SelectableLayerAdds the provided objects to the selection list- Specified by:
selectin interfaceSelectableLayer- Returns:
-
unselect
public boolean unselect(java.util.List<GeoObject> objs)
Description copied from interface:SelectableLayerRemoves the provided objects from the selection list- Specified by:
unselectin interfaceSelectableLayer- Returns:
-
addSelectionListener
public void addSelectionListener(SelectionListener l)
Description copied from interface:SelectableLayerAdds a SelectionListener- Specified by:
addSelectionListenerin interfaceSelectableLayer
-
removeSelectionListener
public void removeSelectionListener(SelectionListener l)
Description copied from interface:SelectableLayerRemoves the given SelectionListener- Specified by:
removeSelectionListenerin interfaceSelectableLayer
-
stateChanged
public void stateChanged(javax.swing.event.ChangeEvent event)
- Specified by:
stateChangedin interfacejavax.swing.event.ChangeListener
-
setHover
public boolean setHover(java.util.List<GeoObject> objs)
Description copied from interface:HoverableLayerA list of geo-objects being hovered- Specified by:
setHoverin interfaceHoverableLayer- Returns:
- true if the objects were hovered
-
clearHover
public boolean clearHover()
Description copied from interface:HoverableLayerRemoves the hovering state from all the geo-objects- Specified by:
clearHoverin interfaceHoverableLayer- Returns:
-
getHover
public java.util.List<GeoObject> getHover()
Description copied from interface:HoverableLayerReturns all the geo-object that are being hovered- Specified by:
getHoverin interfaceHoverableLayer- Returns:
-
isHover
public boolean isHover(GeoObject obj)
Description copied from interface:HoverableLayerReturns true if the geo-object is being hovered- Specified by:
isHoverin interfaceHoverableLayer- Returns:
-
numHovered
public int numHovered()
Description copied from interface:HoverableLayerReturns the number of geo-objects that are being hovered- Specified by:
numHoveredin interfaceHoverableLayer- Returns:
-
getSnapPoint
public oracle.sdovis.edit.util.JGeometrySegmentPoint getSnapPoint(java.lang.Object key, java.awt.geom.Point2D point, double tolerance)
-
getFullExtent
public java.awt.geom.Rectangle2D getFullExtent()
- Specified by:
getFullExtentin interfaceLayer- Overrides:
getFullExtentin classBasicLayer
-
clear
public void clear()
Description copied from interface:LayerClears all contents of this layer.- Specified by:
clearin interfaceLayer- Overrides:
clearin classBasicLayer
-
handleEvent
public boolean handleEvent(java.util.EventObject evt)
Description copied from interface:LayerThe main method that performs event handling for this tool. Returns whether the event should be propagated to other layers down stream (further down the layer stack) after the event has been handled.- Specified by:
handleEventin interfaceLayer- Overrides:
handleEventin classBasicLayer
-
update
public void update(long elapsedTime)
Description copied from interface:Layerupdates the contents data model or structure.- Specified by:
updatein interfaceLayer- Overrides:
updatein classBasicLayer- Parameters:
elapsedTime- The elapsed time since last update.
-
getDataMBR
public java.awt.geom.Rectangle2D getDataMBR()
Description copied from class:BasicLayerAlways return null here.- Specified by:
getDataMBRin interfaceLayer- Overrides:
getDataMBRin classBasicLayer
-
getObjects
public GeoObject[] getObjects()
Description copied from interface:GeoObjectLayerGets all GeoObjects in this layer- Specified by:
getObjectsin interfaceGeoObjectLayer- Returns:
-
getObject
public V getObject(java.lang.Object key)
Description copied from interface:GeoObjectLayerGets the GeoObject corresponding to the provided key- Specified by:
getObjectin interfaceGeoObjectLayer- Returns:
-
hitTest
public java.util.List<GeoObject> hitTest(int x, int y, int granularity)
Description copied from interface:LayerPerforms a hit test for the given mouse location (x,y). All the geo-objects that pass the hit test will be returned.- Specified by:
hitTestin interfaceLayer- Overrides:
hitTestin classBasicLayer- Parameters:
x- mouse location xy- mouse location y- Returns:
- a list of features that pass the hit test; if no feature passes the hit test, the list is empty.
-
hitTest
public java.util.List<GeoObject> hitTest(java.awt.geom.Rectangle2D mbr, int granularity)
Description copied from interface:LayerPerforms a hit test for the given rectangle. All the geo-objects that are either inside or intersect the rectangle will be returned.- Specified by:
hitTestin interfaceLayer- Overrides:
hitTestin classBasicLayer- Parameters:
mbr- the test rectangle, in device coordinates- Returns:
- a list of features that pass the box hit test; if no feature passes the hit test, the list is empty.
-
mapRegionChanged
public void mapRegionChanged(MapRegionEvent e)
Description copied from interface:LayerWhen the associated canvas's map region is changed, this method is called to notify the layer of the change. Note that either a device window change (as a result of resizing the application window) or a data window change can cause this method to be invoked. Query the canvas' MapRegion object to get the changed values. Inside a mapRegionChanged() implementation, the layer typically needs to update its data contents accordingly.- Specified by:
mapRegionChangedin interfaceLayer- Overrides:
mapRegionChangedin classBasicLayer
-
render
public long render(java.awt.Graphics2D graphics)
Description copied from interface:LayerRenders the layer contents to the given Graphics.- Specified by:
renderin interfaceLayer- Overrides:
renderin classBasicLayer- Parameters:
graphics- the graphics object- Returns:
- the rendering time in milliseconds.
-
refreshAsync
protected void refreshAsync()
-
refreshAsync
protected void refreshAsync(java.awt.geom.Rectangle2D region)
-
-