!7 sclass Circle { BufferedImage img; double x, y; } sclass Line { Circle a, b; } static new L circles; static new L lines; static Circle addCircle(S imageID, double x, double y) { ret addAndReturn(circles, nu(Circle, +x, +y, img := loadImage2(imageID))); } static Line addLine(Circle a, Circle b) { ret addAndReturn(lines, nu(Line, +a, +b)); } p-pretty /* although that's debatable given the detailed person */ { Circle a = addCircle(#1007291, 1/3.0, 0.5); Circle b = addCircle(#1007292, 2/3.0, 0.5); addLine(a, b); final ImageSurface canvas = jcanvas(func(int w, int h) { BufferedImage bg = renderTiledBackground(#1007195, w, h); for (Line l : lines) drawThoughtLine(bg, l.a.img, iround(l.a.x*w), iround(l.a.y*h), l.b.img, iround(l.b.x*w), iround(l.b.y*h)); for (Circle c : circles) drawThoughtCircle(bg, c.img, iround(c.x*w), iround(c.y*h)); ret bg; }); disableImageSurfaceSelector(canvas); showFrame(canvas); }