NewRGBTensorPatchMesh

Sombreado, Gráficos vectoriales

Descripción

Crea un sombreado de malla de parches de producto tensorial, tipo de sombreado 7 de PDF, y lo registra bajo ShaderName en color DeviceRGB. Cada parche lleva dieciséis puntos de control, las cuatro esquinas del parche, ocho puntos de control de arista y cuatro puntos de control interiores, en el orden P1..P16 más un color por esquina. Los parches se emiten de forma independiente, sin compartir aristas

Sintaxis

Delphi

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

Parámetros

ShaderNameNombre bajo el que se registra el sombreador; páselo a SetFillShader o SetLineShader para pintar con la malla
PatchesArreglo de registros TPLMeshPatchCorners; PX/PY contienen las coordenadas de los puntos de control en las ranuras 0..15 correspondientes a P1..P16, con los puntos de control interiores P13..P16 en las ranuras 12..15, y CR/CG/CB contienen los cuatro colores de esquina en el rango de 0 a 1
BitsPerCoordinateBits de cuantización para las coordenadas de los puntos de control, entre 1 y 32
BitsPerComponentBits de cuantización por componente de color, entre 1 y 16
BoundsX0, BoundsY0, BoundsX1, BoundsY1Rectángulo de decodificación que mapea las coordenadas empaquetadas de los puntos de control al espacio de coordenadas del sombreado

Valores devueltos

0La malla no se creó, porque no hay documento seleccionado, el arreglo de parches está vacío o un parámetro de bits está fuera de rango
1La malla quedó registrada bajo ShaderName

Comentarios

Las coordenadas siguen el sistema de la biblioteca con origen en la esquina superior izquierda y se traducen internamente (ISO 32000-1 §8.7.4.5.8). Los puntos de control interiores ofrecen un control más fino del flujo de color dentro de un parche que las curvas de borde bicúbicas de NewRGBCoonsPatchMesh

Ejemplo

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