Package org.eclipse.gef.geometry.planar

# Class Ring

java.lang.Object
org.eclipse.gef.geometry.planar.Ring

All Implemented Interfaces:
  `Serializable`, `Cloneable`, `IGeometry`, `IMultiShape`, `IRotatable<Ring>`, `IScalable<Ring>`, `ITranslatable<Ring>`

public class Ring extends Object implements ITranslatable<Ring>, IScalable<Ring>, IRotatable<Ring>
A combination of Polygons....

See Also:
  - Serialized Form

## Constructor Summary

Constructors
Constructor
Description
`Ring()`
Constructs a new empty `Ring`.
`Ring(Polygon... polygons)`
Constructs a new `Ring` from the given `Polygon`s.
`Ring(Ring other)`
Constructs a new `Ring` from the given other `Ring`.

## Method Summary

Modifier and Type
Method
Description
`Ring`
`add(Polygon p)`
Adds the given `Polygon` to this `Ring`.
`Object`
`clone()`
Overridden with public visibility as recommended within `Cloneable` .
`boolean`
`contains(IGeometry g)`
Checks if the given `IGeometry` is fully contained by this `IMultiShape`.
`boolean`
`contains(Point p)`
Returns whether the given `Point` is contained within this `IGeometry`.
`boolean`
`equals(Object obj)`
`protected Line[]`
`getAllEdges()`
Collects all edges of the internal `IShape`s.
`Rectangle`
`getBounds()`
Returns the smallest `Rectangle` fully enclosing this `IGeometry`.
`Ring`
`getCopy()`
Returns a new identical copy of this `IGeometry`.
`Polyline[]`
`getOutlines()`
Computes the outlines of this `IMultiShape`.
`Line[]`
`getOutlineSegments()`
Computes the outline segments of this `AbstractMultiShape`.
`Ring`
`getRotatedCCW(Angle angle)`
Rotates the calling object by specified `Angle` counter-clock-wise (CCW) around its center `Point`.
`Ring`
`getRotatedCCW(Angle angle, double cx, double cy)`
Rotates the calling object by the specified `Angle` counter-clock-wise (CCW) around the specified center `Point` (cx, cy).
`Ring`
`getRotatedCCW(Angle angle, Point center)`
Rotates the calling object by the specified `Angle` counter-clock-wise (CCW) around the specified center `Point`.
`Ring`
`getRotatedCW(Angle angle)`
Rotates the calling object by specified `Angle` clock-wise (CW) around its center `Point`.
`Ring`
`getRotatedCW(Angle angle, double cx, double cy)`
Rotates the calling object by the specified `Angle` clock-wise (CW) around the specified center `Point` (cx, cy).
`Ring`
`getRotatedCW(Angle angle, Point center)`
Rotates the calling object by the specified `Angle` clock-wise (CW) around the specified center `Point`.
`Ring`
`getScaled(double factor)`
Scales a copy of the calling object by the given factor relative to its center `Point`.
`Ring`
`getScaled(double fx, double fy)`
Scales a copy of the calling object by the given factors relative to its center `Point`.
`Ring`
`getScaled(double factor, double cx, double cy)`
Scales a copy of the calling object by the given factor relative to the given center `Point` (cx, cy).
`Ring`
`getScaled(double fx, double fy, double cx, double cy)`
Scales a copy of the calling object by the given factors relative to the given center `Point` (cx, cy).
`Ring`
`getScaled(double fx, double fy, Point center)`
Scales a copy of the calling object by the given factors relative to the given center `Point`.
`Ring`
`getScaled(double factor, Point center)`
Scales a copy of the calling object by the given factor relative to the given center `Point`.
`Polygon[]`
`getShapes()`
Returns the `IShape`s that constitute this `IMultiShape`.
`Ring`
`getTransformed(AffineTransform t)`
Default implementation returning a transformed `Path` representation of this `IGeometry`.
`Ring`
`getTranslated(double dx, double dy)`
Translates a copy of this object by the given values in x and y direction.
`Ring`
`getTranslated(Point d)`
Translates a copy of this object by the given `Point`.
`final int`
`hashCode()`
`Ring`
`rotateCCW(Angle angle)`
Directly rotates this `Ring` counter-clock-wise around its center `Point` by the given `Angle`.
`Ring`
`rotateCCW(Angle angle, double cx, double cy)`
Directly rotates this `Ring` counter-clock-wise around the given point (specified by cx and cy) by the given `Angle`.
`Ring`
`rotateCCW(Angle angle, Point center)`
Directly rotates this `Ring` counter-clock-wise around the given `Point` by the given `Angle`.
`Ring`
`rotateCW(Angle angle)`
Directly rotates this `Ring` clock-wise around its center `Point` by the given `Angle`.
`Ring`
`rotateCW(Angle angle, double cx, double cy)`
Directly rotates this `Ring` clock-wise around the given point (specified by cx and cy) by the given `Angle`.
`Ring`
`rotateCW(Angle angle, Point center)`
Directly rotates this `Ring` clock-wise around the given `Point` by the given `Angle`.
`Ring`
`scale(double factor)`
Scales the calling object by the given factor relative to its center `Point`.
`Ring`
`scale(double fx, double fy)`
Scales the calling object by the given factors relative to the given center `Point`.
`Ring`
`scale(double factor, double cx, double cy)`
Scales the calling object by the given factor relative to the given center `Point` (cx, cy).
`Ring`
`scale(double fx, double fy, double cx, double cy)`
Scales the calling object by the given factors relative to the given center `Point` (cx, cy).
`Ring`
`scale(double fx, double fy, Point center)`
Scales the calling object by the given factors relative to the given center `Point`.
`Ring`
`scale(double factor, Point center)`
Scales the calling object by the given factor relative to the given center `Point`.
`Path`
`toPath()`
Converts this `IGeometry` into a `Path` representation.
`boolean`
`touches(IGeometry g)`
Returns `true` if the input `IGeometry` touches this `IGeometry`, i.e. there is at least one common point.
`Ring`
`translate(double dx, double dy)`
Translates the object by the given values in x and y direction.
`Ring`
`translate(Point d)`
Translates the object by the given `Point`.

### Methods inherited from class java.lang.Object

`finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.eclipse.gef.geometry.planar.IGeometry

`touches`

## Constructor Details

### Ring

public Ring()
Constructs a new empty `Ring`.

### Ring

public Ring(Polygon... polygons)
Constructs a new `Ring` from the given `Polygon`s.

Parameters:
  `polygons` - The array of `Polygon`s from which this `Ring` is constructed.

### Ring

public Ring(Ring other)
Constructs a new `Ring` from the given other `Ring`. The internal `IShape`s of the other `Ring` are copied to prevent actions at a distance.

Parameters:
  `other` - The `Ring` from which this `Ring` is constructed.

## Method Details

### add

public Ring add(Polygon p)
Adds the given `Polygon` to this `Ring`.

Parameters:
  `p` - The `Polygon` which is added to this `Ring`.
Returns:
  `this` for convenience

### contains

public boolean contains(IGeometry g)
Description copied from interface: `IMultiShape`
Checks if the given `IGeometry` is fully contained by this `IMultiShape`.

Specified by:
  `contains` in interface `IMultiShape`
Parameters:
  `g` - The `IGeometry` which is tested for containment.
Returns:
  `true` if the `IGeometry` is contained by this `IMultiShape`, otherwise `false`

### equals

public boolean equals(Object obj)

Overrides:
  `equals` in class `Object`

### getAllEdges

protected Line[] getAllEdges()
Collects all edges of the internal `IShape`s. For a `Region` the internal `IShape`s are `Rectangle`s. For a `Ring` the internal `IShape`s are `Polygon`s (triangles). The internal edges are needed to determine inner and outer segments of the `IMultiShape`. Based on the outline of the `IMultiShape`, the outline intersections can be computed. These outline intersections are required to test if an `ICurve` is fully-contained by the `IMultiShape`.

Returns:
  the edges of all internal `IShape`s

### getBounds

public Rectangle getBounds()
Description copied from interface: `IGeometry`
Returns the smallest `Rectangle` fully enclosing this `IGeometry`.

Specified by:
  `getBounds` in interface `IGeometry`
Returns:
  A new `Rectangle` object that fully encloses this `IGeometry`

### getCopy

public Ring getCopy()
Description copied from interface: `IGeometry`
Returns a new identical copy of this `IGeometry`.

Specified by:
  `getCopy` in interface `IGeometry`
Returns:
  a copy identical to this `IGeometry`

### getRotatedCCW

public Ring getRotatedCCW(Angle angle)
Description copied from interface: `IRotatable`
Rotates the calling object by specified `Angle` counter-clock-wise (CCW) around its center `Point`. Does not necessarily return an object of the same type.

Specified by:
  `getRotatedCCW` in interface `IRotatable<Ring>`
Parameters:
  `angle` - rotation `Angle`
Returns:
  an `IGeometry` representing the result of the rotation

### getRotatedCCW

public Ring getRotatedCCW(Angle angle, double cx, double cy)
Description copied from interface: `IRotatable`
Rotates the calling object by the specified `Angle` counter-clock-wise (CCW) around the specified center `Point` (cx, cy). Does not necessarily return an object of the same type.

Specified by:
  `getRotatedCCW` in interface `IRotatable<Ring>`
Parameters:
  `angle` - rotation `Angle`
  `cx` - x-coordinate of the relative `Point` for the rotation
  `cy` - y-coordinate of the relative `Point` for the rotation
Returns:
  an `IGeometry` representing the result of the rotation

### getRotatedCCW

public Ring getRotatedCCW(Angle angle, Point center)
Description copied from interface: `IRotatable`
Rotates the calling object by the specified `Angle` counter-clock-wise (CCW) around the specified center `Point`. Does not necessarily return an object of the same type.

Specified by:
  `getRotatedCCW` in interface `IRotatable<Ring>`
Parameters:
  `angle` - rotation `Angle`
  `center` - relative `Point` for the rotation
Returns:
  an `IGeometry` representing the result of the rotation

### getRotatedCW

public Ring getRotatedCW(Angle angle)
Description copied from interface: `IRotatable`
Rotates the calling object by specified `Angle` clock-wise (CW) around its center `Point`. Does not necessarily return an object of the same type.

Specified by:
  `getRotatedCW` in interface `IRotatable<Ring>`
Parameters:
  `angle` - rotation `Angle`
Returns:
  an `IGeometry` representing the result of the rotation

### getRotatedCW

public Ring getRotatedCW(Angle angle, double cx, double cy)
Description copied from interface: `IRotatable`
Rotates the calling object by the specified `Angle` clock-wise (CW) around the specified center `Point` (cx, cy). Does not necessarily return an object of the same type.

Specified by:
  `getRotatedCW` in interface `IRotatable<Ring>`
Parameters:
  `angle` - rotation `Angle`
  `cx` - x-coordinate of the relative `Point` for the rotation
  `cy` - y-coordinate of the relative `Point` for the rotation
Returns:
  an `IGeometry` representing the result of the rotation

### getRotatedCW

public Ring getRotatedCW(Angle angle, Point center)
Description copied from interface: `IRotatable`
Rotates the calling object by the specified `Angle` clock-wise (CW) around the specified center `Point`. Does not necessarily return an object of the same type.

Specified by:
  `getRotatedCW` in interface `IRotatable<Ring>`
Parameters:
  `angle` - rotation `Angle`
  `center` - relative `Point` for the rotation
Returns:
  an `IGeometry` representing the result of the rotation

### getScaled

public Ring getScaled(double factor)
Description copied from interface: `IScalable`
Scales a copy of the calling object by the given factor relative to its center `Point`.

Specified by:
  `getScaled` in interface `IScalable<Ring>`
Parameters:
  `factor` - scale-factor
Returns:
  the new, scaled object

### getScaled

public Ring getScaled(double fx, double fy)
Description copied from interface: `IScalable`
Scales a copy of the calling object by the given factors relative to its center `Point`.

Specified by:
  `getScaled` in interface `IScalable<Ring>`
Parameters:
  `fx` - x-scale-factor
  `fy` - y-scale-factor
Returns:
  the new, scaled object

### getScaled

public Ring getScaled(double factor, double cx, double cy)
Description copied from interface: `IScalable`
Scales a copy of the calling object by the given factor relative to the given center `Point` (cx, cy).

Specified by:
  `getScaled` in interface `IScalable<Ring>`
Parameters:
  `factor` - scale-factor
  `cx` - x-coordinate of the relative `Point` for the scaling
  `cy` - y-coordinate of the relative `Point` for the scaling
Returns:
  the new, scaled object

### getScaled

public Ring getScaled(double fx, double fy, double cx, double cy)
Description copied from interface: `IScalable`
Scales a copy of the calling object by the given factors relative to the given center `Point` (cx, cy).

Specified by:
  `getScaled` in interface `IScalable<Ring>`
Parameters:
  `fx` - x-scale-factor
  `fy` - y-scale-factor
  `cx` - x-coordinate of the relative `Point` for the scaling
  `cy` - y-coordinate of the relative `Point` for the scaling
Returns:
  the new, scaled object

### getScaled

public Ring getScaled(double fx, double fy, Point center)
Description copied from interface: `IScalable`
Scales a copy of the calling object by the given factors relative to the given center `Point`.

Specified by:
  `getScaled` in interface `IScalable<Ring>`
Parameters:
  `fx` - x-scale-factor
  `fy` - y-scale-factor
  `center` - relative `Point` for the scaling
Returns:
  the new, scaled object

### getScaled

public Ring getScaled(double factor, Point center)
Description copied from interface: `IScalable`
Scales a copy of the calling object by the given factor relative to the given center `Point`.

Specified by:
  `getScaled` in interface `IScalable<Ring>`
Parameters:
  `factor` - scale-factor
  `center` - relative `Point` for the scaling
Returns:
  the new, scaled object

### getShapes

public Polygon[] getShapes()
Description copied from interface: `IMultiShape`
Returns the `IShape`s that constitute this `IMultiShape`.

Specified by:
  `getShapes` in interface `IMultiShape`
Returns:
  an array of `IShape`s, representing the parts that make up this `IMultiShape`.

### getTransformed

public Ring getTransformed(AffineTransform t)
Default implementation returning a transformed `Path` representation of this `IGeometry`. Subclasses may override this method to return a more specific representation.

Specified by:
  `getTransformed` in interface `IGeometry`
Parameters:
  `t` - The `AffineTransform` to be applied
Returns:
  a transformed `Path` representation of this `IGeometry`

### getTranslated

public Ring getTranslated(double dx, double dy)
Description copied from interface: `ITranslatable`
Translates a copy of this object by the given values in x and y direction.

Specified by:
  `getTranslated` in interface `ITranslatable<Ring>`
Parameters:
  `dx` - x-translation
  `dy` - y-translation
Returns:
  a new, translated object

### getTranslated

public Ring getTranslated(Point d)
Description copied from interface: `ITranslatable`
Translates a copy of this object by the given `Point`.

Specified by:
  `getTranslated` in interface `ITranslatable<Ring>`
Parameters:
  `d` - translation `Point`
Returns:
  a new, translated object

### rotateCCW

public Ring rotateCCW(Angle angle)
Directly rotates this `Ring` counter-clock-wise around its center `Point` by the given `Angle`. Direct adaptation means, that `this` `PolyBezier` is modified in-place.

Parameters:
  `angle` - rotation `Angle`
Returns:
  `this` for convenience

### rotateCCW

public Ring rotateCCW(Angle angle, double cx, double cy)
Directly rotates this `Ring` counter-clock-wise around the given point (specified by cx and cy) by the given `Angle`. Direct adaptation means, that `this` `PolyBezier` is modified in-place.

Parameters:
  `angle` - rotation `Angle`
  `cx` - x-coordinate of the `Point` to rotate around
  `cy` - y-coordinate of the `Point` to rotate around
Returns:
  `this` for convenience

### rotateCCW

public Ring rotateCCW(Angle angle, Point center)
Directly rotates this `Ring` counter-clock-wise around the given `Point` by the given `Angle`. Direct adaptation means, that `this` `PolyBezier` is modified in-place.

Parameters:
  `angle` - rotation `Angle`
  `center` - `Point` to rotate around
Returns:
  `this` for convenience

### rotateCW

public Ring rotateCW(Angle angle)
Directly rotates this `Ring` clock-wise around its center `Point` by the given `Angle`. Direct adaptation means, that `this` `PolyBezier` is modified in-place.

Parameters:
  `angle` - rotation `Angle`
Returns:
  `this` for convenience

### rotateCW

public Ring rotateCW(Angle angle, double cx, double cy)
Directly rotates this `Ring` clock-wise around the given point (specified by cx and cy) by the given `Angle`. Direct adaptation means, that `this` `PolyBezier` is modified in-place.

Parameters:
  `angle` - rotation `Angle`
  `cx` - x-coordinate of the `Point` to rotate around
  `cy` - y-coordinate of the `Point` to rotate around
Returns:
  `this` for convenience

### rotateCW

public Ring rotateCW(Angle angle, Point center)
Directly rotates this `Ring` clock-wise around the given `Point` by the given `Angle`. Direct adaptation means, that `this` `PolyBezier` is modified in-place.

Parameters:
  `angle` - rotation `Angle`
  `center` - `Point` to rotate around
Returns:
  `this` for convenience

### scale

public Ring scale(double factor)
Description copied from interface: `IScalable`
Scales the calling object by the given factor relative to its center `Point`.

Specified by:
  `scale` in interface `IScalable<Ring>`
Parameters:
  `factor` - scale-factor
Returns:
  `this` for convenience

### scale

public Ring scale(double fx, double fy)
Description copied from interface: `IScalable`
Scales the calling object by the given factors relative to the given center `Point`.

Specified by:
  `scale` in interface `IScalable<Ring>`
Parameters:
  `fx` - x-scale-factor
  `fy` - y-scale-factor
Returns:
  `this` for convenience

### scale

public Ring scale(double factor, double cx, double cy)
Description copied from interface: `IScalable`
Scales the calling object by the given factor relative to the given center `Point` (cx, cy).

Specified by:
  `scale` in interface `IScalable<Ring>`
Parameters:
  `factor` - scale-factor
  `cx` - x-coordinate of the relative `Point` for the scaling
  `cy` - y-coordinate of the relative `Point` for the scaling
Returns:
  `this` for convenience

### scale

public Ring scale(double fx, double fy, double cx, double cy)
Description copied from interface: `IScalable`
Scales the calling object by the given factors relative to the given center `Point` (cx, cy).

Specified by:
  `scale` in interface `IScalable<Ring>`
Parameters:
  `fx` - x-scale-factor
  `fy` - y-scale-factor
  `cx` - x-coordinate of the relative `Point` for the scaling
  `cy` - y-coordinate of the relative `Point` for the scaling
Returns:
  `this` for convenience

### scale

public Ring scale(double fx, double fy, Point center)
Description copied from interface: `IScalable`
Scales the calling object by the given factors relative to the given center `Point`.

Specified by:
  `scale` in interface `IScalable<Ring>`
Parameters:
  `fx` - x-scale-factor
  `fy` - y-scale-factor
  `center` - relative `Point` for the scaling
Returns:
  `this` for convenience

### scale

public Ring scale(double factor, Point center)
Description copied from interface: `IScalable`
Scales the calling object by the given factor relative to the given center `Point`.

Specified by:
  `scale` in interface `IScalable<Ring>`
Parameters:
  `factor` - scale-factor
  `center` - relative `Point` for the scaling
Returns:
  `this` for convenience

### translate

public Ring translate(double dx, double dy)
Description copied from interface: `ITranslatable`
Translates the object by the given values in x and y direction.

Specified by:
  `translate` in interface `ITranslatable<Ring>`
Parameters:
  `dx` - x-translation
  `dy` - y-translation
Returns:
  `this` for convenience

### translate

public Ring translate(Point d)
Description copied from interface: `ITranslatable`
Translates the object by the given `Point`.

Specified by:
  `translate` in interface `ITranslatable<Ring>`
Parameters:
  `d` - translation `Point`
Returns:
  `this` for convenience

### contains

public boolean contains(Point p)
Description copied from interface: `IGeometry`
Returns whether the given `Point` is contained within this `IGeometry`. This includes the case that the `Point` lies on the border of this `IGeometry`.

Specified by:
  `contains` in interface `IGeometry`
Parameters:
  `p` - The `Point` being tested for containment
Returns:
  `true` if the `Point` is contained within this `IGeometry`, `false` otherwise.

### getOutlines

public Polyline[] getOutlines()
Description copied from interface: `IMultiShape`

Computes the outlines of this `IMultiShape`.

The outlines are returned as an array of `ICurve`s. For every closed outline of this `IMultiShape` one `ICurve` is returned.

Specified by:
  `getOutlines` in interface `IMultiShape`
Returns:
  an array of `ICurve`s, one for each closed outline

### getOutlineSegments

public Line[] getOutlineSegments()

Computes the outline segments of this `AbstractMultiShape`.

The outline segments of this `AbstractMultiShape` are those outline segments of the internal `IShape`s that only exist once.

Specified by:
  `getOutlineSegments` in interface `IMultiShape`
Returns:
  the outline segments of this `AbstractMultiShape`

### toPath

public Path toPath()
Description copied from interface: `IGeometry`
Converts this `IGeometry` into a `Path` representation.

Specified by:
  `toPath` in interface `IGeometry`
Returns:
  A new `Path` representation for this `IGeometry`.

### clone

public Object clone()
Overridden with public visibility as recommended within `Cloneable` .

Overrides:
  `clone` in class `Object`

### hashCode

public final int hashCode()

Overrides:
  `hashCode` in class `Object`
See Also:
  - `Object.hashCode()`

### touches

public boolean touches(IGeometry g)
Description copied from interface: `IGeometry`
Returns `true` if the input `IGeometry` touches this `IGeometry`, i.e. there is at least one common point.

Specified by:
  `touches` in interface `IGeometry`
Parameters:
  `g` - The `IGeometry` for the intersection test
Returns:
  `true` if the input `IGeometry` and this `IGeometry` have at least one common point.