/*---------------- 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.Ellipse; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.gui.mapviewer.MapGeometry; import nl.idgis.giclient.gui.mapviewer.MapPolygon; import nl.idgis.giclient.util.Pixel; import nl.idgis.giclient.config.Colors; import nl.idgis.giclient.geoma.Geometry; import nl.idgis.giclient.util.Strings; class nl.idgis.giclient.gui.mapviewer.MapEllipse extends MapPolygon { private var radiusAsked:Number = null; function setMapGeometries():Void { mapGeometries = new Array(); var radiusPoint1:Point = Ellipse(geometry).getRadiusPoint1(); addMapGeometry(radiusPoint1, 0); var radiusPoint2:Point = Ellipse(geometry).getRadiusPoint2(); addMapGeometry(radiusPoint2, 1); } 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 double:Boolean = Boolean(eventObject["double"]); if (double) { var pixel:Pixel = Pixel(eventObject["pixel"]); if(this["radius1MC"].hitTest(pixel.getX(), pixel.getY(), true)||this["radius2MC"].hitTest(pixel.getX(), pixel.getY(), true)) { var initObject:Object = {scrollContent: "lib://TextInputFrame", paneTitle: //"Gebruikers invoer", ( Strings.getFile("Geoide").getString("UserInput")), isScrolling: false, resizable: false, hasShader: false, doorzichtig:false, _x:100, _y:100}; initObject["contentProperties"] = new Object(); initObject["contentProperties"]["inputType"] = "Number"; initObject["contentProperties"]["returnObject"] = this; if(this["radius1MC"].hitTest(pixel.getX(), pixel.getY(), true)){ radiusAsked = 1; initObject["contentProperties"]["question"] = // "Voer de eerste straal van de ellips in:"; ( Strings.getFile("Geoide").getString("InputRadiusFirstEllipse")); } else if (this["radius2MC"].hitTest(pixel.getX(), pixel.getY(), true)) { radiusAsked = 2; initObject["contentProperties"]["question"] = // "Voer de tweede straal van de ellips in:"; ( Strings.getFile("Geoide").getString("InputRadiusSecondEllipse")); } _root.frameWork.makeFrame("textInputFrame",initObject,200,100); } mapGeometry = this; } else { 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 this.onChangeGeometry(); mapGeometry = this; } return mapGeometry; } function drawAsActive(geometry:Geometry):Void { super.drawAsNormal(geometry, Colors.currentColor, Colors.currentFillOpacity, 2); var centerPoint:Point = Ellipse(geometry).getCenterPoint(); var gripPoint1:Point = Ellipse(geometry).getExteriorRing().getPoints()[0]; var gripPoint2:Point = Ellipse(geometry).getRadiusPoint2(); var centerPixel:Pixel = geometryLayer.getMapViewer().point2Pixel(centerPoint.getX(), centerPoint.getY()); var gripPixel1:Pixel = geometryLayer.getMapViewer().point2Pixel(gripPoint1.getX(), gripPoint1.getY()); var gripPixel2:Pixel = geometryLayer.getMapViewer().point2Pixel(gripPoint2.getX(), gripPoint2.getY()); moveTo(gripPixel1.getX(), gripPixel1.getY()); lineStyle(2, Colors.helperLineColor, 100); lineTo(centerPixel.getX(), centerPixel.getY()); lineTo(gripPixel2.getX(), gripPixel2.getY()); drawRadiusText(1); drawRadiusText(2); } function drawAsNormal(geometry:Geometry, color:Number,fillOpacity:Number,lineThickness:Number):Void { super.drawAsNormal(geometry, color, fillOpacity, lineThickness); if (_root.frameWork["frames"]["textInputFrame"] != null) { _root.frameWork["frames"]["textInputFrame"].removeMovieClip(); } this["radius1MC"].removeMovieClip(); this["radius2MC"].removeMovieClip(); } function drawRadiusText(radiusNr:Number):Void{ var radiusMC:MovieClip = null; var gripPixel:Pixel = null; var radius:Number = null; var gripPoint1:Point = Ellipse(geometry).getExteriorRing().getPoints()[0]; var gripPoint2:Point = Ellipse(geometry).getRadiusPoint2(); if(radiusNr == 1){ radius = Ellipse(geometry).getRadius1(); gripPixel = geometryLayer.getMapViewer().point2Pixel(gripPoint1.getX(), gripPoint1.getY()); if (radius != 0) { if (this["radius1MC"] == null) { radiusMC = this.createEmptyMovieClip("radius1MC",3); createRadiusText(radiusMC, gripPixel); } else { radiusMC = this["radius1MC"]; } } }else { radius = Ellipse(geometry).getRadius2(); gripPixel = geometryLayer.getMapViewer().point2Pixel(gripPoint2.getX(), gripPoint2.getY()); if (radius != 0) { if (this["radius2MC"] == null) { radiusMC = this.createEmptyMovieClip("radius2MC",4); createRadiusText(radiusMC, gripPixel); } else { radiusMC = this["radius2MC"]; } } } if (radiusNr == 1){ radiusMC.radiusText.text = Math.round(Ellipse(geometry).getRadius1()).toString(); radiusMC._rotation = 360 - Math.round(Ellipse(geometry).getAngle() / (Math.PI/180)); } else { radiusMC.radiusText.text = Math.round(Ellipse(geometry).getRadius2()).toString(); radiusMC._rotation = 360 - Math.round((Ellipse(geometry).getAngle() - Math.PI/2) / (Math.PI/180)); } var centerPoint:Point = Ellipse(geometry).getCenterPoint(); var centerPixel:Pixel = geometryLayer.getMapViewer().point2Pixel(centerPoint.getX(), centerPoint.getY()); var x:Number = centerPixel.getX() + ((gripPixel.getX() - centerPixel.getX()) / 2); var y:Number = centerPixel.getY() + ((gripPixel.getY() - centerPixel.getY()) / 2); radiusMC._x = x; radiusMC._y = y; } private function createRadiusText(radiusMC:MovieClip, gripPixel:Pixel):Void{ var centerPoint:Point = Ellipse(geometry).getCenterPoint(); var centerPixel:Pixel = geometryLayer.getMapViewer().point2Pixel(centerPoint.getX(), centerPoint.getY()); lineStyle(0,0x000000 , 100); radiusMC.moveTo(centerPixel.getX(),centerPixel.getY()); radiusMC.lineTo(gripPixel.getX(), gripPixel.getY()); lineStyle(10,0x000000 , 0); radiusMC.moveTo(centerPixel.getX(),centerPixel.getY()); radiusMC.lineTo(gripPixel.getX(), gripPixel.getY()); var tf:TextFormat = new TextFormat(); tf.font = "DefaultFont"; tf.color = Colors.currentTextColor; tf.bold = false; tf.size = 12; radiusMC.createTextField("radiusText", getNextHighestDepth(), 1, 1, 10, 10); radiusMC.radiusText.setNewTextFormat(tf); radiusMC.radiusText.autoSize = "center"; radiusMC.radiusText.embedFonts = true; } function catchUserInput(rad:Number):Void { if (rad == null) { _root.frameWork["frames"]["textInputFrame"].removeMovieClip(); } else { if (rad > 0) { if (radiusAsked == 1) { Ellipse(geometry).setRadius1(rad); } else { Ellipse(geometry).setRadius2(rad); } this.onChangeGeometry(); // TODO EVENT MODEL _root["apiInterpreter"].onChangeGeometry(geometry, true); _root.frameWork["frames"]["textInputFrame"].removeMovieClip(); } } } }