Exemple #1
0
        //  Парсинг текстовых полей ввода координат
        public override void Parse(List <TextBox> list_tBox)
        {
            if (list_tBox != null)
            {
                if (list_tBox.Count == 2)
                {
                    if (GeometricParams.Count > 0)
                    {
                        GeometricParams.RemoveRange(0, GeometricParams.Count);
                    }

                    namedParameter param1 = new namedParameter();
                    param1.ParamName  = paramNames[0];
                    param1.ParamValue = pointParser(list_tBox[0].Text);
                    namedParameter param2 = new namedParameter();
                    param2.ParamName  = paramNames[1];
                    param2.ParamValue = pointParser(list_tBox[1].Text);

                    GeometricParams.Add(param1);
                    GeometricParams.Add(param2);
                }
                else
                {
                    throw new System.ApplicationException("There should be two text boxes for entering the coordinates of the Line !");
                }
            }
            else
            {
                throw new System.ApplicationException("There is no list of text fields for entering coordinates of the Line !");
            }
        }
Exemple #2
0
        public void SetGeometricCoords(Point pnt)               // Установка координат точки по структуре Point
        {
            if (GeometricParams.Count > 0)
            {
                GeometricParams.RemoveRange(0, GeometricParams.Count);
            }

            namedParameter param = new namedParameter();

            param.ParamName  = paramNames[0];
            param.ParamValue = pnt;
            GeometricParams.Add(param);
        }
Exemple #3
0
        //--- Варианты установки координат точки

        public void SetGeometricCoords(string str)               // Установка координат точки по строке с координатами
        {
            if (GeometricParams.Count > 0)
            {
                GeometricParams.RemoveRange(0, GeometricParams.Count);
            }

            namedParameter param = new namedParameter();

            param.ParamName  = paramNames[0];
            param.ParamValue = pointParser(str);
            GeometricParams.Add(param);
        }
Exemple #4
0
        //  Парсинг текстовых полей ввода координат
        public override void Parse(List <TextBox> list_tBox)
        {
            if (list_tBox != null)
            {
                int parse_count;
                if (IsCreateWithMouse)
                {
                    parse_count       = 2;
                    IsCreateWithMouse = false;
                }
                else
                {
                    parse_count = list_tBox.Count;
                }

                if (parse_count >= 2)
                {
                    if (GeometricParams.Count > 0)
                    {
                        GeometricParams.RemoveRange(0, GeometricParams.Count);
                        paramNames.RemoveRange(0, paramNames.Count);
                        paramTypes.RemoveRange(0, paramTypes.Count);
                    }

                    for (int i = 0; i < parse_count; i++)
                    {
                        AddGeometryPoint(pointParser(list_tBox[i].Text));
                    }
                    if (visualControler != null && visualControler.ControlPoints != null && !_Editor.IsMouseDraws)
                    {
                        if (visualControler.ControlPoints.Count < GeometricParams.Count)
                        {
                            visualControler.AddControls();
                        }
                        else if (visualControler.ControlPoints.Count > GeometricParams.Count)
                        {
                            visualControler.RemoveControls();
                        }
                    }
                }
                else
                {
                    throw new System.ApplicationException("Polygon.Parse(): There should be minimum two text boxes for entering the coordinates of the Polygon!");
                }
            }
            else
            {
                throw new System.ApplicationException("Polygon.Parse(): There is no list of text fields for entering coordinates of the Polygon!");
            }
        }
Exemple #5
0
        //  Обновление Фигуры-Полигон по кординатам заданным в поле ввода
        public override void UpdateShapeGeometryByTextCoords()
        {
            // Создаем копию параметров фигуры до изменения(на случай обратного отката)
            List <Point> points = new List <Point>();

            for (int i = 0; i < GeometricParams.Count; i++)
            {
                Point p = new Point();
                p.X = ((Point)GeometricParams[i].ParamValue).X;
                p.Y = ((Point)GeometricParams[i].ParamValue).Y;
                points.Add(p);
            }

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

            if (_Editor.prop_service.properties.SelfIntersectionCheck)                              //  Если надо проверять самопересечение,
            {
                if (IsSelfIntersection())                                                           //      Если есть самопересечение, то
                {
                    // Стираем "новые" значения
                    if (GeometricParams.Count > 0)
                    {
                        GeometricParams.RemoveRange(0, GeometricParams.Count);
                        paramNames.RemoveRange(0, paramNames.Count);
                        paramTypes.RemoveRange(0, paramTypes.Count);
                    }
                    // восстанавливаем старые значения
                    for (int i = 0; i < points.Count; i++)
                    {
                        AddGeometryPoint(points[i]);
                    }
                    visualControler.RemoveControls();
                    visualControler.UpdateAllControlsCoords();                                              //  Приведем в сответствие контролы фигуры
                    return;
                }
            }


            ((Path)shapeBase).Data = CreateShapeGeometry();                                         //  Создадим геометрию фигуры

            shapeBase.StrokeThickness = StrokeWeight = _Editor.ShapeStrokeWidth;                    //  Зададим толшину обводки фигуры
            StrokeColor = _Editor.ShapeStrokeColor.ToString();                                      //  Установим текстовое значение цвета обводки фигуры
            SolidColorBrush scb = new SolidColorBrush();                                            //  Зададим цвет обводки фигуры

            scb.Color        = _Editor.ShapeStrokeColor;
            shapeBase.Stroke = scb;

            visualControler.UpdateAllControlsCoords();                                              //  Приведем в сответствие контролы фигуры
        }
Exemple #6
0
        //  Парсинг текстового поля ввода координат фигуры
        public override void Parse(List <TextBox> list_tBox)
        {
            if (list_tBox != null && list_tBox.Count > 0)
            {
                if (GeometricParams.Count > 0)
                {
                    GeometricParams.RemoveRange(0, GeometricParams.Count);
                }

                namedParameter param = new namedParameter();
                param.ParamName  = paramNames[0];
                param.ParamValue = pointParser(list_tBox[0].Text);

                GeometricParams.Add(param);
            }
        }
Exemple #7
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();
                }
            }
        }