Тематическое задание 2.6. Редактор ломаных линий Уровень сложности III.

Программы для рисования часто предоставляют возможность заходить на ломаные линии с помощью мыши и затем редактировать эти ломаные, пока они не составят нужное изображение. На рис. 2.34, а показан процесс рисования домика. Пользователь только что щелкнул мышью в месте, показанном на рисунке, и предыдущая точка соединилась с точкой, отмеченной мышью, прямой линией.

Создание и редактирование ломаных линий

Рис. 2.34. Создание и редактирование ломаных линий: а) добавление точек; б) перемещение точки; в) удаление точки Рисунок 2.34, б иллюстрирует процесс перемещения точки. Пользователь устанавливает курсор рядом с вершиной ломаной линии, нажимает кнопку мыши и «перетаскивает» («drags») выбранную точку в какое-нибудь новое положение, не отпуская кнопку мыши. После отпускания кнопки старые прямые линии, связанные с этой точкой, исчезнут и будут нарисованы новые.

2.6. Тематические задания На рис. 2.34, в показано, как из ломаной линии удаляется точка. Пользователь щелкает мышью рядом с вершиной какой-нибудь ломаной, после чего исчезают два отрезка прямой, связанные с этой вершиной. Затем два других конца только что стертых отрезков соединяются отрезком прямой.

Напишите программу, предоставляющую пользователю возможность входить в картинки, состоящие из 60 ломаных линий, и редактировать их. Пользователь взаимодействует с экраном посредством нажатия клавиш на клавиатуре, а также указывая и щелкая мышью. Функциональные возможности программы должны включать в себя следующие «действия»: О begin - ('b'): (создание новой ломаной); О delete - ('d'): (удаление следующей точки, на которую указано); О move - ('пГ): (перетаскивание указанной точки в новое положение); О refresh - (' г'): (очистка экрана и перерисовка всех ломаных); О quit - Cq'): (выход из программы).

Список ломаных может храниться в массиве BHflaGLintPointArray polys[60]. Команда begin, запускаемая нажатием клавиши 'Ь', позволяет пользователю создавать новую ломаную линию, которая записывается в первую доступную «ячейку» («slot») массива polys. При применении команды delete предполагается, что программа определит, какая точка какой ломаной находится ближе всего к точке, отмеченной в данный момент мышью. Когда эта точка определена, тем самым найдены «предыдущая» и «последующая» вершины выбранной ломаной. Два отрезка прямой, связанные с выбранной вершиной, стираются, а предыдущая и последующая вершины соединяются отрезком прямой. Команда move находит вершину, ближайшую к отмеченной в настоящий момент точке, и ожидает повторного щелчка мышью, после чего данная вершина перемещается в эту новую, определенную щелчком точку.


⇐ Предыдущая| |Следующая ⇒