Побудова прямих і прямокутників free pascal

Побудова ламаної лінії з вершинами в точках масиву XY (n - число точок)

У графічних побудовах беруть участь або абсолютні координати точок (x1, y1), (x2, y2), що задаються значеннями типу SmallInt в екранній системі координат, або збільшення (dx, dy) щодо позиції поточної точки. Абсолютні ко ординати можуть бути і негативними. Це означає, що одна з точок графіче- ського примітиву знаходиться за межами координатної сітки екрану. Але видимий фрагмент відповідного графічного примітиву буде побудований. Порядок завдання кутових точок прямокутника жорстко фіксований. Точка (x1, y1) соответ- ствует лівого верхнього кута прямокутника.

Після відкриття графіки або очищення графічного екрану поточна точка (графічний курсор) знаходиться на початку координат - в лівому верхньому кутку екрану. При побудові ліній поточна точка переміщується в кінець відрізка. Побудова прямокутника не змінює позицію поточної точки. У цьому можна переконатися на такому прикладі (лістинг 15.3).

Лістинг 1 5 .3. програма CP

program CP; uses graph; var

gd: = D8bit; gm: = m800x600; initgraph (gd, gm, ");

LineRel (50,0); readln; closegraph;

Відповідне графічне вікно наведено на рис. 15.4.

Побудова прямих і прямокутників free pascal

Мал. 15.4. Переміщення поточної точки

Відрізки прямих і контури прямокутника можуть малюватися не тільки суцільними лініями. За замовчуванням в графічній системі встановлений саме цей режим. Однак користувач може його змінити, звернувшись до процедури SetLineStyle.

SetLineStyle (Style, Pattern, width);

Перший її параметр Style зазвичай задається однією з наступних мнемоніче- ських констант:

± SolidLn - режим побудови суцільних ліній (за замовчуванням);

± DottedLn - режим побудови пунктирною лінії;

± CenterLn - режим побудови штрихпунктирной лінії;

± Dashedln - режим побудови штриховий лінії;

± UserBitln - режим побудови ліній за шаблоном користувача.

У перших чотирьох режимах параметр Pattern ігнорується і може бути за- дан, наприклад, нулем. Його призначення - задати шаблон користувача, який формується у вигляді двобайтового шестнадцатеричной константи. Шаблон скані- руется зліва направо. Його черговий нульовий розряд робить черговий піксель ли ванні невидимим, а одиничний розряд - видимим. Після вичерпання розрядів шаблону сканування його бітів повторюється заново. Зразки відтворення стандартних типів ліній наведені на рис. 15.5. Як нестандартного шаб- лона була використана константа Pat = $ FFFFFF00.

Третій аргумент процедури SetLineStyle задає товщину лінії, яка мо-

жет дорівнювати одному пікселю (width = NormWidth) або двом пикселам (width = ThickWidth).

Побудова прямих і прямокутників free pascal

Мал. 15.5. стилі ліній

Процедура DrawPoly призначена для побудови ламаної лінії, вершини якої задані масивом точок типу PointType. Якщо координати останньої точки масиву збігаються з координатами початкової точки, то таким способом можна побудувати будь-який багатокутник (лістинг 15.4).

Лістинг 15.4. програма polygon

program polygon; uses graph;

xy: array [1..4] of PointType;

DrawPoly (4, xy); // побудова трикутника

Графічний екран цієї програми наведено на рис. 15.6.

Побудова прямих і прямокутників free pascal

Мал. 15.6. побудова трикутника

Наведені рис. 15.1, 15.3-15.6 побудовані штучно, т. К. Стандартно встановлений режим малювання відтворює всі графічні елементи білим кольором на чорному тлі. Тому справжні графічні вікна відповідних програм були оброблені в програмі Paint за допомогою звернення кольору на виділених ділянках робочого поля.

Справа в тому, що спроба малювати на графічному екрані чорним по білому не вирішується простим зміною кольору малювання (fc: = 0) і кольору фону (bc: = 15). При включенні в наведену вище програму, перш ніж звертатися до процедури Draw- Poly двох наступних операторів:

SetColor (0); // код чорного кольору SetBkColor (15); // код білого кольору

вміст графічного екрану не змінюється. Спроба виявити колір фону шляхом стирання вмісту екрану (процедура ClearDevice) теж ні до чого доброго не приводить - екран стає білим, а малювання кольором фону по білому на- дов не залишає. Тому доводиться йти на "обман" графічної системи: код нульового кольору переносимо в регістр ЦАП з номером, відмінним від 0. Потім назна- чаєм цей колір як колір переднього плану і міняємо колір фону (лістинг 15.5).

Лістинг 1 5 .5. Рісо вання ч е рним по бел ому

program poly_B_W; uses graph;

xy: array [1..4] of PointType;

gd: = D8bit; gm: = m800x600; initgraph (gd, gm, ");

SetPalette (1,0); // чорний колір -> 1-й регістр ЦАП SetColor (1); // присвоєння їм кольорів малювання SetBkColor (15); // зміна кольору фону

ClearDevice; // прояв кольору фону

DrawPoly (4, xy); readln; CloseGraph;

Після цих маніпуляцій перед нами графічний екран, висновок якого на принтер не призводить до підвищеної витрати тонера (див. Рис. 15.6).

Схожі статті