private void MapImage_MouseDown(object sender, MouseEventArgs e) { _panOrQueryIsPan = false; if (_map != null) { if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) //dragging { _mousedrag = e.Location; } if (MouseDown != null) { MouseDown(_map.ImageToWorld(new System.Drawing.Point(e.X, e.Y), true), e); } } }
private void MapImage_MouseUp(object sender, MouseEventArgs e) { if (_map != null) { if (MouseUp != null) { MouseUp(_map.ImageToWorld(new System.Drawing.Point(e.X, e.Y), true), e); } if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) { if (ActiveTool == Tools.ZoomOut) { double scale = 0.5; if (!_mousedragging) { _map.Center = _map.ImageToWorld(new System.Drawing.Point(e.X, e.Y), true); if (MapCenterChanged != null) { MapCenterChanged(_map.Center); } } else { if (e.Y - _mousedrag.Y < 0) //Zoom out { scale = (float)Math.Pow(1 / (float)(_mousedrag.Y - e.Y), 0.5); } else //Zoom in { scale = 1 + (e.Y - _mousedrag.Y) * 0.1; } } _map.Zoom *= 1 / scale; if (MapZoomChanged != null) { MapZoomChanged(_map.Zoom); } Refresh(); } else if (ActiveTool == Tools.ZoomIn) { double scale = 2; if (!_mousedragging) { _map.Center = _map.ImageToWorld(new System.Drawing.Point(e.X, e.Y), true); if (MapCenterChanged != null) { MapCenterChanged(_map.Center); } } else { if (e.Y - _mousedrag.Y < 0) //Zoom out { scale = (float)Math.Pow(1 / (float)(_mousedrag.Y - e.Y), 0.5); } else //Zoom in { scale = 1 + (e.Y - _mousedrag.Y) * 0.1; } } _map.Zoom *= 1 / scale; if (MapZoomChanged != null) { MapZoomChanged(_map.Zoom); } Refresh(); } else if (ActiveTool == Tools.Pan || (ActiveTool == Tools.PanOrQuery && _panOrQueryIsPan)) { if (_mousedragging) { System.Drawing.Point pnt = new System.Drawing.Point(Width / 2 + (_mousedrag.X - e.Location.X), Height / 2 + (_mousedrag.Y - e.Location.Y)); _map.Center = _map.ImageToWorld(pnt, true); if (MapCenterChanged != null) { MapCenterChanged(_map.Center); } } else if (_panOnClick && !_zoomOnDblClick) { _map.Center = _map.ImageToWorld(new System.Drawing.Point(e.X, e.Y), true); if (MapCenterChanged != null) { MapCenterChanged(_map.Center); } } Refresh(); } else if (ActiveTool == Tools.Query || (ActiveTool == Tools.PanOrQuery && !_panOrQueryIsPan)) { if (_queryLayerIndex < 0) { MessageBox.Show("No active layer to query"); } else if (_queryLayerIndex < _map.Layers.Count) { QueryLayer(_map.Layers[_queryLayerIndex], new PointF(e.X, e.Y)); } else if (_queryLayerIndex - Map.Layers.Count < _map.VariableLayers.Count) { QueryLayer(_map.VariableLayers[_queryLayerIndex - Map.Layers.Count], new PointF(e.X, e.Y)); } else { MessageBox.Show("No active layer to query"); } } } if (_mousedragImg != null) { _mousedragImg.Dispose(); _mousedragImg = null; } _mousedragging = false; } }