Class NestedLoops
- java.lang.Object
-
- org.apache.commons.math3.geometry.euclidean.twod.NestedLoops
-
class NestedLoops extends java.lang.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
-
-
Field Summary
Fields Modifier and Type Field Description private Vector2D[]
loop
Boundary loop.private boolean
originalIsClockwise
Indicator for original loop orientation.private Region<Euclidean2D>
polygon
Polygon enclosing a finite region.private java.util.List<NestedLoops>
surrounded
Surrounded loops.private double
tolerance
Tolerance below which points are considered identical.
-
Constructor Summary
Constructors Modifier Constructor Description (package private)
NestedLoops(double tolerance)
Simple Constructor.private
NestedLoops(Vector2D[] loop, double tolerance)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method 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.
-
-
-
Field Detail
-
loop
private Vector2D[] loop
Boundary loop.
-
surrounded
private java.util.List<NestedLoops> surrounded
Surrounded loops.
-
polygon
private Region<Euclidean2D> polygon
Polygon enclosing a finite region.
-
originalIsClockwise
private boolean originalIsClockwise
Indicator for original loop orientation.
-
tolerance
private final double tolerance
Tolerance below which points are considered identical.
-
-
Constructor Detail
-
NestedLoops
NestedLoops(double tolerance)
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.
- Parameters:
tolerance
- tolerance below which points are considered identical- Since:
- 3.3
-
NestedLoops
private NestedLoops(Vector2D[] loop, double tolerance) throws MathIllegalArgumentException
Constructor.Build a tree node with neither parent nor children
- Parameters:
loop
- boundary loop (will be reversed in place if needed)tolerance
- tolerance below which points are considered identical- Throws:
MathIllegalArgumentException
- if an outline has an open boundary loop- Since:
- 3.3
-
-
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
-
-