FS_MATRIX из PDFium для составления преобразований пользовательского пространства PDFtype TPdfMatrix = class ... end;
| Type | Description |
|---|---|
TPdfPointArray | Динамический массив значений FS_POINTF для групповых операций над точками |
TPdfRectArray | Динамический массив значений FS_RECTF для групповых операций над прямоугольниками |
TPdfMatrixFitMode | Политика вписывания pmfStretch, pmfContain или pmfCover для отображения прямоугольников |
TPdfMatrixDecomposition | Смещение, знаковый масштаб, вращение по часовой стрелке, сдвиг (shear), определитель и признаки отражения, которые TryDecompose возвращает в полях TranslationX, TranslationY, ScaleX, ScaleY, RotationDegrees, ShearDegrees, Determinant и IsReflected |
| Member | Description |
|---|---|
Create | Создаёт единичную матрицу, матрицу из шести значений или защитную копию из FS_MATRIX |
NewTranslation | Создаёт новую матрицу переноса |
NewScale | Создаёт новую матрицу неравномерного масштабирования |
NewRotation | Создаёт матрицу вращения по или против часовой стрелки в градусах или радианах |
NewSkew | Создаёт матрицу с отдельными углами сдвига по X и Y |
NewRectMapping | Создаёт матрицу, которая растягивает, вписывает или покрывает исходный прямоугольник внутри целевого |
TryCreateRectMapping | Возвращает отображение FS_MATRIX и отклоняет входы нулевого размера, не-конечные или переполняющие, не выделяя объект |
Reset | Сбрасывает матрицу к единичной |
SetElements | Заменяет все шесть элементов матрицы одним вызовом |
Assign | Копирует в экземпляр другую TPdfMatrix или сырую FS_MATRIX |
Clone | Создаёт независимую копию объекта |
Determinant | Возвращает определитель линейной части 2 на 2 |
IsFinite | Сообщает, является ли каждый элемент конечным значением Single |
IsIdentity | Проверяет единичность с выбираемой вызывающим допуском |
IsInvertible | Проверяет конечность и обратимость с учётом масштаба, не вычисляя обратную матрицу |
IsTranslationOnly | Проверяет, является ли линейная часть единичной |
IsAxisAligned | Проверяет, остаются ли прямоугольники выровненными по осям, включая повороты на четверть в пределах допуска |
NearlyEquals | Сравнивает с TPdfMatrix или FS_MATRIX с заданным допуском |
GetTranslation | Читает элементы переноса X и Y вместе |
SetTranslation | Заменяет перенос X и Y, сохраняя линейную часть |
ClearTranslation | Обнуляет оба элемента переноса |
TryDecompose | Извлекает перенос, знаковый масштаб, вращение по часовой стрелке, сдвиг, определитель и состояние отражения, когда матрица не вырождена |
Multiply | Домножает справа на другую TPdfMatrix или явные значения a через f |
PreMultiply | Домножает слева на другую TPdfMatrix или явную матрицу из шести значений |
PreTranslate | Добавляет перенос в начало, в локальном входном пространстве матрицы |
PreScale | Добавляет в начало отдельные коэффициенты масштаба по X и Y |
PreRotate | Добавляет в начало вращение по или против часовой стрелки |
PreSkew | Добавляет в начало отдельные углы сдвига по X и Y |
Translate | Добавляет в конец перенос на deltaX и deltaY |
Scale | Добавляет в конец отдельные коэффициенты масштаба по X и Y |
Rotate | Добавляет в конец вращение по или против часовой стрелки в градусах или радианах |
HorizontalFlip | Добавляет в конец отражение по оси X |
VerticalFlip | Добавляет в конец отражение по оси Y |
CentralFlip | Добавляет в конец оба отражения, что равно повороту на 180 градусов без тригонометрии |
Skew | Добавляет в конец отдельные углы сдвига по X и Y |
RotateAt | Добавляет в конец вращение вокруг неподвижной опорной точки |
ScaleAt | Добавляет в конец масштабирование вокруг неподвижной опорной точки |
SkewAt | Добавляет в конец сдвиг вокруг неподвижной опорной точки |
HorizontalFlipAt | Добавляет в конец горизонтальное отражение вокруг выбранной вызывающим координаты X |
VerticalFlipAt | Добавляет в конец вертикальное отражение вокруг выбранной вызывающим координаты Y |
CentralFlipAt | Добавляет в конец оба отражения вокруг выбранной вызывающим опорной точки |
MapRectToRect | Добавляет в конец отображение stretch, contain или cover между нормализованными прямоугольниками |
Invert | Заменяет матрицу обратной или возбуждает EPdfMatrixError, когда она вырождена |
TryInvert | Заменяет матрицу обратной и возвращает False без изменений, когда она вырождена или почти вырождена |
TryGetInverse | Вычисляет обратную FS_MATRIX, не изменяя этот экземпляр |
InverseCopy | Создаёт независимую обратную матрицу или возбуждает EPdfMatrixError при вырождении |
TransformPoint | Преобразует координату аффинным преобразованием в соглашении строк-векторов PDF |
TransformVector | Преобразует направление только линейной частью, игнорируя перенос |
TryInverseTransformPoint | Преобразует точку обратным преобразованием без выделения матрицы и сообщает вырожденное преобразование как False |
InverseTransformPoint | Преобразует точку обратным преобразованием или возбуждает EPdfMatrixError при вырождении |
TransformQuad | Преобразует все четыре точки значения FS_QUADPOINTSF |
TransformPoints | Преобразует массив точек с одним выделением результата |
TransformPointsInPlace | Преобразует массив точек в хранилище вызывающего, не выделяя ещё один массив |
TryTransformBounds | Накапливает границы преобразованных точек за один проход и возвращает False для пустого входа |
TransformBounds | Накапливает границы преобразованных точек за один проход или возбуждает EPdfMatrixError для пустого входа |
TransformRect | Нормализует и преобразует прямоугольник через точный быстрый путь для выравненных по осям случаев или плотные границы по четырём углам |
TransformRects | Преобразует массив прямоугольников с одним выделением результата |
TransformRectsInPlace | Преобразует массив прямоугольников в хранилище вызывающего, не выделяя ещё один массив |
| Property | Type | Description |
|---|---|---|
a | Single | Первый элемент матрицы, только чтение |
b | Single | Второй элемент матрицы, только чтение |
c | Single | Третий элемент матрицы, только чтение |
d | Single | Четвёртый элемент матрицы, только чтение |
e | Single | Элемент переноса X, только чтение |
f | Single | Элемент переноса Y, только чтение |
Handle | FS_MATRIX | Сырое значение матрицы для API PDFium, принимающих FS_MATRIX или PFS_MATRIX |
TPdfMatrix использует аффинную раскладку PDF a b c d e f и домножает каждую операцию справа, поэтому вызовы читаются в том же порядке, в каком преобразования применяются к точкам
PreMultiply и помощники Pre* добавляют операции до текущего преобразования, а помощники с опорной точкой добавляют последовательности перенос-операция-перенос, которые оставляют выбранную точку неподвижной
pmfContain сохраняет весь исходный прямоугольник с центрированным неиспользованным пространством, pmfCover заполняет целевой прямоугольник с центрированным переполнением, а pmfStretch допускает независимое масштабирование по X и Y
Групповые методы для точек и прямоугольников выделяют один выходной массив, их in-place варианты не выделяют ничего, а TryTransformBounds просматривает преобразованные точки без построения промежуточного массива
Используйте Handle с такими API, как FPDFPageObj_SetMatrix, FPDFPageObj_Transform и FPDFText_SetMatrix
var
Matrix: TPdfMatrix;
begin
Matrix := TPdfMatrix.Create;
Matrix.ScaleAt(0.5, 0.5, 144, 144);
Matrix.RotateAt(15, 144, 144);
Matrix.Translate(72, 72);
FPDFPageObj_SetMatrix(ObjectHandle, @Matrix.Handle);
end;