Возможные способы формирования линий.

 

При формировании линий в окне приложения обычно применяют один из двух способов:

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

Таким образом, достаточно, чтобы приложение соответствующим образом реагировало бы только на одно событие, поступающее от манипулятора типа "мышь" при нажатии (OnMouseDown), например, на ее левую клавишу. Условно этот способ можно назвать "поточечным".

2.1.2. Второй способ заключается в том, чтобы формировать новые вершины таким образом, чтобы можно было непосредственно наблюдать, как будет выглядеть изображение последней грани контура многоугольной фигуры, если его последняя вершина находилась бы на том месте, где в настоящий момент находится курсор. Такой подход предполагает, формирование линии, изображающей формируемую грань многоугольника, с координатами в точках, где была зафиксирована его последняя вершина и текущего положения курсора. При изменении положения курсора изменяет своё положение и соответствующая грань многоугольника. В этом случае сама линия, изображающая эту последнюю грань, выглядит как резиновая, надёжно закреплённая на одном конце и свободно перемещаясь вслед за курсором на её втором конце. Такой режим рисования получил название "Резинка".

 

 
 

Рис.3. Рисование контура фигуры в режиме "Резинка".

В данном случае приложение должно быть способно реагировать уже на два события, поступающее от манипулятора типа "мышь" и возникающее при нажатии на ее левую клавишу (MouseDown) и при ее перемещении (MouseMove).

Вполне очевидно, что для реализации обоих способов вырисовывания фигур в объявление класса формы, требуется ввести некоторый объект, предназначенный для временного хранения координат уже зафиксированных вершин многоугольника. В качестве такого хранилища можно использовать обычный список. Для этого в классе формы достаточно объявить переменную типа List. Кроме этого нам, очевидно, потребуется вспомогательная переменная, хранящая последнее положение курсора и координаты последней вершины формируемого многоугольника.

3. Разработка приложения.