Package org.apache.batik.gvt
Class MarkerShapePainter
- java.lang.Object
-
- org.apache.batik.gvt.MarkerShapePainter
-
- All Implemented Interfaces:
ShapePainter
public class MarkerShapePainter extends java.lang.Object implements ShapePainter
A shape painter that can be used to paint markers on a shape.- Version:
- $Id: MarkerShapePainter.java 1808888 2017-09-19 14:22:11Z ssteiner $
-
-
Field Summary
Fields Modifier and Type Field Description private java.awt.geom.Rectangle2D
dGeometryBounds
Internal Cache: Geometry boundsprivate java.awt.geom.Rectangle2D
dPrimitiveBounds
Internal Cache: Primitive boundsprotected Marker
endMarker
End Markerprivate ProxyGraphicsNode
endMarkerProxy
End marker proxy.protected ExtendedShape
extShape
The Shape to be painted.private CompositeGraphicsNode
markerGroup
Contains the various marker proxies.protected Marker
middleMarker
Middle Markerprivate ProxyGraphicsNode[]
middleMarkerProxies
Middle marker proxy.protected Marker
startMarker
Start Markerprivate ProxyGraphicsNode
startMarkerProxy
Start marker proxy.
-
Constructor Summary
Constructors Constructor Description MarkerShapePainter(java.awt.Shape shape)
Constructs a newMarkerShapePainter
that can be used to markers on top of a shape.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ProxyGraphicsNode
buildEndMarkerProxy()
Builds a proxyGraphicsNode
for the inputMarker
to be drawn at the end position.protected void
buildMarkerGroup()
Builds a new marker group with the current set of markers.protected ProxyGraphicsNode[]
buildMiddleMarkerProxies()
Builds a proxyGraphicsNode
for the inputMarker
to be drawn at the middle positionsprotected ProxyGraphicsNode
buildStartMarkerProxy()
Builds a proxyGraphicsNode
for the inputMarker
to be drawn at the start positionprivate double[]
computeInSlope(double[] prev, int prevSegType, double[] curr, int currSegType)
Returns dx/dy for the in slope.private java.awt.geom.AffineTransform
computeMarkerTransform(Marker marker, java.awt.geom.Point2D markerPosition, double rotation)
Computes the transform for the input marker, so that it is positioned at the given position with the specified rotationprivate double[]
computeOutSlope(double[] curr, int currSegType, double[] next, int nextSegType)
Returns dx/dy for the out slope.private double
computeRotation(double[] prev, int prevSegType, double[] curr, int currSegType, double[] next, int nextSegType)
Returns the rotation according to the specified parameters in degrees.private ProxyGraphicsNode
createMiddleMarker(double[] prev, int prevSegType, double[] curr, int currSegType, double[] next, int nextSegType)
Creates a ProxyGraphicsNode for a middle marker.Marker
getEndMarker()
Returns the marker that shall be drawn at the last vertex of the given shape.ExtendedShape
getExtShape()
Gets the Shape this shape painter is associated with as an Extended Shape.Marker
getMiddleMarker()
Returns the marker that shall be drawn at every other vertex (not the first or the last one) of the given shape.java.awt.Shape
getPaintedArea()
Returns the area painted by this shape painter.java.awt.geom.Rectangle2D
getPaintedBounds2D()
Returns the bounds of the area painted by this shape painterprotected java.awt.geom.Point2D
getSegmentTerminatingPoint(double[] coords, int segType)
Extracts the terminating point, depending on the segment type.java.awt.Shape
getSensitiveArea()
Returns the area covered by this shape painter (even if not painted).java.awt.geom.Rectangle2D
getSensitiveBounds2D()
Returns the bounds of the area covered by this shape painte (even if not painted).java.awt.Shape
getShape()
Gets the Shape this shape painter is associated with.Marker
getStartMarker()
Returns the marker that shall be drawn at the first vertex of the given shape.boolean
inPaintedArea(java.awt.geom.Point2D pt)
Returns true if pt is in the area painted by this shape painterboolean
inSensitiveArea(java.awt.geom.Point2D pt)
Returns true if pt is in the sensitive area.double[]
normalize(double[] v)
Normalizes the input vector.void
paint(java.awt.Graphics2D g2d)
Paints the specified shape using the specified Graphics2D.void
setEndMarker(Marker endMarker)
Sets the marker that shall be drawn at the last vertex of the given shape.void
setMiddleMarker(Marker middleMarker)
Sets the marker that shall be drawn at every other vertex (not the first or the last one) of the given shape.void
setShape(java.awt.Shape shape)
Sets the Shape this shape painter is associated with.void
setStartMarker(Marker startMarker)
Sets the marker that shall be drawn at the first vertex of the given shape.
-
-
-
Field Detail
-
extShape
protected ExtendedShape extShape
The Shape to be painted.
-
startMarker
protected Marker startMarker
Start Marker
-
middleMarker
protected Marker middleMarker
Middle Marker
-
endMarker
protected Marker endMarker
End Marker
-
startMarkerProxy
private ProxyGraphicsNode startMarkerProxy
Start marker proxy.
-
middleMarkerProxies
private ProxyGraphicsNode[] middleMarkerProxies
Middle marker proxy.
-
endMarkerProxy
private ProxyGraphicsNode endMarkerProxy
End marker proxy.
-
markerGroup
private CompositeGraphicsNode markerGroup
Contains the various marker proxies.
-
dPrimitiveBounds
private java.awt.geom.Rectangle2D dPrimitiveBounds
Internal Cache: Primitive bounds
-
dGeometryBounds
private java.awt.geom.Rectangle2D dGeometryBounds
Internal Cache: Geometry bounds
-
-
Method Detail
-
paint
public void paint(java.awt.Graphics2D g2d)
Paints the specified shape using the specified Graphics2D.- Specified by:
paint
in interfaceShapePainter
- Parameters:
g2d
- the Graphics2D to use
-
getPaintedArea
public java.awt.Shape getPaintedArea()
Returns the area painted by this shape painter.- Specified by:
getPaintedArea
in interfaceShapePainter
-
getPaintedBounds2D
public java.awt.geom.Rectangle2D getPaintedBounds2D()
Returns the bounds of the area painted by this shape painter- Specified by:
getPaintedBounds2D
in interfaceShapePainter
-
inPaintedArea
public boolean inPaintedArea(java.awt.geom.Point2D pt)
Returns true if pt is in the area painted by this shape painter- Specified by:
inPaintedArea
in interfaceShapePainter
-
getSensitiveArea
public java.awt.Shape getSensitiveArea()
Returns the area covered by this shape painter (even if not painted). This is always null for Markers.- Specified by:
getSensitiveArea
in interfaceShapePainter
-
getSensitiveBounds2D
public java.awt.geom.Rectangle2D getSensitiveBounds2D()
Returns the bounds of the area covered by this shape painte (even if not painted). This is always null for Markers.- Specified by:
getSensitiveBounds2D
in interfaceShapePainter
-
inSensitiveArea
public boolean inSensitiveArea(java.awt.geom.Point2D pt)
Returns true if pt is in the sensitive area. This is always false for Markers.- Specified by:
inSensitiveArea
in interfaceShapePainter
-
setShape
public void setShape(java.awt.Shape shape)
Sets the Shape this shape painter is associated with.- Specified by:
setShape
in interfaceShapePainter
- Parameters:
shape
- new shape this painter should be associated with. Should not be null.
-
getExtShape
public ExtendedShape getExtShape()
Gets the Shape this shape painter is associated with as an Extended Shape.- Returns:
- shape associated with this painter
-
getShape
public java.awt.Shape getShape()
Gets the Shape this shape painter is associated with.- Specified by:
getShape
in interfaceShapePainter
- Returns:
- shape associated with this painter
-
getStartMarker
public Marker getStartMarker()
Returns the marker that shall be drawn at the first vertex of the given shape.
-
setStartMarker
public void setStartMarker(Marker startMarker)
Sets the marker that shall be drawn at the first vertex of the given shape.- Parameters:
startMarker
- the start marker
-
getMiddleMarker
public Marker getMiddleMarker()
Returns the marker that shall be drawn at every other vertex (not the first or the last one) of the given shape.
-
setMiddleMarker
public void setMiddleMarker(Marker middleMarker)
Sets the marker that shall be drawn at every other vertex (not the first or the last one) of the given shape.- Parameters:
middleMarker
- the middle marker
-
getEndMarker
public Marker getEndMarker()
Returns the marker that shall be drawn at the last vertex of the given shape.
-
setEndMarker
public void setEndMarker(Marker endMarker)
Sets the marker that shall be drawn at the last vertex of the given shape.- Parameters:
endMarker
- the end marker
-
buildMarkerGroup
protected void buildMarkerGroup()
Builds a new marker group with the current set of markers.
-
buildStartMarkerProxy
protected ProxyGraphicsNode buildStartMarkerProxy()
Builds a proxyGraphicsNode
for the inputMarker
to be drawn at the start position
-
buildEndMarkerProxy
protected ProxyGraphicsNode buildEndMarkerProxy()
Builds a proxyGraphicsNode
for the inputMarker
to be drawn at the end position.
-
buildMiddleMarkerProxies
protected ProxyGraphicsNode[] buildMiddleMarkerProxies()
Builds a proxyGraphicsNode
for the inputMarker
to be drawn at the middle positions
-
createMiddleMarker
private ProxyGraphicsNode createMiddleMarker(double[] prev, int prevSegType, double[] curr, int currSegType, double[] next, int nextSegType)
Creates a ProxyGraphicsNode for a middle marker.
-
computeRotation
private double computeRotation(double[] prev, int prevSegType, double[] curr, int currSegType, double[] next, int nextSegType)
Returns the rotation according to the specified parameters in degrees.
-
computeInSlope
private double[] computeInSlope(double[] prev, int prevSegType, double[] curr, int currSegType)
Returns dx/dy for the in slope.
-
computeOutSlope
private double[] computeOutSlope(double[] curr, int currSegType, double[] next, int nextSegType)
Returns dx/dy for the out slope.
-
normalize
public double[] normalize(double[] v)
Normalizes the input vector. This assumes an non-zero length
-
computeMarkerTransform
private java.awt.geom.AffineTransform computeMarkerTransform(Marker marker, java.awt.geom.Point2D markerPosition, double rotation)
Computes the transform for the input marker, so that it is positioned at the given position with the specified rotation
-
getSegmentTerminatingPoint
protected java.awt.geom.Point2D getSegmentTerminatingPoint(double[] coords, int segType)
Extracts the terminating point, depending on the segment type.
-
-