NewRGBTensorPatchMesh
Заливка, Графика
Описание
Создаёт сеточный градиент из тензорных лоскутов, тип затенения PDF 7, и регистрирует его под именем ShaderName в цвете DeviceRGB. Каждый лоскут несёт шестнадцать контрольных точек — четыре угла лоскута, восемь контрольных точек рёбер и четыре внутренние контрольные точки — в порядке P1..P16 и по одному цвету на угол. Лоскуты выводятся независимо, без совместного использования рёбер
Синтаксис
Delphi
Function TPDFlib.NewRGBTensorPatchMesh(Const ShaderName: WideString;
Const Patches: Array Of TPLMeshPatchCorners;
BitsPerCoordinate, BitsPerComponent: Integer;
Const BoundsX0, BoundsY0, BoundsX1, BoundsY1: Double): Integer;Параметры
| ShaderName | Имя, под которым регистрируется шейдер; передайте его в SetFillShader или SetLineShader, чтобы рисовать сеткой |
|---|---|
| Patches | Массив записей TPLMeshPatchCorners; PX/PY содержат координаты контрольных точек в слотах 0..15 для P1..P16, причём внутренние контрольные точки P13..P16 — в слотах 12..15, а CR/CG/CB содержат четыре угловых цвета в диапазоне от 0 до 1 |
| BitsPerCoordinate | Биты квантования координат контрольных точек, от 1 до 32 |
| BitsPerComponent | Биты квантования на компонент цвета, от 1 до 16 |
| BoundsX0, BoundsY0, BoundsX1, BoundsY1 | Прямоугольник декодирования, отображающий упакованные координаты контрольных точек в координатное пространство затенения |
Возвращаемые значения
| 0 | Сетка не была создана, потому что документ не выбран, массив лоскутов пуст или параметр битов вне диапазона |
|---|---|
| 1 | Сетка зарегистрирована под именем ShaderName |
Примечания
Координаты следуют системе библиотеки с началом в левом верхнем углу и переводятся внутри (ISO 32000-1 §8.7.4.5.8). Внутренние контрольные точки дают более тонкое управление распределением цвета внутри лоскута, чем бикубические граничные кривые NewRGBCoonsPatchMesh
Пример
Patch:= Default(TPLMeshPatchCorners);
Patch.PX[0]:= 100; Patch.PY[0]:= 100; // P1 corner
Patch.PX[3]:= 300; Patch.PY[3]:= 100; // P4 corner
Patch.PX[6]:= 300; Patch.PY[6]:= 250; // P7 corner
Patch.PX[9]:= 100; Patch.PY[9]:= 250; // P10 corner
// Inner control points P13..P16 in slots 12..15
Patch.PX[12]:= 166; Patch.PY[12]:= 150;
Patch.PX[13]:= 233; Patch.PY[13]:= 150;
Patch.PX[14]:= 233; Patch.PY[14]:= 200;
Patch.PX[15]:= 166; Patch.PY[15]:= 200;
Patch.CR[0]:= 1; Patch.CG[0]:= 0; Patch.CB[0]:= 0;
Patch.CR[1]:= 0; Patch.CG[1]:= 0; Patch.CB[1]:= 1;
Patch.CR[2]:= 0; Patch.CG[2]:= 1; Patch.CB[2]:= 0;
Patch.CR[3]:= 1; Patch.CG[3]:= 1; Patch.CB[3]:= 0;
SetLength(Patches, 1);
Patches[0]:= Patch;
PDF.NewRGBTensorPatchMesh('tensor', Patches, 16, 8,
100, 100, 300, 250);
PDF.SetFillShader('tensor');