THotPDF.RegisterLatticeFormGouraudShading Method

 

THotPDF.RegisterLatticeFormGouraudShading

THotPDF

 

Vrh

Razglasi PDF 1.3+ mrežni senčen vzorec Gouraud lattice-form trikotnikov (ISO 32000-1 8.7.4.5.5, /ShadingType 5) in ga ovije v vnos inline Pattern Type 2 v slovar Resources/Pattern na strani. Izrisovalnik samodejno razgradi vsak par sosednjih vrst v trak trikotnikov, zato klicatelj poda le mrežo oglišč - uporabno, kadar izvorni podatki že živijo na pravilni vzorčni mreži (terens, rezultati FEA, znanstveni toplotni zemljevidi). RegisterFreeFormGouraudShading uporabite namesto tega, kadar je triangulacija nepravilna in so potrebne zastavice po posameznih trikotnikih

 

Delphi syntax:

function RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax: Single; NumComponents: Integer; VerticesPerRow: Integer; const Vertices: array of Extended): AnsiString;

 

C++ syntax:

AnsiString RegisterLatticeFormGouraudShading(float XMin, float YMin, float XMax, float YMax, int NumComponents, int VerticesPerRow, const Extended* Vertices, int VertexElementCount);

 

Description

Senčenje je izpisano kot posredni tok z /ShadingType 5, /BitsPerCoordinate 16, /BitsPerComponent 8 in /VerticesPerRow N. V nasprotju s tipom 4 ni bajta zastavice na vrh in /BitsPerFlag v slovarju senčenja ni prisoten; vsak vrh zasede 4 + NumComponents bajte (2 big-endian X + 2 big-endian Y + N barvnih komponent). Polje /Decode preslika 16-bitne koordinate nazaj v podani pravokotnik uporabniškega prostora [XMin, XMax] x [YMin, YMax] in vsak barvni komponent nazaj v [0, 1]

Ogljišča so urejena po vrsticah: prvih VerticesPerRow oglišč tvori vrstico 0, naslednjih VerticesPerRow vrstico 1 in tako naprej. Izrisovalnik poveže vsak par sosednjih vrst (vrsta i in vrsta i+1) v trak trikotnikov - brez zastavic in brez izrecnega seznama trikotnikov. Število razširjenih vrednosti, ki jih podate v Vertices, mora biti večkratnik (2 + NumComponents) * VerticesPerRow, nastalo število vrstic pa mora biti vsaj 2

 

XMin, YMin, XMax, YMax - pravokotnik v uporabniškem prostoru, ki omejuje mrežo. Te štiri vrednosti postanejo prvi štirje vnosi /Decode. Postavite jih v iste uporabniške koordinate, v katere boste risali - za HotPDFov zaslonsko-koordinatni Rectangle pri (X, Y, W, H) je ustrezen pravokotnik v PDF uporabniškem prostoru (X, PageHeight - Y - H) do (X + W, PageHeight - Y)

NumComponents - število barvnih komponent na oglišče. Vrednost 1 uporabite za DeviceGray, 3 za DeviceRGB ali 4 za DeviceCMYK. Vsaka druga vrednost sproži izjemo

VerticesPerRow - število oglišč N na vrstico mreže, N >= 2. Vnos slovarja /VerticesPerRow dobi to vrednost dobesedno. Število vrstic M se izve iz dolžine polja kot VertexCount / VerticesPerRow in mora biti vsaj 2

Vertices - ravno polje vrednosti Extended v vrstnem redu (X, Y, c1...cN) za vsako oglišče, ponovljeno po vrsticah (najprej vrstica 0, nato vrstica 1, ...). Koordinate so omejene na [XMin, XMax] x [YMin, YMax] in kvantizirane na 16-bitna cela števila; barvne komponente so omejene na [0, 1] in kvantizirane na 8-bitna cela števila

 

Povratna vrednost: samodejno generirano ime vzorca (Sh1, Sh2, ...) registrirano v slovarju Resources/Pattern trenutne strani. Vrne prazen niz, kadar je StrictVersionLock vklopljen in je aktivna Version pod PDF 1.3 (sicer se različica dokumenta samodejno poviša na 1.3)

 

Code Example

// 3x3 lattice over a 200x200 quad. The renderer auto-triangulates
// adjacent rows into a triangle strip, giving 4 cells x 2 triangles
// = 8 triangles. Colour layout (visual):
//
//   row 0 (top, Y=YMax): red     yellow  green
//   row 1 (mid):         magenta gray    cyan
//   row 2 (bot, Y=YMin): blue    purple  orange
var
  Doc: THotPDF;
  PatName: AnsiString;
  Verts: array[0..44] of Extended;   // 9 vertices x 5 floats each
  H, XMin, YMin, XMax, YMax, XMid, YMid: Single;
begin
  Doc := THotPDF.Create(nil);
  try
    Doc.Version := pdf14;
    Doc.BeginDoc;
    H := Doc.CurrentPage.Height;
    XMin := 0; YMin := H - 200; XMax := 200; YMax := H;
    XMid := (XMin + XMax) / 2;
    YMid := (YMin + YMax) / 2;
    // row 0 (Y=YMax): red - yellow - green
    Verts[ 0] := XMin; Verts[ 1] := YMax; Verts[ 2] := 1.0; Verts[ 3] := 0.0; Verts[ 4] := 0.0;
    Verts[ 5] := XMid; Verts[ 6] := YMax; Verts[ 7] := 1.0; Verts[ 8] := 1.0; Verts[ 9] := 0.0;
    Verts[10] := XMax; Verts[11] := YMax; Verts[12] := 0.0; Verts[13] := 1.0; Verts[14] := 0.0;
    // row 1 (Y mid): magenta - gray - cyan
    Verts[15] := XMin; Verts[16] := YMid; Verts[17] := 1.0; Verts[18] := 0.0; Verts[19] := 1.0;
    Verts[20] := XMid; Verts[21] := YMid; Verts[22] := 0.5; Verts[23] := 0.5; Verts[24] := 0.5;
    Verts[25] := XMax; Verts[26] := YMid; Verts[27] := 0.0; Verts[28] := 1.0; Verts[29] := 1.0;
    // row 2 (Y=YMin): blue - purple - orange
    Verts[30] := XMin; Verts[31] := YMin; Verts[32] := 0.0; Verts[33] := 0.0; Verts[34] := 1.0;
    Verts[35] := XMid; Verts[36] := YMin; Verts[37] := 0.5; Verts[38] := 0.0; Verts[39] := 0.5;
    Verts[40] := XMax; Verts[41] := YMin; Verts[42] := 1.0; Verts[43] := 0.5; Verts[44] := 0.0;
    PatName := Doc.RegisterLatticeFormGouraudShading(
      XMin, YMin, XMax, YMax, 3, 3, Verts);
    Doc.CurrentPage.SetFillPattern(PatName);
    Doc.CurrentPage.Rectangle(0, 0, 200, 200);
    Doc.CurrentPage.Fill;
    Doc.EndDoc;
  finally
    Doc.Free;
  end;
end;

 

Glejte tudi

RegisterFreeFormGouraudShading, RegisterDeviceN, RegisterSeparation, RegisterLabColorSpace, Version, PDF Filter Support