Какие графические примитивы используются в редакторе рисования

Обновлено: 15.05.2024

Первым шагом к созданию пользовательских виджетов в PyQt5 является понимание операций с растровой (пиксельной) графикой. Все стандартные виджеты рисуются в виде растровых изображений на прямоугольном «холсте», который формирует форму виджета. Как только вы поймете, как это работает, вы сможете рисовать любые виджеты!

Растровое изображение – это прямоугольная сетка из пикселей, где каждый пиксель хранится отдельно в виде определенного количества битов. В отличие от векторной графики, где изображение хранится в виде серии инструкций по рисованию, которые повторяются для формирования изображения.

В этом руководстве мы рассмотрим QPainter — API Qt для выполнения операций с растровой графикой и основу для рисования собственных виджетов. Мы выполним некоторые основные операции рисования и, наконец, соберем все вместе, чтобы создать собственное маленькое приложение Paint.

Операции рисования растровых изображений в Qt обрабатываются через класс QPainter. Это общий интерфейс, который можно использовать для рисования на различных поверхностях, включая, например, QPixmap. Чтобы упростить демонстрацию, мы будем использовать следующее приложение-заглушку, которое обрабатывает создание нашего контейнера (QLabel ), создание растрового холста, отображение его в контейнере и добавление контейнера в главное окно.

Почему мы используем QLabel для рисования? Виджет QLabel также можно использовать для отображения изображений, и это самый простой виджет, доступный для отображения QPixmap.

Сохраните это в файл и запустите его, и вы должны увидеть следующее — одну черную линию внутри рамки окна —

Одна черная линия на холст.

Одна черная линия на холсте.

Все рисование происходит внутри метода draw_something — мы создаем экземпляр QPainter, передаем ему холст ( self.label.pixmap() ), а затем выдаем команду для рисования линии. Наконец, мы вызываем .end(), чтобы закрыть рисовальщик и применить изменения.

Обычно вам также потребуется вызвать .update() для запуска обновления виджета, но поскольку мы рисуем до того, как отображается окно приложения, обновление уже произойдет.

Рисование примитивов

QPainter предоставляет огромное количество методов для рисования фигур и линий на растровой поверхности (в версии 5.12 имеется 192 специфических для QPainter метода, не связанных с событиями). Хорошая новость заключается в том, что большинство из них являются перегруженными методами, которые представляют собой просто разные способы вызова одних и тех же базовых методов.

Например, существует 5 различных методов drawLine, каждый из которых рисует одну и ту же линию, но отличается тем, как определяются координаты того, что нужно нарисовать.

Метод Описание
drawLine(line) Нарисовать экземпляр QLine
drawLine(line) Нарисовать экземпляр QLineF
drawLine(x1, y1, x2, y2) Нарисуйте линию между x1, y2 и x2, y2 ( int )
drawLine(p1, p2 ) Нарисуйте линию между p1 и p2 (оба QPoint )
drawLine(p1, p2) Нарисуйте линию между p1 и p2 (оба QPointF )

Если вам интересно, в чем разница между QLine и QLineF , у последнего координаты указаны как float . Это удобно, если у вас есть плавающие позиции в результате других вычислений, но в остальном не очень.

Игнорируя F-варианты, у нас есть 3 уникальных способа рисования линии — с помощью линейного объекта, с двумя наборами координат (x1, y1), (x2, y2) или с двумя объектами QPoint. Когда вы обнаружите, что сама QLine определяется как QLine(const QPoint & p1, const QPoint & p2) или QLine(int x1, int y1, int x2, int y2), вы видите, что все они на самом деле одно и то же. . Различные сигнатуры вызова просто для удобства.

Учитывая координаты x1, y1, x2, y2, два объекта QPoint будут определены как QPoint(x1, y1) и QPoint(x2, y2) .

Если исключить дубликаты, у нас есть следующие операции отрисовки — drawArc, drawChord, drawConvexPolygon, drawEllipse, drawLine, drawPath, drawPie, drawPoint, drawPolygon, drawPolyline, drawRect, drawRects и drawRoundedRect. Чтобы не перегружаться, мы сначала сосредоточимся на примитивных формах и линиях и вернемся к более сложным операциям, когда разберемся с основами.

Для каждого примера замените метод draw_something в приложении-заглушке и повторно запустите его, чтобы увидеть результат.

Точка рисования

Это рисует точку или пиксель в заданной точке холста. Каждый вызов drawPoint рисует один пиксель. Замените код draw_something следующим.

Если вы повторно запустите файл, вы увидите окно, но на этот раз в его центре будет одна точка черного цвета. Вам, вероятно, придется подвигать окно, чтобы обнаружить его.

Рисование одной точки (пикселя) с помощью QPainter

Рисование одной точки (пикселя) с помощью QPainter

На самом деле особо не на что смотреть. Чтобы сделать вещи более интересными, мы можем изменить цвет и размер точки, которую мы рисуем. В PyQt цвет и толщина линий определяются с помощью активного пера в QPainter. Вы можете установить это, создав экземпляр QPen и применив его.

Это даст следующий немного более интересный результат..

Большая красная точка .

Большая красная точка.

Вы можете выполнять несколько операций рисования с помощью QPainter, пока рисование не будет завершено. Рисование на холсте происходит очень быстро — здесь мы рисуем 10 000 точек случайным образом.

Точки имеют ширину 3 пикселя и черные (перо по умолчанию).

10k 3-пиксельных точек на холст

10 тыс. 3-пиксельных точек на холсте

Часто вам может потребоваться обновить текущее перо во время рисования, например. рисовать несколько точек разными цветами, сохраняя другие характеристики (ширину) одинаковыми. Чтобы сделать это без повторного создания нового экземпляра QPen каждый раз, когда вы можете получить текущее активное перо из QPainter, используя pen = painter.pen() . Вы также можете повторно применить существующее перо несколько раз, каждый раз меняя его.

Создает следующий вывод —

Случайный шаблон из 3 точек ширины

Случайный шаблон из 3 точек шириной

В QPainter может быть активным только одно QPen — текущее перо.

Это настолько увлекательно, насколько возможно рисовать точки на экране, поэтому мы перейдем к рассмотрению некоторых других операций рисования.

нарисовать линию

В начале мы уже нарисовали линию на холсте, чтобы проверить, все ли работает. Но чего мы не пробовали, так это настроить перо для управления внешним видом линии.

В этом примере мы также используем QPoint для определения двух точек, соединяемых линией, вместо того, чтобы передавать отдельные параметры x1, y1, x2, y2 — помните, что оба метода функционально идентичны.

Толстая синяя линия

Толстая синяя линия

drawRect, drawRects и drawRoundedRect

Все эти функции рисуют прямоугольники, определяемые координатами x, y, шириной и высотой прямоугольника или экземплярами QRect или QRectF, которые предоставляют эквивалентную информацию.

Квадрат — это просто прямоугольник одинаковой ширины и высоты.

Рисование прямоугольников

Рисование прямоугольников

Можно также заменить несколько вызовов drawRect одним вызовом drawRects, передающим несколько объектов QRect. Это даст точно такой же результат.

Нарисованные фигуры можно заполнить в PyQt, установив текущую активную кисть для рисования brush, передав экземпляр QBrush в painter.setBrush() . В следующем примере все прямоугольники заполняются узорчатым желтым цветом.

Закрашенные прямоугольники< бр />

Закрашенные прямоугольники

Что касается пера, то для данного художника всегда активна только одна кисть, но вы можете переключаться между ними или менять их во время рисования. Доступно несколько шаблонов стиля кисти. Вы, вероятно, будете использовать Qt.SolidPattern чаще, чем любые другие.

Вы должны установить стиль, чтобы вообще видеть любую заливку, так как по умолчанию используется Qt.NoBrush

Методы drawRoundedRect рисуют прямоугольник, но с закругленными краями, поэтому принимают два дополнительных параметра для x и y радиуса углов.

Прямоугольники со скругленными углами.

Прямоугольники со скругленными углами.

Существует необязательный конечный параметр для переключения между радиусами эллипса x и y углов, определяемыми в абсолютных пикселях Qt.RelativeSize (по умолчанию) или относительно размера прямоугольника (передается как значение 0…100). ). Передайте Qt.RelativeSize, чтобы включить это.

нарисоватьэллипс

Последний примитивный метод рисования, который мы сейчас рассмотрим, — это drawEllipse, который можно использовать для рисования эллипса или окружности.

Круг — это просто эллипс с одинаковой шириной и высотой.

В этом примере drawEllipse принимает 4 параметра, первые два – это координаты x и y верхнего левого угла прямоугольника, в котором будет отрисовываться эллипс, а последние два – ширина и высота этого прямоугольника соответственно.

Рисование эллипса с помощью x, у, ширина, высота или QRect.

Рисование эллипса с помощью x, y, ширины, высоты или QRect.

Вы можете добиться того же, передав QRect

Существует еще одна сигнатура вызова, которая принимает центр эллипса в качестве первого параметра, предоставленного как объект QPoint или QPointF, а затем радиусы x и y. Пример ниже показывает это в действии.

Рисование эллипса с помощью Point & радиус.

Рисование эллипса с использованием точки и радиуса.

Вы можете заполнить эллипсы, настроив QBrush так же, как и для заливки прямоугольников, доступны те же функции для стиля и цвета.

Наконец, мы совершим краткий обзор методов рисования текста в QPainter. Чтобы управлять текущим шрифтом в QPainter, вы используете передачу setFont в экземпляре QFont. При этом вы можете контролировать семейство, вес и размер (среди прочего) текста, который вы пишете. Однако цвет текста по-прежнему определяется текущим пером.

Вы также можете указать местоположение с помощью QPoint или QPointF .

Ширина пера не влияет на внешний вид текста.

Пример растрового текста привет, мир.

Пример растрового текста привет, мир.

Существуют также методы рисования текста в указанной области. Здесь параметры определяют положение x и y, а также ширину и высоту ограничивающей рамки. Текст за пределами этого поля обрезается (скрывается). Пятый параметр flags можно использовать, помимо прочего, для управления выравниванием текста внутри поля.

Ограничительная рамка обрезана рисовать текст.

Ограничивающая рамка на drawText обрезана.

Вы полностью контролируете отображение текста, устанавливая активный шрифт в рисовальщике с помощью объекта QFont. Дополнительные сведения см. в документации QFont.

Создание приложений с графическим интерфейсом с помощью Python и Qt6
Простой способ создания настольных приложений

Мое полное руководство, обновленное для версии 2021 и PyQt6. Все, что вам нужно для создания реальных приложений.


Загружаемая электронная книга (PDF, ePub) и полный исходный код

Для поддержки разработчиков в [[ countryRegion ]] я даю скидку [[ localizedDiscount[couponCode] ]]% по коду [[couponCode ]] — наслаждайтесь!

Для [[ activeDiscount.description ]] я даю скидку [[ activeDiscount.discount ]]% с кодом [[КупонКод ]] — наслаждайтесь!

Немного забавы с QPainter

Это стало немного тяжело, так что давайте сделаем передышку и придумаем что-нибудь веселое. До сих пор мы программно определяли выполняемые операции отрисовки. Но мы можем так же легко рисовать в ответ на ввод пользователя — например, позволяя пользователю рисовать по всему холсту. В этой части мы возьмем то, что уже узнали, и используем его для создания простейшего приложения Paint.

Мы можем начать с той же простой схемы приложения, добавив обработчик mouseMoveEvent в класс MainWindow вместо нашего метода рисования. Здесь мы возьмем текущую позицию мыши пользователя и отобразим точку на холсте.

Почему нет события клика? Виджеты по умолчанию получают события перемещения мыши только при нажатии кнопки мыши, если не включено отслеживание мыши. Это можно настроить с помощью метода .setMouseTracking — установив для него значение True (по умолчанию False), мышь будет отслеживаться непрерывно.

Если вы сохраните это и запустите, вы сможете наводить указатель мыши на экран и щелкать, чтобы рисовать отдельные точки. Это должно выглядеть примерно так —

Отрисовка отдельных точек mouseMoveEvent.

Отрисовка отдельных точек mouseMoveEvent.

Проблема здесь в том, что когда вы быстро перемещаете мышь, она на самом деле прыгает между точками на экране, а не плавно перемещается из одного места в другое. Событие mouseMoveEvent срабатывает для каждого местоположения, в котором находится мышь, но этого недостаточно для рисования непрерывной линии, если только вы не двигаетесь очень медленно.

Решение этой проблемы состоит в том, чтобы рисовать линии вместо точек. Для каждого события мы просто проводим линию от того места, где мы были (предыдущие e.x() и e.y()), до того места, где мы находимся сейчас (текущие e.x() и e.y()). Мы можем сделать это, самостоятельно отслеживая last_x и last_y.

Нам также нужно забыть последнюю позицию при отпускании мыши, иначе мы снова начнем рисовать с этого места после перемещения мыши по странице — т.е. мы не сможем прерваться линия.

Если вы запустите это, вы сможете рисовать на экране, как и ожидалось.

Рисование мышью с использованием непрерывного линия.

Рисование с помощью мыши, используя непрерывную линию.

Это все еще немного скучно, поэтому давайте добавим простую палитру, чтобы мы могли изменить цвет пера.

Для этого потребуется немного изменить архитектуру. До сих пор мы использовали mouseMoveEvent в QMainWindow. Когда у нас есть только один виджет в окне, это нормально — пока вы не измените размер окна больше, чем виджет (вы пробовали это?), координаты контейнера и единственного вложенного виджета совпадают. Однако, если мы добавим в макет другие виджеты, это не сработает — координаты QLabel будут смещены относительно окна, и мы будем рисовать в неправильном месте.

Это легко исправить, переместив управление мышью на саму метку QLabel — ее координаты события всегда относятся к ней самой. Это мы обернем как пользовательский объект Canvas, который обрабатывает создание поверхности растрового изображения, устанавливает координаты x и y и содержит текущий цвет пера (по умолчанию черный).

Этот автономный холст представляет собой вставную поверхность для рисования, которую вы можете использовать в своих собственных приложениях.

Для выбора цвета мы собираемся создать собственный виджет на основе QPushButton. Этот виджет принимает параметр цвета, который может быть экземпляром QColour, именем цвета («красный», «черный») или шестнадцатеричным значением. Этот цвет устанавливается на фоне виджета, чтобы его можно было идентифицировать. Мы можем использовать стандартный сигнал QPushButton.pressed, чтобы связать его с любыми действиями.

Определив эти две новые части, нам просто нужно выполнить итерацию по нашему списку цветов, создать кнопку QPaletteButton, передающую цвет, соединить ее сигнал нажатия с обработчиком set_pen_color на холсте (косвенно через лямбда-выражение, чтобы передать дополнительный цвет data) и добавьте его в макет палитры.

Это должно дать вам полнофункциональное многоцветное приложение для рисования, где вы можете рисовать линии на холсте и выбирать цвета из палитры.

К сожалению, это не так< бр />

К сожалению, это не делает вас хорошим художником.

Распылить

Чтобы добавить еще немного удовольствия, вы можете переключить событие mouseMoveEvent на следующее, чтобы рисовать с эффектом "аэрозольного баллончика" вместо линии. Это моделируется с помощью random.gauss для создания серии нормально распределенных точек вокруг текущей позиции мыши, которую мы наносим с помощью drawPoint .

Определите переменные SPRAY_PARTICLES и SPRAY_DIAMETER в верхней части файла и импортируйте случайный модуль стандартной библиотеки. На изображении ниже показано поведение распылителя при использовании следующих настроек:

Для аэрозольного баллончика нам не нужно отслеживать предыдущее положение, так как мы всегда распыляем вокруг текущей точки.

Если вам нужен вызов, попробуйте добавить дополнительную кнопку для переключения между режимами рисования и распыления или ввод для определения диаметра кисти/распылителя.

Полнофункциональную программу для рисования, написанную с помощью PyQt5, можно найти в моем 15-минутном приложении "Piecasso".

Это введение должно было дать вам хорошее представление о том, что вы можете делать с QPainter. Как уже говорилось, эта система лежит в основе всех рисунков виджетов. Если вы хотите посмотреть дальше, ознакомьтесь с методом виджета .paint(), который получает экземпляр QPainter, чтобы позволить виджету рисовать на самом себе. Те же самые методы, которые вы здесь изучили, можно использовать в .paint() для рисования некоторых основных пользовательских виджетов. Мы расскажем об этом в следующем уроке.

Если вы нашли это руководство полезным, поделитесь им со своей сетью.
Ваша поддержка помогает мне продолжать писать эти руководства. Спасибо!

В этой статье описывается, как работать с редактором изображений Visual Studio для просмотра и изменения ресурсов текстур и изображений.

Вы можете использовать Редактор изображений для работы с разнообразными форматами текстур и изображений, которые используются при разработке приложений DirectX. Это включает в себя поддержку популярных форматов файлов изображений и цветовых кодировок, такие функции, как альфа-каналы и MIP-сопоставление, а также многие форматы текстур с высокой степенью сжатия и аппаратным ускорением, поддерживаемые DirectX.

Поддерживаемые форматы

Редактор изображений поддерживает следующие форматы изображений:

< tr>
Имя формата Расширение имени файла
Переносимая сетевая графика .jpg
JPEG .jpg, . jpg, .jpe, .jfif
Поверхность прямого рисования < em>.dds
Формат обмена изображениями .jpg
Bitmap .bmp, .dib
Формат файла изображения с тегами .tif, .tiff
TGA (Targa) .tga

Начать

В этом разделе описывается, как добавить изображение в проект Visual Studio и настроить его в соответствии с вашими требованиями.

Добавьте изображение в свой проект

В обозревателе решений откройте контекстное меню проекта, в который вы хотите добавить изображение, и выберите «Добавить» > «Новый элемент».

В диалоговом окне "Добавить новый элемент" в разделе "Установлено" выберите "Графика", а затем выберите подходящий формат файла для изображения.

Если вы не видите категорию «Графика» в диалоговом окне «Добавить новый элемент», вам может потребоваться установить компонент «Редактор изображений и 3D-моделей». Закройте диалоговое окно, а затем выберите «Инструменты» > «Получить инструменты и компоненты» в строке меню, чтобы открыть установщик Visual Studio. Выберите вкладку Отдельные компоненты, а затем выберите компонент Редакторы изображений и 3D-моделей в категории Игры и графика. Выберите «Изменить».

 Компонент редактора изображений и 3D-моделей

Информацию о том, как выбрать формат файла в соответствии с вашими требованиями, см. в разделе Выбор формата изображения.

Укажите имя файла изображения и место, где вы хотите его создать.

Нажмите кнопку "Добавить".

Выберите формат изображения

В зависимости от того, как вы планируете использовать изображение, одни форматы файлов могут оказаться более подходящими, чем другие. Например, некоторые форматы могут не поддерживать необходимую функцию, например прозрачность или определенный цветовой формат. Некоторые форматы могут не обеспечивать подходящее сжатие для запланированного вами изображения.

Следующая информация может помочь вам выбрать формат изображения, соответствующий вашим потребностям:

Растровое изображение (.bmp)

Формат растрового изображения. Формат несжатого изображения, поддерживающий 24-битный цвет. Растровый формат не поддерживает прозрачность.

Изображение GIF (.jpg)

Формат изображения Graphics Interchange Format (GIF). LZW-сжатый формат изображения без потерь, поддерживающий до 256 цветов. Не подходит для фотографий и изображений со значительным количеством цветовых деталей, но обеспечивает хорошие коэффициенты сжатия для малоцветных изображений с высокой степенью согласованности цветов.

Изображение в формате JPG (.jpg)

Формат изображения Объединенной группы экспертов по фотографии (JPEG). Формат изображения с высокой степенью сжатия и потерями, поддерживающий 24-битный цвет и подходящий для сжатия изображений общего назначения с высокой степенью согласованности цветов.

Изображение PNG (.jpg)

Формат изображения Portable Network Graphics (PNG). Умеренно сжатый формат изображения без потерь, поддерживающий 24-битный цвет и альфа-прозрачность. Он подходит как для естественных, так и для искусственных изображений, но не обеспечивает такого высокого коэффициента сжатия, как форматы с потерями, такие как JPG или GIF.

Изображение TIFF (.tif)

Формат изображения Tagged Image File Format (TIFF или TIF). Гибкий формат изображения, поддерживающий несколько схем сжатия.

Текстура DDS (.dds)

Формат текстуры DirectDraw Surface (DDS). Сильно сжатый формат текстуры с потерями, поддерживающий 24-битный цвет и альфа-прозрачность. Коэффициент сжатия может достигать 8:1. Он основан на сжатии текстур S3, которое можно распаковать на графическом оборудовании.

Изображение TGA (.tga)

Формат изображения Truevision Graphics Adapter (TGA) (также известный как Targa). RLE-сжатый формат изображения без потерь, который поддерживает как изображения с цветовой картой (цветовая палитра), так и изображения прямого цвета с 24-битным цветом и альфа-прозрачностью. Не подходит для фотографий и изображений со значительным количеством цветовых деталей, но обеспечивает хорошие коэффициенты сжатия для изображений с длинными диапазонами одинаковых цветов.

Настроить изображение

Прежде чем вы начнете работать с созданным образом, вы можете изменить его конфигурацию по умолчанию. Например, вы можете изменить его размеры или формат цвета, который он использует. Сведения о том, как настроить эти и другие свойства изображения, см. в разделе Свойства изображения.

Прежде чем сохранить свою работу, обязательно установите свойство «Формат цвета», если вы хотите использовать определенный формат цвета. Если формат файла поддерживает сжатие, вы можете настроить параметры сжатия при первом сохранении файла или при выборе «Сохранить как».

Работа с редактором изображений

В этом разделе описывается, как использовать редактор изображений для изменения текстур и изображений.

Команды, влияющие на состояние редактора изображений, расположены на панели инструментов режима редактора изображений вместе с дополнительными командами. Панель инструментов расположена вдоль самого верхнего края области конструктора редактора изображений. Инструменты рисования расположены на панели инструментов редактора изображений вдоль крайнего левого края области конструктора редактора изображений.

Панель инструментов режима редактора изображений

Редактор изображений панель инструментов режима в Visual Studio

В следующей таблице описаны элементы на панели инструментов режима редактора изображений, которые перечислены в порядке их появления слева направо:

Зеленый канал

Синий канал

Шахматная доска
Использует зеленый цвет вместе с указанным цветом фона для отображения фона в виде шахматной доски. Вы можете использовать этот параметр, чтобы сделать прозрачные части изображения более заметными.

Белый фон
Использует белый цвет для отображения фона.

Черный фон
Использует черный цвет для отображения фона.

Фильтры

Предоставляет несколько распространенных фильтров изображений: Черно-белое, Размытие, Осветление, Затемнение, Обнаружение краев, Тиснение, Инверсия цветов, Пульсация, Тон сепии и Резкость.

Графические движки

Визуализация с помощью D3D11
Использует Direct3D 11 для визуализации поверхности конструктора редактора изображений.

Рендеринг с помощью D3D11WARP
Использует Direct3D 11 Windows Advanced Rasterization Platform (WARP) для рендеринга рабочей поверхности редактора изображений.

Инструменты

Отразить по горизонтали
Перемещает изображение вокруг его горизонтальной оси или оси x.

Отразить по вертикали
Перемещает изображение вокруг его вертикальной оси или оси Y.

Создать MIP
Создает уровни MIP для изображения. Если уровни MIP уже существуют, они воссоздаются из самого большого уровня MIP. Любые изменения, внесенные в меньшие уровни MIP, теряются. Чтобы сохранить созданные вами уровни MIP, вы должны использовать формат .dds для сохранения изображения.

Просмотр

Панель инструментов редактора изображений

Панель инструментов редактора изображений

В следующей таблице описаны элементы на панели инструментов редактора изображений, которые перечислены в порядке их появления сверху вниз:

Работа с уровнями MIP

Некоторые форматы изображений, например DirectDraw Surface (.dds), поддерживают уровни MIP для уровня детализации пространства текстур (LOD). Сведения о том, как создавать уровни MIP и работать с ними, см. в разделе Практическое руководство. Создание и изменение уровней MIP

Работа с прозрачностью

Некоторые форматы изображений, например DirectDraw Surface (.dds), поддерживают прозрачность. Существует несколько способов использования прозрачности в зависимости от используемого инструмента. Чтобы указать уровень прозрачности для выбора цвета, в окне "Свойства" задайте компонент A (альфа) выбора цвета.

В следующей таблице описано, как различные виды инструментов управляют применением прозрачности:

Свойства изображения

В окне "Свойства" можно указать различные свойства изображения. Например, вы можете установить свойства ширины и высоты, чтобы изменить размер изображения.

В следующей таблице описаны свойства изображения:

Свойство Описание
Ширина Ширина изображения.
Высота Высота изображения.
Бит на Пиксель Количество битов, представляющих каждый пиксель. Значение этого свойства зависит от цветового формата изображения.
Прозрачное выделение True, чтобы смешать слой выделения с основным изображением на основе на альфа-значении слоя выбора; в противном случае Ложь. Этот элемент доступен только для изображений, поддерживающих альфа-канал.
Format Цветовой формат изображения. Вы можете указать различные цветовые форматы, в зависимости от формата изображения. Цветовой формат определяет количество и тип цветовых каналов, включенных в изображение, а также размер и кодировку различных каналов.
Уровень Mip Активный уровень MIP. Этот элемент доступен только для текстур с уровнями MIP.
Количество уровней MIP Общее количество уровней MIP в изображении. Этот элемент доступен только для текстур с уровнями MIP.
Frame Count Общее количество кадров в изображении. Этот элемент доступен только для изображений, поддерживающих массивы текстур.
Frame Текущий кадр. Можно просмотреть только первый кадр; все остальные кадры теряются при сохранении изображения.
Количество срезов глубины Общее количество срезов глубины в изображении. Этот элемент доступен только для изображений, поддерживающих объемные текстуры.
Срез глубины Текущий срез глубины. Можно просмотреть только первый фрагмент; все остальные фрагменты теряются при сохранении изображения.

Изменить размер изображений

Есть два способа изменить размер изображения. В обоих случаях редактор изображений использует билинейную интерполяцию для передискретизации изображения.

В окне "Свойства" укажите новые значения свойств "Ширина" и "Высота".

Выделите все изображение и используйте маркеры границ, чтобы изменить размер изображения.

Выбранные регионы

Выборы в редакторе изображений определяют активные области изображения. На активные области влияют инструменты и преобразования. При активном выделении области за пределами выделенной области не затрагиваются большинством инструментов и преобразований. Если активного выделения нет, активно все изображение.

Большинство инструментов («Карандаш», «Кисть», «Аэрограф», «Заливка», «Ластик» и 2D-примитивы) и преобразований («Поворот», «Обрезка», «Инвертировать цвета», «Отразить по горизонтали» и «Отразить по вертикали») ограничиваются или определяются активным выделением. Однако на некоторые инструменты («Пипетка» и «Текст») и трансформации («Создать мипы») никакое активное выделение не влияет. Эти инструменты всегда ведут себя так, как будто все изображение является активным выделением.

Когда вы выбираете регион, вы можете нажать и удерживать клавишу Shift, чтобы сделать пропорциональный (квадратный) выбор. В противном случае выбор не ограничен.

Изменить размер выделения

После того, как вы выберете область, вы можете изменить ее размер или содержимое изображения, изменив размер маркера выбора. При изменении размера выбранной области вы можете использовать следующие клавиши-модификаторы, чтобы изменить поведение выбранной области при изменении ее размера:

Ctrl – копирует содержимое выделенной области перед изменением ее размера. При этом исходное изображение остается нетронутым при изменении размера копии.

Shift – изменяет размер выбранной области пропорционально исходному размеру.

Alt — изменяет размер области выделения. Это оставляет изображение без изменений.

В следующей таблице описаны допустимые комбинации клавиш-модификаторов:

< tbody>
Ctrl Shift Alt Описание
Изменяет размер содержимого выбранной области.
Shift Пропорционально изменяет размер содержимого выбранной области.
Alt Изменяет размер выбранной области. Это определяет новую область выбора.
Shift Alt Пропорционально изменяет размер выбранной области. Это определяет новую область выделения.
Ctrl Копирует и затем изменяет размер содержимого выбранной области.
Ctrl Shift Копирует и затем пропорционально изменяет размер содержимого выбранной области.

Свойства инструмента

Когда инструмент выбран, вы можете использовать окно "Свойства", чтобы указать сведения о том, как он влияет на изображение. Например, можно задать толщину инструмента "Карандаш" или цвет инструмента "Кисть".

Вы можете установить как цвет переднего плана, так и цвет фона. Оба поддерживают альфа-канал для обеспечения определяемой пользователем непрозрачности. Настройки применяются ко всем инструментам. Если вы используете мышь, левая кнопка мыши соответствует цвету переднего плана, а правая кнопка мыши соответствует цвету фона.

В следующей таблице описаны свойства инструмента:

Value
Текст, который нужно нарисовать.

Шрифт
Шрифт, используемый для рисования текста.

Размер
Размер текста.

Жирный
Делает шрифт жирным.

Курсив
Выделение шрифта курсивом.

Толщина
Определяет толщину линии, образующей границу примитива.

Радиус X
(только прямоугольник со скругленными углами) Определяет радиус скругления для верхнего и нижнего краев примитива.

Чтобы нарисовать по одному отрезку прямой линии, используйте инструмент "Линия".

Выберите инструмент "Линия" .

Вы не можете установить атрибуты заливки для инструмента «Линия».

Нажмите кнопку «Рисование объекта» в разделе «Параметры» панели «Инструменты», чтобы выбрать режим «Объединение» или «Рисование объекта». Когда кнопка "Рисование объекта" нажата, инструмент "Линия" находится в режиме "Рисование объекта".

Поместите указатель в точку, где должна начинаться линия, и перетащите ее туда, где она должна заканчиваться. Чтобы ограничить угол линии кратным 45°, перетащите его, удерживая нажатой клавишу SHIFT.

Инструменты «Овал» и «Прямоугольник» позволяют создавать эти основные геометрические фигуры, а также применять обводки, заливки и указывать закругленные углы. Помимо режимов рисования «Объединение» и «Объект», инструменты «Овал» и «Прямоугольник» также предоставляют режим рисования «Примитивный объект».

При создании прямоугольников или овалов с помощью инструментов Прямоугольный примитив или Овальный примитив Animate рисует фигуры как отдельные объекты.Эти фигуры отличаются от форм, которые вы создаете в режиме рисования объектов. Инструменты примитивной формы позволяют указать угловой радиус прямоугольников с помощью элементов управления в инспекторе свойств. А также начальный и конечный угол, и внутренний радиус овалов. После создания примитивной формы измените радиус и размеры, выбрав фигуру в рабочей области и настроив элементы управления в инспекторе свойств.

При выборе любого из инструментов рисования объекта-примитива инспектор свойств сохраняет значения последнего редактируемого объекта-примитива. Например, если вы изменили прямоугольник, а затем нарисовали второй прямоугольник.

Чтобы рисовать из центра рабочей области, удерживайте клавишу Alt при рисовании фигуры.

Нарисовать примитивы прямоугольника

Чтобы выбрать инструмент "Прямоугольник-примитив", нажмите и удерживайте кнопку мыши на инструменте "Прямоугольник" и выберите инструмент "Прямоугольник-примитив" во всплывающем меню.

Чтобы изменить радиус угла при перетаскивании примитивным инструментом «Прямоугольник», нажмите клавишу со стрелкой вверх или клавишу со стрелкой вниз. Когда углы достигнут желаемой округлости, отпустите клавишу.

Выбрав прямоугольный примитив, вы можете использовать элементы управления в инспекторе свойств для дальнейшего изменения формы или указания цветов заливки и обводки.


Свойства прямоугольного примитива.

Эти элементы управления инспектора свойств относятся к инструменту "Прямоугольный примитив":

Элементы управления радиусом углов прямоугольника Позволяет указать радиусы углов прямоугольника. Вы можете ввести числовое значение внутреннего радиуса в каждое текстовое поле. Ввод отрицательного значения создает обратный радиус. Вы также можете отменить выбор значка ограничения радиуса угла и настроить каждый радиус угла отдельно.

Сброс Сбрасывает все элементы управления инструмента «Прямоугольный примитив» и восстанавливает форму прямоугольного примитива, нарисованную в рабочей области, до исходного размера и формы.

Чтобы указать разные радиусы углов для каждого угла, снимите флажок со значка блокировки в области «Параметры прямоугольника» инспектора свойств. При блокировке элементы управления радиусом ограничены, так что каждый угол использует один и тот же радиус.

Нарисовать овальные примитивы

Нажмите и удерживайте кнопку мыши на инструменте "Овал" и выберите инструмент "Овальный примитив" .

Чтобы создать овальный примитив, перетащите инструмент «Овальный примитив» в рабочую область. Чтобы превратить фигуру в круг, перетащите ее, удерживая нажатой клавишу SHIFT.

Выбрав в рабочей области овальный примитив, вы можете использовать элементы управления в инспекторе свойств для дальнейшего изменения формы или указания цветов заливки и обводки.


Свойства овального примитива.

Эти элементы управления Инспектора свойств относятся к инструменту «Овальный примитив»:

Начальный угол/Конечный угол Угол между начальной и конечной точками овала. Используя эти элементы управления, вы можете легко изменять форму овалов и кругов, превращая их в секторы, полукруги и другие творческие формы.

Внутренний радиус Внутренний радиус (или овал) внутри овала. Вы можете либо ввести числовое значение внутреннего радиуса в поле, либо щелкнуть ползунок и в интерактивном режиме отрегулировать размер внутреннего радиуса. Вы можете ввести значения от 0 до 99, представляющие процент удаленной заливки.

Close Path Определяет, замкнут ли путь (или пути, если вы указываете внутренний радиус) овала. Если вы укажете открытый путь, к полученной фигуре не будет применена заливка, будет нарисована только обводка. Закрыть путь выбран по умолчанию.

Сбросить Сбрасывает все элементы управления инструмента «Овальный примитив» и восстанавливает первоначальный размер и форму овального примитива, нарисованного в рабочей области.

Рисовать овалы и прямоугольники

Инструменты "Овал" и "Прямоугольник" создают эти основные геометрические фигуры.

Чтобы выбрать инструмент "Прямоугольник" или "Овал" , нажмите и удерживайте кнопку мыши на инструменте "Прямоугольник" или "Овал" и перетащите его.

Для инструмента «Прямоугольник» задайте закругленные углы, щелкнув модификатор «Прямоугольник скругления» и введя значение радиуса угла. Нулевое значение (0) создает прямые углы.

Перетащите на сцену. Если вы используете инструмент «Прямоугольник», нажимайте клавиши со стрелками вверх и вниз во время перетаскивания, чтобы настроить радиус скругления углов.

Для инструментов "Овал" и "Прямоугольник" перетащите их, удерживая нажатой клавишу "Shift", чтобы превратить фигуры в круги и квадраты.

Чтобы задать определенный размер овала или прямоугольника, выберите инструмент «Овал» или «Прямоугольник» и нажмите клавишу «Alt» (Windows) или «Option» (Macintosh). Затем щелкните рабочую область, чтобы открыть диалоговое окно «Параметры овала и прямоугольника».

Для овалов укажите ширину и высоту в пикселях, а также укажите, следует ли рисовать овал из центра.

Для прямоугольников укажите ширину и высоту в пикселях, радиус закругленных углов и необходимость рисования прямоугольника из центра.

Создать анимированного персонажа с помощью Animate очень просто. Хотите нарисовать классных персонажей, используя прямоугольники и овалы? Посмотрите руководство в конце этого примера и выполните следующие действия.


Нажмите и удерживайте кнопку мыши на инструменте "Прямоугольник".

Выберите примитив прямоугольника.

В параметрах прямоугольника перетащите ползунок, чтобы изменить угловой радиус объекта.

Выберите инструмент «Овал» .

Нажмите кнопку "Рисование объекта" .

Как нарисовать простого персонажа с помощью Adobe Animate

Выберите инструмент PolyStar, нажав и удерживая кнопку мыши на инструменте «Прямоугольник» и выбрав его в появившемся всплывающем меню.

  • В поле "Число сторон" введите число от 3 до 32.
  • В поле «Размер точки звезды» введите число от 0 до 1, чтобы указать глубину точек звезды. Число, близкое к 0, создает более глубокие точки (например, иглы). Если вы рисуете многоугольник, оставьте этот параметр без изменений. (Это не влияет на форму многоугольника.)

При выборе и рисовании объектов режим рисования объектов показывает тонкий контур вдоль областей формы в соответствии с цветом слоя. Маленькие кружки обозначают опорные точки и не являются интерактивными или редактируемыми с помощью инструмента выделения. При рисовании в объектном режиме штрихи и фигуры больше не выбираются по умолчанию.


Контуры вокруг фигуры

Чтобы рисовать линии и фигуры, используйте инструмент "Карандаш" почти так же, как вы рисуете настоящим карандашом. Чтобы применить сглаживание или выпрямление к линиям и фигурам во время рисования, выберите режим рисования для инструмента "Карандаш".

Выберите инструмент "Карандаш" .

Выберите режим рисования в разделе «Параметры» на панели «Инструменты»:

  • Чтобы рисовать прямые линии и преобразовывать треугольники, овалы, круги, прямоугольники и квадраты в эти распространенные геометрические фигуры, выберите "Выпрямить" .

  • Чтобы рисовать линии от руки без каких-либо изменений, выберите Чернила .


Линии, нарисованные в режимах «Выпрямление», «Сглаживание» и «Руководства» соответственно.

Чтобы рисовать с помощью инструмента "Карандаш", перетащите, удерживая нажатой клавишу "Shift", чтобы ограничить линии вертикальным или горизонтальным направлением, щелкните рабочую область и перетащите.

Инструмент "Кисть" рисует мазки, похожие на кисти. Он создает специальные эффекты, в том числе каллиграфические эффекты. Выберите размер и форму кисти с помощью модификаторов инструмента «Кисть».

Animate масштабирует размер кисти пропорционально изменению масштаба сцены. Это позволяет вам рисовать, плавно настраиваясь на любой уровень масштабирования, и просматривать свою работу во время рисования. Если вы хотите вернуться к более раннему поведению кистей по умолчанию, поддерживающему постоянный размер пикселя даже при изменении уровня масштабирования рабочей области, необходимо снять флажок «Уровень масштабирования рабочей области» в инспекторе свойств кисти.

Если вы отключите флажок Уровень масштабирования рабочей области, размер кисти для новых мазков останется постоянным, даже если вы измените уровень увеличения рабочей области. Таким образом, один и тот же размер кисти кажется больше, когда увеличение рабочей области меньше. Например, предположим, что вы установили увеличение рабочей области на 100 % и рисуете с помощью инструмента «Кисть», используя кисть наименьшего размера. Затем вы меняете увеличение на 50% и снова рисуете, используя кисть наименьшего размера. Новый мазок, который вы рисуете, выглядит на 50 % толще, однороднее и точнее, без каких-либо не сужающихся концов, чем предыдущий мазок и (изменение масштаба рабочей области не меняет размер существующих мазков кистью.)

Используйте импортированное растровое изображение в качестве заливки при рисовании с помощью инструмента "Кисть".

Если к вашему компьютеру подключен чувствительный к давлению планшет Wacom, изменяйте ширину и угол мазка кисти. Этого можно добиться, используя модификаторы давления и наклона инструмента «Кисть» и меняя давление на стилус.

Модификатор давления изменяет ширину мазков кисти при изменении давления на стилус. Модификатор наклона изменяет угол мазков кисти, когда вы меняете угол наклона стилуса на планшете.Модификатор наклона измеряет угол между верхним (ластик) концом стилуса и верхним (северным) краем планшета. Например, если вы держите перо вертикально напротив планшета, наклон равен 90. Модификаторы давления и наклона полностью поддерживаются для функции ластика стилуса.

На планшете параметры «Наклон» и «Нажим» для инструмента «Кисть» работают только при использовании режима «Перо». Режим мыши не включает эти параметры.


Мазок кисти переменной ширины, нарисованный стилусом.

ROOT предоставляет мощные графические возможности для отображения и взаимодействия с графическими объектами, такими как графики, гистограммы, 2D- и 3D-графические объекты и т. д. Здесь представлены основные функции и принципы, которые можно применять к графикам (→ см. Графики) и гистограммам. (→ см. Гистограммы).

Основная доска, на которой рисуется объект, называется в ROOT холстом (класс TCanvas). Холст — это область, привязанная к окну, непосредственно находящаяся под управлением диспетчера отображения.

Холст содержит одну или несколько независимых графических областей: пэды (класс TPad ). Пэд — это графический объект, содержащий графические объекты. Пэд может содержать другие пэды (неограниченная иерархия пэдов). Блокнот — это связанный список примитивов любого типа (графики, гистограммы, фигуры, треки и т. д.).

Добавление элемента на панель выполняется методом Draw() каждого класса.

Закрашивание площадки выполняется автоматическим вызовом метода Paint() каждого объекта в списке примитивов.

Графические классы

ROOT предоставляет множество графических классов, наиболее часто используемыми из которых являются следующие:

Работа с графикой

ROOT предлагает множество возможностей для работы с графикой, например:

Рисование объектов

Большинство классов ROOT имеют метод Draw(), с помощью которого их можно «рисовать» на холсте (класс TCanvas), содержащем одну или несколько контактных площадок (класс TPad). Когда объект нарисован, вы можете взаимодействовать с ним.

Пример

Должна быть нарисована одномерная синусоидальная функция.

Используйте класс TF1 для создания объекта, представляющего собой одномерную функцию, определенную между нижним и верхним пределом.

Функция отображается на холсте.

Использование контекстного меню для управления объектами

Щелкните правой кнопкой мыши функцию, чтобы отобразить контекстное меню.

Здесь вы можете изменить многие свойства объекта, такие как заголовок, имя, диапазон, атрибуты строки и заливки и т. д. Например, вы можете изменить диапазон, нажав SetRange .

Выберите диапазон, например 5, 25.

Использование графического редактора для объектов

Вы можете редактировать существующий объект на холсте, щелкнув объект правой кнопкой мыши или используя графический редактор.

Вы можете рисовать и редактировать основные примитивы, начиная с пустого холста или поверх изображения. Имеется панель инструментов, которую можно использовать для рисования объектов.

Графические объекты

В этом разделе перечислены некоторые графические объекты, предоставляемые ROOT. Обычно эти графические объекты определяются с помощью их конструктора и рисуются с помощью их метода Draw():

  • Линии. Используйте TLine для создания линии.
  • Стрелки. Используйте TArrow, чтобы создать стрелку.
  • Полилинии. Используйте TPolyLine для создания ломаной линии.
  • Эллипсы: используйте TEllipse, чтобы создать эллипс.
  • Прямоугольники. Используйте TBox или TWBox, чтобы создать прямоугольник.
  • Маркеры. Используйте TMarker для создания маркера.
  • Изогнутые линии и дуги. Используйте TCurlyLine и TCurlyArc для создания фигурных линий и дуг для диаграмм Фейнмана.
  • Текст и латекс. Используйте TText для рисования простого текста. TLatex для сложного текста, такого как математические формулы. Текст можно встроить в блок с помощью TPaveLabel, TPaveText и TPavesText.
  • и ещё…

Цвета и цветовые палитры

Цвета управляются классом TColor . Цвет определяется его компонентами RGB или HLS. Доступ к нему можно получить через индекс или по имени предопределенных цветов. Цвета можно группировать в палитры. Предустановлено более 60 высококачественных палитр. Цвет также может быть прозрачным.

Атрибуты и стили графических объектов

Существуют следующие классы для изменения атрибутов графических объектов:

TAttFill: используется для заливки области цветом и стилем.

TAttLine: используется для установки цвета, ширины и стиля линии.

TAttMarker: используется для установки цвета, размера и стиля маркера.

TAttText: используется для настройки атрибутов текста, таких как выравнивание, угол, цвет, размер и шрифт.

Создание и изменение стиля

При создании объектов их атрибуты по умолчанию (взятые из TAttFill, TAttLine, TAttMarker, TAttText) берутся из текущего стиля.Текущий стиль является объектом класса TStyle, и на него можно ссылаться через глобальную переменную gStyle (→ см. классы ROOT, типы данных и глобальные переменные).

ROOT предоставляет несколько предустановленных стилей. Среди них: Classic , Plain или Modern (используется при запуске ROOT).

Настройка текущего стиля

  • Используйте метод SetStyle(), чтобы установить текущий стиль.

Вы можете получить указатель на существующий стиль с помощью:

Примечание

При создании объекта его атрибуты берутся из текущего стиля. Например, вы могли создать гистограмму в предыдущем сеансе и сохранить ее в файле ROOT. Между тем, если вы изменили стиль, гистограмма будет построена со старыми атрибутами. Вы можете принудительно установить атрибуты текущего стиля при чтении объекта из файла с помощью:

gROOT->ForceStyle();

Создание дополнительных стилей

  • Используйте конструктор TStyle для создания дополнительных стилей.

Получение атрибутов текущего стиля

Вы можете заставить объекты (на холсте или подложке) получить атрибуты текущего стиля.

Оси автоматически встраиваются в различные объекты высокого уровня, такие как гистограммы или графики.

TAxis управляет осью и на него ссылаются TH1 и TGraph . Чтобы сделать графическое представление оси гистограммы, TAxis ссылается на класс TGaxis.

  • Используйте методы GetXaxis() , GetYaxis() или GetZaxis(), чтобы получить ось для гистограммы или графика.

Пример

Установка заголовка оси

  • Используйте метод SetTitle(), чтобы задать заголовок оси.

Пример

Если ось встроена в гистограмму или график, сначала необходимо извлечь объект оси.

Пример

Настройка атрибутов оси

Графические атрибуты оси управляются через класс TAttAxis .

Пример

Установка количества делений

  • Используйте метод SetNdivisions, чтобы задать количество делений для оси.

Пример

Настройка ярлыков

SetMaxDigits() устанавливает максимальное количество цифр, разрешенных для меток осей, выше которых используется нотация с $10^N$.

Ярлыки также можно настраивать индивидуально благодаря ChangeLabel().

Установка диапазона оси

Параметры метода SetRange() — это номера интервалов. Например, если гистограмма отображает значения от 0 до 500 и имеет 100 интервалов, SetRange(0,10) будет охватывать значения от 0 до 50.

Параметры метода SetRangeUser() — это пользовательские координаты. Если начало или конец находятся в середине ячейки, результирующий диапазон является приблизительным. Он находит ячейку нижнего края для начала и ячейку верхнего края для верхнего.

Общее описание см. в разделе часто задаваемых вопросов «Как установить диапазоны по оси».

Установка единиц времени для оси

Ось может быть помечена временем и датой. Такие оси называются «осью времени». Подробное описание приведено на справочной странице TGaxis.

Управлять такой осью можно в основном тремя способами:

  1. SetTimeDisplay(), чтобы установить ось в качестве оси времени.
  2. SetTimeFormat() для определения формата, используемого для отображения времени.
  3. SetTimeOffset() для изменения смещения времени.

Пример

Отображение оси независимо от графика или гистограммы

Это может быть полезно, если вы хотите нарисовать дополнительную ось для графика.

Легенды

На сюжете почти всегда присутствует легенда. ROOT предоставляет простой в использовании инструмент, обеспечивающий прямую связь между нарисованной легендой и объектами с легендой. Поэтому при изменении одного из атрибутов объекта автоматически изменяется и легенда.

TLegend – это панель с несколькими элементами (класс TLegendEntry).

Метод BuildLegend автоматически создает TLegend со всеми объектами, присутствующими в TPad.

Холст и подложка

Холст ( TCanvas ) – это графический объект, содержащий графические объекты, которые называются контактными площадками ( TPad ). Панель — это графический контейнер, содержащий другие графические объекты, такие как гистограммы и стрелки. Он также может содержать другие пэды, называемые суб-пэдами. Когда объект рисуется, он всегда находится в так называемой активной панели.

Доступ к активной панели

  • Используйте глобальную переменную gPad для доступа к активной панели.

Дополнительную информацию о глобальных переменных см. в разделе КОРНЕВЫЕ классы, типы данных и глобальные переменные.

Пример

Если вы хотите изменить цвет заливки активной панели на синий, но не знаете название активной панели, вы можете использовать gPad .

Доступ к объекту в активной панели

  • Используйте метод TPad::GetPrimitive(const char* name) для доступа к объекту в активной панели.

Пример

Указатель на объект myobjectname возвращается и помещается в переменную obj.
Тип возвращаемого указателя — TObject* с именем.

Скрытие объекта в блокноте

Вы можете скрыть объект в блокноте, удалив его из списка объектов, принадлежащих этому блокноту.

Используйте метод TPad::GetListOfPrimitives() для получения списка доступных объектов панели.

Используйте метод Remove(), чтобы удалить объект из списка.

Пример

Во-первых, необходим указатель на объект.
Во-вторых, необходим указатель на список объектов, принадлежащих блокноту.
Потом можно удалить объект из списка, т.е. площадку.
Объект исчезает, как только панель обновляется.

Обновление пэда

Из соображений производительности пэд не обновляется при каждом изменении. Вместо этого пэд имеет «битовую модификацию», которая запускает перерисовку.
Битовая модификация устанавливается автоматически:

касание коврика мышью, например изменение его размера с помощью мыши,

завершение выполнения скрипта,

добавление или изменение примитивов, например имени и заголовка объекта.

Вы можете установить «битовое изменение» с помощью метода Modified().

Пример

Последующий вызов TCanvas::Update() просматривает список вложенных площадок и перерисовывает их.

Разделение пэда на подпэды

Чтобы нарисовать несколько объектов на холсте ( TCanvas ), вы можете использовать его во вложенных площадках ( TPad ).
Есть два способа разделить блокнот на подблоки:

Создание отдельной дополнительной площадки

Чтобы создать дополнительные площадки в блокноте, необходимо указать размер и положение дополнительных площадок.

Пример

Дополнительная панель должна быть встроена в активную панель (указана gPad ). Во-первых, вспомогательная площадка создается с помощью конструктора TPad.

Координаты NDC (нормализованная система координат) указаны для нижней левой точки (0,1, 0,1) и для верхней правой точки (0,5, 0,5) .
Затем рисуется вспомогательная панель.

Для создания дополнительных площадок повторите эту процедуру необходимое количество раз.

Разделение пэда на подпэды

  • Используйте метод TPad::Divide(), чтобы разделить блокнот на вложенные блоки.

Системы координат площадки

Для TPad доступны следующие системы координат:

Вы можете преобразовать одну систему координат в другую.

Пользовательская система координат

Большинство методов TPad используют пользовательскую систему координат, и все графические примитивы имеют свои параметры, определенные в терминах пользовательских координат. По умолчанию, когда рисуется пустая площадка, пользовательские координаты устанавливаются в диапазоне от 0 до 1, начиная с левого нижнего угла.

  • Используйте метод TPad::range(float x1,float y1,float x2,float y2), чтобы задать пользовательскую систему координат.
    Аргументы x1 и x2 определяют новый диапазон в направлении x, а y1 и y2 определяют новый диапазон в направлении y.

Пример

Обе координаты изменяются от -100 до 100 с центром площадки в (0,0).

Нормализованная система координат (NDC)

Нормализованные координаты не зависят от размера окна и пользовательской системы. Координаты находятся в диапазоне от 0 до 1, а (0, 0) соответствуют нижнему левому углу площадки.

Пиксельная система координат

Система координат в пикселях используется такими функциями, как DistanceToPrimitive() и ExecuteEvent() . Его основное использование для позиции курсора, которая всегда задается в координатах пикселей. Если ( px , py ) является позицией курсора, px=0 и py=0 соответствуют верхнему левому углу панели, что является стандартным соглашением в оконных системах.

Конвертация между системами координат

TPad предоставляет несколько методов для преобразования одной системы координат в другую.

В следующей таблице точка определяется:

  • (px,py) в пиксельных координатах,
  • (ux,uy) в пользовательских координатах,
  • (ndcx,ndcy) в нормализованных координатах,
  • (apx, apy) в абсолютных координатах пикселей.

Примечание

Все функции преобразования пикселей по оси Y считают, что py=0 находится в верхней части контактной площадки, кроме PixeltoY() , которая предполагает, что позиция py=0 находится в нижняя часть подушки. Чтобы PixeltoY() преобразовывала так же, как и другие функции преобразования, ее следует использовать следующим образом (p — указатель на TPad):

Настройка масштаба журнала

Выбор логарифмической или линейной шкалы — это атрибут площадки, потому что вам может понадобиться построить одну и ту же гистограмму в линейном масштабе в одной панели и в логарифмическом масштабе — в другой. Настройка масштаба журнала не распространяется на дополнительные панели.

TPad определяет логарифмическую шкалу для трех направлений x , y и z .

Пример

Копирование холста

  • Используйте метод TCanvas::DrawClonePad, чтобы создать копию холста.

Вы также можете использовать метод TObject:DrawClone(), чтобы нарисовать клон этого объекта в текущей выбранной площадке.

Печать холста

После создания холста и отображения графиков, готовых для включения в публикацию в виде изображения .jpg или .pdf, можно использовать метод Print(). Предоставляются все стандартные выходные форматы.

Пример

Отрисовка объектов со специальными символами в имени

Тем не менее, некоторые объекты могут быть названы таким образом и сохранены в ROOT-файле. Следующий макрос показывает, как получить доступ к такому объекту в корневом файле.

3D-графика

Предоставляются инструменты 3D-графики для «Event Display», «Basic 3D» и рендеринга OPen GL.

Читайте также: