/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * Copyright (C) 2010 srichter * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.cismet.cismap.commons.features; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LinearRing; import com.vividsolutions.jts.geom.PrecisionModel; import edu.umd.cs.piccolo.nodes.PImage; import java.awt.image.BufferedImage; import de.cismet.cismap.commons.CrsTransformer; import de.cismet.cismap.commons.interaction.CismapBroker; /** * DOCUMENT ME! * * @author srichter * @version $Revision$, $Date$ */ public class DefaultRasterDocumentFeature implements RasterDocumentFeature { //~ Static fields/initializers --------------------------------------------- private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger( DefaultRasterDocumentFeature.class); //~ Instance fields -------------------------------------------------------- private final BufferedImage rasterDocument; private PImage pImage; private Geometry geometry; private boolean canBeSelected; private boolean editable; private boolean hidden; //~ Constructors ----------------------------------------------------------- /** * Creates a new DefaultRasterDocumentFeature object. * * @param rasterDocument DOCUMENT ME! * @param geom DOCUMENT ME! */ public DefaultRasterDocumentFeature(final BufferedImage rasterDocument, final Geometry geom) { this(rasterDocument, geom, true, true, false); } /** * Creates a new DefaultRasterDocumentFeature object. * * @param rasterDocument DOCUMENT ME! * @param x DOCUMENT ME! * @param y DOCUMENT ME! */ public DefaultRasterDocumentFeature(final BufferedImage rasterDocument, final double x, final double y) { this(rasterDocument, getGeomFromRasterImage(rasterDocument, x, y)); } /** * Creates a new DefaultRasterDocumentFeature object. * * @param rasterDocument DOCUMENT ME! * @param x DOCUMENT ME! * @param y DOCUMENT ME! * @param srid DOCUMENT ME! */ public DefaultRasterDocumentFeature(final BufferedImage rasterDocument, final double x, final double y, final int srid) { this(rasterDocument, getGeomFromRasterImage(rasterDocument, x, y, srid)); } /** * Creates a new DefaultRasterDocumentFeature object. * * @param rasterDocument DOCUMENT ME! * @param geometry DOCUMENT ME! * @param canBeSelected DOCUMENT ME! * @param editable DOCUMENT ME! * @param hidden DOCUMENT ME! */ public DefaultRasterDocumentFeature(final BufferedImage rasterDocument, final Geometry geometry, final boolean canBeSelected, final boolean editable, final boolean hidden) { this.rasterDocument = rasterDocument; this.geometry = geometry; this.canBeSelected = canBeSelected; this.editable = editable; } //~ Methods ---------------------------------------------------------------- @Override public BufferedImage getRasterDocument() { return rasterDocument; } @Override public Geometry getGeometry() { return geometry; } @Override public void setGeometry(final Geometry geom) { this.geometry = geom; } @Override public boolean canBeSelected() { return canBeSelected; } @Override public void setCanBeSelected(final boolean canBeSelected) { this.canBeSelected = canBeSelected; } @Override public boolean isEditable() { return editable; } @Override public void setEditable(final boolean editable) { this.editable = editable; } @Override public boolean isHidden() { return hidden; } @Override public void hide(final boolean hiding) { this.hidden = hiding; } /** * DOCUMENT ME! * * @param bi DOCUMENT ME! * @param x DOCUMENT ME! * @param y DOCUMENT ME! * * @return DOCUMENT ME! */ private static Geometry getGeomFromRasterImage(final BufferedImage bi, final double x, final double y) { return getGeomFromRasterImage( bi, x, y, CrsTransformer.extractSridFromCrs(CismapBroker.getInstance().getDefaultCrs())); } /** * DOCUMENT ME! * * @param bi DOCUMENT ME! * @param x DOCUMENT ME! * @param y DOCUMENT ME! * @param srid DOCUMENT ME! * * @return DOCUMENT ME! */ private static Geometry getGeomFromRasterImage(final BufferedImage bi, final double x, final double y, final int srid) { final GeometryFactory GEOM_FACTORY = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), srid); final int width = bi.getWidth(); final int height = bi.getHeight(); final Coordinate ursprung0 = new Coordinate(x, y); final Coordinate x1 = new Coordinate(width + x, y); final Coordinate xy2 = new Coordinate(width + x, height + y); final Coordinate y3 = new Coordinate(x, height + y); final Coordinate ursprung4 = new Coordinate(x, y); final Coordinate[] coords = new Coordinate[] { ursprung0, x1, xy2, y3, ursprung4 }; final LinearRing linearRing = GEOM_FACTORY.createLinearRing(coords); final Geometry result = GEOM_FACTORY.createPolygon(linearRing, null); // result = CrsTransformer.transformToDefaultCrs(result); log.info("Created Geometry: " + result); return result; } // private static Geometry getGeomFromRasterImage(BufferedImage bi) { // final int width = bi.getWidth(); // final int height = bi.getHeight(); // Coordinate ursprung0 = new Coordinate(0, 0); // Coordinate x1 = new Coordinate(width, 0); // Coordinate xy2 = new Coordinate(width, height); // Coordinate y3 = new Coordinate(0, height); // Coordinate ursprung4 = new Coordinate(0, 0); // Coordinate[] coords = new Coordinate[]{ursprung0, x1, xy2, y3, ursprung4}; // LinearRing linearRing = GEOM_FACTORY.createLinearRing(coords); // Geometry result = GEOM_FACTORY.createPolygon(linearRing, null); // log.info("Created Geometry: " + result); // return result; // } @Override public String toString() { return "Dokument"; } }