Задание
Моделирование планировщика помещений.Разработать визуальный конструктор (редактор), позволяющий создавать планы помещенийРеализовать методы, с помощью которых пользователь может перемещать объекты на плане, изменять их размеры. Реализовать функцию сохранения/загрузки плана в файл с помощью перегрузки операторов ввода/вывода в поток для созданных классов.
Словесное описание работы программы:
Есть две вкладки, на первой производим планирование, на второй выполняется подготовка - создаются элементы. Создание элемента: переходим на вторую вкладку, выбираем в комбобоксе "Новая фигура". Далее рисуем фигуру, вводим ее название и жмем Добавить. Фигуры сохраняюся в библиотеке даже при выключении программы. Добавленные фигуры сразу отображаются на первой вкладке и их можно использовать.
Моделирование:
- На первой вкладке можно рисовать стены и добавлять элементы из библиотеки. Для этого надо произвести двойной клик по элементу.
- Рисование (стен и элементов):Числовое поле задает толщину линий.
- Чекбокс указывает, новая линия будет горизонтальной или вертикальной или же может быть под углом.
- Кнопка Добавления позволяет добавлять отрезки. Добавление осуществляется кликами по полю рисования (когда включена кнопка)
- Кнопка удаления позволяет удалить отрезок, для этого надо кликнуть по удаляемому отрезку
- Кнопка перемещения позволяет перемещать вершины или фигуру целиком, если выделена вершина, будет перемещаться только она, если выделено любое ребро, то перемещаться будет вся фигура.
- Кнопка масштабирования меняет размер фигуры, для этого надо активировать эту кнопку и потянуть за одну из граней фигуры (с точками не работает)
- Кнопка вращения поворачивает фигуру целиком, для этого для этого надо активировать эту кнопку и потянуть за одну из граней фигуры налево или направо (с точками не работает)
Библиотека элементов хранится в файле 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 (будет работать и в более новых версиях)
Телеграм
-