protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); if (m_Map != null) { if (MouseUp != null) { MouseUp(m_Map.ImageToWorld(new Point(e.X, e.Y)), e); } if (e.Button == MouseButtons.Left) { if (m_ActiveTool == Tools.ZoomOut) { double scale = 0.5; if (m_Dragging) { if (e.Y - m_DragStartPoint.Y < 0) //Zoom out { scale = (float)Math.Pow(1 / (float)(m_DragStartPoint.Y - e.Y), 0.5); } else //Zoom in { scale = 1 + (e.Y - m_DragStartPoint.Y) * 0.1; } } else { m_Map.Center = m_Map.ImageToWorld(new Point(e.X, e.Y)); if (MapCenterChanged != null) { MapCenterChanged(m_Map.Center); } } m_Map.Zoom /= scale; if (MapZoomChanged != null) { MapZoomChanged(m_Map.Zoom); } } else if (m_ActiveTool == Tools.ZoomIn) { double scale = 2; if (m_Dragging) { if (e.Y - m_DragStartPoint.Y < 0) //Zoom out { scale = (float)Math.Pow(1 / (float)(m_DragStartPoint.Y - e.Y), 0.5); } else //Zoom in { scale = 1 + (e.Y - m_DragStartPoint.Y) * 0.1; } } else { m_Map.Center = m_Map.ImageToWorld(new Point(e.X, e.Y)); if (MapCenterChanged != null) { MapCenterChanged(m_Map.Center); } } m_Map.Zoom *= 1 / scale; if (MapZoomChanged != null) { MapZoomChanged(m_Map.Zoom); } } else if (m_ActiveTool == Tools.Pan) { if (m_Dragging) { Point point = new Point(ClientSize.Width / 2 + (m_DragStartPoint.X - e.Location.X), ClientSize.Height / 2 + (m_DragStartPoint.Y - e.Location.Y)); m_Map.Center = m_Map.ImageToWorld(point); if (MapCenterChanged != null) { MapCenterChanged(m_Map.Center); } } else { m_Map.Center = m_Map.ImageToWorld(new Point(e.X, e.Y)); if (MapCenterChanged != null) { MapCenterChanged(m_Map.Center); } } } else if (m_ActiveTool == Tools.Query) { if (m_Map.Layers.Count > m_QueryLayerIndex && m_QueryLayerIndex > -1) { /* * if (m_Map.Layers[m_QueryLayerIndex].GetType() == typeof(Layers.VectorLayer)) * { * * Layers.VectorLayer layer = m_Map.Layers[m_QueryLayerIndex] as Layers.VectorLayer; * Geometries.BoundingBox bounding; * * if (m_Dragging) * { * Geometries.Point lowerLeft; * Geometries.Point upperRight; * GetBounds(m_Map.ImageToWorld(m_DragStartPoint), m_Map.ImageToWorld(m_DragEndPoint), out lowerLeft, out upperRight); * * bounding = new Geometries.BoundingBox(lowerLeft, upperRight); * } * else * bounding = m_Map.ImageToWorld(new Point(e.X, e.Y)).GetBoundingBox().Grow(m_Map.PixelSize * 5); * * Data.FeatureDataSet ds = new Data.FeatureDataSet(); * layer.DataSource.Open(); * layer.DataSource.ExecuteIntersectionQuery(bounding, ds); * layer.DataSource.Close(); * * if (MapQueried != null) * MapQueried((ds.Tables.Count > 0 ? ds.Tables[0] : new Data.FeatureDataTable())); * } */ if (m_Map.Layers[m_QueryLayerIndex] is Layers.ICanQueryLayer) { Layers.ICanQueryLayer layer = m_Map.Layers[m_QueryLayerIndex] as Layers.ICanQueryLayer; Geometries.BoundingBox bounding; if (m_Dragging) { Geometries.Point lowerLeft; Geometries.Point upperRight; GetBounds(m_Map.ImageToWorld(m_DragStartPoint), m_Map.ImageToWorld(m_DragEndPoint), out lowerLeft, out upperRight); bounding = new Geometries.BoundingBox(lowerLeft, upperRight); } else { bounding = m_Map.ImageToWorld(new Point(e.X, e.Y)).GetBoundingBox().Grow(m_Map.PixelSize * 5); } Data.FeatureDataSet ds = new Data.FeatureDataSet(); layer.ExecuteIntersectionQuery(bounding, ds); if (ds.Tables.Count > 0) { if (MapQueried != null) { MapQueried(ds.Tables[0]); } else if (MapQueried != null) { MapQueried(new Data.FeatureDataTable()); } } } } else { MessageBox.Show("No active layer to query"); } } else if (m_ActiveTool == Tools.ZoomWindow) { if (m_Rectangle.Width > 0 && m_Rectangle.Height > 0) { Geometries.Point lowerLeft; Geometries.Point upperRight; GetBounds(m_Map.ImageToWorld(m_DragStartPoint), m_Map.ImageToWorld(m_DragEndPoint), out lowerLeft, out upperRight); m_DragEndPoint.X = 0; m_DragEndPoint.Y = 0; m_Map.ZoomToBox(new Geometries.BoundingBox(lowerLeft, upperRight)); } } else if (m_ActiveTool == Tools.DrawPoint) { if (GeometryDefined != null) { GeometryDefined(Map.ImageToWorld(new PointF(e.X, e.Y))); } } else if (m_ActiveTool == Tools.DrawPolygon || m_ActiveTool == Tools.DrawLine) { //pointArray = null; if (pointArray == null) { pointArray = new Point[2]; pointArray[0] = e.Location; pointArray[1] = e.Location; } else { Point[] temp = new Point[pointArray.GetUpperBound(0) + 2]; for (int i = 0; i <= pointArray.GetUpperBound(0); i++) { temp[i] = pointArray[i]; } temp[temp.GetUpperBound(0)] = e.Location; pointArray = temp; } } } if (m_Dragging) { m_Dragging = false; if (m_ActiveTool == Tools.Query) { Invalidate(m_Rectangle); } if (m_ActiveTool == Tools.ZoomWindow || m_ActiveTool == Tools.Query) { m_Rectangle = Rectangle.Empty; } Refresh(); if (m_ActiveTool != Tools.ZoomOut) { m_Image.Dispose(); m_Image = null; m_Image = m_DragImage; this.Invalidate(); } } else if (m_ActiveTool == Tools.ZoomIn || m_ActiveTool == Tools.ZoomOut || m_ActiveTool == Tools.Pan) { Refresh(); } } }
public static Geometries.BoundingBox MapToWorld(Geometries.BoundingBox box, IViewport view) { Geometries.Point lowerLeft = view.ScreenToWorld(box.BottomLeft); Geometries.Point upperRight = view.ScreenToWorld(box.TopRight); return(new Geometries.BoundingBox(lowerLeft, upperRight)); }
protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); if (m_Map != null) { if (MouseUp != null) MouseUp(m_Map.ImageToWorld(new Point(e.X, e.Y)), e); if (e.Button == MouseButtons.Left) { if (m_ActiveTool == Tools.ZoomOut) { double scale = 0.5; if (m_Dragging) { if (e.Y - m_DragStartPoint.Y < 0) //Zoom out scale = (float)Math.Pow(1 / (float)(m_DragStartPoint.Y - e.Y), 0.5); else //Zoom in scale = 1 + (e.Y - m_DragStartPoint.Y) * 0.1; } else { m_Map.Center = m_Map.ImageToWorld(new Point(e.X, e.Y)); if (MapCenterChanged != null) MapCenterChanged(m_Map.Center); } m_Map.Zoom /= scale; if (MapZoomChanged != null) MapZoomChanged(m_Map.Zoom); } else if (m_ActiveTool == Tools.ZoomIn) { double scale = 2; if (m_Dragging) { if (e.Y - m_DragStartPoint.Y < 0) //Zoom out scale = (float)Math.Pow(1 / (float)(m_DragStartPoint.Y - e.Y), 0.5); else //Zoom in scale = 1 + (e.Y - m_DragStartPoint.Y) * 0.1; } else { m_Map.Center = m_Map.ImageToWorld(new Point(e.X, e.Y)); if (MapCenterChanged != null) MapCenterChanged(m_Map.Center); } m_Map.Zoom *= 1 / scale; if (MapZoomChanged != null) MapZoomChanged(m_Map.Zoom); } else if (m_ActiveTool == Tools.Pan) { if (m_Dragging) { Point point = new Point(ClientSize.Width / 2 + (m_DragStartPoint.X - e.Location.X), ClientSize.Height / 2 + (m_DragStartPoint.Y - e.Location.Y)); m_Map.Center = m_Map.ImageToWorld(point); if (MapCenterChanged != null) MapCenterChanged(m_Map.Center); } else { m_Map.Center = m_Map.ImageToWorld(new Point(e.X, e.Y)); if (MapCenterChanged != null) MapCenterChanged(m_Map.Center); } } else if (m_ActiveTool == Tools.Query) { if (m_Map.Layers.Count > m_QueryLayerIndex && m_QueryLayerIndex > -1) { /* if (m_Map.Layers[m_QueryLayerIndex].GetType() == typeof(Layers.VectorLayer)) { Layers.VectorLayer layer = m_Map.Layers[m_QueryLayerIndex] as Layers.VectorLayer; Geometries.BoundingBox bounding; if (m_Dragging) { Geometries.Point lowerLeft; Geometries.Point upperRight; GetBounds(m_Map.ImageToWorld(m_DragStartPoint), m_Map.ImageToWorld(m_DragEndPoint), out lowerLeft, out upperRight); bounding = new Geometries.BoundingBox(lowerLeft, upperRight); } else bounding = m_Map.ImageToWorld(new Point(e.X, e.Y)).GetBoundingBox().Grow(m_Map.PixelSize * 5); Data.FeatureDataSet ds = new Data.FeatureDataSet(); layer.DataSource.Open(); layer.DataSource.ExecuteIntersectionQuery(bounding, ds); layer.DataSource.Close(); if (MapQueried != null) MapQueried((ds.Tables.Count > 0 ? ds.Tables[0] : new Data.FeatureDataTable())); } */ if (m_Map.Layers[m_QueryLayerIndex] is Layers.ICanQueryLayer) { Layers.ICanQueryLayer layer = m_Map.Layers[m_QueryLayerIndex] as Layers.ICanQueryLayer; Geometries.BoundingBox bounding; if (m_Dragging) { Geometries.Point lowerLeft; Geometries.Point upperRight; GetBounds(m_Map.ImageToWorld(m_DragStartPoint), m_Map.ImageToWorld(m_DragEndPoint), out lowerLeft, out upperRight); bounding = new Geometries.BoundingBox(lowerLeft, upperRight); } else bounding = m_Map.ImageToWorld(new Point(e.X, e.Y)).GetBoundingBox().Grow(m_Map.PixelSize * 5); Data.FeatureDataSet ds = new Data.FeatureDataSet(); layer.ExecuteIntersectionQuery(bounding, ds); if (ds.Tables.Count > 0) if (MapQueried != null) MapQueried(ds.Tables[0]); else if (MapQueried != null) MapQueried(new Data.FeatureDataTable()); } } else MessageBox.Show("No active layer to query"); } else if (m_ActiveTool == Tools.ZoomWindow) { if (m_Rectangle.Width > 0 && m_Rectangle.Height > 0) { Geometries.Point lowerLeft; Geometries.Point upperRight; GetBounds(m_Map.ImageToWorld(m_DragStartPoint), m_Map.ImageToWorld(m_DragEndPoint), out lowerLeft, out upperRight); m_Map.ZoomToBox(new Geometries.BoundingBox(lowerLeft, upperRight)); } } } if (m_DragImage != null) { m_DragImage.Dispose(); m_DragImage = null; } if (m_Dragging) { m_Dragging = false; if (m_ActiveTool == Tools.Query) Invalidate(m_Rectangle); if (m_ActiveTool == Tools.ZoomWindow || m_ActiveTool == Tools.Query) m_Rectangle = Rectangle.Empty; Refresh(); } else if (m_ActiveTool == Tools.ZoomIn || m_ActiveTool == Tools.ZoomOut || m_ActiveTool== Tools.Pan) Refresh(); } }
public Geometries.BoundingBox Transfrom(int fromSRID, int toSRID, Geometries.BoundingBox boundingBox) { throw new NotImplementedException(); }