NewRGBTensorPatchMesh

Sombreamento, Gráficos

Descrição

Cria um sombreamento de malha de patches de produto tensor, tipo de shading 7 do PDF, e o registra sob ShaderName na cor DeviceRGB. Cada patch carrega dezesseis pontos de controle, os quatro cantos do patch, oito pontos de controle de aresta e quatro pontos de controle internos, na ordem P1..P16, além de uma cor por canto. Os patches são emitidos de forma independente, sem compartilhamento de arestas

Sintaxe

Delphi

Function TPDFlib.NewRGBTensorPatchMesh(Const ShaderName: WideString;
  Const Patches: Array Of TPLMeshPatchCorners;
  BitsPerCoordinate, BitsPerComponent: Integer;
  Const BoundsX0, BoundsY0, BoundsX1, BoundsY1: Double): Integer;

Parâmetros

ShaderNameNome sob o qual o shader é registrado; passe-o a SetFillShader ou SetLineShader para pintar com a malha
PatchesMatriz de registros TPLMeshPatchCorners; PX/PY contêm as coordenadas dos pontos de controle nos slots 0..15 na ordem P1..P16, com os pontos de controle internos P13..P16 nos slots 12..15, e CR/CG/CB contêm as quatro cores de canto no intervalo de 0 a 1
BitsPerCoordinateBits de quantização para as coordenadas dos pontos de controle, entre 1 e 32
BitsPerComponentBits de quantização por componente de cor, entre 1 e 16
BoundsX0, BoundsY0, BoundsX1, BoundsY1Retângulo de decodificação que mapeia as coordenadas empacotadas dos pontos de controle para o espaço de coordenadas do shading

Valores de retorno

0A malha não foi criada, porque nenhum documento está selecionado, a matriz de patches está vazia ou um parâmetro de bits está fora do intervalo
1A malha foi registrada sob ShaderName

Observações

As coordenadas seguem o sistema de origem no canto superior esquerdo da biblioteca e são traduzidas internamente (ISO 32000-1 §8.7.4.5.8). Os pontos de controle internos dão controle mais fino sobre o fluxo de cores dentro de um patch do que as curvas de fronteira bicúbicas de NewRGBCoonsPatchMesh

Exemplo

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