/*---------------- 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.Geometry; import nl.idgis.giclient.geoma.LineString; import nl.idgis.giclient.geoma.MultiLineString; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gui.mapviewer.MapGeometry; import nl.idgis.giclient.gui.mapviewer.MapPolygon; import nl.idgis.giclient.util.Pixel; import nl.idgis.giclient.gis.SelectableLayer; class nl.idgis.giclient.gui.mapviewer.MapLineString 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")) { mapGeometry = passEvent(eventObject); } else if ((mode == "GeneralEdit") && (type == "MouseMove")) { var dx:Number = eventObject["dx"]; var dy:Number = eventObject["dy"]; geometry.move(dx, dy); // TODO EVENT MODEL if (_parent._parent instanceof MapGeometry) { _parent._parent.onChangeGeometry(); } else if (_parent instanceof MapGeometry) { _parent.onChangeGeometry(); } else { this.onChangeGeometry(); } mapGeometry = this; } else if ((mode == "Create") && (type == "MouseDown")) { var double:Boolean = Boolean(eventObject["double"]); var backKey:Boolean = Boolean(eventObject["backKey"]); var point:Point = Point(eventObject["point"]); if (!double) { if (backKey) { geometry.removePoint(null, false); geometry.setPointXY(point.getX(), point.getY()); } else { geometry.setPointXY(point.getX(), point.getY()); geometry.addPoint(point, false); } mapGeometry = this; } else { // Removes the point that was added at the first click of the double click. geometry.removePoint(null, false); geometry.setPointXY(point.getX(), point.getY()); if (labelText == "[ new member ]") { var editLayer:Layer = geometryLayer.getMapViewer().ruler.getEditLayer(); var currentFeature:Feature = SelectableLayer(editLayer).getCurrentFeature(); var currentGeometry:Geometry = currentFeature.getGeometry(); // CAN BE NULLGEOMETRY? var lineStrings:Array = new Array(currentGeometry, geometry); var multiLineString:MultiLineString = new MultiLineString(currentGeometry.getSRS(), lineStrings); currentFeature.setGeometry(multiLineString); _root["apiInterpreter"].onChangeGeometry(geometry, true); // TODO EVENT MODEL geometryLayer.removeMapGeometry(this); } _root["apiInterpreter"].onChangeGeometry(geometry, true); // TODO EVENT MODEL mapGeometry = null; } // TODO EVENT MODEL this.onChangeGeometry("ADDREMOVE"); if (_parent instanceof MapPolygon) { _parent.draw(); } } else if ((mode == "Create") && (type == "MouseMove")) { var point:Point = Point(eventObject["point"]); geometry.setPointXY(point.getX(), point.getY()); // TODO EVENT MODEL this.onChangeGeometry(); if (_parent instanceof MapPolygon) { _parent.draw(); } mapGeometry = this; } else if (mode == "CreateMember") { var point:Point = Point(eventObject["point"]); var lineString:LineString = new LineString(point.getSRS(), new Array(point, new Point(point.getSRS(), point.getX(), point.getY()))); mapGeometry = geometryLayer.addMapGeometry(lineString, MapGeometry.ACTIVE, color, "[ new member ]"); } return mapGeometry; } function drawAsNormal(geometry:Geometry, color:Number,fillOpacity:Number,lineThickness:Number):Void { clear(); var lineString:LineString = LineString(geometry); var points:Array = lineString.getPoints(); var point:Point = Point(points[0]); var pixel:Pixel = geometryLayer.getMapViewer().point2Pixel(point.getX(), point.getY()); moveTo(pixel.getX(), pixel.getY()); lineStyle(lineThickness, color, 100); for (var i:Number = 1; i < points.length; i++) { point = Point(points[i]); pixel = geometryLayer.getMapViewer().point2Pixel(point.getX(), point.getY()); lineTo(pixel.getX(), pixel.getY()); } } }