Metode THotPDF.RegisterTensorProductPatchMesh

 

THotPDF.RegisterTensorProductPatchMesh

THotPDF

 

Atas

Mendeklarasikan shading tensor product patch mesh PDF 1.3+ (ISO 32000-1 8.7.4.5.7, /ShadingType 7) dan membungkusnya sebagai entri Pattern Type 2 inline di dictionary Resources/Pattern pada halaman. Setiap patch adalah grid 4 x 4 penuh dari titik kontrol Bezier kubik p[i][j] (12 titik batas + 4 titik interior) ditambah satu warna per sudut. Gunakan ini saat RegisterCoonsPatchMesh (Type 6) tidak bisa mengekspresikan bentuk interior - round-trip gradient mesh SVG dan karya apa pun yang membutuhkan empat titik kontrol ekstra untuk membengkokkan interior patch

 

Sintaks Delphi:

function RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax: Single; NumComponents: Integer; const Patches: array of Extended): AnsiString;

 

Sintaks C++:

AnsiString RegisterTensorProductPatchMesh(float XMin, float YMin, float XMax, float YMax, int NumComponents, const Extended* Patches, int PatchesElementCount);

 

Deskripsi

Shading dikeluarkan sebagai stream tidak-langsung dengan /ShadingType 7, /BitsPerCoordinate 16, /BitsPerComponent 8, dan /BitsPerFlag 8. Setiap patch dipadatkan sebagai 1 byte flag (selalu 0 untuk patch independen) diikuti 16 control point (masing-masing 4 byte: 2 X big-endian + 2 Y big-endian, dalam urutan stream spesifikasi yang dijelaskan di bawah) dan 4 warna sudut (masing-masing NumComponents byte), total 1 + 64 + 4 * NumComponents byte per patch.

16 titik kontrol itu membentuk grid 4 x 4 p[i][j] dengan i sebagai indeks baris (0 = atas visual / YMax, 3 = bawah visual / YMin) dan j sebagai indeks kolom (0 = kiri / XMin, 3 = kanan / XMax). Urutan stream spesifikasi (Table 88) terlebih dahulu menelusuri 12 titik batas secara searah jarum jam (baris atas kiri ke kanan, kolom kanan atas ke bawah, baris bawah kanan ke kiri, kolom kiri bawah ke atas), lalu mencantumkan 4 titik interior secara searah jarum jam mulai dari titik interior kiri atas: p[1][1], p[1][2], p[2][2], p[2][1]. Array Patches yang diberikan pengguna mengikuti urutan ini apa adanya

Ketika seluruh 16 control point berada di kisi teratur 1/3 / 2/3 (titik batas pada 1/3 / 2/3 di sepanjang tiap tepi, titik interior di perpotongan grid dalam (1/3, 1/3) / (2/3, 1/3) / (2/3, 2/3) / (1/3, 2/3)), permukaan Bezier bikubik degenerasi menjadi bidang datar dan interpolasi warna degenerasi menjadi bilinier - secara visual identik dengan RegisterCoonsPatchMesh ber tepi lurus atau RegisterFreeFormGouraudShading dengan empat vertex sudut.

 

XMin, YMin, XMax, YMax - persegi panjang ruang pengguna yang membatasi koordinat yang dienkode. Empat nilai ini menjadi empat entri pertama /Decode. Letakkan dalam koordinat ruang pengguna yang sama dengan area yang akan Anda gambar - untuk Rectangle koordinat layar HotPDF di (X, Y, W, H), persegi panjang ruang pengguna PDF yang cocok adalah (X, PageHeight - Y - H) sampai (X + W, PageHeight - Y)

NumComponents - jumlah komponen warna per sudut. Gunakan 1 untuk DeviceGray, 3 untuk DeviceRGB, atau 4 untuk DeviceCMYK. Nilai lain akan memunculkan exception

Patches - array datar berisi nilai Extended. Setiap patch menyumbang 32 + 4 * NumComponents nilai: 32 float untuk 16 titik kontrol (X, Y, X, Y, ..., 16 pasangan dalam urutan stream spesifikasi) diikuti 4 * NumComponents float untuk warna sudut (pada p[0][0] / p[0][3] / p[3][3] / p[3][0], sesuai urutan siklik Coons). Panjang array harus merupakan kelipatan positif dari stride ini. Semua patch yang dikeluarkan membawa flag = 0, yaitu patch independen; flag lanjutan 1 / 2 / 3 untuk berbagi tepi dengan patch sebelumnya tidak diekspos di overload praktis ini

 

Nilai balik: nama pattern yang dihasilkan otomatis (Sh1, Sh2, ...) yang terdaftar di dictionary Resources/Pattern halaman aktif. Mengembalikan string kosong saat StrictVersionLock aktif dan Version aktif berada di bawah PDF 1.3, jika tidak versi dokumen dinaikkan otomatis ke 1.3

 

Contoh kode

// Single bilinear-equivalent tensor-product patch covering a 200x200
// quad. All 16 control points sit on the 1/3 / 2/3 lattice =>
// bicubic surface degenerates to bilinear; four corner colours
// red / green / yellow / blue
var
  Doc: THotPDF;
  PatName: AnsiString;
  Patches: array[0..43] of Extended;   // 16 ctrl pts * 2 + 4 corners * 3 = 44
  H, XMin, YMin, XMax, YMax: Single;
  XThird, X2Third, YThird, Y2Third: 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;
    XThird  := XMin + 200 / 3;     X2Third := XMin + 2 * 200 / 3;
    YThird  := YMin + 200 / 3;     Y2Third := YMin + 2 * 200 / 3;
    // Spec stream order: top row LtoR, right column TtoB, bottom row RtoL,
    // left column BtoT, then interior 4 clockwise starting at p[1][1]
    Patches[ 0] := XMin;     Patches[ 1] := YMax;       // p[0][0] TL
    Patches[ 2] := XThird;   Patches[ 3] := YMax;       // p[0][1]
    Patches[ 4] := X2Third;  Patches[ 5] := YMax;       // p[0][2]
    Patches[ 6] := XMax;     Patches[ 7] := YMax;       // p[0][3] TR
    Patches[ 8] := XMax;     Patches[ 9] := Y2Third;    // p[1][3]
    Patches[10] := XMax;     Patches[11] := YThird;     // p[2][3]
    Patches[12] := XMax;     Patches[13] := YMin;       // p[3][3] BR
    Patches[14] := X2Third;  Patches[15] := YMin;       // p[3][2]
    Patches[16] := XThird;   Patches[17] := YMin;       // p[3][1]
    Patches[18] := XMin;     Patches[19] := YMin;       // p[3][0] BL
    Patches[20] := XMin;     Patches[21] := YThird;     // p[2][0]
    Patches[22] := XMin;     Patches[23] := Y2Third;    // p[1][0]
    Patches[24] := XThird;   Patches[25] := Y2Third;    // p[1][1]
    Patches[26] := X2Third;  Patches[27] := Y2Third;    // p[1][2]
    Patches[28] := X2Third;  Patches[29] := YThird;     // p[2][2]
    Patches[30] := XThird;   Patches[31] := YThird;     // p[2][1]
    // 4 corner colours at p[0][0] / p[0][3] / p[3][3] / p[3][0]
    Patches[32] := 1.0; Patches[33] := 0.0; Patches[34] := 0.0;  // red
    Patches[35] := 0.0; Patches[36] := 1.0; Patches[37] := 0.0;  // green
    Patches[38] := 1.0; Patches[39] := 1.0; Patches[40] := 0.0;  // yellow
    Patches[41] := 0.0; Patches[42] := 0.0; Patches[43] := 1.0;  // blue
    PatName := Doc.RegisterTensorProductPatchMesh(
      XMin, YMin, XMax, YMax, 3, Patches);
    Doc.CurrentPage.SetFillPattern(PatName);
    Doc.CurrentPage.Rectangle(0, 0, 200, 200);
    Doc.CurrentPage.Fill;
    Doc.EndDoc;
  finally
    Doc.Free;
  end;
end;

 

Lihat juga

RegisterCoonsPatchMesh, RegisterFreeFormGouraudShading, RegisterLatticeFormGouraudShading, Version, Dukungan Filter PDF