package com.revolsys.swing.map.layer.pointcloud; import java.awt.AlphaComposite; import java.awt.Composite; import java.awt.Graphics2D; import com.revolsys.awt.WebColors; import com.revolsys.collection.map.MapEx; import com.revolsys.elevation.cloud.PointCloud; import com.revolsys.geometry.model.BoundingBox; import com.revolsys.geometry.model.Polygon; import com.revolsys.io.BaseCloseable; import com.revolsys.raster.GeoreferencedImage; import com.revolsys.swing.map.Viewport2D; import com.revolsys.swing.map.layer.AbstractLayerRenderer; import com.revolsys.swing.map.layer.record.style.GeometryStyle; import com.revolsys.util.Cancellable; public class PointCloudLayerRenderer extends AbstractLayerRenderer<PointCloudLayer> { private static final GeometryStyle STYLE_BOUNDING_BOX = GeometryStyle.line(WebColors.Green, 1); public static void render(final Viewport2D viewport, final Graphics2D graphics, final GeoreferencedImage image, final boolean useTransform) { if (image != null) { final BoundingBox viewBoundingBox = viewport.getBoundingBox(); final int viewWidth = viewport.getViewWidthPixels(); final int viewHeight = viewport.getViewHeightPixels(); image.drawImage(graphics, viewBoundingBox, viewWidth, viewHeight, useTransform); } } public static void renderAlpha(final Viewport2D viewport, final Graphics2D graphics, final GeoreferencedImage image, final boolean useTransform, final double alpha) { final Composite composite = graphics.getComposite(); try ( BaseCloseable transformCloseable = viewport.setUseModelCoordinates(graphics, false)) { AlphaComposite alphaComposite = AlphaComposite.SrcOver; if (alpha < 1) { alphaComposite = alphaComposite.derive((float)alpha); } graphics.setComposite(alphaComposite); render(viewport, graphics, image, useTransform); } finally { graphics.setComposite(composite); } } public static void renderDifferentCoordinateSystem(final Viewport2D viewport, final Graphics2D graphics, final BoundingBox boundingBox) { if (!boundingBox.isSameCoordinateSystem(viewport)) { try ( BaseCloseable transformCloseable = viewport.setUseModelCoordinates(true)) { final Polygon polygon = boundingBox.toPolygon(0); viewport.drawGeometryOutline(polygon, STYLE_BOUNDING_BOX); } } } public PointCloudLayerRenderer(final PointCloudLayer layer) { super("raster", layer); } @Override public void render(final Viewport2D viewport, final Cancellable cancellable, final PointCloudLayer layer) { // TODO cancellable final double scaleForVisible = viewport.getScaleForVisible(); if (layer.isVisible(scaleForVisible)) { if (!layer.isEditable()) { final PointCloud<?> pointCloud = layer.getPointCloud(); if (pointCloud != null) { final BoundingBox boundingBox = layer.getBoundingBox(); final Graphics2D graphics = viewport.getGraphics(); if (graphics != null) { try ( BaseCloseable transformCloseable = viewport.setUseModelCoordinates(true)) { final Polygon polygon = boundingBox.toPolygon(0); viewport.drawGeometryOutline(polygon, STYLE_BOUNDING_BOX); } } } } } } @Override public MapEx toMap() { return MapEx.EMPTY; } }