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