C # - загрузка фигур в PictureBox из текстового файла с данными, описывающими каждую фигуру - PullRequest
0 голосов
/ 09 октября 2018

У меня есть отлично работающий код для загрузки и сохранения фигур из текстового файла, который содержит тип фигуры (я использую перечисление, называемое shapetype), координаты x1, y1 (начальная позиция мыши) и x2, y2 (окончательное расположение курсора мыши, когда мышь куда-то перетащили и отпустили левую кнопку).В данных также хранится цвет фигуры в виде rgb int и значения true / false, если фигура должна быть заполнена сплошным или просто контуром.

Единственное, что я спрашиваю, - это какможет иметь ту же самую вещь, но все данные для 1 фигуры в одной строке в моем текстовом файле и все еще быть в состоянии загрузить его. Я знаю, как СОХРАНИТЬ данные на одномлиния, но я не знаю, как бы я загрузить данные, если бы все было по одной линии для каждой фигуры ...

Код сейчас:

   private void loadCanvas(List<APShape> shapeList)
        {
            shapeList.Clear();
            string line = "";
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Shape Data Files | *.shapes";
            if (open.ShowDialog() == DialogResult.OK)
            {
                Stream s = File.Open(open.FileName, FileMode.Open);
                StreamReader sr = new StreamReader(s);
                while (line != null)
                {
                    line = sr.ReadLine();
                    if (line != null)
                    {
                        shapeList.Add(ObjectFromTxt(line));
                        shapeList[shapeList.Count - 1].setColor(Color.FromArgb(int.Parse(sr.ReadLine())));
                        shapeList[shapeList.Count - 1].setX1(int.Parse(sr.ReadLine()));
                        shapeList[shapeList.Count - 1].setY1(int.Parse(sr.ReadLine()));
                        shapeList[shapeList.Count - 1].setX2(int.Parse(sr.ReadLine()));
                        shapeList[shapeList.Count - 1].setY2(int.Parse(sr.ReadLine()));
                        shapeList[shapeList.Count - 1].setSolid(string2bool(sr.ReadLine()));
                        shapeList[shapeList.Count - 1].setPenWidth(float.Parse(sr.ReadLine()));

                    }
                }
                sr.Close();
                canvas.Invalidate();
            }
        }

И как файл стекст, содержащий данные формы, выглядит так: Текущий формат файла

1 Ответ

0 голосов
/ 11 октября 2018

Конечный результат

  private void saveCanvas()
        {
            SaveFileDialog save = new SaveFileDialog();
            save.DefaultExt = ".shapes";
            save.Filter = "Shapes File (*.shapes) |*.shapes";

            if (save.ShowDialog() == DialogResult.OK)
            {
                File.Delete(save.FileName);
                var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, NullValueHandling = NullValueHandling.Ignore };
                File.WriteAllText(save.FileName, JsonConvert.SerializeObject(shapes, shapes.GetType(), settings));
            }
        }


        private void loadCanvas()
        {
            List<APShape> shapeList = new List<APShape>();
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Shapes File (*.shapes) |*.shapes";

            if (open.ShowDialog() == DialogResult.OK)
            {
                shapes.Clear();       /* Clear canvas to make sure we are starting blank */
                canvas.Invalidate();

                var json = File.ReadAllText(open.FileName);
                var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, NullValueHandling = NullValueHandling.Ignore };

                shapeList = JsonConvert.DeserializeObject<List<APShape>>(json, settings);

                foreach (var shape in shapeList)
                {
                    shapes.Add(shape);
                }
                canvas.Invalidate();      
            }
    }
...