Package org.eclipse.gef.geometry.planar
Class Path
- java.lang.Object
-
- org.eclipse.gef.geometry.planar.Path
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,IGeometry
public class Path extends java.lang.Object implements IGeometry
Represents the geometric shape of a path, which may consist of independent subgraphs. Note that while all manipulations (e.g. within shrink, expand) within this class are based on double precision, all comparisons (e.g. within contains, intersects, equals, etc.) are based on a limited precision (with an accuracy defined withinPrecisionUtils
) to compensate for rounding effects.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Path.Segment
Representation for different types ofPath.Segment
s.
-
Field Summary
Fields Modifier and Type Field Description static int
WIND_EVEN_ODD
Winding rule for determining the interior of thePath
.static int
WIND_NON_ZERO
Winding rule for determining the interior of thePath
.
-
Constructor Summary
Constructors Constructor Description Path()
Creates a new empty path with a default winding rule ofWIND_NON_ZERO
.Path(int windingRule)
Creates a new empty path with given winding rule.Path(int windingRule, Path.Segment... segments)
Creates a path from the given segments, using the given winding rule.Path(Path.Segment... segments)
Creates a path from the given segments, using the default winding ruleWIND_NON_ZERO
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Path
add(java.util.List<Path.Segment> segments)
Path
add(Path.Segment... segments)
Adds the givenPath.Segment
s to thisPath
.static Path
add(Path pa, Path pb)
Unions the two specifiedPath
sjava.lang.Object
clone()
Overridden with public visibility as recommended withinCloneable
.Path
close()
Closes the current sub-path by drawing a straight line (line-to) to the location of the last move to.boolean
contains(Point p)
boolean
contains(Rectangle r)
Path
cubicTo(double control1X, double control1Y, double control2X, double control2Y, double x, double y)
Adds a cubic Bezier curve segment from the current position to the specified end position, using the two provided control points as Bezier control points.boolean
equals(java.lang.Object obj)
static Path
exclusiveOr(Path pa, Path pb)
Computes the area covered by the first or the second but not both given areas.Rectangle
getBounds()
Path
getCopy()
Returns a new identical copy of thisIGeometry
.java.util.List<ICurve>
getOutlines()
Path.Segment[]
getSegments()
Returns the segments that make up this path.Path
getTransformed(AffineTransform t)
int
getWindingRule()
Returns the winding rule used to determine the interior of this path.int
hashCode()
static Path
intersect(Path pa, Path pb)
Intersects the given areas.Path
lineTo(double x, double y)
Adds a straight line segment from the current position to the specified end position.Path
moveTo(double x, double y)
Changes the current position.Path
quadTo(double controlX, double controlY, double x, double y)
Adds a quadratic curve segment from the current position to the specified end position, using the provided control point as a parametric control point.Path
reset()
Resets the path to be empty.Path
setWindingRule(int windingRule)
Sets the winding rule of thisPath
to the passed-in integer constant which is either of:WIND_NON_ZERO
(default)WIND_EVEN_ODD
static Path
subtract(Path pa, Path pb)
Subtracts the second given area from the first given area.Path
toPath()
boolean
touches(IGeometry g)
boolean
touches(Rectangle r)
-
-
-
Field Detail
-
WIND_EVEN_ODD
public static final int WIND_EVEN_ODD
Winding rule for determining the interior of thePath
. Indicates that aPoint
is regarded to lie inside thePath
, if any ray starting in thatPoint
and pointing to infinity crosses thePath.Segment
s of thePath
an odd number of times.- See Also:
- Constant Field Values
-
WIND_NON_ZERO
public static final int WIND_NON_ZERO
Winding rule for determining the interior of thePath
. Indicates that aPoint
is regarded to lie inside thePath
, if any ray starting from thatPoint
and pointing to infinity is crossed byPath
Path.Segment
s a different number of times in the counter-clockwise direction than in the clockwise direction.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
Path
public Path()
Creates a new empty path with a default winding rule ofWIND_NON_ZERO
.
-
Path
public Path(int windingRule)
Creates a new empty path with given winding rule.- Parameters:
windingRule
- the winding rule to use; one ofWIND_EVEN_ODD
orWIND_NON_ZERO
-
Path
public Path(int windingRule, Path.Segment... segments)
Creates a path from the given segments, using the given winding rule.- Parameters:
windingRule
- the winding rule to use; one ofWIND_EVEN_ODD
orWIND_NON_ZERO
segments
- The segments to initialize the path with
-
Path
public Path(Path.Segment... segments)
Creates a path from the given segments, using the default winding ruleWIND_NON_ZERO
.- Parameters:
segments
- The segments to initialize the path with
-
-
Method Detail
-
add
public static Path add(Path pa, Path pb)
Unions the two specifiedPath
s- Parameters:
pa
- the first area to addpb
- the second area to add- Returns:
- the sum of the areas
-
exclusiveOr
public static Path exclusiveOr(Path pa, Path pb)
Computes the area covered by the first or the second but not both given areas.- Parameters:
pa
- the first area to compute the xor forpb
- the second area to compute the xor for- Returns:
- the exclusive-or of the areas
-
intersect
public static Path intersect(Path pa, Path pb)
Intersects the given areas.- Parameters:
pa
- the first area to intersectpb
- the second area to intersect- Returns:
- the intersection of the areas, i.e. the area covered by both areas
-
subtract
public static Path subtract(Path pa, Path pb)
Subtracts the second given area from the first given area.- Parameters:
pa
- the area to subtract frompb
- the area to subtract- Returns:
- the area covered by the first but not the second given area
-
add
public final Path add(java.util.List<Path.Segment> segments)
- Parameters:
segments
- ThePath.Segment
s to add to thisPath
.- Returns:
this
for convenience.
-
add
public final Path add(Path.Segment... segments)
Adds the givenPath.Segment
s to thisPath
.- Parameters:
segments
- ThePath.Segment
s to add to thisPath
.- Returns:
this
for convenience.
-
close
public final Path close()
Closes the current sub-path by drawing a straight line (line-to) to the location of the last move to.- Returns:
this
for convenience
-
contains
public boolean contains(Rectangle r)
-
cubicTo
public final Path cubicTo(double control1X, double control1Y, double control2X, double control2Y, double x, double y)
Adds a cubic Bezier curve segment from the current position to the specified end position, using the two provided control points as Bezier control points.- Parameters:
control1X
- The x-coordinate of the first Bezier control pointcontrol1Y
- The y-coordinate of the first Bezier control pointcontrol2X
- The x-coordinate of the second Bezier control pointcontrol2Y
- The y-coordinate of the second Bezier control pointx
- The x-coordinate of the desired target pointy
- The y-coordinate of the desired target point- Returns:
this
for convenience
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
getCopy
public Path getCopy()
Description copied from interface:IGeometry
Returns a new identical copy of thisIGeometry
.
-
getOutlines
public java.util.List<ICurve> getOutlines()
Returns aList
ofICurve
s, representing the outline ofthis
Path
. For everyPath.Segment.LINE_TO
,Path.Segment.QUAD_TO
,Path.Segment.CUBIC_TO
, andPath.Segment.CLOSE
, oneBezierCurve
is created that resembles that segment.
-
getSegments
public Path.Segment[] getSegments()
Returns the segments that make up this path.- Returns:
- an array of
Path.Segment
s representing the segments of this path
-
getTransformed
public Path getTransformed(AffineTransform t)
Default implementation returning a transformedPath
representation of thisIGeometry
. Subclasses may override this method to return a more specific representation.- Specified by:
getTransformed
in interfaceIGeometry
- Parameters:
t
- TheAffineTransform
to be applied- Returns:
- a transformed
Path
representation of thisIGeometry
-
getWindingRule
public int getWindingRule()
Returns the winding rule used to determine the interior of this path.- Returns:
- the winding rule, i.e. one of
WIND_EVEN_ODD
orWIND_NON_ZERO
-
lineTo
public final Path lineTo(double x, double y)
Adds a straight line segment from the current position to the specified end position.- Parameters:
x
- The x-coordinate of the desired target pointy
- The y-coordinate of the desired target point- Returns:
this
for convenience
-
moveTo
public final Path moveTo(double x, double y)
Changes the current position. A newPath.Segment
of typePath.Segment.MOVE_TO
is added to this Path.- Parameters:
x
- The x-coordinate of the desired target pointy
- The y-coordinate of the desired target point- Returns:
this
for convenience
-
quadTo
public final Path quadTo(double controlX, double controlY, double x, double y)
Adds a quadratic curve segment from the current position to the specified end position, using the provided control point as a parametric control point.- Parameters:
controlX
- The x-coordinate of the control pointcontrolY
- The y-coordinate of the control pointx
- The x-coordinate of the desired target pointy
- The y-coordinate of the desired target point- Returns:
this
for convenience
-
reset
public final Path reset()
Resets the path to be empty.- Returns:
this
for convenience
-
setWindingRule
public Path setWindingRule(int windingRule)
Sets the winding rule of thisPath
to the passed-in integer constant which is either of:WIND_NON_ZERO
(default)WIND_EVEN_ODD
- Parameters:
windingRule
- the new winding rule of thisPath
- Returns:
this
for convenience
-
toPath
public Path toPath()
Description copied from interface:IGeometry
- Specified by:
toPath
in interfaceIGeometry
- Returns:
- A new
Path
representation for thisIGeometry
. - See Also:
IGeometry.toPath()
-
touches
public boolean touches(Rectangle r)
-
clone
public java.lang.Object clone()
Overridden with public visibility as recommended withinCloneable
.- Overrides:
clone
in classjava.lang.Object
-
hashCode
public final int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
- See Also:
Object.hashCode()
-
-