Class 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
    • 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.
      • 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 java.util.List<NestedLoops> surrounded
        Surrounded loops.
      • 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

      • 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