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

java.lang.Object
  extended by 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
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
  NestedLoops()
          Simple Constructor.
private NestedLoops(Vector2D[] loop)
          Constructor.
 
Method Summary
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