Задание
Моделирование планировщика помещений.Разработать визуальный конструктор (редактор), позволяющий создавать планы помещенийРеализовать методы, с помощью которых пользователь может перемещать объекты на плане, изменять их размеры. Реализовать функцию сохранения/загрузки плана в файл с помощью перегрузки операторов ввода/вывода в поток для созданных классов.
Словесное описание работы программы:
Есть две вкладки, на первой производим планирование, на второй выполняется подготовка - создаются элементы. Создание элемента: переходим на вторую вкладку, выбираем в комбобоксе "Новая фигура". Далее рисуем фигуру, вводим ее название и жмем Добавить. Фигуры сохраняюся в библиотеке даже при выключении программы. Добавленные фигуры сразу отображаются на первой вкладке и их можно использовать.
Моделирование:
- На первой вкладке можно рисовать стены и добавлять элементы из библиотеки. Для этого надо произвести двойной клик по элементу.
- Рисование (стен и элементов):Числовое поле задает толщину линий.
- Чекбокс указывает, новая линия будет горизонтальной или вертикальной или же может быть под углом.
- Кнопка Добавления позволяет добавлять отрезки. Добавление осуществляется кликами по полю рисования (когда включена кнопка)
- Кнопка удаления позволяет удалить отрезок, для этого надо кликнуть по удаляемому отрезку
- Кнопка перемещения позволяет перемещать вершины или фигуру целиком, если выделена вершина, будет перемещаться только она, если выделено любое ребро, то перемещаться будет вся фигура.
- Кнопка масштабирования меняет размер фигуры, для этого надо активировать эту кнопку и потянуть за одну из граней фигуры (с точками не работает)
- Кнопка вращения поворачивает фигуру целиком, для этого для этого надо активировать эту кнопку и потянуть за одну из граней фигуры налево или направо (с точками не работает)
Библиотека элементов хранится в файле data.lib Она загружается-сохраняется при включении или выключении программы.
Планировка помещения сама не сохраняется, для сохранения-загрузки нужно кликнуть по соответствующим кнопкам и указать в диалоге путь к файлу.
Данные хранятся в двоичном виде. И работа с ними осуществляется с помощью сериализации (производится наследование от ISerializable и переопределены методы сохранения –загрузки)
Фрагмент программного кода
namespace RoomsDesigner { [Serializable] class Figure : ISerializable { public List<Edge> edges; public PointF centerOperation; PointF p1, p2; //начало и конец отрезка bool first = false; //какая точка установлена bool needCircle; bool selectVertex; bool inWall = false; bool wallSelect = false; PointF pCircle; public bool mouseDown = false; public string name; int selectVertPos; PointF pointDown; public int typeOperation = -1; Edge remEdge = null; public Figure(SerializationInfo sInfo, StreamingContext contextArg) { this.edges = (List<Edge>)sInfo.GetValue("edges", typeof(List<Edge>)); this.name = (string)sInfo.GetValue("name", typeof(string)); needCircle = false; selectVertex = false; } public Figure(Figure figure) { edges = new List<Edge>(); foreach (Edge edge in figure.edges) { edges.Add(new Edge(edge)); } needCircle = false; selectVertex = false; }
Содержание архива
- исходный код на C# для Visual Studio 2010 (будет работать и в более новых версиях)
klausms