예제 #1
0
        /// <summary>
        /// Mouse move - resize new polygon
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseMove(IToolDrawArea drawArea, MouseEventArgs e)
        {
            drawArea.Control.Cursor = BoxCursor;

            if (e.Button != MouseButtons.Left)
                return;

            if (draw == null)
                return;                 // precaution

            var point = new Point(e.X, e.Y);
            int distance = (e.X - lastX) * (e.X - lastX) + (e.Y - lastY) * (e.Y - lastY);

            if (distance < minDistance)
            {
                // Distance between last two points is less than minimum -
                // move last point
                draw.MoveHandleTo(point, draw.HandleCount);
            }
            else
            {
                // Add new point
                (draw.Property as PencilProperty).AddPoint(point);
                lastX = e.X;
                lastY = e.Y;
            }

            drawArea.RefreshToolDrawArea();
        }
예제 #2
0
 /// <summary>
 /// Left nouse button is pressed
 /// </summary>
 /// <param name="drawArea"></param>
 /// <param name="e"></param>
 public override void OnMouseDown(IToolDrawArea drawArea, MouseEventArgs e)
 {
     if (draw == null)
     {
         property = new PolygonProperty();
         property.InitProperty();
         property.AddPoint(new Point(e.X, e.Y));
         property.AddPoint(new Point(e.X + 1, e.Y + 1));
         draw = new DrawPolygon(property);
         drawArea.AddNewDrawObject(draw);
         lastX = e.X;
         lastY = e.Y;
     }
     else
     {
         var point = new Point(e.X, e.Y);
         int distance = (e.X - lastX) * (e.X - lastX) + (e.Y - lastY) * (e.Y - lastY);
         if (distance < minDistance)
         {
             draw.MoveHandleTo(point, draw.HandleCount);
         }
         else
         {
             property.AddPoint(point);
             lastX = e.X;
             lastY = e.Y;
         }
     }
 }
예제 #3
0
 public override void OnMouseDown(IToolDrawArea drawArea, MouseEventArgs e)
 {
     var property = new LineProperty();
     property.InitProperty();
     property.Start = String.Format("{0},{1}", e.X, e.Y);
     property.End = String.Format("{0},{1}", e.X + 1, e.Y + 1);
     var draw = new DrawLine(property);
     drawArea.AddNewDrawObject(draw);
 }
예제 #4
0
 public override void OnMouseDown(IToolDrawArea drawArea, MouseEventArgs e)
 {
     var property = new LabelProperty();
     property.InitProperty();
     property.Size = "1,1";
     property.Location = String.Format("{0},{1}", e.X, e.Y);
     var draw = new DrawLabel(property);
     drawArea.AddNewDrawObject(draw);
 }
예제 #5
0
파일: Tool.cs 프로젝트: dalinhuang/tdcodes
 /// <summary>
 /// Left mouse button is released
 /// </summary>
 /// <param name="drawArea"></param>
 /// <param name="e"></param>
 public virtual void OnMouseUp(IToolDrawArea drawArea, MouseEventArgs e)
 {
     drawArea.GraphicsCollection[0].Normalize();
     drawArea.AddTrackToHistory(new TrackAdd(drawArea.GraphicsCollection[0]));
     ToolWindowsManager.Instance.GetToolBoxWindow().Selected = ToolBoxType.Pointer;
     drawArea.ActiveToolBox = ToolBoxType.Pointer;
     drawArea.Control.Capture = false;
     drawArea.Control.Refresh();
 }
예제 #6
0
        public override void OnMouseMove(IToolDrawArea drawArea, MouseEventArgs e)
        {
            drawArea.Control.Cursor = BoxCursor;

            if ( e.Button == MouseButtons.Left )
            {
                Point point = new Point(e.X, e.Y);
                drawArea.GraphicsCollection[0].MoveHandleTo(point, (int)HandleNumber.Top);
                drawArea.Control.Refresh();
            }
        }
예제 #7
0
 /// <summary>
 /// Left nouse button is pressed
 /// </summary>
 /// <param name="drawArea"></param>
 /// <param name="e"></param>
 public override void OnMouseDown(IToolDrawArea drawArea, MouseEventArgs e)
 {
     var property = new PencilProperty();
     property.InitProperty();
     property.AddPoint(new Point(e.X, e.Y));
     property.AddPoint(new Point(e.X + 1, e.Y + 1));
     draw = new DrawPencil(property);
     drawArea.AddNewDrawObject(draw);
     lastX = e.X;
     lastY = e.Y;
 }
예제 #8
0
        /// <summary>
        /// Mouse move - resize new polygon
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseMove(IToolDrawArea drawArea, MouseEventArgs e)
        {
            drawArea.Control.Cursor = BoxCursor;

            if (draw == null)
                return;

            if (e.Button != MouseButtons.Left)
                return;

            drawArea.RefreshToolDrawArea();
        }
예제 #9
0
 public override void OnMouseUp(IToolDrawArea drawArea, MouseEventArgs e)
 {
     draw = null;
     base.OnMouseUp(drawArea, e);
 }
예제 #10
0
 /// <summary>
 /// Right mouse button is released
 /// </summary>
 /// <param name="drawArea"></param>
 /// <param name="e"></param>
 public override void OnRightMouseUp(IToolDrawArea drawArea, MouseEventArgs e)
 {
     property = null;
     draw = null;
     base.OnMouseUp(drawArea, e);
 }
예제 #11
0
 /// <summary>
 /// Left mouse button is released
 /// </summary>
 /// <param name="drawArea"></param>
 /// <param name="e"></param>
 public override void OnMouseUp(IToolDrawArea drawArea, MouseEventArgs e)
 {
 }
예제 #12
0
파일: Tool.cs 프로젝트: dalinhuang/tdcodes
 /// <summary>
 /// Right mouse button is released
 /// </summary>
 /// <param name="drawArea"></param>
 /// <param name="e"></param>
 public virtual void OnRightMouseUp(IToolDrawArea drawArea, MouseEventArgs e)
 {
 }
예제 #13
0
파일: Tool.cs 프로젝트: dalinhuang/tdcodes
 /// <summary>
 /// Mouse is moved, left mouse button is pressed or none button is pressed
 /// </summary>
 /// <param name="drawArea"></param>
 /// <param name="e"></param>
 public virtual void OnMouseMove(IToolDrawArea drawArea, MouseEventArgs e)
 {
 }
예제 #14
0
        /// <summary>
        /// Left mouse button is pressed
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseDown(IToolDrawArea drawArea, MouseEventArgs e)
        {
            changeState = null;
            wasMove = false;


            SelectMode = PointerSelectionMode.None;
            var point = new Point(e.X, e.Y);

            // Test for resizing (only if control is selected, cursor is on the handle)
            foreach (IDrawObject o in drawArea.GraphicsCollection.Selection)
            {
                int handleNumber = o.HitTest(point);

                if (handleNumber > (int)HandleNumber.None)
                {
                    SelectMode = PointerSelectionMode.Size;

                    // keep resized object in class member
                    resizedObject = o;
                    resizedObjectHandle = handleNumber;

                    // Since we want to resize only one object, unselect all other objects
                    drawArea.GraphicsCollection.UnselectAll();
                    o.Selected = true;
                    selectedDrawObject = o;
                    changeState = new TrackChangeState(drawArea.GraphicsCollection);
                    break;
                }
            }

            // Test for move (cursor is on the object)
            if (SelectMode == PointerSelectionMode.None)
            {
                int n1 = drawArea.GraphicsCollection.Count;
                IDrawObject o = null;

                for (int i = 0; i < n1; i++)
                {
                    if (drawArea.GraphicsCollection[i].HitTest(point) == 0)
                    {
                        o = drawArea.GraphicsCollection[i];
                        break;
                    }
                }

                if (o != null)
                {
                    SelectMode = PointerSelectionMode.Move;

                    // Unselect all if Ctrl is not pressed and clicked object is not selected yet
                    if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected)
                        drawArea.GraphicsCollection.UnselectAll();

                    // Select clicked object
                    o.Selected = true;
                    selectedDrawObject = o;
                    changeState = new TrackChangeState(drawArea.GraphicsCollection);
                    drawArea.Control.Cursor = Cursors.SizeAll;
                }
            }

            // Net selection
            if (SelectMode == PointerSelectionMode.None)
            {
                // click on background
                if ((Control.ModifierKeys & Keys.Control) == 0)
                    drawArea.GraphicsCollection.UnselectAll();

                SelectMode = PointerSelectionMode.NetSelection;

            }

            lastPoint.X = e.X;
            lastPoint.Y = e.Y;
            startPoint.X = e.X;
            startPoint.Y = e.Y;
            drawArea.Control.Capture = true;
            drawArea.Control.Refresh();

            if (SelectMode == PointerSelectionMode.NetSelection)
            {
                // Draw selection rectangle in initial position
                ControlPaint.DrawReversibleFrame(
                    drawArea.Control.RectangleToScreen(GraphicUtility.GetNormalizedRectangle(startPoint, new Size(lastPoint))),
                    Color.Black,
                    FrameStyle.Dashed);
            }

            if (selectedDrawObject != null)
            {
                drawArea.SelectNewDrawObject(selectedDrawObject);
                selectedDrawObject = null;
            }
        }
예제 #15
0
        /// <summary>
        /// Right mouse button is released
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseUp(IToolDrawArea drawArea, MouseEventArgs e)
        {
            if (SelectMode == PointerSelectionMode.NetSelection)
            {
                // Remove old selection rectangle
                ControlPaint.DrawReversibleFrame(
                    drawArea.Control.RectangleToScreen(GraphicUtility.GetNormalizedRectangle(startPoint, new Size(lastPoint))),
                    Color.Black,
                    FrameStyle.Dashed);

                // Make group selection
                drawArea.GraphicsCollection.SelectInRectangle(
                    GraphicUtility.GetNormalizedRectangle(startPoint, new Size(lastPoint)));

                SelectMode = PointerSelectionMode.None;
            }

            if (resizedObject != null)
            {
                // after resizing
                resizedObject.Normalize();
                resizedObject = null;
            }

            drawArea.Control.Capture = false;
            drawArea.Control.Refresh();

            if (changeState != null && wasMove)
            {
                // Keep state after moving/resizing and add command to history
                changeState.NewState(drawArea.GraphicsCollection);
                ConfigToolContext.Instance.ToolTracker.AddTrackToHistory(changeState);
                changeState = null;
            }
        }
예제 #16
0
        /// <summary>
        /// Mouse is moved.
        /// None button is pressed, or left button is pressed.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseMove(IToolDrawArea drawArea, MouseEventArgs e)
        {
            Point point = new Point(e.X, e.Y);
            Point oldPoint = lastPoint;

            wasMove = true;

            // set cursor when mouse button is not pressed
            if (e.Button == MouseButtons.None)
            {
                Cursor cursor = null;

                for (int i = 0; i < drawArea.GraphicsCollection.Count; i++)
                {
                    int n = drawArea.GraphicsCollection[i].HitTest(point);

                    if (n > 0)
                    {
                        cursor = drawArea.GraphicsCollection[i].GetHandleCursor(n);
                        break;
                    }
                }

                if (cursor == null)
                    cursor = Cursors.Default;

                drawArea.Control.Cursor = cursor;

                return;
            }

            if (e.Button != MouseButtons.Left)
                return;

            /// Left button is pressed

            // Find difference between previous and current position
            int dx = e.X - lastPoint.X;
            int dy = e.Y - lastPoint.Y;

            lastPoint.X = e.X;
            lastPoint.Y = e.Y;

            // resize
            if (SelectMode == PointerSelectionMode.Size)
            {
                if (resizedObject != null)
                {
                    resizedObject.MoveHandleTo(point, resizedObjectHandle);
                    drawArea.Control.Refresh();
                }
            }

            // move
            if (SelectMode == PointerSelectionMode.Move)
            {
                foreach (IDrawObject o in drawArea.GraphicsCollection.Selection)
                {
                    o.Move(dx, dy);
                }

                drawArea.Control.Cursor = Cursors.SizeAll;
                drawArea.Control.Refresh();
            }

            if (SelectMode == PointerSelectionMode.NetSelection)
            {
                // Remove old selection rectangle
                ControlPaint.DrawReversibleFrame(
                    drawArea.Control.RectangleToScreen(GraphicUtility.GetNormalizedRectangle(startPoint, new Size(oldPoint))),
                    Color.Black,
                    FrameStyle.Dashed);

                // Draw new selection rectangle
                ControlPaint.DrawReversibleFrame(
                    drawArea.Control.RectangleToScreen(GraphicUtility.GetNormalizedRectangle(startPoint, new Size(point))),
                    Color.Black,
                    FrameStyle.Dashed);

                return;
            }

        }