Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчёт_кг.doc
Скачиваний:
4
Добавлен:
27.10.2018
Размер:
2.73 Mб
Скачать

Меню «Выход»

Пункт меню Выход – выход из программы с подтверждением о выходе. Если в программе были изменения открытого объекта, то появляется запрос на сохранение перед выходом. Изменения отслеживаются в булевой переменой chg. Если она имеет значении true, то это означает, что объект был изменен.

Рис. 1.6 Подтверждение перед выходом

Рис. 1.7 Запрос на сохранение перед выходом

Меню «Действие»

При выборе пункта Действие на правой части формы появляются варианты действий: сдвиг, масштаб, поворот, - и кнопки: Грубо, Точно (см. рис. 1.6).

Рис. 1.6 Выбор пункта Действие

Выбор одного из действий производится нажатием на кнопку. В режиме Грубо назначенное действие выполняется многократно, используются кнопки справа от областей ввода значений коэффициентов трансформации, удобно выполнять действие относительно одной той или иной оси координат, в режиме Точно – действие выполняется относительно сразу всех координатных осей. Переключатели режима находятся в противофазе, т.е. автоматически активными являются только те управляющие элементы, которые относятся к выбранному режиму. Преобразования выполняются путем умножения матрицы вершин v_array на матрицу преобразования, вид этой матрицы, те значения коэффициентов трансформации зависят от выбранного режима Сдвиг/ Поворот/ Масштаб. После выполнения преобразований, матрица вершин нормируется, и только затем обновляются окна проекций. После выбора одного из режимом поля для ввода заполняются значениями по-умолчанию это нули для поворота и сдвига и единицы для масштаба.

  1. Реализация

Объект изначально задается в мировых координатах, информация о нем вводится в компонент StringGrid. В качеств основных структур данных используется: запись v - координаты вершины, запись Vector, содержащая 4 координаты. Matrix – структура для использования матриц преобразования. Edge – структура для описания ребра, номеров его начальной и конечной вершины. После Описания формы объекта вся информация о нем копируется в динамические массивы V_array и E_array. Переменные v_count и e_count хранят количество вершин и ребер соответственно. Переключение между режимами редактирование ребер/вершин, а также поворот/сдвиг/масштаб отслеживается при помощи переменных перечисляемого типа : mode=(vertex,edges);ed_mode=(rotate,scale,move); После создания массива вершин он нормируется процедурой norm_coord. Построения изображений фигуры происходит следующим образом: каждое окно проекций имеет свой буфер window_point of tpoint. Номерованная матрица вершин умножается на соответствующую матрицу проекций (zoy_pr, xoz_pr, xoy_pr, iso_pr) при помощи процедуры emul, на выходе для кадой вершины получаем результирующий вектор, координаты которого будут соответствовать проекции это вершины на плоскости. После просматривается массив ребер e_array, и в буфере window_point, соединяются те точки, которые принадлежат одному ребру. Трансформации над объектом происходят при помощи перемножения на матрицы трансформаций, в программе экземпляром такой матрицы является матрица transform. Изначально это единичная матрица, она очищается процедурой clean_matrix перед каждым использованием. В зависимости от типа трансформации в матрице изменяются определенные коэффициенты, значения которых берутся из полей ввода. Затем матрица вершин перемножается на матрицу трансформаций процедурой transform_pr, и после нормировки, получается необходимый результат, который после отображается в окна вывода проекций процедурой draw. После каждого действий обновляются мировые координаты объекта при помощи процедуры copy_to_table, которая обновляет содержимое компонента StringGrid для вершин.