PureBasic


PureBasic - VectorDrawing (Векторная Графика)

Обзор

Библиотека VectorDrawing (Векторная Графика) обеспечивает независимые от разрешения операции высококачественного рисования, которые можно применять для отображения графики на экране, обработки изображений или в печати. В отличие от библиотеки 2DDrawing, функции в этой библиотеке могут работать в различных единицах измерения и допускают произвольные преобразования координат. Это облегчает создание программ связанных с графикой, поскольку они не будут зависеть от текущего разрешения выходного устройства (поверхности) и смогут автоматически масштабироваться до разных размеров. Кроме того, библиотека VectorDrawing поддерживает альфа-прозрачность во всех своих операциях.

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

Создание векторных рисунков в этой библиотеке включает в себя три основных этапа:

1) Построение Векторного контура из сегментов, с помощью таких функций, как AddPathLine(), AddPathCurve(), и т.д.
2) Выбор так называемого источника рисования, который будет использоваться для обводки или заливки готового Векторного контура. В качестве источника может быть использован однотонный цвет, цветовой градиент, изображение и тд., он задаётся с помощью таких функций, как VectorSourceColor(), VectorSourceImage(), и т.д.
3) Обводка Векторного контура (используя ранее выбранный источник) Сплошной линией, либо Точечным, Штриховым или Шаблонным пунктиром, либо заполнение его внутренних областей Заливкой.

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

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

В описании функции AddPathLine(), есть простой пример, где можно видеть все шаги создания векторного рисунка.

Единицы измерения

Каждое устройство (поверхность) вывода Векторной графики имеет единицу измерения по умолчанию. Единицей измерения по умолчанию для Экрана и Растровых изображений (bmp, jpg, gif, png и т.д.) является пиксель, а для Принтера и Векторного изображения - точка. Тем не менее, при создании устройства (поверхности) вывода с помощью ImageVectorOutput(), PrinterVectorOutput() и других подобных функций, можно выбрать другую единицу измерения. Все операции рисования будут использовать выбранную единицу измерения и автоматически преобразовать используемые значения в фактические координаты устройства. Это позволяет писать код для прорисовки в желаемых единицах измерения, независимо от используемого устройства (поверхности) вывода графики. Используемую единицу измерения для устройства (поверхности) вывода графики, можно проверить с помощью функции VectorUnit().

Преобразование координат

Систему координат используемую для рисования можно Смещать, Масштабировать, Вращать, Зеркально отразить или Скосить, а так же свободно комбинировать эти действия. Эти преобразования влияют на все последующие операции рисования.

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

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

#PB_Coordinate_Device
Эта система координат представляет физические координаты устройства (поверхности) вывода. Она не может быть преобразована. Эта система координат полезна при преобразовании координат с помощью функций ConvertCoordinateX() и ConvertCoordinateY() между устройством (поверхностью) вывода и фактической системой координат используемой для точек Векторного контура.
#PB_Coordinate_Output
Эта система координат представляет исходные координаты устройства (поверхности) вывода в выбранных единицах измерения. Эта система координат идентична системе #PB_Coordinate_Device, за исключением возможного масштабирования с помощью выбора других единиц измерения (при вызове функций на подобии CanvasVectorOutput()). Эта система координат не может быть преобразована.
#PB_Coordinate_User
Это система координат, используется для всех операций рисования. Она используется всегда, если явно не указана другая система координат. Её можно свободно трансформировать. Изначально эта система координат идентична системе #PB_Coordinate_Output, и после преобразований может быть сброшена обратно к изначальному варианту, с помощью команды ResetCoordinates().
#PB_Coordinate_Source
Эта система координат для источника рисования и используется командами, которые выбирают источник рисования для Векторной графики. Самое полезное её применение - это возможность различных преобразований изображения, которое используется в качестве источника командой VectorSourceImage(). Эта система координат преобразуется относительно системы #PB_Coordinate_User, таким образом, любое преобразование системы #PB_Coordinate_User так же будет влиять и на эту систему.
Для большинства целей система #PB_Coordinate_User является наиболее удобной системой координат и поэтому является значением по умолчанию. Другие системы полезны главным образом для преобразования координат или для специальных целей, таких как преобразование исходного изображения.

Пример: Вращение системы координат

Пример: Объединение координатных преобразований (Смещение & Скос)

Слои и Состояния свойств Векторной графики

Некоторые текущие свойства Векторной графики, такие как Преобразования координат, Область отсечения или Источник рисования могут быть сохранены и впоследствии восстановлены с помощью функций SaveVectorState() и RestoreVectorState() соответственно. Это позволяет вносить временные изменения в условия создания рисунка и затем восстанавливать предыдущее состояние. Эти команды работают в стеке, поэтому можно сохранить / восстановить несколько состояний свойств Векторной графики.

Функция BeginVectorLayer() позволяет сохранить текущее состояние свойств Векторной графики и создает новый виртуальный слой (уровень) поверх рисунка. Последующие операции рисования выполняться на этом слое. Вызов функции EndVectorLayer() объединит содержимое этого слоя с находящимся ниже слоем (или самим рисунком, если другого слоя нет) и восстановит предыдущее состояние свойств Векторной графики. Это позволяет объединить несколько операций рисования, чтобы отобразить их на поверхность вывода графики в виде слоя. Таким образом можно создать несколько временных слоев.

Список команд

AddPathArc
AddPathBox
AddPathCircle
AddPathCurve
AddPathEllipse
AddPathLine
AddPathSegments
AddPathText
BeginVectorLayer
ClipPath
ClosePath
ConvertCoordinateX
ConvertCoordinateY
CustomDashPath
DashPath
DotPath
DrawVectorImage
DrawVectorParagraph
DrawVectorText
EndVectorLayer
FillPath
FillVectorOutput
FlipCoordinatesX
FlipCoordinatesY
IsInsidePath
IsInsideStroke
IsPathEmpty
MovePathCursor
NewVectorPage
PathBoundsHeight
PathBoundsWidth
PathBoundsX
PathBoundsY
PathCursorX
PathCursorY
PathLength
PathPointAngle
PathPointX
PathPointY
PathSegments
PdfVectorOutput
ResetCoordinates
ResetPath
RestoreVectorState
RotateCoordinates
SaveVectorState
ScaleCoordinates
SkewCoordinates
StartVectorDrawing
StopVectorDrawing
StrokePath
SvgVectorOutput
TranslateCoordinates
VectorFont
VectorOutputHeight
VectorOutputWidth
VectorParagraphHeight
VectorResolutionX
VectorResolutionY
VectorSourceCircularGradient
VectorSourceColor
VectorSourceGradientColor
VectorSourceImage
VectorSourceLinearGradient
VectorTextHeight
VectorTextWidth
VectorUnit

Поддерживаемые OS

Все

Справочное руководство - оглавление