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 and 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

All Methods Instance Methods Concrete Methods
`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`.
`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 Detail

#### 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 Detail

#### 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.