THotPDF.RegisterCoonsPatchMesh Method

 

THotPDF.RegisterCoonsPatchMesh

THotPDF

 

الأعلى

يعلن Coons patch mesh shading في PDF 1.3+ (ISO 32000-1 8.7.4.5.6, /ShadingType 6) ويلفه في Pattern Type 2 inline ضمن Resources/Pattern. كل patch محدود بأربع منحنيات cubic Bezier ويحمل لونًا لكل زاوية؛ يلائم renderer سطح Coons بين الحواف الأربع ليعطي quad ملونًا ذا انحناء حر، مناسبًا للتدرجات المعدنية وSVG mesh gradients

 

Delphi syntax:

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

 

C++ syntax:

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

 

الوصف

يصدر shading كتدفق غير مباشر مع /ShadingType 6 و/BitsPerCoordinate 16 و/BitsPerComponent 8 و/BitsPerFlag 8. يحزم كل patch كـ flag byte ثم 12 نقطة تحكم وأربعة ألوان زوايا، وتربط /Decode الإحداثيات ومكونات اللون بالنطاقات المعطاة

The 12 control points are numbered c1..c12 in clockwise order around the patch boundary starting from corner 1. The four corners are c1 / c4 / c7 / c10, and the remaining eight (c2, c3 between c1 and c4; c5, c6 between c4 and c7; c8, c9 between c7 and c10; c11, c12 between c10 and c1) are the inner Bezier handles of each cubic edge. When the inner handles sit at 1/3 and 2/3 along the straight line between adjacent corners, the Coons surface degenerates to bilinear interpolation - visually equivalent to a 4-vertex Type 4 mesh.

 

XMin وYMin وXMax وYMax - مستطيل user-space الذي يحد الإحداثيات المشفرة. تصبح هذه القيم أول مداخل /Decode، وتوضع في الإحداثيات التي سيجري الرسم فيها

NumComponents - عدد مكونات اللون لكل زاوية. مرر 1 لـ DeviceGray أو 3 لـ DeviceRGB أو 4 لـ DeviceCMYK. أي قيمة أخرى ترفع exception

Patches - مصفوفة مسطحة من قيم Extended. يساهم كل patch بـ 24 + 4 * NumComponents قيمة: 24 float لنقاط التحكم الـ 12 ثم 4 * NumComponents float لألوان الزوايا. يجب أن يكون طول المصفوفة مضاعفًا موجبًا لهذا stride، وكل patches الصادرة تحمل flag = 0

 

القيمة المعادة: اسم pattern مولد تلقائيًا (Sh1, Sh2, ...) ومسجل في قاموس Resources/Pattern للصفحة الحالية. يعيد سلسلة فارغة عندما يكون StrictVersionLock مفعّلًا وVersion النشطة أقل من PDF 1.3؛ وإلا يرفع إصدار المستند تلقائيًا إلى 1.3

 

Code Example

// Single straight-edge Coons patch covering a 200x200 quad. Inner
// control points placed at 1/3 / 2/3 along each edge => bilinear
// surface. Four corner colours = red / green / yellow / blue
var
  Doc: THotPDF;
  PatName: AnsiString;
  Patches: array[0..35] of Extended;   // 12 ctrl pts * 2 + 4 corners * 3 = 36
  H, XMin, YMin, XMax, YMax, W: 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;
    W := 200;
    // c1..c12 clockwise. Inner handles at 1/3 / 2/3 => straight edges
    Patches[ 0] := XMin;            Patches[ 1] := YMax;             // c1  TL
    Patches[ 2] := XMin + W / 3;    Patches[ 3] := YMax;             // c2
    Patches[ 4] := XMin + 2*W / 3;  Patches[ 5] := YMax;             // c3
    Patches[ 6] := XMax;            Patches[ 7] := YMax;             // c4  TR
    Patches[ 8] := XMax;            Patches[ 9] := YMax - W / 3;     // c5
    Patches[10] := XMax;            Patches[11] := YMax - 2*W / 3;   // c6
    Patches[12] := XMax;            Patches[13] := YMin;             // c7  BR
    Patches[14] := XMax - W / 3;    Patches[15] := YMin;             // c8
    Patches[16] := XMax - 2*W / 3;  Patches[17] := YMin;             // c9
    Patches[18] := XMin;            Patches[19] := YMin;             // c10 BL
    Patches[20] := XMin;            Patches[21] := YMin + W / 3;     // c11
    Patches[22] := XMin;            Patches[23] := YMin + 2*W / 3;   // c12
    // 4 corner colours (c1 / c4 / c7 / c10)
    Patches[24] := 1.0; Patches[25] := 0.0; Patches[26] := 0.0;  // red
    Patches[27] := 0.0; Patches[28] := 1.0; Patches[29] := 0.0;  // green
    Patches[30] := 1.0; Patches[31] := 1.0; Patches[32] := 0.0;  // yellow
    Patches[33] := 0.0; Patches[34] := 0.0; Patches[35] := 1.0;  // blue
    PatName := Doc.RegisterCoonsPatchMesh(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;

 

انظر أيضا

RegisterFreeFormGouraudShading, RegisterLatticeFormGouraudShading, RegisterDeviceN, Version, PDF Filter Support