/// <summary> /// Функция вычисление/инициации добавления нового объекта /// </summary> /// <param name="pos">Координаты добавления нового объекта</param> private void AddNewItem(Point pos) { _items.ForEach(c => c.Deselect()); ICanvasItem _newObject = null; switch (CurrentSettings.Mode) { case ECanvasMode.BrokenLine: _newObject = new CustBrokenLine(pos); break; case ECanvasMode.Rectangle: _newObject = new CustRectangle(pos); break; } if (_newObject == null) { CurrentSettings.SetCurrentItem(); CurrentSettings.SetIsDraw(false); return; } AppendNewItem(_newObject); CurrentSettings.SetIsDraw(true); CurrentSettings.SetCurrentItem(_newObject); CurrentSettings.AppendNewAction(ECancelTypes.Add, _newObject); }
/// <summary> /// Функция преобразования xml "документа" в объекты холста /// </summary> /// <returns>Список объектов</returns> public List <UIElement> DeserializeXml(XDocument xDoc) { var result = new List <UIElement>(); foreach (var xItem in xDoc.Root.Elements()) { var isBrokenLine = xItem.Name == "CustBrokenLine"; var xPoints = xItem.Elements("Point"); var xThickness = xItem.Attribute("Thickness"); var xFillColor = xItem.Attribute("FillColor"); var xStrokeColor = xItem.Attribute("StrokeColor"); var width = 200d; var height = 100d; var Thickness = 1d; var points = new List <CustPoint>(); foreach (var xPoint in xPoints) { var point = new Point(); if (double.TryParse(xPoint.Attribute("X").Value, out double X)) { point.X = X; } if (double.TryParse(xPoint.Attribute("Y").Value, out double Y)) { point.Y = Y; } points.Add(new CustPoint(point)); } if (double.TryParse(xThickness.Value, out double Th)) { Thickness = Th; } var fillColor = (Color)ColorConverter.ConvertFromString(xFillColor.Value); var strokeColor = (Color)ColorConverter.ConvertFromString(xStrokeColor.Value); if (!isBrokenLine) { var xWidth = xItem.Attribute("Width"); var xHeight = xItem.Attribute("Height"); if (double.TryParse(xWidth.Value, out double Width)) { width = Width; } if (double.TryParse(xHeight.Value, out double Height)) { height = Height; } } IPropertiesItem _newObject = null; if (isBrokenLine) { _newObject = new CustBrokenLine(points.FirstOrDefault().Point); ((ICanvasItem)_newObject).SetPoints(points); } else { _newObject = new CustRectangle(points.FirstOrDefault().Point); ((IRectangleItem)_newObject).ChangeWidth(width); ((IRectangleItem)_newObject).ChangeHeight(height); } _newObject.ChangeThickness(Thickness); _newObject.ChangeFillColor(new SolidColorBrush(fillColor)); _newObject.ChangeStrokeColor(new SolidColorBrush(strokeColor)); result.Add((UIElement)_newObject); } return(result); }