/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.cismet.cismap.commons.gui.piccolo.eventlistener; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; import java.awt.Image; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import de.cismet.cismap.commons.gui.MappingComponent; import de.cismet.cismap.commons.gui.piccolo.FixedPImage; import de.cismet.cismap.commons.gui.piccolo.PFeature; /** * DOCUMENT ME! * * @author thorsten * @version $Revision$, $Date$ */ public class DerivedFixedPImage extends FixedPImage implements PropertyChangeListener { //~ Instance fields -------------------------------------------------------- PFeature parent; DeriveRule rule; final MappingComponent mappingComponent; private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); //~ Constructors ----------------------------------------------------------- /** * Creates a new DerivedFixedPImage object. * * @param image DOCUMENT ME! * @param parent DOCUMENT ME! * @param rule DOCUMENT ME! */ public DerivedFixedPImage(final Image image, final PFeature parent, final DeriveRule rule) { super(image); this.parent = parent; this.rule = rule; parent.addPropertyChangeListener(this); mappingComponent = parent.getMappingComponent(); mappingComponent.addStickyNode(this); } //~ Methods ---------------------------------------------------------------- @Override public void propertyChange(final PropertyChangeEvent evt) { final Geometry g = parent.getFeature().getGeometry(); final Geometry derivedG = rule.derive(g); // should be a point. To be sure user final Point p = derivedG.getCentroid(); final double x = mappingComponent.getWtst().getScreenX(p.getCoordinate().x); final double y = mappingComponent.getWtst().getScreenY(p.getCoordinate().y); super.setOffset(x, y); final double s = mappingComponent.getCamera().getViewScale(); final double targetScale = (mappingComponent.getStickyFeatureCorrectionFactor() / s); // prevent endless loop of property change events with if statement. prpably should insert that in // mappingComponent.rescaleStickyNodes() if (Math.round(getScale() * 100000) != Math.round(targetScale * 100000)) { mappingComponent.rescaleStickyNodes(); } } }