Графіка в ultimate ++ і загальні висновки

Графіка в Ultimate ++ і загальні висновки
Як і будь-який інший розвинений тулку, 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 встановлена. Проблема усувається копіюванням заголовків в потрібне місце:
sudo cp -r /usr/include/gdk-pixbuf-2.0/gdk-pixbuf J /usr/include/gtk-2.0

Повернемося до прикладу. Метод Paint приймає посилання на об`єкт Draw, на якому і буде здійснюватися малювання. Імена методів малювання та їх параметри в основному інтуїтивно зрозумілі. У нашому випадку вся область малювання заповнюється білим кольором і на ній малюється зелений прямокутник. Система координат починається в лівому верхньому кутку, а вісь Y направлена вниз. При малюванні полігонів і ламаних використовуються масиви точок, що передаються у вигляді Vector:
Vector

Відео: Qt - Покадровая анімація 2D-графіки 1 (Графічні елементи)







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, який дозволяє використовувати будь-який з встановлених в системі шрифтів в будь-якому зображенні і з довільним поворотом:
w.DrawText (120, 10, "Hello world!");
w.DrawText (170, 80, "Hello world!", Roman (15) .Italic (), Red) -
w.DrawText (180, 140, 260, "Hello world!", Courier (15) .Underline ()) -

Перші два параметри задають лівий верхній кут рядки, третій необов`язковий цілочисельний параметр - поворот тексту проти годинникової стрілки. Далі слід сама рядок шрифт, яким вона відображається, і колір символів. Поворот задається з кроком в десяту частку градуса, так що повний поворот на 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 () - // скасував перше зміщення

Графіка в Ultimate ++ і загальні висновки

Кількість викликів End () має бути таким, щоб стік зрушень повністю очищався - інакше буде генеруватися помилка часу виконання (правда, не зовсім зрозуміло, навіщо потрібна така строгість). Результат роботи програми, що демонструє різні команди малювання примітивів і тексту, показаний на рис. вище.



Створили відмінний інформаційний ресурс по U ++ і тепер Вас цікавить розкрутка сайту в пошуку (https://1-mecto.ru/)? У такому випадку, я настійно раджу Вам знайти досвідчених фахівців в даній області. На їх роль, на мою думку, ідеально підійдуть співробітники сайту 1-mecto.ru!


ІНШЕ

Ultimate ++: sqlexp фото

Ultimate ++: sqlexp

Відео: N ++: Intro tab invisible ninja speedrun in 35:04 Поки робота з SQL в U ++ виглядає настільки ж нудною, як і в…

Seed7: бібліотеки фото

Seed7: бібліотеки

Відео: пентагональними призма з насіння льону. П`ятикутна призма. геометричні фігури.Стереометрія Якщо Сі або C ++ без…

Juce: контейнери фото

Juce: контейнери

Відео: Batman Arkham City. Серія 16 [2-ий контейнер з титаном. глушилка] Найбільш загальним контейнерним класом в Juce…

Ultimate ++: схеми баз даних фото

Ultimate ++: схеми баз даних

Відео: Бази даних, лекція №1 (2013) Об`єкти SqlExp кардинально полегшують створення запитів, але створення самих…

Krita: шари фото

Krita: шари

Відео: Krita і місячний квітка по фану Вихідна одношарова картинка Шари в Krita розвинені більше, ніж в GIMP, і мають…

Ultimate ++: перша програма фото

Ultimate ++: перша програма

Відео: Уроки C # (C sharp) | # 3 - Перша програма на C # Перейдемо до реального прикладу. Напишемо просту марну…

» » Графіка в ultimate ++ і загальні висновки