Exemplo n.º 1
0
        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();
                }
            }
        }
Exemplo n.º 2
0
 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));
 }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
 public Geometries.BoundingBox Transfrom(int fromSRID, int toSRID, Geometries.BoundingBox boundingBox)
 {
     throw new NotImplementedException();
 }