Ejemplo n.º 1
0
        //  Обновление визуального отображения геометрической фигуры при изменении положения контрола
        public override void UpdateShapeGeometryByControl(string controlName, Point endLocation)
        {
            string[] str = controlName.Split('_');

            if (str[1].Substring(0, 5) != "Point")
            {
                MessageBox.Show("The name of the control is unknown in UpdateGeometryShapeByControl()!");
                return;
            }

            int controlPointNumber = int.Parse(str[1].Substring(5, str[1].Length - 5));

            if (controlPointNumber < 1 || controlPointNumber > GeometricParams.Count)
            {
                MessageBox.Show("Control has an incorrect index in UpdateGeometryShapeByControl()!");
                return;
            }

            controlPointNumber--;

            ((PolyLineSegment)((PathFigure)((PathGeometry)((Path)shapeBase).Data).Figures[0]).Segments[0]).Points[controlPointNumber] = endLocation;
            if (controlPointNumber == 0)
            {
                ((PathFigure)((PathGeometry)((Path)shapeBase).Data).Figures[0]).StartPoint = endLocation;
            }

            GeometricParams.RemoveAt(controlPointNumber);
            namedParameter param = new namedParameter();

            param.ParamName  = paramNames[controlPointNumber];
            param.ParamValue = endLocation;
            GeometricParams.Insert(controlPointNumber, param);

            _List_tBox[controlPointNumber].Text = endLocation.X.ToString() + " " + endLocation.Y.ToString();
        }
Ejemplo n.º 2
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 !");
            }
        }
Ejemplo n.º 3
0
        // Обновление визуального отображения геометрической фигуры при изменении положения контрола
        public override void UpdateShapeGeometryByControl(string controlName, Point endLocation)
        {
            string[] str = controlName.Split('_');
            string   controlPointType = str[1];

            switch (controlPointType)
            {
            case "StartPoint":
                ((LineGeometry)((Path)shapeBase).Data).StartPoint = endLocation;

                GeometricParams.RemoveAt(0);
                namedParameter param1 = new namedParameter();
                param1.ParamName  = paramNames[0];
                param1.ParamValue = endLocation;
                GeometricParams.Insert(0, param1);

                _List_tBox[0].Text = endLocation.X.ToString() + " " + endLocation.Y.ToString();
                break;

            case "EndPoint":
                ((LineGeometry)((Path)shapeBase).Data).EndPoint = endLocation;

                GeometricParams.RemoveAt(1);
                namedParameter param2 = new namedParameter();
                param2.ParamName  = paramNames[1];
                param2.ParamValue = endLocation;
                GeometricParams.Insert(1, param2);

                _List_tBox[1].Text = endLocation.X.ToString() + " " + endLocation.Y.ToString();
                break;

            default:
                throw new System.ApplicationException("Error: Incorrect controlpoint type, '" + controlPointType + "' in UpdateGeometryShapeByControl()");
            }
        }
Ejemplo n.º 4
0
 public Model()
 {
     GeometricParams   = new GeometricParams();
     MaterialParams    = new MaterialParams();
     ProcessParams     = new ProcessParams();
     EmpiricCoeffs     = new EmpiricCoeffs();
     SolveMethodParams = new SolveMethodParams();
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Создаёт модель с указаными параметрами
 /// </summary>
 /// <param name="W">Ширина, м</param>
 /// <param name="H">Глубина, м</param>
 /// <param name="L">Длина, м</param>
 /// <param name="ro">Плотность, кг/м^3</param>
 /// <param name="c">Средняя удельная теплоемкость, Дж/(кг*С)</param>
 /// <param name="T_0">Температура плавления, С</param>
 /// <param name="V_u">Скорость крышки, м/с</param>
 /// <param name="T_u">Температура крышки, C</param>
 /// <param name="mu_0">Коэффициент консистенции материала при температуре приведения, Па*с^n</param>
 /// <param name="b">Температурный коэффициент вязкости материала, 1/C</param>
 /// <param name="T_r">Температура приведения, С</param>
 /// <param name="n">Индекс течения материала</param>
 /// <param name="alpha_u">Коэффициент теплоотдачи от крышки канала к материалу, Вт/(м^2*С)</param>
 /// <param name="delta_z">Шаг расчета по длине канала, м</param>
 public Model(double W, double H, double L, double ro, double c, double T_0, double V_u, double T_u, double mu_0,
              double b, double T_r, double n, double alpha_u, double delta_z)
 {
     GeometricParams   = new GeometricParams(W, H, L);
     MaterialParams    = new MaterialParams(ro, c, T_0);
     ProcessParams     = new ProcessParams(V_u, T_u);
     EmpiricCoeffs     = new EmpiricCoeffs(mu_0, b, T_r, n, alpha_u);
     SolveMethodParams = new SolveMethodParams(delta_z);
 }
Ejemplo n.º 6
0
        //  Добавление новой вершины в фигуру
        public override void AddGeometryPoint(Point point)
        {
            paramNames.Add("Point" + (GeometricParams.Count + 1).ToString());                   //  Добавим название параметра в список с названиями параметров
            paramTypes.Add("Point");                                                            //  Добавим название типа параметра в список с названиями типов параметров

            namedParameter param = new namedParameter();

            param.ParamName  = paramNames[GeometricParams.Count];
            param.ParamValue = point;

            GeometricParams.Add(param);
        }
Ejemplo n.º 7
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);
        }
Ejemplo n.º 8
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);
        }
Ejemplo n.º 9
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!");
            }
        }
Ejemplo n.º 10
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();                                              //  Приведем в сответствие контролы фигуры
        }
Ejemplo n.º 11
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);
            }
        }
Ejemplo n.º 12
0
 // Обновление визуального отображения фигуры при изменении положения на заданный вектор
 public override void UpdateShapeGeometryByVector(Vector locationChange)
 {
     for (int i = 0; i < GeometricParams.Count; i++)
     {
         namedParameter param = new namedParameter();
         Point          p     = new Point();
         p.X = ((Point)GeometricParams[i].ParamValue).X + locationChange.X;
         p.Y = ((Point)GeometricParams[i].ParamValue).Y + locationChange.Y;
         param.ParamValue = p;
         param.ParamName  = GeometricParams[i].ParamName;
         GeometricParams.RemoveAt(i);
         GeometricParams.Insert(i, param);
     }
     ((Path)shapeBase).Data = CreateShapeGeometry();                                                     //  Создадим геометрию фигуры
     visualControler.UpdateAllControlsCoords();
     UpdateTextCoords();
 }
Ejemplo n.º 13
0
        // Обновление визуального отображения геометрической фигуры при изменении положения контрола
        public override void UpdateShapeGeometryByControl(string controlName, Point endLocation)
        {
            string[] str = controlName.Split('_');
            string   controlPointType = str[1];

            switch (controlPointType)
            {
            case "Center":
                ((EllipseGeometry)((Path)shapeBase).Data).Center = endLocation;

                GeometricParams.RemoveAt(0);
                namedParameter param = new namedParameter();
                param.ParamName  = paramNames[0];
                param.ParamValue = endLocation;
                GeometricParams.Insert(0, param);

                //shapeBase.ToolTip = shapeBase.Name + " {" + endLocation.ToString() + "}";
                _List_tBox[0].Text = endLocation.X.ToString() + " " + endLocation.Y.ToString();
                break;

            default:
                throw new System.ApplicationException("Error: Incorrect controlpoint type, '" + controlPointType + "' in UpdateGeometryShapeByControl()");
            }
        }
Ejemplo n.º 14
0
 //  Добавление новой вершины в фигуру
 public void RemoveLastGeometryPoint()
 {
     GeometricParams.RemoveAt(GeometricParams.Count - 1);
     paramNames.RemoveAt(GeometricParams.Count - 1);
     paramTypes.RemoveAt(GeometricParams.Count - 1);
 }
Ejemplo n.º 15
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();
                }
            }
        }