/** Links two polygon vertices using a bridge. **/ private static Node splitPolygon(final Node a, final Node b) { final Node a2 = new Node(a); final Node b2 = new Node(b); final Node an = a.next; final Node bp = b.previous; a.next = b; a.nextZ = b; b.previous = a; b.previousZ = a; a2.next = an; a2.nextZ = an; an.previous = a2; an.previousZ = a2; b2.next = a2; b2.nextZ = a2; a2.previous = b2; a2.previousZ = b2; bp.next = b2; bp.nextZ = b2; return b2; }
/** Creates a node and optionally links it with a previous node in a circular doubly-linked list */ private static Node insertNode(final Polygon polygon, int index, int vertexIndex, final Node lastNode) { final Node node = new Node(polygon, index, vertexIndex); if(lastNode == null) { node.previous = node; node.previousZ = node; node.next = node; node.nextZ = node; } else { node.next = lastNode.next; node.nextZ = lastNode.next; node.previous = lastNode; node.previousZ = lastNode; lastNode.next.previous = node; lastNode.nextZ.previousZ = node; lastNode.next = node; lastNode.nextZ = node; } return node; }