コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        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;
            }
        }
コード例 #7
0
ファイル: DataFrame.cs プロジェクト: configare/hispeed
        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;
            }
        }
コード例 #8
0
ファイル: RulerLayer.cs プロジェクト: configare/hispeed
 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;
     }
 }
コード例 #9
0
        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;
            }
        }
コード例 #10
0
        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;
            }
        }
コード例 #11
0
        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;
            }
        }
コード例 #12
0
        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;
            }
        }
コード例 #13
0
        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);
            }
        }
コード例 #14
0
        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;
            }
        }
コード例 #15
0
        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;
            }
        }
コード例 #16
0
ファイル: SelectedAOILayer.cs プロジェクト: configare/hispeed
        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;
            }
        }
コード例 #17
0
 public void Event(object sender, enumCanvasEventType eventType, DrawingMouseEventArgs e)
 {
 }
コード例 #18
0
ファイル: ProfileLayer.cs プロジェクト: windygu/hispeed
        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;
            }
        }
コード例 #19
0
        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;
            }
        }
コード例 #20
0
ファイル: Border.cs プロジェクト: configare/hispeed
 public override void Event(object sender, enumCanvasEventType eventType, CanvasEventArgs e)
 {
 }
コード例 #21
0
ファイル: MeasureLayer.cs プロジェクト: windygu/hispeed
        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;
            }
        }
コード例 #22
0
 public virtual void Event(object sender, enumCanvasEventType eventType, CanvasEventArgs e)
 {
 }
コード例 #23
0
        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;
            }
        }
コード例 #24
0
ファイル: ArrowTool.cs プロジェクト: configare/hispeed
        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;
            }
        }