@Override public void render(BufferedImage img, Region region) { TreeFacet treeFacet = region.getFacet(TreeFacet.class); Graphics2D g = img.createGraphics(); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); for (Entry<BaseVector3i, TreeGenerator> entry : treeFacet.getRelativeEntries().entrySet()) { TreeGenerator treeGen = entry.getValue(); int wx = entry.getKey().getX(); int wz = entry.getKey().getZ(); int r = radiusFunc.apply(treeGen); Color color = colorFunc.apply(treeGen); // the fill area is offset by +1/+1 pixel // otherwise it will bleed out at the top left corner g.setColor(color); g.fillOval(wx - r + 1, wz - r + 1, r * 2 - 1, r * 2 - 1); g.setColor(color.darker()); g.drawOval(wx - r, wz - r, r * 2, r * 2); } g.dispose(); }
@Override public void render(BufferedImage img, Region region) { FloraFacet treeFacet = region.getFacet(FloraFacet.class); Graphics2D g = img.createGraphics(); int width = img.getWidth(); ColorModel colorModel = img.getColorModel(); ColorBlender blender = ColorBlenders.forColorModel(ColorModels.RGBA, colorModel); DataBufferInt dataBuffer = (DataBufferInt) img.getRaster().getDataBuffer(); for (Entry<BaseVector3i, FloraType> entry : treeFacet.getRelativeEntries().entrySet()) { FloraType treeGen = entry.getValue(); int wx = entry.getKey().getX(); int wz = entry.getKey().getZ(); Color color = colorFunc.apply(treeGen); int src = color.rgba(); int dst = dataBuffer.getElem(wz * width + wx); int mix = blender.blend(src, dst); dataBuffer.setElem(wz * width + wx, mix); } g.dispose(); }
/** * @param pos * @return Whether this region includes pos */ public boolean encompasses(BaseVector3i pos) { return encompasses(pos.getX(), pos.getY(), pos.getZ()); }
BaseVector3i treePos = entry.getKey(); picker.offer(treePos.getX(), treePos.getZ(), treeGen);
@Override public String getWorldText(Region region, int wx, int wy) { FloraFacet floraFacet = region.getFacet(FloraFacet.class); Region3i worldRegion = floraFacet.getWorldRegion(); Region3i relativeRegion = floraFacet.getRelativeRegion(); int rx = wx - worldRegion.minX() + relativeRegion.minX(); int rz = wy - worldRegion.minZ() + relativeRegion.minZ(); for (Entry<BaseVector3i, FloraType> entry : floraFacet.getRelativeEntries().entrySet()) { BaseVector3i treePos = entry.getKey(); if (treePos.getX() == rx && treePos.getZ() == rz) { FloraType flora = entry.getValue(); return labelFunc.apply(flora); } } return "-no vegetation-"; }