public override void Event(object sender, enumCanvasEventType eventType, CanvasEventArgs e) { switch (eventType) { case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Left && !_isPaning) { _oldCursor = (sender as ILayoutHost).Container.Cursor; (sender as ILayoutHost).Container.Cursor = Cursors.Hand; _prePoint = new Point(e.ScreenX, e.ScreenY); _isPaning = true; } break; case enumCanvasEventType.MouseMove: if (_isPaning) { int offsetX = e.ScreenX - _prePoint.X; int offsetY = e.ScreenY - _prePoint.Y; Apply(sender as ILayoutHost, offsetX, offsetY); _prePoint = new Point(e.ScreenX, e.ScreenY); } break; case enumCanvasEventType.MouseUp: _isPaning = false; (sender as ILayoutHost).Container.Cursor = _oldCursor; break; case enumCanvasEventType.MouseWheel: ApplyWheel(sender as ILayoutHost, e); 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; } }
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 override void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { base.Event(sender, eventType, e); switch (eventType) { case enumCanvasEventType.MouseDown: _startLocation.X = e.ScreenX; _startLocation.Y = e.ScreenY; _canvas.DummyRenderModeSupport.SetToDummyRenderMode(); break; case enumCanvasEventType.MouseMove: if (!_startLocation.IsEmpty) { HandleBox(sender as ICanvas, e); } break; case enumCanvasEventType.MouseUp: if (!_startLocation.IsEmpty && !_endLocation.IsEmpty) { _endLocation.X = e.ScreenX; _endLocation.Y = e.ScreenY; HandleZoom(sender as ICanvas, e); _startLocation = PointF.Empty; _endLocation = PointF.Empty; _canvas.DummyRenderModeSupport.SetToNomralRenderMode(); (sender as ICanvas).Refresh(enumRefreshType.FlyLayer); } break; } }
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; } }
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 override void Event(object sender, enumCanvasEventType eventType, CanvasEventArgs e) { if (_runtime == null) { return; } float x0 = _location.X, y0 = _location.Y; _runtime.Layout2Screen(ref x0, ref y0); float x = e.ScreenX - x0; float y = e.ScreenY - y0; if (!_isInsideProvider) { x += _offsetX; y += _offsetY; } MouseButtons mouseButtons = (e.E is MouseEventArgs) ? (e.E as MouseEventArgs).Button : Control.MouseButtons; IControlMessageAccepter msgAccepter = (_provider as IDataFrameDataProvider).Canvas as IControlMessageAccepter; switch (eventType) { case enumCanvasEventType.MouseWheel: msgAccepter.AcceptMouseWheel(this, new MouseEventArgs(mouseButtons, 0, (int)x, (int)y, e.WheelDelta)); (_provider as IDataFrameDataProvider).Canvas.Refresh(enumRefreshType.All); _host.Render(); break; case enumCanvasEventType.MouseDown: msgAccepter.AcceptMouseDown(this, new MouseEventArgs(mouseButtons, 0, (int)x, (int)y, e.WheelDelta)); break; case enumCanvasEventType.MouseMove: msgAccepter.AcceptMouseMove(this, new MouseEventArgs(mouseButtons, 0, (int)x, (int)y, e.WheelDelta)); (_provider as IDataFrameDataProvider).Canvas.Refresh(enumRefreshType.All); _host.Render(); break; case enumCanvasEventType.MouseUp: msgAccepter.AcceptMouseUp(this, new MouseEventArgs(mouseButtons, 0, (int)x, (int)y, e.WheelDelta)); (_provider as IDataFrameDataProvider).Canvas.Refresh(enumRefreshType.All); _host.Render(); break; case enumCanvasEventType.KeyDown: msgAccepter.AcceptKeyDown(this, new KeyEventArgs(Keys.G)); (_provider as IDataFrameDataProvider).Canvas.Refresh(enumRefreshType.All); _host.Render(); 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; } }
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; } }
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 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 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 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) { }
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 virtual void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e) { if (_canvas == null) { _canvas = sender as ICanvas; } switch (eventType) { case enumCanvasEventType.MouseDown: if (_enabledPan) { _preLocation.X = e.ScreenX; _preLocation.Y = e.ScreenY; _canvas.DummyRenderModeSupport.SetToDummyRenderMode(); } break; case enumCanvasEventType.MouseMove: if (_enabledPan) { if (_preLocation.IsEmpty) { return; } float offsetX = e.ScreenX - _preLocation.X; float offsetY = e.ScreenY - _preLocation.Y; if ((_canvas as IDummyRenderModeSupport).IsDummyModel) { _hasChanged = true; } ApplyOffset(sender as ICanvas, offsetX, offsetY); _preLocation.X = e.ScreenX; _preLocation.Y = e.ScreenY; } break; case enumCanvasEventType.MouseUp: if (_enabledPan) { _hasChanged = false; _preLocation = PointF.Empty; _canvas.DummyRenderModeSupport.SetToNomralRenderMode(); //if (_hasChanged) _canvas.Refresh(enumRefreshType.All); } break; case enumCanvasEventType.MouseWheel: if (!_beginWheel /*&& (_canvas as IDummyRenderModeSupport).IsEnabledDummyCache*/) { _timerForWheel.Start(); (_canvas as IDummyRenderModeSupport).SetToDummyRenderMode(); _hasChanged = true; } ICanvas canvas = sender as ICanvas; //Console.WriteLine("Wheel:" + e.WheelDelta.ToString()); int steps = 0; if (e.WheelDelta > 0) { steps = _zoomStepsCalculator.GetZoomSteps(_canvas, e.WheelDelta, -1); canvas.ZoomOutByStep(e.ScreenX, e.ScreenY, steps); } else { steps = _zoomStepsCalculator.GetZoomSteps(_canvas, e.WheelDelta, 1); canvas.ZoomInByStep(e.ScreenX, e.ScreenY, steps); } //Console.WriteLine("Steps:" + steps.ToString()); _lastTicks = Environment.TickCount; break; } }
public override void Event(object sender, enumCanvasEventType eventType, CanvasEventArgs e) { }
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, CanvasEventArgs e) { }
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 override void Event(object sender, enumCanvasEventType eventType, CanvasEventArgs e) { ILayoutHost host = sender as ILayoutHost; switch (eventType) { case enumCanvasEventType.DoubleClick: HandleDoubleClick(host, e); break; case enumCanvasEventType.KeyDown: HandleKey(host, e); break; case enumCanvasEventType.MouseDown: if (Control.MouseButtons == MouseButtons.Left) { _isMoving = false; _beginPoint = new PointF(e.LayoutX, e.LayoutY); //by chennan 20131107 修改图元无法点选选中 HitByPoint(sender as ILayoutHost, e.LayoutX, e.LayoutY); _editedElement = GetEditedElementFromSelection(sender as ILayoutHost, e); if (_editedElement == null) { HitByPoint(sender as ILayoutHost, e.LayoutX, e.LayoutY); _editedElement = GetEditedElementFromSelection(sender as ILayoutHost, e); } if (_editedElement != null) { if (_anchorIndex != -1) { _action = enumAction.EditAnchor; } else { _action = enumAction.MovingElement; } } else { _beginPointScreen.X = e.ScreenX; _beginPointScreen.Y = e.ScreenY; _action = enumAction.SelectByRect; } } break; case enumCanvasEventType.MouseMove: if (_action == enumAction.SelectByRect) { _isMoving = false; // _isMultiSelect = false; _crtPointScreen.X = e.ScreenX; _crtPointScreen.Y = e.ScreenY; host.Render(); } else if (_action == enumAction.MovingElement) { if (_editedElement.IsLocked) { break; } _isMultiSelect = false; MovingElement(host, e); } else if (_action == enumAction.EditAnchor) { if (_editedElement.IsLocked) { break; } _isMoving = false; // _isMultiSelect = false; host.Container.Cursor = GetCursorByAnchor(); _editedBox.Apply(host.LayoutRuntime, _anchorIndex, _beginPoint, new PointF(e.LayoutX, e.LayoutY)); _beginPoint.X = e.LayoutX; _beginPoint.Y = e.LayoutY; host.Render(); } break; case enumCanvasEventType.MouseUp: if (_beginPoint.IsEmpty) { return; } if ((e.LayoutX - _beginPoint.X) < float.Epsilon && (e.LayoutY - _beginPoint.Y) < float.Epsilon) { bool isEmpty = HitByPoint(sender as ILayoutHost, e.LayoutX, e.LayoutY); //by chennan 20131107 多选时未点选到正确位置不去除之前已选取的图元 if (isEmpty && ((Control.ModifierKeys & Keys.Shift) != Keys.Shift)) { host.LayoutRuntime.ClearSelection(); } else { ClearOtherSelection(host, e); } } else { RectangleF rect = new RectangleF(Math.Min(_beginPoint.X, e.LayoutX), Math.Min(_beginPoint.Y, e.LayoutY), Math.Abs(_beginPoint.X - e.LayoutX), Math.Abs(_beginPoint.Y - e.LayoutY)); HitByRect(sender as ILayoutHost, rect); } host.Render(); _action = enumAction.None; _anchorIndex = -1; host.Container.Cursor = Cursor; break; } }