public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (_canvas == null) { _canvas = sender as ICanvas; } switch (eventType) { case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Left) { _bPoint.X = e.ScreenX; _bPoint.Y = e.ScreenY; } break; case enumCanvasEventType.MouseMove: if (_bPoint.IsEmpty) { return; } _prePoint.X = e.ScreenX; _prePoint.Y = e.ScreenY; _canvas.Refresh(enumRefreshType.FlyLayer); break; case enumCanvasEventType.MouseUp: HandAction(e); _prePoint = Point.Empty; _bPoint = Point.Empty; break; } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { switch (_pencilType) { case enumPencilType.Point: EventPoint(sender, eventType, e); break; case enumPencilType.FreeCurve: EventFreeCurve(sender, eventType, e); break; case enumPencilType.Rectangle: EventRectangle(sender, eventType, e); break; case enumPencilType.Polygon: EventPolygon(sender, eventType, e); break; case enumPencilType.Circle: EventCircle(sender, eventType, e); break; case enumPencilType.ControlFreeCurve: EventControlFreeCurve(sender, eventType, e); break; } }
private void HandPointAction(DrawingMouseEventArgs e) { if (_interactivePoinScreen != null) { _interactivePoinScreen(this, new PointF(e.ScreenX, e.ScreenY)); } if (_interactivePoinGeo != null) { _interactivePoinGeo(this, GetSelectedGeoPoint(_bPoint)); } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (!_enabled) { return; } bool visible = _visible; switch (eventType) { case enumCanvasEventType.MouseMove: if (_autoHide) { _visible = _bounds.Contains(e.ScreenX, e.ScreenY); if (!_visible && e.ScreenX <= _bounds.X + _bounds.Width) { _visible = true; } if ((visible && _visible) || (visible && !_visible)) { (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } } if (_visible) { FloatToolItem it = HitToolItem(e.ScreenX, e.ScreenY); _currentToolItem = it; (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Left) { FloatToolItem clickedItem = HitToolItem(e.ScreenX, e.ScreenY); if (clickedItem != null) { if (_toolItemClicked != null) { _toolItemClicked(clickedItem); e.IsHandled = true; //激活工具栏,取消后续操作 } } } else if (Control.MouseButtons == MouseButtons.Right) { if (e.ScreenX <= _bounds.X + _bounds.Width) { _autoHide = !_autoHide; } } break; } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (!_isShowCrossLines) { return; } switch (eventType) { case enumCanvasEventType.MouseMove: _currentScreenX = e.ScreenX; _currentScreenY = e.ScreenY; (sender as ICanvas).Refresh(enumRefreshType.All); break; } }
private void HandAction(DrawingMouseEventArgs e) { if (_bPoint.IsEmpty && _prePoint.IsEmpty) { return; } if (!_bPoint.IsEmpty && _prePoint.IsEmpty) { HandPointAction(e); } else { HandRectAction(); } }
private void EventRectangle(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { reSwitchLine: switch (eventType) { case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Right) { eventType = enumCanvasEventType.MouseUp; goto reSwitchLine; } if (!_isDrawing) { _prePoint = new Point(e.ScreenX, e.ScreenY); _isDrawing = true; } break; case enumCanvasEventType.MouseMove: if (_isDrawing && Control.MouseButtons == MouseButtons.Left) { _crtPoint = new Point(e.ScreenX, e.ScreenY); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.MouseUp: if (_isDrawing) { if (_prePoint.X == e.ScreenX && _prePoint.Y == e.ScreenY) //鼠标未移动,不绘制 { _prePoint = Point.Empty; _crtPoint = Point.Empty; _isDrawing = false; return; } (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); NotifyResult((sender as ICanvas).CoordTransform, sender as ICanvas); _prePoint = Point.Empty; _crtPoint = Point.Empty; _isDrawing = false; } break; } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (!_isAllowEdit) { return; } switch (eventType) { case enumCanvasEventType.MouseDown: EditObject eobj = FindEditObject(sender, e); if (eobj != null) { _prePoint = new Point(e.ScreenX, e.ScreenY); _currentEditObj = eobj; } else { _currentEditObj = null; } (sender as ICanvas).Refresh(enumRefreshType.All); break; case enumCanvasEventType.MouseMove: if (_currentEditObj != null && Control.MouseButtons == MouseButtons.Left) { if (_editAction == enumEditAction.DragObj) { DoDrag(sender, e.ScreenX - _prePoint.X, e.ScreenY - _prePoint.Y); _prePoint = new Point(e.ScreenX, e.ScreenY); } else if (_editAction == enumEditAction.DrawVertext) { DoDragVertext(sender, e.ScreenX - _prePoint.X, e.ScreenY - _prePoint.Y); _prePoint = new Point(e.ScreenX, e.ScreenY); } } break; case enumCanvasEventType.MouseUp: _prePoint = Point.Empty; _currentEditObj = null; _crtVertextIndex = -1; break; } }
public virtual void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (_canvas == null) { _canvas = sender as ICanvas; } double prjX, prjY; double geoX, geoY; switch (eventType) { case enumCanvasEventType.MouseDown: if (_preLocation == null && Control.MouseButtons == MouseButtons.Left) { _preLocation = new CoordPoint(); _canvas.CoordTransform.Screen2Prj(e.ScreenX, e.ScreenY, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); _preLocation.X = geoX; _preLocation.Y = geoY; } break; case enumCanvasEventType.MouseMove: if (_preLocation == null) { return; } _canvas.CoordTransform.Screen2Prj(e.ScreenX, e.ScreenY, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); ApplyOffset(sender as ICanvas, geoX - _preLocation.X, geoY - _preLocation.Y); _preLocation.X = geoX; _preLocation.Y = geoY; break; case enumCanvasEventType.MouseUp: _preLocation = null; geoX = geoY = prjX = prjY = 0; if (AdjustFinishedHandler != null) { AdjustFinishedHandler(this, null); } break; } }
private void EventFreeCurve(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { reSwitchLine: switch (eventType) { case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Right) { eventType = enumCanvasEventType.MouseUp; goto reSwitchLine; } if (!_isDrawing) { _vertexts.Clear(); _vertexts.Add(new Point(e.ScreenX, e.ScreenY)); _isDrawing = true; } break; case enumCanvasEventType.MouseMove: if (_isDrawing && Control.MouseButtons == MouseButtons.Left) { _vertexts.Add(new Point(e.ScreenX, e.ScreenY)); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.MouseUp: case enumCanvasEventType.DoubleClick: if (_isDrawing) { if (_vertexts.Count > 1) //闭合 { _vertexts.Add(_vertexts[0]); } (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); NotifyResult((sender as ICanvas).CoordTransform, sender as ICanvas); _vertexts.Clear(); _isDrawing = false; } break; } }
private void EventPoint(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (eventType != enumCanvasEventType.MouseDown) { return; } GeometryOfDrawed geometry = new GeometryOfDrawed(); geometry.ShapeType = _pencilType.ToString(); ICoordinateTransform tran = (sender as ICanvas).CoordTransform; float row = 0, col = 0; tran.Screen2Raster(e.ScreenX, e.ScreenY, out row, out col); geometry.RasterPoints = new PointF[] { new PointF(row, col) }; if (this._pencilDrawedResultFinished != null) { this._pencilDrawedResultFinished(geometry); } }
private EditObject FindEditObject(object sender, DrawingMouseEventArgs e) { Point pt = new Point(e.ScreenX, e.ScreenY); EditObject returnObj = null; foreach (object obj in _editObjects.Keys) { EditObject eobj = _editObjects[obj]; if (eobj.Path == null) { continue; } //鼠标点击的顶点 for (int i = 0; i < eobj.Path.PointCount; i++) { RectangleF rect = new RectangleF(eobj.Path.PathPoints[i].X - EDIT_BOX_HALF_WIDTH, eobj.Path.PathPoints[i].Y - EDIT_BOX_HALF_WIDTH, EDIT_BOX_WIDTH, EDIT_BOX_WIDTH); if (rect.Contains(pt)) { _crtVertextIndex = i; eobj.IsSelected = true; returnObj = eobj; _editAction = enumEditAction.DrawVertext; goto endLine; } } //鼠标点击在几何形状内部 if (eobj.Path.IsVisible(new Point(e.ScreenX, e.ScreenY))) { eobj.IsSelected = true; returnObj = eobj; _editAction = enumEditAction.DragObj; } else { eobj.IsSelected = false; } } endLine: return(returnObj); }
private void EventPolygon(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { reSwitchLine: switch (eventType) { case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Right) { eventType = enumCanvasEventType.DoubleClick; goto reSwitchLine; } if (!_isDrawing) { _vertexts.Clear(); _vertexts.Add(new Point(e.ScreenX, e.ScreenY)); _isDrawing = true; } else { _vertexts.Add(new Point(e.ScreenX, e.ScreenY)); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.MouseMove: if (_isDrawing) { _crtPoint = new Point(e.ScreenX, e.ScreenY); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.DoubleClick: _vertexts.Add(new Point(e.ScreenX, e.ScreenY)); _isDrawing = false; (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); NotifyResult((sender as ICanvas).CoordTransform, sender as ICanvas); _vertexts.Clear(); break; } }
private object[] FindSelectedObject(object sender, DrawingMouseEventArgs e) { object[] aios = _aoiContainerLayer.AOIs == null ? null : _aoiContainerLayer.AOIs.ToArray(); List <object> objs = new List <object>(); Point pt = new Point(e.ScreenX, e.ScreenY); ICanvas canvas = sender as ICanvas; foreach (object obj in aios) { GraphicsPath path = ToGraphicsPath(obj, canvas); if (path == null) { continue; } //鼠标点击在几何形状内部 if (path.IsVisible(new Point(e.ScreenX, e.ScreenY))) { objs.Add(obj); } } return(objs.Count == 0 ? null : objs.ToArray()); }
private void EventCircle(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { switch (eventType) { case enumCanvasEventType.MouseDown: if (!_isDrawing) { _prePoint = new Point(e.ScreenX, e.ScreenY); _isDrawing = true; } break; case enumCanvasEventType.MouseMove: if (_isDrawing) { _crtPoint = new Point(e.ScreenX, e.ScreenY); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.MouseUp: if (_isDrawing) { if (_prePoint.X == e.ScreenX && _prePoint.Y == e.ScreenY) //鼠标未移动,不绘制 { _crtPoint = Point.Empty; _prePoint = Point.Empty; _isDrawing = false; return; } (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); NotifyResult((sender as ICanvas).CoordTransform, sender as ICanvas); _crtPoint = Point.Empty; _prePoint = Point.Empty; _isDrawing = false; } break; } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (!_edit) { return; } if (_aoiContainerLayer == null || _aoiContainerLayer.AOIs == null || _aoiContainerLayer.AOIs.Count() == 0) { return; } switch (eventType) { case enumCanvasEventType.MouseDown: object[] selectedObj = FindSelectedObject(sender, e); if (selectedObj != null) { foreach (object obj in selectedObj) { if (_geometrys.Contains(obj)) { _geometrys.Remove(obj); } else { _geometrys.Add(obj); } } } (sender as ICanvas).Refresh(enumRefreshType.All); break; case enumCanvasEventType.MouseMove: break; case enumCanvasEventType.MouseUp: break; } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (!_enabled) { return; } ICanvas canvas = sender as ICanvas; IRasterDrawing drawing = canvas.PrimaryDrawObject as IRasterDrawing; if (drawing == null || drawing.DataProviderCopy == null) { return; } ICoordinateTransform coordTran = canvas.CoordTransform; switch (eventType) { case enumCanvasEventType.MouseDown: { try { _isGettingData = true; PixelInfo pInfo = GetPixelInfo(canvas, e.ScreenX, e.ScreenY); if (_beginPoint.IsEmpty || _beginPoint.IsEmpty || _isNewProfile) { //开始一条新的 _beginPoint = pInfo; _endPoint = PixelInfo.Empty; _vertices = new Point[] { Point.Empty, Point.Empty }; _isNewProfile = false; } else { //完成一条线,完成本次剖面线选择 _endPoint = pInfo; _enabled = false; GetData(canvas); } } finally { _isGettingData = false; } } break; case enumCanvasEventType.MouseMove: if (_endPoint.IsEmpty && !_isNewProfile) { PixelInfo pInfo = GetPixelInfo(canvas, e.ScreenX, e.ScreenY); _mousePoint = pInfo; } break; case enumCanvasEventType.MouseUp: break; case enumCanvasEventType.MouseWheel: break; case enumCanvasEventType.Paning: break; case enumCanvasEventType.Zooming: break; case enumCanvasEventType.BeginPan: break; case enumCanvasEventType.BeginZoom: break; case enumCanvasEventType.DoubleClick: break; case enumCanvasEventType.EndPaning: break; case enumCanvasEventType.EndZoom: break; case enumCanvasEventType.KeyDown: break; case enumCanvasEventType.KeyPress: break; case enumCanvasEventType.KeyUp: break; default: break; } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (!_enabled) { return; } switch (eventType) { case enumCanvasEventType.MouseDown: if (_coordinates == null) { _coordinates = new List <CoordPoint>(); _curDistances = new List <double>(); } PointF pt = new PointF(e.ScreenX, e.ScreenY); ToRasterPointF(ref pt, sender as ICanvas); CoordPoint perCoord = new CoordPoint(pt.X, pt.Y); CoordPoint controlPointGeo = new CoordPoint(perCoord.X, perCoord.Y); PrjToGeo(controlPointGeo, (sender as ICanvas).CoordTransform); double distance = 0; if (_preControlPointGeo != null) //非起始点 { distance = GetDist(_preControlPointGeo, controlPointGeo); if (distance == 0) //和前一个点重合,放弃该点 { break; } _previousDistance = _previousDistance + distance; } _coordinates.Add(perCoord); _curDistances.Add(_previousDistance); _preControlPointGeo = controlPointGeo; _isDrawing = true; break; case enumCanvasEventType.MouseMove: if (_isDrawing) { if (_coordinates == null || _coordinates.Count == 0) { return; } _mousePosition = new Point(e.ScreenX, e.ScreenY); PointF mousePosition2 = new PointF(e.ScreenX, e.ScreenY); CoordPoint mouseCoord = SrceenToGeo(mousePosition2, (sender as ICanvas).CoordTransform); _mouseDistance = GetDist(_preControlPointGeo, mouseCoord); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.DoubleClick: if (_isDrawing) { _previousParts.Add(_coordinates); _previousDistances.Add(_curDistances.ToArray()); _coordinates = new List <CoordPoint>(); _curDistances = new List <double>(); _mousePosition = Point.Empty; _isDrawing = false; _preControlPointGeo = null; _previousDistance = 0f; _enabled = false; } break; } }
public virtual void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (_canvas == null) { _canvas = sender as ICanvas; } double prjX, prjY; double geoX, geoY; double prjX2, prjY2; double geoX2, geoY2; switch (eventType) { case enumCanvasEventType.MouseDown: if (_preLocation == null && Control.MouseButtons == MouseButtons.Left) { _preLocation = new CoordPoint(); _canvas.CoordTransform.Screen2Prj(e.ScreenX, e.ScreenY, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); _preLocation.X = geoX; _preLocation.Y = geoY; } break; case enumCanvasEventType.MouseMove: if (_preLocation == null) { return; } _canvas.CoordTransform.Screen2Prj(e.ScreenX, e.ScreenY, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); ApplyOffset(sender as ICanvas, geoX - _preLocation.X, geoY - _preLocation.Y); _preLocation.X = geoX; _preLocation.Y = geoY; break; case enumCanvasEventType.MouseUp: _preLocation = null; geoX = geoY = prjX = prjY = 0; if (AdjustFinishedHandler != null) { AdjustFinishedHandler(this, null); } break; case enumCanvasEventType.KeyDown: if (e != null && e.E != null && e.E is PreviewKeyDownEventArgs) { PreviewKeyDownEventArgs arg = e.E as PreviewKeyDownEventArgs; switch (arg.KeyCode) { case Keys.Left: _canvas.CoordTransform.Screen2Prj(0, 0, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); _canvas.CoordTransform.Screen2Prj(-1, 0, out prjX2, out prjY2); _canvas.CoordTransform.Prj2Geo(prjX2, prjY2, out geoX2, out geoY2); ApplyOffset(sender as ICanvas, geoX2 - geoX, 0d); break; case Keys.Right: _canvas.CoordTransform.Screen2Prj(0, 0, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); _canvas.CoordTransform.Screen2Prj(1, 0, out prjX2, out prjY2); _canvas.CoordTransform.Prj2Geo(prjX2, prjY2, out geoX2, out geoY2); ApplyOffset(sender as ICanvas, geoX2 - geoX, 0d); break; case Keys.Up: _canvas.CoordTransform.Screen2Prj(0, 0, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); _canvas.CoordTransform.Screen2Prj(0, -1, out prjX2, out prjY2); _canvas.CoordTransform.Prj2Geo(prjX2, prjY2, out geoX2, out geoY2); ApplyOffset(sender as ICanvas, 0d, geoY2 - geoY); break; case Keys.Down: _canvas.CoordTransform.Screen2Prj(0, 0, out prjX, out prjY); _canvas.CoordTransform.Prj2Geo(prjX, prjY, out geoX, out geoY); _canvas.CoordTransform.Screen2Prj(0, 1, out prjX2, out prjY2); _canvas.CoordTransform.Prj2Geo(prjX2, prjY2, out geoX2, out geoY2); ApplyOffset(sender as ICanvas, 0d, geoY2 - geoY); break; default: break; } } break; } }
public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { }
private void EventControlFreeCurve(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { reSwitchLine: switch (eventType) { case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Right) { eventType = enumCanvasEventType.DoubleClick; goto reSwitchLine; } if (Control.MouseButtons == MouseButtons.Left && !_isDrawing) { _vertexts.Clear(); _controls.Clear(); _vertexts.Add(new Point(e.ScreenX, e.ScreenY)); _controls.Add(new Point(e.ScreenX, e.ScreenY)); if (_controlPointIsAdded != null) { PointF pt = new PointF(_controls[_controls.Count - 1].X, _controls[_controls.Count - 1].Y); ToRasterPointF(ref pt, sender as ICanvas); _controlPointIsAdded(pt); } _isDrawing = true; } else if (Control.MouseButtons == MouseButtons.Left) { _controls.Add(new Point(e.ScreenX, e.ScreenY)); if (_controlPointIsAdded != null) { PointF pt = new PointF(_controls[_controls.Count - 1].X, _controls[_controls.Count - 1].Y); ToRasterPointF(ref pt, sender as ICanvas); _controlPointIsAdded(pt); } } break; case enumCanvasEventType.MouseMove: if (_isDrawing) { _vertexts.Add(new Point(e.ScreenX, e.ScreenY)); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; case enumCanvasEventType.DoubleClick: if (_isDrawing) { //if (_vertexts.Count > 1)//闭合 //线,不需要闭合 // _vertexts.Add(_vertexts[0]); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); NotifyResult((sender as ICanvas).CoordTransform, sender as ICanvas); _vertexts.Clear(); _controls.Clear(); _isDrawing = false; } break; } }