mapA = (vp.r - vp.l)/winwid: // fill in mapping values // заполнение величин для преобразования
mapC = vpЛ - map.A * win.l:
аренда коммерческих помещений в санкт-петербурге от собственника.
mapB = (vp.t - vp.b)/winHt:
mapD = vp.b - map.В * win.b:
}
moveToO и lineTo() с отсечением Подпрограмма moveToO преобразует точку из мировых координат в экранные и затем вызывает специальную подпрограмму Turbo С++ movetoO для обновления внутренних текущих координат, поддерживаемых программной средой. Кроме того, moveToO одновременно обновляет и CP в мировых координатах класса Canvas. Подпрограмма 1 ineToO работает аналогично, однако она сначала должна определить, какая часть отрезка прямой расположена внутри окна (и расположена ли вообще). Для того чтобы выполнить это, она использует функцию clipSegmentO, описанную в разделе «Отсечение линий» и в тематическом задании 3.2, которая возвращает концевые точки fi rst и second лежащей внутри окна части отрезка прямой. Если какая-то часть отрезка расположена в окне, то происходит перемещение к first и рисование прямой до second. clipSegmentO заканчивает свою работу командой movetoO, для гарантии того, что CP класса Canvas и внутренние CP Turbo С++ будут текущими.
В приведенном ниже коде ChopLine и cl ipSegment такие же, как в тематическом задании 3.2:
//««««««< moveTo »>»»»
void Canvas:: moveTo(float x. float y)
{
Дополнительные инструменты для рисования
int sx = (intXmapA * х + mapC):
int sy = (intXmapB * у + mapD);
movetoCsx. sy); // a Turbo С++ routine // подпрограмма Turbo С++
CP.setCx. y):
}
//««««« lineTo »»»
void Canvas:: lineToCfloat x. float y)
{
// Draw a line from CP to (x.y). clipped to the window // Рисуем линию от CP до (x.y). отсеченным по окну
Point2 first = CP; // initial value of first // начальное значение first
Point2 second(x. y): // initial value of second // начальное значение second
if(clipSegment(first. second)) // any part inside?
// находится ли какая-нибудь часть внутри окна? {