Пример #1
0
        private double Radius = 1;                                                                  //  Радиус круга с помощью которого изображается фигура-точка

        // Создание фигуры-точки по параметрам заданным в текстовых полях ввода
        public ShapePoint(object params_source,                                                     // Источник координат для построения фигуры
                          EditorModel editor)                                                       // Ссылка на экземляр модели редактора
            : base(editor)
        {
            if (params_source is List <TextBox> )                                                   //  Если источник параметров для создания фигуры - текстовые поля,
            {
                _List_tBox = (List <TextBox>)params_source;                                         //      Задаем список текстовых полей ввода параметров фигуры

                ShapeName    = "Point" + _Editor.PointsCount;                                       //      Присвоим фигуре название
                StrokeWeight = _Editor.ShapeStrokeWidth;                                            //      Зададим толшину обводки фигуры
                StrokeColor  = _Editor.ShapeStrokeColor.ToString();                                 //      Установим текстовое значение цвета обводки фигуры
            }
            else if (params_source is ShapeParams)                                                  //  Если источник параметров для создания фигуры - загрузочная информация,
            {
                ClearTextCoords();                                                                  //      Очищаем текст-боксы на панели ввода параметров и удаляем лишние
                SetTextCoords((ShapeParams)params_source);                                          //      Заполняем текст-боксы полученной информацией о геометрических параметрах

                ShapeName    = ((ShapeParams)params_source).ShapeName;                              //      Зададаем остальные свойства фигуры....
                StrokeWeight = ((ShapeParams)params_source).StrokeWeight;
                StrokeColor  = ((ShapeParams)params_source).StrokeColor;
            }
            else                                                                                    //  Иначе ...
            {
                throw new System.ApplicationException("ShapePoint.ShapePoint(): Unknow param_source type!");
            }

            paramNames.Add("PointCordinates");                                                      //  Добавим название параметра в список с названиями параметров
            paramTypes.Add("Point");                                                                //  Добавим название типа типа параметра в список с названиями типов параметров

            shapeType = SHAPE_TYPE.Point;
            ShapeType = shapeType.ToString();                                                       //  Установим тип фигуры - Точка

            Parse(_List_tBox);
            shapeBase = new Path();                                                                 //  Cоздаем экземпляр фигуры
            ((Path)shapeBase).Data = CreateShapeGeometry();                                         //  Создадим геометрию фигуры

            shapeBase.StrokeThickness = StrokeWeight;                                               //  Зададим толшину обводки фигуры

            SolidColorBrush scb = new SolidColorBrush();                                            //  Зададим цвет обводки фигуры

            scb.Color        = (Color)ColorConverter.ConvertFromString(StrokeColor);
            shapeBase.Stroke = scb;

            shapeBase.ToolTip = ShapeName;                                                          //  Установим "подсказку" о фигуре

            ContextMenu context_menu = new ContextMenu();                                           //  Установим для фигуры контекстное меню

            context_menu.Items.Add(new MenuItem()
            {
                Header = "RenameShape", Command = new ShapeContextMenuViewModel(_Editor, this).ShapeRename
            });
            context_menu.Items.Add(new MenuItem()
            {
                Header = "DeleteShape", Command = new ShapeContextMenuViewModel(_Editor, this).ShapeDelete
            });
            shapeBase.ContextMenu = context_menu;

            _Editor.DrawPanel.Children.Add(shapeBase);                                              //  Добавим фигуру на панель рисования редактора
            _Editor.PointsCount++;                                                                  //  Фигур-точек в редакторе стало на одну больше

            ControlPointsCount = 1;
            visualControler    = new VisualControler(_Editor, this, ControlPointsCount);            //  Добавим к фигуре контроллер управления ее параметрами
            ((Ellipse)visualControler.ControlPoints[0]).Name = shapeBase.Name + "_Center";          //  Зададим название первому и единственному контролу
            ClearTextCoords();                                                                      //  Очищаем текстовые поля ввода на панели ввода параметров фигуры
        }
Пример #2
0
        public OPERATION_OBJECT_TYPE?opObjType; //  К какому типу объектов относится полигон при булеевых операциях с полигонами


        //--- Создание фигуры-линии по параметрам заданным в текстовых полях ввода
        public ShapePolygon(
            object params_source,                                                                   // Источник координат для построения фигуры
            EditorModel editor)                                                                     // Ссылка на экземляр модели редактора
            : base(editor)
        {
            if (params_source is List <TextBox> )                                                   //  Если источник параметров для создания фигуры - текстовые поля,
            {
                _List_tBox = (List <TextBox>)params_source;                                         //      Задаем список текстовых полей ввода параметров фигуры

                ShapeName    = "Polygon" + _Editor.PolygonsCount;                                   //      Присвоим фигуре название
                StrokeWeight = _Editor.ShapeStrokeWidth;                                            //      Зададим толшину обводки фигуры
                StrokeColor  = _Editor.ShapeStrokeColor.ToString();                                 //      Установим текстовое значение цвета обводки фигуры
                FillColor    = editor.ShapeFillColor.ToString();                                    //      Зададим цвет заливки внутренней области фигуры
            }
            else if (params_source is ShapeParams)                                                  //  Если источник параметров для создания фигуры - загрузочная информация,
            {
                ClearTextCoords();                                                                  //      Очищаем текст-боксы на панели ввода параметров и удаляем лишние
                SetTextCoords((ShapeParams)params_source);                                          //      Заполняем текст-боксы полученной информацией о геометрических параметрах

                ShapeName    = ((ShapeParams)params_source).ShapeName;                              //      Зададаем остальные свойства фигуры....
                StrokeWeight = ((ShapeParams)params_source).StrokeWeight;
                StrokeColor  = ((ShapeParams)params_source).StrokeColor;
                FillColor    = ((ShapeParams)params_source).FillColor;
            }
            else                                                                                    //  Иначе ...
            {
                throw new System.ApplicationException("ShapePolygon.ShapePolygon(): Unknow param_source type!");
            }


            for (int i = (editor.IsMouseDraws ? 2 : _List_tBox.Count); i > -1; i--)
            {
                paramNames.Add("Point" + (i + 1).ToString());                                       //  Добавим название параметра в список с названиями параметров
                paramTypes.Add("Point");                                                            //  Добавим название типа параметра в список с названиями типов параметров
            }

            shapeType = SHAPE_TYPE.Polygon;                                                         //  Установим тип фигуры - Полигон
            ShapeType = shapeType.ToString();

            IsCreateWithMouse = _Editor.IsMouseDraws;                                               //  Создание фигуры начато при помощи мыши или иначе
            IsCreated         = !_Editor.IsMouseDraws;                                              //  Фигура находится в состоянии рисования или иначе


            Parse(_List_tBox);                                                                            //  Проверяем правильность ввода параметров в текстовых полях и переводим эти параметры данные для построения фигуры

            if (params_source is List <TextBox> && _Editor.prop_service.properties.SelfIntersectionCheck) //  Если источник параметров для создания фигуры - текстовые поля и надо проверять самопересечение,
            {
                if (IsSelfIntersection())                                                                 //      Если есть самопересечение, то
                {
                    GeometricParams.RemoveRange(0, GeometricParams.Count);                                //          чистим ресурсы фигуры и выходим
                    paramNames.RemoveRange(0, paramNames.Count);
                    paramTypes.RemoveRange(0, paramTypes.Count);
                    return;
                }
            }


            shapeBase = new Path();                                                                 //  Cоздаем экземпляр фигуры
            ((Path)shapeBase).Data = CreateShapeGeometry();                                         //  Создадим геометрию фигуры


            //shapeBase.Name = ShapeName;

            shapeBase.StrokeLineJoin     = PenLineJoin.Round;                                       //  закругление в месте пересечения линий
            shapeBase.StrokeStartLineCap = PenLineCap.Round;                                        //  закругление в начале линии
            shapeBase.StrokeEndLineCap   = PenLineCap.Round;                                        //  закругление в конце линии
            //RenderOptions.SetEdgeMode(shapeBase, EdgeMode.Aliased);                               //  Прорисовка линии без визуального сглаживания пикселей

            SolidColorBrush scb = new SolidColorBrush();                                            //  Зададим цвет заливки фигуры

            scb.Color      = (Color)ColorConverter.ConvertFromString(FillColor);
            shapeBase.Fill = scb;

            SolidColorBrush scb2 = new SolidColorBrush();                                           //  Зададим цвет обводки фигуры

            scb2.Color       = (Color)ColorConverter.ConvertFromString(StrokeColor);
            shapeBase.Stroke = scb2;

            shapeBase.StrokeThickness = StrokeWeight;                                               //  Зададим толщину обводки фигуры

            shapeBase.ToolTip = ShapeName;                                                          //  Установим "подсказку" о названии фигуры

            ContextMenu context_menu = new ContextMenu();                                           //  Установим для фигуры контекстное меню

            context_menu.Items.Add(new MenuItem()
            {
                Header = "RenameShape", Command = new ShapeContextMenuViewModel(_Editor, this).ShapeRename
            });
            context_menu.Items.Add(new MenuItem()
            {
                Header = "DeleteShape", Command = new ShapeContextMenuViewModel(_Editor, this).ShapeDelete
            });
            shapeBase.ContextMenu = context_menu;

            _Editor.DrawPanel.Children.Add(shapeBase);                                              //  Добавим фигуру на панель рисования редактора
            _Editor.PolygonsCount++;                                                                //  Фигур-полигонов в редакторе стало на одну больше

            if (_Editor.IsMouseDraws)                                                               //  Если фигура создается при помощи мыши,
            {
                _Editor.IsPrompt   = true;                                                          //  Выводим подсказку как завершить создание фигуры
                ControlPointsCount = 2;                                                             //  Количество контролов пока 2
            }
            else
            {
                ControlPointsCount = _List_tBox.Count;                                          //  Количество контролов равно кол-ву текстовых полей
            }
            visualControler = new VisualControler(_Editor, this, ControlPointsCount);           //  Добавим к фигуре контроллер управления ее параметрами

            if (_Editor.IsMouseDraws)                                                           //  Если фигура создается при помощи мыши,
            {
                ((Ellipse)visualControler.ControlPoints[0]).Name = shapeBase.Name + "_Point1";  //      Зададим название первому контролу
                ((Ellipse)visualControler.ControlPoints[1]).Name = shapeBase.Name + "_Point2";  //      и второму контролу
            }
            else
            {
                for (int i = 0; i < _List_tBox.Count; i++)                                          //  Зададим название всем контролам
                {
                    ((Ellipse)visualControler.ControlPoints[i]).Name = shapeBase.Name + "_Point" + (i + 1).ToString();
                }
            }
        }
Пример #3
0
        // Создание фигуры-линии по параметрам заданным в текстовых полях ввода
        public ShapeLine(object params_source,                                                  // Источник координат для построения фигуры
                         EditorModel editor)                                                    // Ссылка на экземляр модели редактора
            : base(editor)
        {
            if (params_source is List <TextBox> )                                                   //  Если источник параметров для создания фигуры - текстовые поля,
            {
                _List_tBox = (List <TextBox>)params_source;                                         //      Задаем список текстовых полей ввода параметров фигуры

                ShapeName    = "Line" + _Editor.LinesCount;                                         //      Присвоим фигуре название
                StrokeWeight = _Editor.ShapeStrokeWidth;                                            //      Зададим толшину обводки фигуры
                StrokeColor  = _Editor.ShapeStrokeColor.ToString();                                 //      Установим текстовое значение цвета обводки фигуры
            }
            else if (params_source is ShapeParams)                                                  //  Если источник параметров для создания фигуры - загрузочная информация,
            {
                ClearTextCoords();                                                                  //      Очищаем текст-боксы на панели ввода параметров и удаляем лишние
                SetTextCoords((ShapeParams)params_source);                                          //      Заполняем текст-боксы полученной информацией о геометрических параметрах

                ShapeName    = ((ShapeParams)params_source).ShapeName;                              //      Зададаем остальные свойства фигуры....
                StrokeWeight = ((ShapeParams)params_source).StrokeWeight;
                StrokeColor  = ((ShapeParams)params_source).StrokeColor;
            }
            else                                                                                    //  Иначе ...
            {
                throw new System.ApplicationException("ShapeLine.ShapeLine(): Unknow param_source type!");
            }

            paramNames.Add("StartPoint");                                                           //  Добавим название первого параметра в список с названиями параметров
            paramTypes.Add("Point");                                                                //  Добавим название типа первого параметра в список с названиями типов параметров
            paramNames.Add("EndPoint");                                                             //  Добавим название второго параметра в список с названиями параметров
            paramTypes.Add("Point");                                                                //  Добавим название типа второго параметра в список с названиями типов параметров

            shapeType = SHAPE_TYPE.Line;                                                            //  Установим тип фигуры - Линия
            ShapeType = shapeType.ToString();

            Parse(_List_tBox);                                                                      //  Проверяем правильность ввода параметров в текстовых полях и переводим эти параметры данные для построения фигуры
            shapeBase = new Path();                                                                 //  Cоздаем экземпляр фигуры
            ((Path)shapeBase).Data = CreateShapeGeometry();                                         //  Создадим геометрию фигуры

            //shapeBase.Name = ShapeName;                                                             //  Присвоим фигуре название

            shapeBase.StrokeThickness    = StrokeWeight;                                            //  Зададим толшину обводки фигуры
            shapeBase.StrokeStartLineCap = PenLineCap.Round;                                        //  закругление в начале линии
            shapeBase.StrokeEndLineCap   = PenLineCap.Round;                                        //  закругление в конце линии
            //RenderOptions.SetEdgeMode(shapeBase, EdgeMode.Aliased);                                 //  Прорисовка линии без визуального сглаживания пикселей

            SolidColorBrush scb = new SolidColorBrush();                                            //  Зададим цвет обводки фигуры

            scb.Color        = (Color)ColorConverter.ConvertFromString(StrokeColor);
            shapeBase.Stroke = scb;

            shapeBase.ToolTip = ShapeName;                                                     //  Установим "подсказку" о фигуре

            ContextMenu context_menu = new ContextMenu();                                      //  Установим для фигуры контекстное меню

            context_menu.Items.Add(new MenuItem()
            {
                Header = "RenameShape", Command = new ShapeContextMenuViewModel(_Editor, this).ShapeRename
            });
            context_menu.Items.Add(new MenuItem()
            {
                Header = "DeleteShape", Command = new ShapeContextMenuViewModel(_Editor, this).ShapeDelete
            });
            shapeBase.ContextMenu = context_menu;

            _Editor.DrawPanel.Children.Add(shapeBase);                                              //  Добавим фигуру на панель рисования редактора
            _Editor.LinesCount++;                                                                   //  Фигур-линий в редакторе стало на одну больше

            ControlPointsCount = 2;
            visualControler    = new VisualControler(_Editor, this, ControlPointsCount);            //  Добавим к фигуре контроллер управления ее параметрами
            ((Ellipse)visualControler.ControlPoints[0]).Name = shapeBase.Name + "_StartPoint";      //  Зададим название первому контролу
            ((Ellipse)visualControler.ControlPoints[1]).Name = shapeBase.Name + "_EndPoint";        //  Зададим название второму контролу
        }