コード例 #1
0
ファイル: ToolObject.cs プロジェクト: krimalysheva/Task6
        /// Добавить новый объект в область рисования.
        /// Функция вызывается, когда пользователь щелкает левой кнопкой мыши область рисования,
        /// и один из инструментов, производных от ToolObject, активен.
        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;

            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();
        }
コード例 #2
0
        //реплейс объектов в графлисте с объектамис листа
        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);
                }
            }
        }
コード例 #3
0
ファイル: DrawObject.cs プロジェクト: krimalysheva/Task6
        /// <summary>
        /// возврат (-1), (0), (+1) для представления относительного Z-порядка сравниваемого объекта
        /// </summary>
        /// <param name="obj">DrawObject that is compared to this object</param>
        /// <returns>	(-1), если объект меньше (дальше), чем этот объект.
        ///				(0) если объект равен этому объекту (тот же уровень графически).
        ///             (1) если объект больше (ближе к фронту), чем этот объект.</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);
        }
コード例 #4
0
ファイル: DrawArea.cs プロジェクト: krimalysheva/Task6
        /// <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);
        }
コード例 #5
0
ファイル: CommandAdd.cs プロジェクト: krimalysheva/Task6
 // —оздать команду с ƒроуќбжктвывести экземпл¤р объекта, добавленный в список
 public CommandAdd(DrawObject drawObject) : base()
 {
     // хранить копию объекта
     this.drawObject = drawObject.Clone();
 }
コード例 #6
0
        //левая кнопка мышки
        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));

            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;
                    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.Refresh();
        }
コード例 #7
0
 public void Append(DrawObject obj)
 {
     graphicsList.Add(obj);
 }
コード例 #8
0
 public void AddAsInitialGraphic(DrawObject obj)
 {
     graphicsList.Add(obj);
 }