org.jhotdraw.samples.svg.figures
Class SVGBezierFigure

java.lang.Object
  extended by org.jhotdraw.beans.AbstractBean
      extended by org.jhotdraw.draw.AbstractFigure
          extended by org.jhotdraw.draw.AbstractAttributedFigure
              extended by org.jhotdraw.draw.BezierFigure
                  extended by org.jhotdraw.samples.svg.figures.SVGBezierFigure
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Figure, DOMStorable

public class SVGBezierFigure
extends BezierFigure

SVGBezierFigure is not an actual SVG element, it is used by SVGPathFigure to represent a single BezierPath segment within an SVG path.

Version:
$Id: SVGBezierFigure.java 647 2010-01-24 22:52:59Z rawcoder $
Author:
Werner Randelshofer
See Also:
Serialized Form

Field Summary
private  java.awt.geom.Rectangle2D.Double cachedDrawingArea
           
 
Fields inherited from class org.jhotdraw.draw.BezierFigure
path
 
Fields inherited from class org.jhotdraw.draw.AbstractFigure
changingDepth, listenerList
 
Fields inherited from class org.jhotdraw.beans.AbstractBean
propertySupport
 
Fields inherited from interface org.jhotdraw.draw.Figure
CONNECTABLE_PROPERTY, REMOVABLE_PROPERTY, SELECTABLE_PROPERTY, TRANSFORMABLE_PROPERTY
 
Constructor Summary
SVGBezierFigure()
          Creates a new instance.
SVGBezierFigure(boolean isClosed)
           
 
Method Summary
 java.util.Collection<Handle> createHandles(SVGPathFigure pathFigure, int detailLevel)
           
 int findSegment(java.awt.geom.Point2D.Double find, double tolerance)
          Gets the segment of the polyline that is hit by the given Point2D.Double.
 void flattenTransform()
          Transforms all coords of the figure by the current TRANSFORM attribute and then sets the TRANSFORM attribute to null.
 java.awt.geom.Rectangle2D.Double getDrawingArea()
          Returns the drawing area of the figure as a Rectangle.
 boolean handleMouseClick(java.awt.geom.Point2D.Double p, java.awt.event.MouseEvent evt, DrawingView view)
          Handles a mouse click.
 void invalidate()
          Invalidates cached data of the Figure.
 boolean joinSegments(java.awt.geom.Point2D.Double join, double tolerance)
          Joins two segments into one if the given Point2D.Double hits a node of the polyline.
 int splitSegment(java.awt.geom.Point2D.Double split, double tolerance)
          Splits the segment at the given Point2D.Double if a segment was hit.
 void transform(java.awt.geom.AffineTransform tx)
          Transforms the shape of the Figure.
 
Methods inherited from class org.jhotdraw.draw.BezierFigure
addNode, addNode, chop, clone, contains, createHandles, drawCaps, drawFill, drawStroke, findCompatibleConnector, findConnector, findNode, getBezierPath, getBounds, getCappedPath, getCenter, getEndPoint, getNode, getNodeCount, getOutermostPoint, getPoint, getPoint, getPointOnPath, getStartPoint, getTransformRestoreData, isClosed, joinSegments, layout, read, readPoints, removeAllNodes, removeNode, restoreTransformTo, set, setBezierPath, setBounds, setClosed, setEndPoint, setNode, setPoint, setPoint, setStartPoint, splitSegment, validate, write, writePoints
 
Methods inherited from class org.jhotdraw.draw.AbstractAttributedFigure
applyAttributesTo, draw, drawText, get, getAttributeKey, getAttributes, getAttributesRestoreData, getStroke, getStrokeMiterLimitFactor, hasAttribute, isAttributeEnabled, readAttributes, removeAttribute, restoreAttributesTo, setAttributeEnabled, setAttributes, writeAttributes
 
Methods inherited from class org.jhotdraw.draw.AbstractFigure
addFigureListener, addNotify, basicClone, changed, findFigureInside, fireAreaInvalidated, fireAreaInvalidated, fireAreaInvalidated, fireAttributeChanged, fireFigureAdded, fireFigureChanged, fireFigureChanged, fireFigureChanged, fireFigureHandlesChanged, fireFigureRemoved, fireFigureRequestRemove, fireUndoableEditHappened, getActions, getChangingDepth, getConnectors, getCursor, getDecomposition, getDrawing, getFontRenderContext, getLayer, getLock, getPreferredSize, getTool, getToolTipText, handleDrop, includes, isChanging, isConnectable, isRemovable, isSelectable, isTransformable, isVisible, remap, removeFigureListener, removeNotify, requestRemove, setBounds, setConnectable, setRemovable, setSelectable, setTransformable, setVisible, toString, willChange
 
Methods inherited from class org.jhotdraw.beans.AbstractBean
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, firePropertyChange, firePropertyChange, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.jhotdraw.draw.Figure
addPropertyChangeListener, removePropertyChangeListener
 

Field Detail

cachedDrawingArea

private transient java.awt.geom.Rectangle2D.Double cachedDrawingArea
Constructor Detail

SVGBezierFigure

public SVGBezierFigure()
Creates a new instance.


SVGBezierFigure

public SVGBezierFigure(boolean isClosed)
Method Detail

createHandles

public java.util.Collection<Handle> createHandles(SVGPathFigure pathFigure,
                                                  int detailLevel)

handleMouseClick

public boolean handleMouseClick(java.awt.geom.Point2D.Double p,
                                java.awt.event.MouseEvent evt,
                                DrawingView view)
Description copied from class: BezierFigure
Handles a mouse click.

Specified by:
handleMouseClick in interface Figure
Overrides:
handleMouseClick in class BezierFigure
Parameters:
p - The location of the mouse event.
evt - The mouse event.
view - The drawing view which is the source of the mouse event.
Returns:
Returns true, if the event was consumed.

transform

public void transform(java.awt.geom.AffineTransform tx)
Description copied from interface: Figure
Transforms the shape of the Figure. Transformations using double precision arithmethics are inherently lossy operations. Therefore it is recommended to use getTransformRestoreData() restoreTransformTo() to provide lossless undo/redo functionality.

This is a basic operation which does not fire events. Use the following code sequence, if you need event firing:

 figure.willChange();
 figure.transform(...);
 figure.changed();
 

Specified by:
transform in interface Figure
Overrides:
transform in class BezierFigure
Parameters:
tx - The transformation.
See Also:
Figure.getTransformRestoreData(), Figure.restoreTransformTo(java.lang.Object)

getDrawingArea

public java.awt.geom.Rectangle2D.Double getDrawingArea()
Description copied from interface: Figure
Returns the drawing area of the figure as a Rectangle.

The drawing area is used to inform DrawingView about the area that is needed to draw this figure.

The drawing area needs to be large enough, to take line width, line caps and other decorations into account that exceed the bounds of the Figure.

Specified by:
getDrawingArea in interface Figure
Overrides:
getDrawingArea in class BezierFigure

findSegment

public int findSegment(java.awt.geom.Point2D.Double find,
                       double tolerance)
Gets the segment of the polyline that is hit by the given Point2D.Double.

Overrides:
findSegment in class BezierFigure
Parameters:
find - a Point on the bezier path
tolerance - a tolerance, tolerance should take into account the line width, plus 2 divided by the zoom factor.
Returns:
the index of the segment or -1 if no segment was hit.

joinSegments

public boolean joinSegments(java.awt.geom.Point2D.Double join,
                            double tolerance)
Joins two segments into one if the given Point2D.Double hits a node of the polyline.

Overrides:
joinSegments in class BezierFigure
Parameters:
join - a Point at a node on the bezier path
tolerance - a tolerance, tolerance should take into account the line width, plus 2 divided by the zoom factor.
Returns:
true if the two segments were joined.

splitSegment

public int splitSegment(java.awt.geom.Point2D.Double split,
                        double tolerance)
Splits the segment at the given Point2D.Double if a segment was hit.

Overrides:
splitSegment in class BezierFigure
Parameters:
split - a Point on (or near) a segment of the bezier path
tolerance - a tolerance, tolerance should take into account the line width, plus 2 divided by the zoom factor.
Returns:
the index of the segment or -1 if no segment was hit.

flattenTransform

public void flattenTransform()
Transforms all coords of the figure by the current TRANSFORM attribute and then sets the TRANSFORM attribute to null.


invalidate

public void invalidate()
Description copied from class: AbstractFigure
Invalidates cached data of the Figure. This method must execute fast, because it can be called very often.

Overrides:
invalidate in class BezierFigure