public class PicSmoothPolygon extends AbstractCurve implements ActionFactory, CustomizerFactory, PicMultiCurveConvertable
A multicurve, either close or not, whose geometry is specified using a polygon, in such a way that the curve snakes
"smoothly" along the polygon. For each polygon point, a coefficient helps altering the smoothness of the
the path. Like the class it inherits from, this element has a variable number of user-controlled points that can be
added/inserted/deleted by the user.
Each polygon point is also an anchor point (e.g. for grid alignment).
Implementation notes : inherited pts ArrayList acts as an array of specification
points for the multicurve (this behaviour being mostly inherited from superclass). Besides, there's an
ArrayList of PicPoint's, namely polygonPts, which backs the geometry
of the polygon, and acts as a list of user-controlled points.
Moving a control-point thus updates specification points as appropriate.
[SR:todo:11/01/2003] add documentation about curve equation.
| Modifier and Type | Field and Description |
|---|---|
protected static int |
COEF_SLIDER_MAX
Max value of smoothness coefficient accessible to Jslider in the geometry editor
|
protected static int |
COEF_SLIDER_MIN
Min value of smoothness coefficient accessible to JSlider in the geometry editor
|
protected static double |
DEFAULT_SMOOTH_COEFF
the default value for the smoothness coefficient on startup.
|
protected java.util.ArrayList |
polygonPts
An array of PicPoint's backing the geometry of the polygon.
|
protected java.util.ArrayList |
smoothCoeff
The following array contains one Double per polygon point, specifying how close to
polygon points the curve should go along.
|
FIRST_CURVE_END_POINT, FIRST_SEGMENT_CONTROL_POINT, INVALID_POINT_INDEX, isClosed, LAST_CURVE_END_POINT, SECOND_SEGMENT_CONTROL_POINT, SUBDIVISION_POINTnodeConnections, nodeName, ptsattributeSet, parent, viewARROW_GLOBAL_SCALE_LENGTH, ARROW_GLOBAL_SCALE_WIDTH, ARROW_INSET_SCALE, ARROW_LENGTH_SCALE, ARROW_WIDTH_LINEWIDTH_SCALE, ARROW_WIDTH_MINIMUM_MM, BRACKET_LENGTH_SCALE, CROSSHATCH, CROSSHATCH_FILLED, DASH_OPAQUE, DASH_TRANSPARENT, DASH1, DASH2, DASH3, DASHED, DIMEN, DOT_SEP, DOT_SEP1, DOT_SEP2, DOT_SEP3, DOTTED, DOUBLE_COLOR, DOUBLE_LINE, DOUBLE_SEP, FILL_COLOR, FILL_STYLE, HATCH_ANGLE, HATCH_COLOR, HATCH_SEP, HATCH_WIDTH, HLINES, HLINES_FILLED, INNER, LEFT_ARROW, LINE_COLOR, LINE_STYLE, LINE_WIDTH, MIDDLE, NONE, OUTER, OVER_STRIKE, OVER_STRIKE_COLOR, OVER_STRIKE_WIDTH, POLYDOTS_ANGLE, POLYDOTS_CIRCLE, POLYDOTS_DISK, POLYDOTS_PENTAGON, POLYDOTS_PENTAGON_FILLED, POLYDOTS_PLUS, POLYDOTS_SCALE_H, POLYDOTS_SCALE_V, POLYDOTS_SIZE_LINEWIDTH_SCALE, POLYDOTS_SIZE_MINIMUM_MM, POLYDOTS_SQUARE, POLYDOTS_SQUARE_FILLED, POLYDOTS_STYLE, POLYDOTS_SUPERIMPOSE, POLYDOTS_TRIANGLE, POLYDOTS_TRIANGLE_FILLED, PS_POINT, PST_CUSTOM, RBRACKET_LENGTH_SCALE, RIGHT_ARROW, SHADOW, SHADOW_ANGLE, SHADOW_COLOR, SHADOW_SIZE, SOLID, TBAR_WIDTH_LINEWIDTH_SCALE, TBAR_WIDTH_MINIMUM_MM, TEXT_BOX_CIRCLE, TEXT_BOX_NO_FRAME, TEXT_BOX_OVAL, TEXT_BOX_RECTANGLE, TEXT_FRAME, TEXT_HALIGN_CENTER, TEXT_HALIGN_LEFT, TEXT_HALIGN_RIGHT, TEXT_HOR_ALIGN, TEXT_ROTATION, TEXT_VALIGN_BASELINE, TEXT_VALIGN_BOTTOM, TEXT_VALIGN_CENTER, TEXT_VALIGN_TOP, TEXT_VERT_ALIGN, VLINES, VLINES_FILLED| Constructor and Description |
|---|
PicSmoothPolygon()
Create a new empty open smooth polygon, with a default attribute set.
|
PicSmoothPolygon(boolean closed)
Create a new empty smooth polygon, open or closed, with a default attribute set bound to it.
|
PicSmoothPolygon(boolean closed,
PicAttributeSet set)
Create a new empty smooth polygon with the given attribute set.
|
PicSmoothPolygon(PicPoint[] polygonPts,
boolean closed,
double[] smoothCoeffs,
PicAttributeSet set)
Create a new smooth polygon initialized from the given array of PicPoint's, using the
given array of smoothness values.
|
PicSmoothPolygon(PicPoint[] polyPts,
boolean closed,
double smoothCoeff,
PicAttributeSet set)
Create a new smooth polygon initialized from the given array of PicPoint's.
|
PicSmoothPolygon(PicPoint[] polygonPts,
boolean closed,
PicAttributeSet set)
Create a new smooth polygon initialized from the given array of PicPoint's, using the
default smoothness value.
|
PicSmoothPolygon(PicSmoothPolygon poly)
"cloning" constructor (to be used by clone())
|
| Modifier and Type | Method and Description |
|---|---|
void |
addPoint(int ptIndex,
PicPoint pt)
Adds the given polygon point at the given position, shifting ensuing point indices to the right.
|
void |
addPoint(int ptIndex,
PicPoint pt,
double smoothCoeff)
Adds the given polygon point at the given position, shifting ensuing point indices to the right.
|
void |
addPoint(PicPoint pt)
adds the given point at the end of this PicSmoothPolygon.
|
void |
addPoint(PicPoint pt,
double smoothCoeff)
adds the given point with the given smoothness-coefficient at the end of this PicSmoothPolygon.
|
java.lang.Object |
clone()
Overide Object.clone() method
|
PicMultiCurve |
convertToMultiCurve()
converts this PicSmoothPolygon to a PicMultiCurve, by simply relying on the appropriate constructor
in class
PicMultiCurve. |
PEAction[] |
createActions(ActionDispatcher actionDispatcher,
ActionLocalizer localizer,
HitInfo hi)
Create an array of Action's related to this object
|
AbstractCustomizer |
createCustomizer()
Returns a Customizer for geometry editing
|
java.awt.geom.Rectangle2D |
getBoundingBox(java.awt.geom.Rectangle2D r)
Returns the bounding box (ie the surrounding rectangle) in double precision
This implementation compute the bb from the union of :
the bb as computed by super-class
and the smallest rectangle that encompasses all the polygon-points.
|
int |
getFirstPointIndex()
Returns the index of the first user-controlled point that can be retrieved by
getPoint(). |
int |
getLastPointIndex()
Returns the index of the last user-controlled point that can be retrieved by
getPoint(). |
java.lang.String |
getName()
Returns a non-localised string representing this object's name
This default implementation returns the class name.
|
PicPoint |
getPoint(int numPoint,
PicPoint src)
Return the user-controlled point (ie a polygon point, not a bezier point) having the given index.
|
double |
getPointX(int index)
This implementation returns the X-coord of the polygon-point with the same index.
|
double |
getPointY(int index)
This implementation returns the Y-coord of the polygon-point with the same index.
|
protected PicPoint |
getPolygonPoint(int numPoint)
Return a reference on the polygon point with the given index.
|
double |
getSmoothCoefficient(int index) |
void |
removeLastPoint()
removes the last point of this PicSmoothPolygon.
|
void |
removePoint(int pos)
Remove a point at the given position from this PicSmoothPolygon, then fire a
changed-update.
|
void |
rotate(PicPoint ptOrg,
double angle)
Rotate this Element by the given angle along the given point
|
void |
scale(double ptOrgX,
double ptOrgY,
double sx,
double sy)
Scale this object by (sx,sy) using (ptOrgX,ptOrgY) as the origin.
|
void |
setClosed(boolean state)
set close path state, then fires a changed-update.
|
void |
setPoint(int index,
PicPoint pt,
EditPointConstraint constraint)
Set the user-controlled point with the given index to the given value.
|
void |
setSmoothCoefficient(int index,
double c) |
void |
shear(PicPoint ptOrg,
double shx,
double shy)
Shear this Element by the given params wrt to the given origin
|
int |
splitSegment(int segIdx,
PicPoint pt)
Split the given polygon segment (starting from 0),
by inserting a new polygon point at the appropriate position.
|
int |
splitSegment(int segIdx,
PicPoint pt,
double smoothCoeff)
Split the given polygon segment (starting from 0),
by inserting a new polygon point at the appropriate position.
|
java.lang.String |
toString()
Used for debugging purpose.
|
void |
translate(double dx,
double dy)
Translate this Element by (dx,dy) ; this implementation translates the specification-points,
then fires a changed-update event.
|
curveTo, getAlternateControlPoint, getIncomingTangent, getNearestSubdivisionPoint, getNumberOfSegments, getNumberOfSubdivisionPoints, getOutgoingTangent, getPBCBezierIndex, getPBCSegmentIndex, getPointType, getShapeBounds2D, getSpecificationPoint, hasValidSize, isClosed, isControlPoint, isPolygon, isSmooth, isStraight, isSymmetric, isValidBezierIndex, isValidSegmentIndex, lineTo, pointToSegmentIndex, removeLastSubdivisionPoint, removeSubdivisionPoint, segmentToPointIndex, splitSegmentaddConnection, fireChangedUpdate, forwardChangedUpdate, getAllowsChildren, getNodeName, getNumberOfSpecificationPoints, getPoint, getSpecificationPoint, getSpecificationPointX, getSpecificationPointY, isNode, isNodeable, iterator, nodeConnectionOrigin, nodeReferencePoint, nodeReferencePointX, nodeReferencePointY, removeAllConnections, removeConnection, setNodeName, setPoint, setSpecificationPointanchorPointsIterator, getAttribute, getAttributeSet, getDrawing, getParent, getView, removeView, scale, setAttribute, setAttributeSet, setParent, setViewFromFactoryprotected java.util.ArrayList polygonPts
protected java.util.ArrayList smoothCoeff
protected static double DEFAULT_SMOOTH_COEFF
protected static int COEF_SLIDER_MIN
protected static int COEF_SLIDER_MAX
public PicSmoothPolygon()
public PicSmoothPolygon(boolean closed)
closed - whether the generated multi-curve will be closed or notpublic PicSmoothPolygon(boolean closed,
PicAttributeSet set)
set - attribute set to be bound to this elementclosed - whether the generated multi-curve will be closed or notpublic PicSmoothPolygon(PicPoint[] polyPts, boolean closed, double smoothCoeff, PicAttributeSet set)
polyPts - array of PicPoint's specifying the polygon geometry.set - attribute set to be bound to this elementclosed - whether the generated multi-curve will be closed or notsmoothCoeff - the default smoothness value for each polygon pointpublic PicSmoothPolygon(PicPoint[] polygonPts, boolean closed, double[] smoothCoeffs, PicAttributeSet set)
polygonPts - array of PicPoint's specifying the polygon geometry.set - attribute set to be bound to this elementclosed - whether the generated multi-curve will be closed or notsmoothCoeff - array of smoothness values for each polygon pointpublic PicSmoothPolygon(PicPoint[] polygonPts, boolean closed, PicAttributeSet set)
polygonPts - array of PicPoint's specifying the polygon geometry.set - attribute set to be bound to this elementclosed - whether the generated multi-curve will be closed or notpublic PicSmoothPolygon(PicSmoothPolygon poly)
poly - PicSmoothPolygon to be clonedpublic java.lang.Object clone()
clone in interface Elementclone in class DefaultLeafElementpublic java.lang.String getName()
DefaultLeafElementgetName in interface ElementgetName in class DefaultLeafElementpublic int getFirstPointIndex()
getPoint().
This implementation returns 0.getFirstPointIndex in interface ElementgetFirstPointIndex in class DefaultLeafElementpublic int getLastPointIndex()
getPoint().
This default implementation returns the number of polygon-points minus one.getLastPointIndex in interface ElementgetLastPointIndex in class DefaultLeafElementpublic PicPoint getPoint(int numPoint, PicPoint src)
setPoint method.getPoint in interface ElementgetPoint in class DefaultLeafElementnumPoint - the point index, should be greater or equal to the value returned by
getFirstPointIndex, and lower or equal to getLastPointIndex.numPoint ;
if src is null, allocates a new PicPoint and return it,
otherwise directly modifies src and returns it as well for convenience.protected final PicPoint getPolygonPoint(int numPoint)
public double getPointX(int index)
getPointX in interface ElementgetPointX in class DefaultLeafElementindex - the point index, should be greater or equal to the value returned by
getFirstPointIndex, and lower or equal to getLastPointIndex.index.public double getPointY(int index)
getPointY in interface ElementgetPointY in class DefaultLeafElementindex - the point index, should be greater or equal to the value returned by
getFirstPointIndex, and lower or equal to getLastPointIndex.index.public void translate(double dx,
double dy)
translate in interface Elementtranslate in class DefaultLeafElementdx - The X coordinate of translation vectordy - The Y coordinate of translation vectorpublic void scale(double ptOrgX,
double ptOrgY,
double sx,
double sy)
sx and sy may be negative.
This method eventually fires a changed-update event.scale in interface Elementscale in class DefaultLeafElementpublic void rotate(PicPoint ptOrg, double angle)
rotate in interface Elementrotate in class DefaultLeafElementangle - rotation angle in radianspublic void shear(PicPoint ptOrg, double shx, double shy)
shear in interface Elementshear in class DefaultLeafElementpublic void setPoint(int index,
PicPoint pt,
EditPointConstraint constraint)
setPoint in interface ElementsetPoint in class AbstractCurveconstraint - not used so farpublic void addPoint(PicPoint pt)
addPoint in class AbstractCurvepublic void addPoint(PicPoint pt, double smoothCoeff)
public void addPoint(int ptIndex,
PicPoint pt)
public void addPoint(int ptIndex,
PicPoint pt,
double smoothCoeff)
public int splitSegment(int segIdx,
PicPoint pt)
splitSegment in class AbstractCurvesegIdx - index of the polygon segment that must be split.pt - the PicPoint to be addedpublic int splitSegment(int segIdx,
PicPoint pt,
double smoothCoeff)
segIdx - index of the polygon segment that must be split.smoothCoeff - the smoothness coefficient to be used for the new polygon point.pt - the PicPoint to be addedpublic void removePoint(int pos)
Nothing is done if this polygon has only one point.
removePoint in class AbstractCurvepos - index of point to be removedpublic void removeLastPoint()
removePoint(polygonPts.size()-1)public PicMultiCurve convertToMultiCurve()
PicMultiCurve.convertToMultiCurve in interface PicMultiCurveConvertablepublic double getSmoothCoefficient(int index)
index - Description of the Parameterpublic void setSmoothCoefficient(int index,
double c)
index - index of point whose smoothCoeff is to be adjustedc - value of the smoothCoeffpublic void setClosed(boolean state)
setClosed in class AbstractCurvestate - The new closed valuepublic java.awt.geom.Rectangle2D getBoundingBox(java.awt.geom.Rectangle2D r)
getBoundingBox in interface ElementgetBoundingBox in class DefaultLeafElementpublic java.lang.String toString()
toString in class AbstractCurvepublic PEAction[] createActions(ActionDispatcher actionDispatcher, ActionLocalizer localizer, HitInfo hi)
createActions in interface ActionFactorycreateActions in class AbstractCurveactionDispatcher - dispatches events to the proper PECanvaslocalizer - i18n localizer for PEAction'shi - a HitInfo containing information related to the mouse-event which triggered the popup menu.public AbstractCustomizer createCustomizer()
AbstractCurvecreateCustomizer in interface CustomizerFactorycreateCustomizer in class AbstractCurveSubmit a bug : syd@jpicedt.org