static CirclesAndLines calFromCoordinates(Map coordinates, L relations) { Rect r = mergeRects(map(f ptToRect, values(coordinates))); BufferedImage img = newBufferedImage(20, 20, Color.white); new CirclesAndLines cal; new HashMap circles; for (S node : keys(coordinates)) { Pt p = coordinates.get(node); double x = ((p.x-r.x)/(double) r.w)*0.8+0.1; double y = ((p.y-r.y)/(double) r.h)*0.7+0.1; circles.put(node, cal.circle(img, x, y, node)); } for (Relation r : relations) if (r.is("An arrow from * to *")) { Circle a = circles.get(r.a()), b = circles.get(r.b()); if (a != null && b != null) cal.addArrow(a, b); } ret cal; }