Методы программирования, использованные для определения класса Line_style
Color
. Здесь мы снова скрываем тот факт, что для представления стилей линии библиотека FKTK использует тип int
. Почему стоит скрывать эту информацию? Потому что эти способы представления при модификации библиотеки могут измениться. В следующей версии библиотеки FLTK может появиться тип Fl_linestyle
, да и мы сами можем перенастроить наш интерфейс на другую библиотеку. В любом случае не стоит замусоривать свой код переменными типа int
только потому, что мы знаем, как они задают стиль линий.
Класс Line_style
grid.set_style(Line_style(Line_style::dash,2));
В итоге получим следующее изображение:
Обратите внимание на то, что цвет и стиль относятся ко всем линиям, образующим фигуру. Это одно из преимуществ группирования нескольких линий в один графический объект, например класса Lines
Open_polyline
или Polygon
. Если мы хотим управлять цветом или стилем линий по отдельности, то их следует задать как отдельные объекты класса Line
. Рассмотрим пример.horizontal.set_color(Color::red);
vertical.set_color(Color::green);
На экране откроется окно, приведенное ниже.
13.6. Класс Open_polyline
Класс Open_polyline
poly
имеет греческое происхождение и означает “много”, а polyline
— это удобное имя для фигуры, состоящей из многих линий. Рассмотрим пример.Open_polyline opl;
opl.add(Point(100,100));
opl.add(Point(150,200));
opl.add(Point(250,250));
opl.add(Point(300,200));
Этот фрагмент кода создает фигуру, которую можно нарисовать, соединяя следующие точки.
В принципе Open_polyline
Класс Open_polyline
struct Open_polyline:Shape { // открытая последовательность линий
void add(Point p) { Shape::add(p); }
};
Да-да, это все определение. В нем практически ничего нет, кроме указания имени класса и того факта, что он является наследником класса Shape
add()
класса Open_polyline
просто позволяет пользователям получить доступ к функции add()
из класса Shape
(т.е. Shape::add()
). Нам даже не нужно определять функцию draw_lines()
, так как класс Shape
по умолчанию интерпретирует добавленные точки как последовательность линий, соединенных друг с другом. 13.7. Класс Closed_polyline
Класс Closed_polyline
Open_polyline
, за исключением того, что последняя точка соединяется с первой. Например, можно было бы создать объект класса Closed_polyline
из тех же точек, из которых был построен объект класса Open_polyline
в разделе 13.6.Closed_polyline cpl;
cpl.add(Point(100,100));
cpl.add(Point(150,200));
cpl.add(Point(250,250));
cpl.add(Point(300,200));
Как и ожидалось, результат идентичен тому, что мы получили в разделе 13.6, за исключением последнего отрезка.
Определение класса Closed_polyline
struct Closed_polyline:Open_polyline { // замкнутый ряд линий
void draw_lines() const;
};
void Closed_polyline::draw_lines() const
{
Open_polyline::draw_lines(); // сначала рисуем открытый ряд линий,
// затем рисуем замыкающую линию:
if (color().visibility())
fl_line(point(number_of_points()–1).x,