+
+
+ Comparator<IElement> nearestVerticesFirst = (IElement e1, IElement e2) -> {
+ // If there are any vertices in the elements, prefer those primarily.
+ DistrictNetworkVertexNode v1 = e1.getHint(DistrictNetworkVertexElement.KEY_DN_VERTEX_NODE);
+ DistrictNetworkVertexNode v2 = e2.getHint(DistrictNetworkVertexElement.KEY_DN_VERTEX_NODE);
+
+ // Don't reorder edges
+ if ((v1 == null && v2 == null))
+ return 0;
+
+ // Sort vertices in nearest first order
+ if (v1 != null && v2 != null) {
+ Rectangle2D b1 = v1.getBounds();
+ Rectangle2D b2 = v2.getBounds();
+ double dist1 = canvasPos.distanceSq(b1.getCenterX(), b1.getCenterY());
+ double dist2 = canvasPos.distanceSq(b2.getCenterX(), b2.getCenterY());
+ return dist1 < dist2 ? -1 : dist1 > dist2 ? 1 : 0;
+ }
+
+ // Always vertices before edges
+ return v1 != null && v2 == null ? -1 : 1;
+ };