コード例 #1
0
        /// <summary>
        /// Add new object to draw area.
        /// Function is called when user left-clicks draw area,
        /// and one of ToolObject-derived tools is active.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="o"></param>
        protected void AddNewObject(DrawArea drawArea, DrawObject o)
        {
            drawArea.GraphicsList.UnselectAll();

            o.Selected = true;
            drawArea.GraphicsList.Add(o);

            drawArea.Capture = true;
            drawArea.Refresh();

            drawArea.SetDirty();
        }
コード例 #2
0
ファイル: ToolObject.cs プロジェクト: ArsenShnurkov/DrawTools
        /// <summary>
        /// Add new object to draw area.
        /// Function is called when user left-clicks draw area,
        /// and one of ToolObject-derived tools is active.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="o"></param>
        protected void AddNewObject(DrawArea drawArea, DrawObject o)
        {
            drawArea.GraphicsList.UnselectAll();

            o.Selected = true;
            drawArea.GraphicsList.Add(o);

            drawArea.Capture = true;
            drawArea.Refresh();

            drawArea.SetDirty();
        }
コード例 #3
0
        /// <summary>
        /// Right mouse button is released
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e)
        {
            int al = drawArea.TheLayers.ActiveLayerIndex;

            if (selectMode == SelectionMode.NetSelection)
            {
                // Group selection
                drawArea.TheLayers[al].Graphics.SelectInRectangle(drawArea.NetRectangle);

                selectMode = SelectionMode.None;
                drawArea.DrawNetRectangle = false;
            }

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

                if (drawArea.UpdateDrawObject != null)
                {
                    List <DrawObject> drawObjectList = new List <DrawObject>();
                    drawObjectList.Add(resizedObject);
                    drawArea.UpdateDrawObject.BeginInvoke(drawObjectList, null, null);
                }

                resizedObject = null;
            }

            drawArea.Capture = false;

            drawArea.Invalidate();

            if (commandChangeState != null && wasMove)
            {
                if (drawArea.UpdateDrawObject != null)
                {
                    List <DrawObject> drawObjectList = new List <DrawObject>();
                    foreach (DrawObject o in drawArea.TheLayers[al].Graphics.Selection)
                    {
                        drawObjectList.Add(o);
                    }

                    drawArea.UpdateDrawObject.BeginInvoke(drawObjectList, null, null);
                }

                // Keep state after moving/resizing and add command to history
                commandChangeState.NewState(drawArea.TheLayers);
                drawArea.AddCommandToHistory(commandChangeState);
                commandChangeState = null;
            }
            lastPoint = drawArea.BackTrackMouse(e.Location);
        }
コード例 #4
0
ファイル: DrawObject.cs プロジェクト: lizhaoiot/ERPInquire
 //		private
 /// <summary>
 /// Copy fields from this instance to cloned instance drawObject.
 /// Called from Clone functions of derived classes.
 /// </summary>
 /// <param name="drawObject">Object being cloned</param>
 protected void FillDrawObjectFields(DrawObject drawObject)
 {
     drawObject.selected   = selected;
     drawObject.color      = color;
     drawObject.penWidth   = penWidth;
     drawObject.ID         = ID;
     drawObject._brushType = _brushType;
     drawObject._penType   = _penType;
     drawObject.drawBrush  = drawBrush;
     drawObject.drawpen    = drawpen;
     drawObject.fillColor  = fillColor;
     drawObject._rotation  = _rotation;
     drawObject._center    = _center;
 }
コード例 #5
0
        public SwitchEditDialog(string monitorID, int portID, string deviceID, DrawObject obj)
        {
            InitializeComponent();
            this.monitorID = monitorID;
            this.portID    = portID.ToString();
            this.deviceID  = deviceID;

            label1.Text        = "监控端口";
            textBox1.Text      = this.monitorID;
            label2.Visible     = textBox2.Visible =
                label3.Visible = textBox3.Visible = true;
            textBox2.Text      = this.deviceID;
            textBox3.Text      = this.portID;
        }
コード例 #6
0
        /// <summary>
        /// Delete drawobject
        /// </summary>
        /// <param name="o"></param>
        /// <returns></returns>
        public bool DeleteDrawObject(DrawObject o)
        {
            int n = graphicsList.Count;

            for (int i = n - 1; i >= 0; i--)
            {
                if (((DrawObject)graphicsList[i]) == o)
                {
                    graphicsList.RemoveAt(i);
                    _isDirty = true;
                    return(true);
                }
            }

            return(false);
        }
コード例 #7
0
ファイル: ToolObject.cs プロジェクト: pos0637/codec
        /// <summary>
        /// Add new object to draw area.
        /// Function is called when user left-clicks draw area,
        /// and one of ToolObject-derived tools is active.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="o"></param>
        protected void AddNewObject(DrawArea drawArea, DrawObject o)
        {
            int al = drawArea.TheLayers.ActiveLayerIndex;

            drawArea.TheLayers[al].Graphics.UnselectAll();

            o.Selected = true;
            o.Dirty    = true;
            // Set the object id now
            o.ID = DrawObject.sCurrentDrawObjectId++;
            drawArea.TheLayers[al].Graphics.Add(o);

            drawArea.Capture = true;
            mDrawObject      = o;
            drawArea.Invalidate();
        }
コード例 #8
0
ファイル: DrawArea.cs プロジェクト: kallotec/Bonsai
        /// <summary>
        /// Right-click handler
        /// </summary>
        /// <param name="e"></param>
        private void OnContextMenu(MouseEventArgs e)
        {
            // Change current selection if necessary

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

            int        n = GraphicsList.Count;
            DrawObject o = null;

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

            if (o != null)
            {
                if (!o.Selected)
                {
                    GraphicsList.UnselectAll();
                }

                // Select clicked object
                o.Selected = true;
                _bringToFrontToolStripMenuItem.Enabled = true;
                _sendToBackToolStripMenuItem.Enabled   = true;
                _cutToolStripMenuItem.Enabled          = true;
                _copyToolStripMenuItem.Enabled         = true;
                _deleteToolStripMenuItem.Enabled       = true;
            }
            else
            {
                _bringToFrontToolStripMenuItem.Enabled = false;
                _sendToBackToolStripMenuItem.Enabled   = false;
                _cutToolStripMenuItem.Enabled          = false;
                _copyToolStripMenuItem.Enabled         = false;
                _deleteToolStripMenuItem.Enabled       = false;
                GraphicsList.UnselectAll();
            }

            _pasteToolStripMenuItem.Enabled = GraphicsList.AreItemsInMemory();
            _contextMenuStrip.Show(MousePosition);
            Refresh();
        }
コード例 #9
0
        /// <summary>
        /// Get properties from selected objects and fill GraphicsProperties instance
        /// </summary>
        /// <returns></returns>
        private GraphicsProperties GetProperties()
        {
            GraphicsProperties properties = new GraphicsProperties();

            int n = SelectionCount;

            if (n < 1)
            {
                return(properties);
            }

            DrawObject o = GetSelectedObject(0);

            int firstColor    = o.Color.ToArgb();
            int firstPenWidth = o.PenWidth;

            bool allColorsAreEqual = true;
            bool allWidthAreEqual  = true;

            for (int i = 1; i < n; i++)
            {
                if (GetSelectedObject(i).Color.ToArgb() != firstColor)
                {
                    allColorsAreEqual = false;
                }

                if (GetSelectedObject(i).PenWidth != firstPenWidth)
                {
                    allWidthAreEqual = false;
                }
            }

            if (allColorsAreEqual)
            {
                properties.ColorDefined = true;
                properties.Color        = Color.FromArgb(firstColor);
            }

            if (allWidthAreEqual)
            {
                properties.PenWidthDefined = true;
                properties.PenWidth        = firstPenWidth;
            }

            return(properties);
        }
コード例 #10
0
ファイル: ToolPointer.cs プロジェクト: Xaprice/XView
        /// <summary>
        /// Right mouse button is released
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseUp(ImageDrawBox drawArea, MouseEventArgs e)
        {
            if (selectMode == SelectionMode.NetSelection)
            {
                // Remove old selection rectangle
                ControlPaint.DrawReversibleFrame(
                    drawArea.RectangleToScreen(DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint)),
                    Color.Black,
                    FrameStyle.Dashed);

                //Point pointscroll = GetEventPointInArea(drawArea, e);
                // Make group selection
                //zhoujin - user zoomfactor
                //drawArea.GraphicsList.SelectInRectangle(
                //    DrawRectangle.GetNormalizedRectangle(new Point(startPoint.X + Math.Abs(drawArea.AutoScrollPosition.X), startPoint.Y + Math.Abs(drawArea.AutoScrollPosition.Y)),
                //                                        new Point(lastPoint.X + Math.Abs(drawArea.AutoScrollPosition.X), lastPoint.Y + Math.Abs(drawArea.AutoScrollPosition.Y))));
                double zoomFactor = drawArea.ZoomFactor;
                drawArea.GraphicsList.SelectInRectangle(
                    DrawRectangle.GetNormalizedRectangle(new Point(ConvertToZoomed(startPoint.X, zoomFactor), ConvertToZoomed(startPoint.Y, zoomFactor)),
                                                         new Point(ConvertToZoomed(lastPoint.X, zoomFactor), ConvertToZoomed(lastPoint.Y, zoomFactor))));

                selectMode = SelectionMode.None;
            }

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

            drawArea.Capture = false;
            drawArea.Refresh();
            drawArea.GraphicsList.Dirty = true;

            if (commandChangeState != null && wasMove)
            {
                // Keep state after moving/resizing and add command to history
                commandChangeState.NewState(drawArea.GraphicsList);
                drawArea.AddCommandToHistory(commandChangeState);
                commandChangeState = null;
            }
        }
コード例 #11
0
ファイル: ToolPointer.cs プロジェクト: prsly/Vector-Editor
        public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e)
        {
            if (_selectMode == SelectionMode.NetSelection)
            {
                // âûáîð ãðóïïû
                drawArea.GraphicsList.SelectInRectangle(drawArea.NetRectangle);

                _selectMode = SelectionMode.None;
                drawArea.DrawNetRectangle = false;
            }

            if (_resizedObject != null)
            {
                // ïîñëå ðåñàéçà
                _resizedObject.Normalize();
                _resizedObject = null;
                drawArea.ResizeCommand(drawArea.GraphicsList.GetFirstSelected(),
                                       new PointF(_startPoint.X, _startPoint.Y),
                                       new PointF(e.X, e.Y),
                                       _resizedObjectHandle);
            }

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

            //ïóøàåì êîìàíäó â undo/redo ëèñò
            if (_selectMode == SelectionMode.Move)
            {
                var movedItemsList = new ArrayList();

                for (int i = 0; i < drawArea.GraphicsList.SelectionCount; i++)
                {
                    movedItemsList.Add(drawArea.GraphicsList.GetSelectedObject(i));
                }

                var delta = new PointF {
                    X = e.X - _startPoint.X, Y = e.Y - _startPoint.Y
                };
                drawArea.MoveCommand(movedItemsList, delta);
            }

            IsComplete = true;
        }
コード例 #12
0
ファイル: ToolPointer.cs プロジェクト: kallotec/Bonsai
        /// <summary>
        /// Right mouse button is released
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e)
        {
            if (_selectMode == SelectionMode.NetSelection)
            {
                // Group selection
                drawArea.GraphicsList.SelectInRectangle(drawArea.NetRectangle);

                _selectMode = SelectionMode.None;
                drawArea.DrawNetRectangle = false;
            }

            if (_resizedObject != null)
            {
                // after resizing
                _resizedObject.Normalize();
                _resizedObject = null;
                drawArea.ResizeCommand(drawArea.GraphicsList.GetFirstSelected(),
                                       new PointF(_startPoint.X, _startPoint.Y),
                                       new PointF(e.X, e.Y),
                                       _resizedObjectHandle);
            }

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

            //push the command to undo/Redo list now
            if (_selectMode == SelectionMode.Move)
            {
                var movedItemsList = new ArrayList();

                for (int i = 0; i < drawArea.GraphicsList.SelectionCount; i++)
                {
                    movedItemsList.Add(drawArea.GraphicsList.GetSelectedObject(i));
                }

                var delta = new PointF {
                    X = e.X - _startPoint.X, Y = e.Y - _startPoint.Y
                };
                drawArea.MoveCommand(movedItemsList, delta);
            }

            IsComplete = true;
        }
コード例 #13
0
        // Replace objects in graphicsList with objects from list
        private void ReplaceObjects(GraphicsList graphicsList, List <DrawObject> list)
        {
            for (int i = 0; i < graphicsList.Count; i++)
            {
                DrawObject replacement = null;

                foreach (DrawObject o in list)
                {
                    if (o.ID == graphicsList[i].ID)
                    {
                        replacement = o;
                        break;
                    }
                }

                if (replacement != null)
                {
                    graphicsList.Replace(i, replacement);
                }
            }
        }
コード例 #14
0
ファイル: ToolPointer.cs プロジェクト: yooknow85/UndoRedo
        /// <summary>
        /// Right mouse button is released
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e)
        {
            if (selectMode == SelectionMode.NetSelection)
            {
                // Group selection
                drawArea.GraphicsList.SelectInRectangle(drawArea.NetRectangle);

                selectMode = SelectionMode.None;
                drawArea.DrawNetRectangle = false;
            }

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

            drawArea.Capture = false;
            drawArea.Refresh();
        }
コード例 #15
0
ファイル: ToolObject.cs プロジェクト: pos0637/codec
        /// <summary>
        /// Left mouse is released.
        /// New object is created and resized.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e)
        {
            int al = drawArea.TheLayers.ActiveLayerIndex;

            if (drawArea.TheLayers[al].Graphics.Count > 0)
            {
                drawArea.TheLayers[al].Graphics[0].Normalize();
            }

            if ((drawArea.ActiveTool != DrawArea.DrawToolType.Polygon) ||
                ((drawArea.ActiveTool == DrawArea.DrawToolType.Polygon) && (e.Button == MouseButtons.Right)))
            {
                drawArea.ActiveTool = DrawArea.DrawToolType.Pointer;
                drawArea.AddDrawObject?.BeginInvoke(mDrawObject, null, null);
                drawArea.AddCommandToHistory(new CommandAdd(mDrawObject));
                mDrawObject = null;
            }

            drawArea.Capture = false;
            drawArea.Invalidate();
        }
コード例 #16
0
        /// <summary>
        /// Add new object to draw area.
        /// Function is called when user left-clicks draw area,
        /// and one of ToolObject-derived tools is active.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="o"></param>
        protected void AddNewObject(DrawArea drawArea, DrawObject o)
        {
            int al = drawArea.TheLayers.ActiveLayerIndex;

            drawArea.TheLayers[al].Graphics.UnselectAll();

            o.Selected = true;
            o.Dirty    = true;
            int objectID = 0;

            // Set the object id now
            for (int i = 0; i < drawArea.TheLayers.Count; i++)
            {
                objectID = +drawArea.TheLayers[i].Graphics.Count;
            }
            objectID++;
            o.ID = objectID;
            drawArea.TheLayers[al].Graphics.Add(o);

            drawArea.Capture = true;
            drawArea.Refresh();
        }
コード例 #17
0
        private static Point TestForConnection(DrawArea drawArea, Point p, out int objectID)
        {
            // Determine if within 5 pixels of a connection point
            // Step 1: see if a 5 x 5 rectangle centered on the mouse cursor intersects with an object
            // Step 2: If it does, then see if there is a connection point within the rectangle
            // Step 3: If there is, move the point to the connection point, record the object's id in the connector
            //
            objectID = -1;
            Rectangle    testRectangle  = new Rectangle(p.X - 2, p.Y - 2, 5, 5);
            int          al             = drawArea.TheLayers.ActiveLayerIndex;
            bool         connectionHere = false;
            Point        h  = new Point(-1, -1);
            GraphicsList gl = drawArea.TheLayers[al].Graphics;

            for (int i = 1; i < gl.Count; i++)
            {
                if (gl[i].IntersectsWith(testRectangle))
                {
                    DrawObject obj = (DrawObject)gl[i];
                    for (int j = 1; j < obj.HandleCount + 1; j++)
                    {
                        h = obj.GetHandle(j);
                        if (testRectangle.Contains(h))
                        {
                            connectionHere = true;
                            p        = h;
                            objectID = obj.ID;
                            //			obj.DrawConnection(drawArea., j);
                            break;
                        }
                    }
                }
                if (connectionHere)
                {
                    break;
                }
            }
            return(p);
        }
コード例 #18
0
        /// <summary>
        /// Left mouse is released.
        /// New object is created and resized.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseUp(ImageDrawBox drawArea, MouseEventArgs e)
        {
            drawArea.GraphicsList[0].Normalize();
            drawArea.AddCommandToHistory(new CommandAdd(drawArea.GraphicsList[0]));
            drawArea.ActiveTool = ImageDrawBox.DrawToolType.Pointer;

            //TODO : 这部分代码需要整理
            //zhoujin: 如果是正在定标则删除图形,并弹出定标窗口
            if (drawArea.DrawMode == ImageDrawBox.DrawingMode.SetUnit)
            {
                DrawObject drawObj = drawArea.GraphicsList[0];
                //定标只支持用画直线的方式
                if (drawObj is DrawLine)
                {
                    DrawLine    drawLine    = drawObj as DrawLine;
                    double      pxLen       = CalcLenght(drawLine.StartPoint, drawLine.EndPoint);
                    SetUnitForm setUnitForm = new SetUnitForm(drawArea, pxLen);
                    setUnitForm.ShowDialog();
                    drawArea.GraphicsList.DeleteLastAddedObject();
                    drawArea.DrawMode = ImageDrawBox.DrawingMode.Measure;
                }
            }
            if (drawArea.DrawMode == ImageDrawBox.DrawingMode.SetROI)
            {
                DrawObject drawObj = drawArea.GraphicsList[0];
                //设置ROI只支持用矩形绘制
                if (drawObj is DrawRectangle)
                {
                    DrawRectangle drawRect = drawObj as DrawRectangle;
                    drawArea.SetROI(drawRect.GetBoundingBox());
                    drawArea.GraphicsList.DeleteLastAddedObject();
                    drawArea.DrawMode = ImageDrawBox.DrawingMode.Measure;
                }
            }

            drawArea.Capture = false;
            drawArea.Refresh();
            drawArea.GraphicsList.Dirty = true;
        }
コード例 #19
0
ファイル: DrawObject.cs プロジェクト: lizhaoiot/ERPInquire
        /// <summary>
        /// Returns (-1), (0), (+1) to represent the relative Z-order of the object being compared with this object
        /// </summary>
        /// <param name="obj">DrawObject that is compared to this object</param>
        /// <returns>	(-1)	if the object is less (further back) than this object.
        ///				(0)	if the object is equal to this object (same level graphically).
        ///				(1)	if the object is greater (closer to the front) than this object.</returns>
        public int CompareTo(object obj)
        {
            DrawObject d = obj as DrawObject;
            int        x = 0;

            if (d != null)
            {
                if (d.ZOrder == ZOrder)
                {
                    x = 0;
                }
                else if (d.ZOrder > ZOrder)
                {
                    x = -1;
                }
                else
                {
                    x = 1;
                }
            }

            return(x);
        }
コード例 #20
0
ファイル: DrawArea.cs プロジェクト: ming91915/DrawTools
        /// <summary>
        /// Right-click handler
        /// </summary>
        /// <param name="e"></param>
        private void OnContextMenu(MouseEventArgs e)
        {
            // Change current selection if necessary

            Point      point     = BackTrackMouse(new Point(e.X, e.Y));
            Point      menuPoint = new Point(e.X, e.Y);
            int        al        = _layers.ActiveLayerIndex;
            int        n         = _layers[al].Graphics.Count;
            DrawObject o         = null;

            for (int i = 0; i < n; i++)
            {
                if (_layers[al].Graphics[i].HitTest(point) == 0)
                {
                    o = _layers[al].Graphics[i];
                    break;
                }
            }

            if (o != null)
            {
                if (!o.Selected)
                {
                    _layers[al].Graphics.UnselectAll();
                }

                // Select clicked object
                o.Selected = true;
            }
            else
            {
                _layers[al].Graphics.UnselectAll();
            }

            Refresh();
            Owner.ctxtMenu.Show(this, menuPoint);
        }
コード例 #21
0
ファイル: DrawArea.cs プロジェクト: kallotec/Bonsai
        public bool LoadFromXml(XmlTextReader reader)
        {
            ErrH.Log("DrawArea", "LoadFromXML", "", ErrH._LogPriority.Info);
            _graphicsList.Clear();
            var svg = new SvgDoc();

            if (!svg.LoadFromFile(reader))
            {
                return(false);
            }
            SvgRoot root = svg.GetSvgRoot();

            if (root == null)
            {
                return(false);
            }
            try
            {
                SizePicture = new SizeF(DrawObject.ParseSize(root.Width, DrawObject.Dpi.X),
                                        DrawObject.ParseSize(root.Height, DrawObject.Dpi.Y));
            }
            catch
            {
            }
            _mOriginalSize = SizePicture;
            SvgElement ele = root.getChild();

            _mScale = new SizeF(1, 1);
            if (ele != null)
            {
                _graphicsList.AddFromSvg(ele);
            }

            Description = _graphicsList.Description;
            return(true);
        }
コード例 #22
0
ファイル: DrawArea.cs プロジェクト: pos0637/codec
        public void SelectByTag(Object tag)
        {
            if (_layers != null)
            {
                Int32 count = _layers.Count;
                for (Int32 i = 0; i < count; i++)
                {
                    Layer layer = _layers[i];
                    if (layer != null)
                    {
                        layer.Graphics.UnselectAll();
                    }
                }

                int lc = _layers.Count;
                for (int i = 0; i < lc; i++)
                {
                    if (_layers[i].IsVisible)
                    {
                        if (_layers[i].Graphics != null)
                        {
                            count = _layers[i].Graphics.Count;
                            for (Int32 n = 0; n < count; n++)
                            {
                                DrawObject drawObject = _layers[i].Graphics[n];
                                if (tag == drawObject.Tag)
                                {
                                    drawObject.Selected = true;
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #23
0
ファイル: DrawArea.cs プロジェクト: yooknow85/UndoRedo
        /// <summary>
        /// Right-click handler
        /// </summary>
        /// <param name="e"></param>
        private void OnContextMenu(MouseEventArgs e)
        {
            // Change current selection if necessary

            Point point = new Point(e.X, e.Y);

            int        n = GraphicsList.Count;
            DrawObject o = null;

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

            if (o != null)
            {
                if (!o.Selected)
                {
                    GraphicsList.UnselectAll();
                }

                // Select clicked object
                o.Selected = true;
            }
            else
            {
                GraphicsList.UnselectAll();
            }

            Refresh();

            // Show context menu.
            // Make ugly trick which saves a lot of code.
            // Get menu items from Edit menu in main form and
            // make context menu from them.
            // These menu items are handled in the parent form without
            // any additional efforts.

            MainMenu mainMenu = Owner.Menu;            // Main menu
            MenuItem editItem = mainMenu.MenuItems[1]; // Edit submenu

            // Make array of items for ContextMenu constructor
            // taking them from the Edit submenu
            MenuItem[] items = new MenuItem[editItem.MenuItems.Count];

            for (int i = 0; i < editItem.MenuItems.Count; i++)
            {
                items[i] = editItem.MenuItems[i];
            }

            Owner.SetStateOfControls();  // enable/disable menu items

            // Create and show context menu
            ContextMenu menu = new ContextMenu(items);

            menu.Show(this, point);

            // Restore items in the Edit menu (without this line Edit menu
            // is empty after forst right-click)
            editItem.MergeMenu(menu);
        }
コード例 #24
0
 // Create this command with DrawObject instance added to the list
 public CommandAdd(DrawObject drawObject) : base()
 {
     // Keep copy of added object
     this.drawObject = drawObject.Clone();
 }
コード例 #25
0
ファイル: CommandAdd.cs プロジェクト: ArsenShnurkov/DrawTools
 // Create this command with DrawObject instance added to the list
 public CommandAdd(DrawObject drawObject)
     : base()
 {
     // Keep copy of added object
     this.drawObject = drawObject.Clone();
 }
コード例 #26
0
 /// <summary>
 /// Thanks to Member 3272353 for this fix to object ordering problem.
 /// </summary>
 /// <param name="obj"></param>
 public void Append(DrawObject obj)
 {
     graphicsList.Add(obj);
 }
コード例 #27
0
 public void Add(DrawObject obj)
 {
     // insert to the top of z-order
     graphicsList.Insert(0, obj);
 }
コード例 #28
0
 public void Add(DrawObject obj)
 {
     // insert to the top of z-order
     graphicsList.Insert(0, obj);
 }
コード例 #29
0
 /// <summary>
 /// Insert object to specified place.
 /// Used for Undo.
 /// </summary>
 public void Insert(int index, DrawObject obj)
 {
     if ( index >= 0  && index < graphicsList.Count )
     {
         graphicsList.Insert(index, obj);
     }
 }
コード例 #30
0
        /// <summary>
        /// Left mouse button is pressed
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e)
        {
            Point pointscroll = GetEventPointInArea(drawArea, e);

            commandChangeState = null;
            wasMove            = false;

            selectMode = SelectionMode.None;

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

                if (handleNumber > 0)
                {
                    selectMode = SelectionMode.Size;

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

                    // Since we want to resize only one object, unselect all other objects
                    drawArea.GraphicsList.UnselectAll();
                    o.Selected = true;

                    commandChangeState = new CommandChangeState(drawArea.GraphicsList);

                    drawArea.GraphicsList.Dirty = true;
                    break;
                }
            }

            // Test for move (cursor is on the object)
            if (selectMode == SelectionMode.None)
            {
                int        n1 = drawArea.GraphicsList.Count;
                DrawObject o  = null;

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

                if (o != null)
                {
                    selectMode = SelectionMode.Move;

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

                    // Select clicked object
                    o.Selected = true;

                    commandChangeState = new CommandChangeState(drawArea.GraphicsList);

                    drawArea.Cursor             = Cursors.SizeAll;
                    drawArea.GraphicsList.Dirty = true;
                }
            }

            // Net selection
            if (selectMode == SelectionMode.None)
            {
                // click on background
                if ((Control.ModifierKeys & Keys.Control) == 0)
                {
                    drawArea.GraphicsList.UnselectAll();
                }

                selectMode = SelectionMode.NetSelection;
            }

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

            drawArea.Capture = true;

            drawArea.Refresh();

            if (selectMode == SelectionMode.NetSelection)
            {
                // Draw selection rectangle in initial position
                ControlPaint.DrawReversibleFrame(
                    drawArea.RectangleToScreen(DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint)),
                    Color.Black,
                    FrameStyle.Dashed);
            }
        }
コード例 #31
0
        /// <summary>
        /// Mouse is moved.
        /// None button is pressed, ot left button is pressed.
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseMove(DrawArea drawArea, MouseEventArgs e)
        {
            Point point = drawArea.BackTrackMouse(new Point(e.X, e.Y));

            int al = drawArea.TheLayers.ActiveLayerIndex;

            wasMove = true;
            //toolTip.InitialDelay = 1;

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

                if (drawArea.TheLayers[al].Graphics != null)
                {
                    // Hide tooltip in case it was displayed
                    //toolTip.Hide(drawArea);
                    for (int i = 0; i < drawArea.TheLayers[al].Graphics.Count; i++)
                    {
                        int n = drawArea.TheLayers[al].Graphics[i].HitTest(point);
                        if (n > 0)
                        {
                            cursor = drawArea.TheLayers[al].Graphics[i].GetHandleCursor(n);
                            break;
                        }
                        //if (n == 0)
                        //    toolTip.Show(drawArea.TheLayers[al].Graphics[i].TipText, drawArea, point, 250);
                    }
                }

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

                drawArea.Cursor = cursor;
                return;
            }

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

            // Left button is pressed

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

            lastPoint.X = point.X;
            lastPoint.Y = point.Y;

            // resize
            if (selectMode == SelectionMode.Size)
            {
                if (resizedObject != null)
                {
                    resizedObject.MoveHandleTo(point, resizedObjectHandle);

                    drawArea.Invalidate();
                }
            }

            // move
            if (selectMode == SelectionMode.Move)
            {
                int n = drawArea.TheLayers[al].Graphics.SelectionCount;

                for (int i = 0; i < n; i++)
                {
                    DrawObject o = drawArea.TheLayers[al].Graphics.GetSelectedObject(i);
                    if (o != null)
                    {
                        o.Move(dx, dy);
                        if (!o.IsInRectngle(drawArea.Boundary, drawArea.ScaleX, drawArea.ScaleY))
                        {
                            o.Move(-dx, -dy);
                        }
                    }
                }

                drawArea.Cursor = Cursors.SizeAll;

                drawArea.Invalidate();
            }

            if (selectMode == SelectionMode.NetSelection)
            {
                drawArea.NetRectangle = DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint);

                drawArea.Invalidate();
                return;
            }
        }
コード例 #32
0
 /// <summary>
 /// Replace object in specified place.
 /// Used for Undo.
 /// </summary>
 public void Replace(int index, DrawObject obj)
 {
     if (index >= 0 && index < graphicsList.Count)
     {
         graphicsList.RemoveAt(index);
         graphicsList.Insert(index, obj);
     }
 }
コード例 #33
0
ファイル: ToolPointer.cs プロジェクト: prsly/Vector-Editor
        public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e)
        {
            _selectMode = SelectionMode.None;
            PointF point = new Point(e.X, e.Y);

            // òåñò äëÿ ðåñàéçà
            int n = drawArea.GraphicsList.SelectionCount;

            for (int i = 0; i < n; i++)
            {
                DrawObject o            = drawArea.GraphicsList.GetSelectedObject(i);
                int        handleNumber = o.HitTest(point);
                bool       hitOnOutline = o.HitOnCircumferance;

                if (handleNumber > 0)
                {
                    _selectMode = SelectionMode.Size;

                    // äåðæèì èçìåíÿåìûé îáúåêò â ÷ëåíàõ êëàññà
                    _resizedObject       = o;
                    _resizedObjectHandle = handleNumber;

                    // ïðè ðåñàéçå îäíîãî îáúåêòà, àíñåëåêòÿòñÿ âñå îñòàëüíûå
                    drawArea.GraphicsList.UnselectAll();
                    o.Selected = true;
                    o.MouseClickOnHandle(handleNumber);

                    break;
                }

                if (hitOnOutline && (n == 1))     // åñëè òîëüêî îäèí îáúåêò âûáðàí
                {
                    _selectMode = SelectionMode.Size;
                    o.MouseClickOnBorder();
                    o.Selected = true;
                }
            }

            // òåñò äëÿ ñäâèãà
            if (_selectMode == SelectionMode.None)
            {
                int        n1 = drawArea.GraphicsList.Count;
                DrawObject o  = null;

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

                if (o != null)
                {
                    _selectMode = SelectionMode.Move;

                    // àíñåëåêòíóòü âñå, åñëè íå çàæàò ctrl è êëèêíóòíûé îáúåêò åùå íå âûáðàí
                    if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected)
                    {
                        drawArea.GraphicsList.UnselectAll();
                    }

                    // âûáðàòü êëèêíóòûé îáúåêò
                    o.Selected = true;

                    drawArea.Cursor = Cursors.SizeAll;
                }
            }

            if (_selectMode == SelectionMode.None)
            {
                // êëèê íà çàäíåì ôîíå
                if ((Control.ModifierKeys & Keys.Control) == 0)
                {
                    drawArea.GraphicsList.UnselectAll();
                }

                _selectMode = SelectionMode.NetSelection;
                drawArea.DrawNetRectangle = true;
            }

            _lastPoint.X  = e.X;
            _lastPoint.Y  = e.Y;
            _startPoint.X = e.X;
            _startPoint.Y = e.Y;

            drawArea.Capture      = true;
            drawArea.NetRectangle = DrawRectangle.GetNormalizedRectangle(_startPoint, _lastPoint);

            drawArea.Refresh();
        }
コード例 #34
0
ファイル: DrawArea.cs プロジェクト: bqIcelove/DrawTools
        /// <summary>
        /// �Ҽ��˵�
        /// </summary>
        /// <param name="e"></param>
        private void OnContextMenu(MouseEventArgs e)
        {
            // Change current selection if necessary

            Point point = BackTrackMouse(new Point(e.X, e.Y));

            List<DrawObject> o = new List<DrawObject>();

            for (int i = _layers[_layers.ActiveLayerIndex].Graphics.Count - 1; i >= 0; i--)
            {
                if (_layers[_layers.ActiveLayerIndex].Graphics[i].HitTest(point) == 0)
                {
                    PrepareHitProject = _layers[_layers.ActiveLayerIndex].Graphics[i];
                }
                if (_layers[_layers.ActiveLayerIndex].Graphics[i].Selected)
                {
                    o.Add(_layers[_layers.ActiveLayerIndex].Graphics[i].Clone());
                }
            }
            PrepareCopyObjectList = o;

            if (PrepareHitProject == null && PrepareCopyObjectList.Count == 0)
            {
                _layers[_layers.ActiveLayerIndex].Graphics.UnselectAll();
            }

            Refresh();

            // Show context menu.
            // Context menu items are filled from owner form Edit menu items.
            m_ContextMenu = new ContextMenuStrip();

            int nItems = owner.ContextParent.DropDownItems.Count;

            // Read Edit items and move them to context menu.
            // Since every move reduces number of items, read them in reverse order.
            // To get items in direct order, insert each of them to beginning.
            for (int i = nItems - 1; i >= 0; i--)
            {
                m_ContextMenu.Items.Insert(0, owner.ContextParent.DropDownItems[i]);
            }

            // Show context menu for owner form, so that it handles items selection.
            // Convert pointscroll from this window coordinates to owner's coordinates.
            point.X += this.Left;
            point.Y += this.Top;

            Point org = new Point(e.X, e.Y);
            m_ContextMenu.Show(this, org);

            Owner.SetStateOfControls();  // enable/disable menu items

            // Context menu is shown, but owner's Edit menu is now empty.
            // Subscribe to context menu Closed event and restore items there.
            m_ContextMenu.Closed += delegate(object sender, ToolStripDropDownClosedEventArgs args)
            {
                if (m_ContextMenu != null)      // precaution
                {
                    nItems = m_ContextMenu.Items.Count;

                    for (int k = nItems - 1; k >= 0; k--)
                    {
                        owner.ContextParent.DropDownItems.Insert(0, m_ContextMenu.Items[k]);
                    }
                }
            };
        }
コード例 #35
0
ファイル: ToolPointer.cs プロジェクト: ming91915/DrawTools
        /// <summary>
        /// Left mouse button is pressed
        /// </summary>
        /// <param name="drawArea"></param>
        /// <param name="e"></param>
        public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e)
        {
            commandChangeState = null;
            wasMove            = false;

            selectMode = SelectionMode.None;
            Point point = drawArea.BackTrackMouse(new Point(e.X, e.Y));

            // Test for resizing (only if control is selected, cursor is on the handle)
            int al = drawArea.TheLayers.ActiveLayerIndex;
            int n  = drawArea.TheLayers[al].Graphics.SelectionCount;

            for (int i = 0; i < n; i++)
            {
                DrawObject o            = drawArea.TheLayers[al].Graphics.GetSelectedObject(i);
                int        handleNumber = o.HitTest(point);

                if (handleNumber > 0)
                {
                    selectMode = SelectionMode.Size;
                    // keep resized object in class members
                    resizedObject       = o;
                    resizedObjectHandle = handleNumber;
                    // Since we want to resize only one object, unselect all other objects
                    drawArea.TheLayers[al].Graphics.UnselectAll();
                    o.Selected         = true;
                    commandChangeState = new CommandChangeState(drawArea.TheLayers);
                    break;
                }
            }

            // Test for move (cursor is on the object)
            if (selectMode == SelectionMode.None)
            {
                int        n1 = drawArea.TheLayers[al].Graphics.Count;
                DrawObject o  = null;

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

                if (o != null)
                {
                    selectMode = SelectionMode.Move;

                    // Unselect all if Ctrl is not pressed and clicked object is not selected yet
                    if ((Control.ModifierKeys & Keys.Control) == 0 &&
                        !o.Selected)
                    {
                        drawArea.TheLayers[al].Graphics.UnselectAll();
                    }

                    // Select clicked object
                    o.Selected         = true;
                    commandChangeState = new CommandChangeState(drawArea.TheLayers);

                    drawArea.Cursor = Cursors.SizeAll;
                }
            }

            // Net selection
            if (selectMode == SelectionMode.None)
            {
                // click on background
                if ((Control.ModifierKeys & Keys.Control) == 0)
                {
                    drawArea.TheLayers[al].Graphics.UnselectAll();
                }

                selectMode = SelectionMode.NetSelection;
                drawArea.DrawNetRectangle = true;
            }

            lastPoint.X  = point.X;
            lastPoint.Y  = point.Y;
            startPoint.X = point.X;
            startPoint.Y = point.Y;

            drawArea.Capture      = true;
            drawArea.NetRectangle = DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint);
            drawArea.Refresh();
        }
コード例 #36
0
ファイル: DrawArea.cs プロジェクト: Xaprice/XView
        /// <summary>
        /// Right-click handler
        /// </summary>
        /// <param name="e"></param>
        private void OnContextMenu(MouseEventArgs e)
        {
            // Change current selection if necessary

            Point point = new Point(Math.Abs(this.AutoScrollPosition.X) + e.X, Math.Abs(this.AutoScrollPosition.Y) + e.Y);

            int        n = GraphicsList.Count;
            DrawObject o = null;

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

            if (o != null)
            {
                if (!o.Selected)
                {
                    GraphicsList.UnselectAll();
                }

                // Select clicked object
                o.Selected = true;
            }
            else
            {
                GraphicsList.UnselectAll();
            }

            Refresh();      // in the case selection was changed

            // Show context menu.
            // Context menu items are filled from owner form Edit menu items.
            m_ContextMenu = new ContextMenuStrip();

            int nItems = owner.ContextParent.DropDownItems.Count;

            // Read Edit items and move them to context menu.
            // Since every move reduces number of items, read them in reverse order.
            // To get items in direct order, insert each of them to beginning.
            for (int i = nItems - 1; i >= 0; i--)
            {
                m_ContextMenu.Items.Insert(0, owner.ContextParent.DropDownItems[i]);
            }

            // Show context menu for owner form, so that it handles items selection.
            // Convert pointscroll from this window coordinates to owner's coordinates.
            point.X += this.Left;
            point.Y += this.Top;

            Point org = new Point(e.X, e.Y);

            m_ContextMenu.Show(owner, org);

            Owner.SetStateOfControls();  // enable/disable menu items

            // Context menu is shown, but owner's Edit menu is now empty.
            // Subscribe to context menu Closed event and restore items there.
            m_ContextMenu.Closed += delegate(object sender, ToolStripDropDownClosedEventArgs args)
            {
                if (m_ContextMenu != null)      // precaution
                {
                    nItems = m_ContextMenu.Items.Count;

                    for (int k = nItems - 1; k >= 0; k--)
                    {
                        owner.ContextParent.DropDownItems.Insert(0, m_ContextMenu.Items[k]);
                    }
                }
            };
        }
コード例 #37
0
ファイル: DrawObject.cs プロジェクト: ArsenShnurkov/DrawTools
 /// <summary>
 /// Copy fields from this instance to cloned instance drawObject.
 /// Called from Clone functions of derived classes.
 /// </summary>
 protected void FillDrawObjectFields(DrawObject drawObject)
 {
     drawObject.selected = this.selected;
     drawObject.color = this.color;
     drawObject.penWidth = this.penWidth;
     drawObject.ID = this.ID;
 }