예제 #1
0
        private bool SubmitResizeObject()
        {
            bool result = false;

            if (resizedObject != null)
            {
                // after resizing
                resizedObject.Normalize();
                if (wasMove)
                {
                    resizedObject.RaiseChanged(true);    // raise DrawObjChanged event
                    result = true;
                }
                resizedObject = null;
                selectMode    = SelectionMode.Select;
            }
            return(result);
        }
예제 #2
0
 /// <summary>
 /// delete draw objcet
 /// </summary>
 /// <param name="drawObject"></param>
 public void DeleteDrawObject(DrawObject drawObject)
 {
     var removeItem = graphicsList.Find(item => item.Name == drawObject.Name);
     var success    = graphicsList.Remove(removeItem);
 }
예제 #3
0
        public override void OnMouseDown(RichPictureBox richPictureBox, MouseEventArgs e)
        {
            wasMove = false;
            Point point = new Point((int)(e.X / richPictureBox.Zoom - richPictureBox.OffsetX), (int)(e.Y / richPictureBox.Zoom - richPictureBox.OffsetY));

            selectMode           = SelectionMode.None;
            dragBoxFromMouseDown = Rectangle.Empty;

            // Test for moving or resizing (only if control is selected, cursor is on the handle)
            foreach (DrawObject o in richPictureBox.GraphicsList)
            {
                if (o is DrawCircle)
                {
                    continue;
                }
                DrawObject.HitTestResult htr = o.HitTest(richPictureBox, point, false);
                if (!o.Selected)    // test for drag and drop
                {
                    if (htr.ElementType == DrawObject.ElementType.Gate)
                    {
                        Size dragSize = SystemInformation.DragSize;
                        dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),
                                                                       e.Y - (dragSize.Height / 2)), dragSize);

                        selectMode = SelectionMode.Drag;
                    }
                }
                else if (htr.ElementType == DrawTools.DrawObject.ElementType.Handle)
                {
                    int handleNumber = htr.Index;
                    if (handleNumber > 0)
                    {
                        selectMode = SelectionMode.Size;

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

                        //Restore DrawPolygonFrame para
                        if (resizedObject is DrawPolyLine)
                        {
                            (resizedObject as DrawPolyLine).NeedReverseX  = false;
                            (resizedObject as DrawPolyLine).NeedReverseY  = false;
                            (resizedObject as DrawPolyLine).SetProportion = true;
                        }

                        richPictureBox.GraphicsList.UnselectAll();
                        o.Selected = true;
                        break;
                    }
                }
                else if (htr.ElementType == DrawObject.ElementType.Gate)
                {
                    selectMode            = SelectionMode.Move;
                    richPictureBox.Cursor = Cursors.SizeAll;
                    break;
                }
            }

            // Test for selection (cursor is on the object or label)
            if (selectMode == SelectionMode.None || selectMode == SelectionMode.Drag)
            {
                DrawObject o         = null;
                int        gateIndex = 0;
                for (int i = 0; i < richPictureBox.GraphicsList.Count; i++)
                {
                    if (richPictureBox.GraphicsList[i] is DrawCircle)
                    {
                        continue;
                    }
                    DrawObject.HitTestResult htr = richPictureBox.GraphicsList[i].HitTest(richPictureBox, point, true);
                    if (htr.ElementType == DrawObject.ElementType.Gate)
                    {
                        o          = richPictureBox.GraphicsList[i];
                        gateIndex  = htr.Index;
                        selectMode = o.Selected ? SelectionMode.Move : SelectionMode.Select;
                        if (selectMode == SelectionMode.Select)
                        {
                            richPictureBox.DrawObject = o;
                        }
                        break;
                    }
                }
                if (o != null)
                {
                    if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected)
                    {
                        richPictureBox.GraphicsList.UnselectAll();
                    }
                    o.Selected = true;
                }
            }
            // un-select
            if (selectMode == SelectionMode.None || selectMode == SelectionMode.Drag)
            {
                // click on background
                if ((Control.ModifierKeys & Keys.Control) == 0)
                {
                    richPictureBox.GraphicsList.UnselectAll();
                }
            }

            // Net selection
            if (selectMode == SelectionMode.None)
            {
                selectMode = SelectionMode.NetSelection;
            }
            lastPoint.X  = e.X;
            lastPoint.Y  = e.Y;
            startPoint.X = e.X;
            startPoint.Y = e.Y;

            richPictureBox.Capture = true;
            richPictureBox.Refresh();
        }