/*---------------- FILE HEADER --------------------------------------- This file is part of Geoide. Copyright (C) 2005-2006 by: IDgis B.V. http://www.idgis.nl This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Herman Assink IDgis bv P.O. Box 15 7450 AA Holten The Netherlands E-Mail: herman.assink@idgis.nl * @version 1.4.0 * @author IDgis team * ------------------------------------------------------------------------*/ import nl.idgis.giclient.geoma.Circle; import nl.idgis.giclient.geoma.Ellipse; import nl.idgis.giclient.geoma.Geometry; import nl.idgis.giclient.geoma.MultiPoint; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.geoma.Square; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gui.mapviewer.MapGeometry; import nl.idgis.giclient.util.Pixel; import nl.idgis.giclient.config.Colors; import nl.idgis.giclient.gis.SelectableLayer; class nl.idgis.giclient.gui.mapviewer.MapPoint extends MapGeometry { function performEvent(eventObject:Object):MapGeometry { var mapGeometry:MapGeometry = null; var mode:String = eventObject["mode"]; var type:String = eventObject["type"]; if ((mode == "GeneralEdit") && (type == "MouseDown")) { var delKey:Boolean = Boolean(eventObject["delKey"]); if (delKey) { var superGeometry:Geometry = geometry.getSuperGeometry(); superGeometry.removePoint(Point(geometry)); // TODO removeGeometry() // TODO EVENT MODEL if (_parent._parent instanceof MapGeometry) { _parent._parent.draw(); } _parent.onChangeGeometry("ADDREMOVE"); _parent.draw(); _root["apiInterpreter"].onChangeGeometry(superGeometry, true); // TODO EVENT MODEL } mapGeometry = this; //make this the selected MapGeometry } else if ((mode == "GeneralEdit") && (type == "MouseMove")) { var dx:Number = eventObject["dx"]; var dy:Number = eventObject["dy"]; geometry.move(dx, dy); mapGeometry = this; // TODO MODEL CONSTRAINTS var superGeometry:Geometry = geometry.getMostSuperGeometry(); if (superGeometry instanceof Square) { var points:Array = Square(superGeometry).getExteriorRing().getPoints(); var point:Point = Point(geometry); var pointIndex:Number = -1; for (var i:Number = 0; i < points.length -1 ; i++) { if (points[i] == point) { pointIndex = i; break; } } if (pointIndex == 0) { points[1].setXY(points[1].getX(), point.getY()); points[3].setXY(point.getX(), points[3].getY()); } else if (pointIndex == 1) { points[0].setXY(points[0].getX(), point.getY()); points[2].setXY(point.getX(), points[2].getY()); } else if (pointIndex == 2) { points[1].setXY(point.getX(), points[1].getY()); points[3].setXY(points[3].getX(), point.getY()); } else if (pointIndex == 3) { points[0].setXY(point.getX(), points[0].getY()); points[2].setXY(points[2].getX(), point.getY()); } } else if (superGeometry instanceof Circle) { var point:Point = Point(geometry); Circle(superGeometry).setPointXY(point.getX(), point.getY()); } else if (superGeometry instanceof Ellipse) { var point:Point = Point(geometry); if (point == Ellipse(superGeometry).getRadiusPoint1()) { Ellipse(superGeometry).setRadiusPoint1XY(point.getX(), point.getY()); } else { Ellipse(superGeometry).setRadiusPoint2XY(point.getX(), point.getY()); } } // TODO EVENT MODEL if (_parent._parent._parent instanceof MapGeometry) { _parent._parent._parent.onChangeGeometry(); } else if (_parent._parent instanceof MapGeometry) { _parent._parent.onChangeGeometry(); } else if (_parent instanceof MapGeometry) { _parent.onChangeGeometry(); } else { this.onChangeGeometry(); } } else if (mode == "CreateMember") { var point:Point = Point(eventObject["point"]); var points:Array = new Array(geometry, point); var multiPoint:MultiPoint = new MultiPoint(point.getSRS(), points); _root["apiInterpreter"].onChangeGeometry(multiPoint, true); // TODO EVENT MODEL //trace("WHY DOES THE ABOVE LINE SEEM TO NOT BE EXECUTED?"); geometryLayer.getMapViewer().ruler.setActiveMode(geometryLayer.getMapViewer().ruler.getDefaultEditMode()); var editLayer:Layer = geometryLayer.getMapViewer().ruler.getEditLayer(); var currentFeature:Feature = SelectableLayer(editLayer).getCurrentFeature(); currentFeature.setGeometry(multiPoint); geometryLayer.removeMapGeometry(this); mapGeometry = this; } return mapGeometry; } function drawAsNormal(geometry:Geometry, color:Number,fillOpacity:Number,lineThickness:Number):Void { clear(); var point:Point = Point(geometry); var pixel:Pixel = geometryLayer.getMapViewer().point2Pixel(point.getX(), point.getY()); var x:Number = pixel.getX(); var y:Number = pixel.getY(); moveTo(x, y); lineStyle(7, this.color, 50); lineTo(x + 0.15, y + 0.45); } function drawAsActive(geometry:Geometry):Void { clear(); var point:Point = Point(geometry); var pixel:Pixel = geometryLayer.getMapViewer().point2Pixel(point.getX(), point.getY()); var x:Number = pixel.getX(); var y:Number = pixel.getY(); moveTo(x, y); lineStyle(7, this.color, 100); lineTo(x + 0.15, y + 0.45); } }