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');