org.apache.commons.math3.geometry.euclidean.twod

## Class NestedLoops

- java.lang.Object
- - org.apache.commons.math3.geometry.euclidean.twod.NestedLoops

-      class NestedLoops
      extends Object

  This class represent a tree of nested 2D boundary loops.

  This class is used for piecewise polygons construction. Polygons are built using the outline edges as representative of boundaries, the orientation of these lines are meaningful. However, we want to allow the user to specify its outline loops without having to take care of this orientation. This class is devoted to correct mis-oriented loops.

  Orientation is computed assuming the piecewise polygon is finite, i.e. the outermost loops have their exterior side facing points at infinity, and hence are oriented counter-clockwise. The orientation of internal loops is computed as the reverse of the orientation of their immediate surrounding loop.

  Since:
    3.0
  Version:
    $Id: NestedLoops.java 1416643 2012-12-03 19:37:14Z tn $

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private Vector2D[]` | `loop` Boundary loop.
    `private boolean` | `originalIsClockwise` Indicator for original loop orientation.
    `private Region<Euclidean2D>` | `polygon` Polygon enclosing a finite region.
    `private ArrayList<NestedLoops>` | `surrounded` Surrounded loops.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `NestedLoops()` Simple Constructor.
    `private` | `NestedLoops(Vector2D[] loop)` Constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `private void` | `add(NestedLoops node)` Add a loop in a tree.
    `void` | `add(Vector2D[] bLoop)` Add a loop in a tree.
    `void` | `correctOrientation()` Correct the orientation of the loops contained in the tree.
    `private void` | `setClockWise(boolean clockwise)` Set the loop orientation.

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### loop

          private Vector2D[] loop

      Boundary loop.

    - #### surrounded

          private ArrayList<NestedLoops> surrounded

      Surrounded loops.

    - #### polygon

          private Region<Euclidean2D> polygon

      Polygon enclosing a finite region.

    - #### originalIsClockwise

          private boolean originalIsClockwise

      Indicator for original loop orientation.

  - ### Constructor Detail

    - #### NestedLoops

          public NestedLoops()

      Simple Constructor.

      Build an empty tree of nested loops. This instance will become the root node of a complete tree, it is not associated with any loop by itself, the outermost loops are in the root tree child nodes.

    - #### NestedLoops

          private NestedLoops(Vector2D[] loop)
                       throws MathIllegalArgumentException

      Constructor.

      Build a tree node with neither parent nor children

      Parameters:
        `loop` - boundary loop (will be reversed in place if needed)
      Throws:
        `MathIllegalArgumentException` - if an outline has an open boundary loop

  - ### Method Detail

    - #### add

          public void add(Vector2D[] bLoop)
                   throws MathIllegalArgumentException

      Add a loop in a tree.
      Parameters:
        `bLoop` - boundary loop (will be reversed in place if needed)
      Throws:
        `MathIllegalArgumentException` - if an outline has crossing boundary loops or open boundary loops

    - #### add

          private void add(NestedLoops node)
                    throws MathIllegalArgumentException

      Add a loop in a tree.
      Parameters:
        `node` - boundary loop (will be reversed in place if needed)
      Throws:
        `MathIllegalArgumentException` - if an outline has boundary loops that cross each other

    - #### correctOrientation

          public void correctOrientation()

      Correct the orientation of the loops contained in the tree.

      This is this method that really inverts the loops that where provided through the `add` method if they are mis-oriented

    - #### setClockWise

          private void setClockWise(boolean clockwise)

      Set the loop orientation.
      Parameters:
        `clockwise` - if true, the loop should be set to clockwise orientation

Copyright (c) 2003-2013 Apache Software Foundation