// Парсинг текстовых полей ввода координат 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 !"); } }
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); }
//--- Варианты установки координат точки 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); }
// Парсинг текстовых полей ввода координат 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!"); } }
// Обновление Фигуры-Полигон по кординатам заданным в поле ввода 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(); // Приведем в сответствие контролы фигуры }
// Парсинг текстового поля ввода координат фигуры 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); } }
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(); } } }