public int compare(VHalfEdge e1, VHalfEdge e2) { if (e1.getLength() > e2.getLength()) return -1; else if (e1.getLength() < e2.getLength()) return 1; else { // Note: duplicates are removed from the TreeMap that uses // this comparator - so we really don't want to edges to // be considered identical (not specified in java documentation) if (e1.getY() < e2.getY()) return -1; else if (e1.getY() > e2.getY()) return 1; else if (e1.getX() < e2.getX()) return -1; else if (e1.getX() > e2.getX()) return 1; else return 0; } }
public static void removeEdgesInOrderFromOuterBoundary(VHalfEdge _outeredge, int length_cutoff) { // Collect a list of outer edges OrderedEdgeList outeredges = new OrderedEdgeList(_outeredge); // System.out.println(); // System.out.println("************************************************"); // System.out.println("*** removeEdgesInOrderFromOuterBoundary()"); // Remove edges until we can't remove any more boolean haschanged; int edgesremoved = 0; do { haschanged = false; Iterator<VHalfEdge> iter = outeredges.values().iterator(); while (iter.hasNext()) { VHalfEdge edge = iter.next(); // System.out.println("Considering removal of edge (" + edge.vertex.id + "," + // edge.getConnectedVertex().id + ") - length=" + edge.getLength()); // Return if the length of the given edge is less than or equal to // the minimum value allowed (i.e. the cut-off value) if (edge.getLength() <= length_cutoff) { return; } // Cannot remove if removal would leave only _one_ edge // left coming from the given vertex. if (edge.vertex.getEdges().size() <= 2 || edge.getConnectedVertex().getEdges().size() <= 2) { // System.out.println("Irregular"); continue; } // Cannot remove if removal would leave a _point_ where // _two shapes_ are connected VHalfEdge inneredge = edge.getConnectedVertex().getEdge(edge.vertex); VVertex innertriangletopvertex = inneredge.next.getConnectedVertex(); if (innertriangletopvertex.getEdge(TriangulationRepresentation.OUTER_VERTEXNUMBER) != null) { // System.out.println("Irregular"); continue; } // Remove the edge if it's valid to do so iter.remove(); edgesremoved++; removeSingleOuterEdge(edge, outeredges); haschanged = true; break; } } while ((haschanged) && (TriangulationRepresentation.MAX_EDGES_TO_REMOVE < 0 || edgesremoved < TriangulationRepresentation.MAX_EDGES_TO_REMOVE)); }