Як і будь-який інший розвинений тулку, U ++ надає багатий вибір засобів для роботи з графікою. Будь-які операції малювання в U ++ виконуються з використанням об`єктів Draw, які представляють собою абстрактний полотно (canvas). Всі об`єкти Draw поділяються на растрові (наприклад, ImageDraw або ViewDraw) і векторні (WinMetaFileDraw, PdfDraw і т.п.). Об`єкти обох типів мають методи для малювання як векторних примітивів (скажімо, ліній або полігонів), так і растрових зображень. Однак растрові об`єкти безпосередньо встановлюють кольору пікселів полотна при виклику кожної команди малювання, а векторні - «запам`ятовують» ці виклики у вигляді внутрішньої об`єктної ієрархії. Різниця приблизно така ж, що між малюнками в форматах png і svg.
Важливою особливістю полотна в U ++ є те, що він не має станів (stateless canvas). На відміну від інших тулкіта, колір ліній і тексту не задається глобально для всіх наступних змальованих об`єктів, а передається для кожного з них окремо.
Графічні примітиви і текст
Відео: Створення ігор на C ++: Змійка
Найпростіший спосіб ознайомитися з можливостями об`єктів Draw - це намалювати щось безпосередньо в клієнтської області віджету. Всі віджети в U ++ мають метод Paint, який можна перевизначити в успадкованому класі. Створимо в ThelDE новий проект на основі шаблону «Basic Ctrl Lib Application ** і успадкуємо новий клас від класу TopWindow:
#include using namespace Upp; struct MyWindow: TopWindow { virtual void Paint (Draw w) { w.DrawRect (GetSize (), White ()) - w.DrawRect (10, 10, 60, 80, Green ()); } }; GUI _APP_ MAIN {MyWindow w; w.Sizeable (). Title ( "Приклад малювання в U ++"); w.SetRect (0,0,300,200); w.Run (); }
Перед тим, як розбирати цей приклад, переконаємося, що він компілюється без помилок. В Ubuntu 10.10 (а можливо, і в інших системах) виникає прикра помилка «gdk-pixbuf / gdk-pixbuf.h: No such file or directory» хоча бібліотека libgdk-pixbuf2.0-dev встановлена. Проблема усувається копіюванням заголовків в потрібне місце:
Повернемося до прикладу. Метод Paint приймає посилання на об`єкт Draw, на якому і буде здійснюватися малювання. Імена методів малювання та їх параметри в основному інтуїтивно зрозумілі. У нашому випадку вся область малювання заповнюється білим кольором і на ній малюється зелений прямокутник. Система координат починається в лівому верхньому кутку, а вісь Y направлена вниз. При малюванні полігонів і ламаних використовуються масиви точок, що передаються у вигляді Vector:
p; p lt; lt; Point (130, 110) lt; lt; Point (160, 180) lt; lt; Point (110, 150) lt; lt; Point (170, 120) lt; lt; Point (130, 110) - w.DrawPolygon (p, Blue); Зумовлені кольору можна задавати як у вигляді виклику статичних функцій (Green ()), так і у вигляді констант з тим же ім`ям (Green).
Для всіх геометричних примітивів, для яких це має сенс, можна передавати ширину і колір ліній в двох додаткових параметрах:
// Блакитний фон і пурпурні лінії w.DrawPolygon (p, Cyan, 5, Magenta) -
Відео: Побудова графіків функції в Delphi частина 1
Для виведення тесту призначений метод DrawText, який дозволяє використовувати будь-який з встановлених в системі шрифтів в будь-якому зображенні і з довільним поворотом:
Перші два параметри задають лівий верхній кут рядки, третій необов`язковий цілочисельний параметр - поворот тексту проти годинникової стрілки. Далі слід сама рядок шрифт, яким вона відображається, і колір символів. Поворот задається з кроком в десяту частку градуса, так що повний поворот на 360 ° відповідає значенню 3600 (чому не можна передати довільний поворот у вигляді числа з плаваючою точкою - незрозуміло).
Замість того щоб вручну обчислювати координати змальованих примітивів, можна зміщувати початок координат глобально методом Offset. Якщо потрібно обмежити малюються об`єкти не кордоном віджета, а заданим прямокутником, то використовується метод Clip. Є і комбінація цих методів - Clipoff. Зміщення і обмеження обчислюються щодо їх попередніх значень і запам`ятовуються у внутрішньому стеку об`єкта Draw. Їх можна послідовно скасовувати, виштовхуючи з стека методом End:
w.Offset (10,10) - // Змістити на 10,10 w.DrawText (120, 10, "Усунутий текст"); w.Clipoff (20,20,153,40) - // Змістити ще на 20,20 і обрізати w.DrawText (120, 10, "Обрізаний текст") - w.End () - // Скасувати обмеження w.End () - // скасував перше зміщення
Кількість викликів End () має бути таким, щоб стік зрушень повністю очищався - інакше буде генеруватися помилка часу виконання (правда, не зовсім зрозуміло, навіщо потрібна така строгість). Результат роботи програми, що демонструє різні команди малювання примітивів і тексту, показаний на рис. вище.
Створили відмінний інформаційний ресурс по U ++ і тепер Вас цікавить розкрутка сайту в пошуку (https://1-mecto.ru/)? У такому випадку, я настійно раджу Вам знайти досвідчених фахівців в даній області. На їх роль, на мою думку, ідеально підійдуть співробітники сайту 1-mecto.ru!