Point2 CP: // current position in the world // текущая позиция в мировых координатах
IntRect viewport; // the current window // текущее окно
RealRect window: // the current viewport // текущий порт просмотра
float mapA. mapB. mapC. mapD: // data for the window-to-viewport mapping // данные для преобразования «окно-лорт просмотра»
void makeMap(void): // builds the map // выполняет преобразование
int screenWidth. screenHeight:
float delx.delу: // increments for clipper // добавления для отсекателя
char codel. code2: // outside codes for clipper // внешние коды для отсекателя
void ChopLine(tPoint2 &p. char c):
int clipSegment(tPoint2 &pl. tPoint2 &p2):
}
Дополнительные инструменты для рисования
Реализация класса Canvas
Здесь мы покажем некоторые из функций-членов класса Canvas, чтобы проиллюстрировать, что нужно делать для управления преобразованием «окно - порт просмотра» и отсечением.
Конструктор Canvas
В первую очередь в конструктор передаются нужные ширина и высота экрана. Затем Turbo С++ переходит в графический режим с самым высоким разрешением, которое поддерживается используемой графической системой. Проверяются действующие ширина и высота экрана; и если хотя бы одна из них меньше, чем было запрошено, то программа прекращает работу. Наконец, устанавливаются по умолчанию окно и порт просмотра, после чего выполняется преобразование «окно - порт просмотра» (внутри функции SetViewportO). Имеем следующий код:
Canvas:: Canvasdnt width, int height) {
int gdriver - DETECT, gmode; //Turbo С++: use best resolution screen //Turbo С++: используем наилучшее разрешение экрана
initgraph(&gdriver. Sgmode. "") : // go to "graphics" mode // переходим в «графический» режим
screenwidth - getmaxxO +1: // size of available screen // размер имеющегося экрана
screenHeight - getmaxyO + 1:
assert(screenWidth >- width): // as wide as asked for?
// достаточна ли ширина по сравнению с запрошенной?
assert(screenHeight >- height): // as high as asked for?