concept G22PointOfInterest > ConceptWithChangeListeners { S imageMD5; Pt pt; BlurAndPosterizeSettings bnpSettings; //Set labels; S source; S labelsText; toString { ret commaCombine("Point of interest " + id, labelsText); } G22Utils g22utils() { ret main g22utils(this); } BufferedImage image() { var img = galleryImage(); ret img?.image(); } G22GalleryImage galleryImage() { ret g22utils().galleryImageForMD5(imageMD5); } G22DataWrangler wrangler() { ret wranglerStealingFrom(null); } G22DataWrangler wranglerStealingFrom(G22PointOfInterest otherPOI) { new G22DataWrangler wrangler; wrangler.stealingFrom(otherPOI?.wrangler); wrangler.timings(g22utils().functionTimings()); wrangler.inputImage(image()); wrangler.importSettings(bnpSettings); ret wrangler; } IImageRegion regionAroundPoint(G22DataWrangler wrangler default wrangler()) { var rm = wrangler.regionMaker(); ret rm.getRegion(rm.regionAt(pt)); } }