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?

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