Ejemplo n.º 1
0
        //Загрузка примитивов из файла
        public void LoadFromFile(string path)
        {
            BinaryFormatter  formatter       = new();
            WorkSpaceObjects workSpaceObject = CreateWorkSpaceObject();

            try
            {
                FileStream fs = new FileStream(path, FileMode.Open);
#pragma warning disable SYSLIB0011
                workSpaceObject = (WorkSpaceObjects)formatter.Deserialize(fs);
                fs.Close();
#pragma warning restore SYSLIB0011
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            //Добавление примитивов на рабочую область
            try
            {
                DrawFromFile(workSpaceObject);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Ejemplo n.º 2
0
        //Сохранение рабочей области в файл
        public void SaveToFile(string path)
        {
            WorkSpaceObjects workSpaceObject = CreateWorkSpaceObject();

            try
            {
                for (int i = 0; i < WorkSpace.Children.Count; i++)
                {
                    AddValuesToWorkSpaceObject(workSpaceObject, WorkSpace.Children[i] as Shape);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            FileStream fs = new(path, FileMode.Create);

            try
            {
                BinaryFormatter formatter = new();
                //Новый стандарт для защиты от уязвимости рекомендует сериализацию только  в xml и json.
#pragma warning disable SYSLIB0011
                formatter.Serialize(fs, workSpaceObject);
                fs.Close();
#pragma warning restore SYSLIB0011
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Ejemplo n.º 3
0
        //Добавление примитивов в рабочую область из WorkSpaceObjects
        private void DrawFromFile(WorkSpaceObjects workSpaceObject)
        {
            for (int i = 0; i < workSpaceObject.shapeType.Count; i++)
            {
                Color color;
                if (workSpaceObject.shapeType[i].CompareTo(typeof(Rectangle).ToString()) == 0)
                {
                    color = SetColor(workSpaceObject.borderBrush[i]);

                    Rectangle rect = CreateRectangle(workSpaceObject.position[i], new SolidColorBrush(color), workSpaceObject.thickness[i]);
                    Rotate(rect, workSpaceObject.rotateAngle[i]);
                    color = SetColor(workSpaceObject.fillBrush[i]);
                    Fill(rect, color);
                }
                else if (workSpaceObject.shapeType[i].CompareTo(typeof(Polyline).ToString()) == 0)
                {
                    color = SetColor(workSpaceObject.borderBrush[i]);
                    Polyline polyline = AddLine(workSpaceObject.polylinePoints[i][0], new SolidColorBrush(color), workSpaceObject.thickness[i]);
                    for (int j = 1; j < workSpaceObject.polylinePoints[i].Count; j++)
                    {
                        AddPointToLine(polyline, workSpaceObject.polylinePoints[i][j]);
                    }
                }
            }
            WorkSpace.InvalidateMeasure();
        }
Ejemplo n.º 4
0
        //Заполнение структуры WorkSpaceObject
        private static void AddValuesToWorkSpaceObject(WorkSpaceObjects workSpaceObject, Shape currentShape)
        {
            string          figureTypeString;
            SolidColorBrush brush;
            MyColor         myColor;

            workSpaceObject.height.Add(currentShape.Height);
            workSpaceObject.width.Add(currentShape.Width);
            workSpaceObject.thickness.Add(currentShape.StrokeThickness);
            brush   = currentShape.Stroke as SolidColorBrush;
            myColor = SetMyColor(brush.Color);
            workSpaceObject.borderBrush.Add(myColor);

            if (currentShape.GetType() == typeof(Rectangle))
            {
                figureTypeString = typeof(Rectangle).ToString();
                workSpaceObject.shapeType.Add(figureTypeString);
                workSpaceObject.polylinePoints.Add(null);
                double angle = GetRotationAngle(currentShape);
                workSpaceObject.rotateAngle.Add(angle);

                workSpaceObject.position.Add(GetPosition(currentShape));

                brush   = currentShape.Fill as SolidColorBrush;
                myColor = SetMyColor(brush.Color);
                workSpaceObject.fillBrush.Add(myColor);
            }
            else if (currentShape.GetType() == typeof(Polyline))
            {
                figureTypeString = typeof(Polyline).ToString();
                workSpaceObject.shapeType.Add(figureTypeString);
                workSpaceObject.rotateAngle.Add(0);
                List <Point> polylinePoints = new();
                for (int j = 0; j < ((Polyline)currentShape).Points.Count; j++)
                {
                    polylinePoints.Add(((Polyline)currentShape).Points[j]);
                }
                workSpaceObject.polylinePoints.Add(polylinePoints);
                workSpaceObject.position.Add(new Rect(0, 0, 0, 0));
                myColor = SetMyColor(Colors.Transparent);
                workSpaceObject.fillBrush.Add(myColor);
            }
        }