Primitives

Primitives

این راهنما به انواع مقدار کوچک که عملاً غیرقابل تغییر هستند و داده‌های هندسی و رنگی را در سرتاسر API منتقل می‌کنند، می‌پردازد: نقاط ۲-بعدی و ۳-بعدی، مستطیل‌ها، ماتریس‌های تبدیل، و مقادیر رنگ. معمولاً در جریان‌های کاری ساده این‌ها را به‌صورت مستقیم با نام وارد نمی‌کنید — آن‌ها به‌عنوان انواع ویژگی در اشیای سطح بالاتر مانند حاشیه‌نویسی‌ها، قرارگیری تصاویر، و نماهای سه‌بعدی ظاهر می‌شوند — اما آگاهی از ساختارشان باعث می‌شود ویژگی‌های این اشیا به‌راحتی خوانده و ساخته شوند.


نقاط: Point و Point3D

Point یک مختصات دو-بعدی ساده با ویژگی‌های شناور x و y است. Point3D نسخهٔ سه-بعدی آن است که به عنوان Point3D(x, y, z) ساخته می‌شود و ویژگی‌های شناور x، y و z را در اختیار می‌گذارد. Point نوعی است که برای GradientAxialShading.start / end استفاده می‌شود؛ تبدیل‌های مبتنی بر Matrix3D و نماهای سه-بعدی در همان فضای مختصاتی کار می‌کنند که Point3D توصیف می‌کند.


Rectangles

Rectangle(x, y, width, height) موقعیت و اندازه را توصیف می‌کند و علاوه بر آن ویژگی‌های شناور محاسبه‌شدهٔ left، bottom و right را همراه با x، y، width و height در اختیار می‌گذارد. Rectangle نوعی است که پشت PDF3DAnnotation.rect قرار دارد، بنابراین مرزهای صفحه‌ای یک حاشیه‌نویسی سه-بعدی از طریق همان شکل که برای هر مستطیل دیگر در API استفاده می‌شود، خوانده و تنظیم می‌شوند.


ماتریس‌های تبدیل: Matrix و Matrix3D

Matrix یک تبدیل افین دو بعدی را به‌صورت شش مؤلفهٔ شناور نگهداری می‌کند — a، b، c، d، e، f — و دو متد فراهم می‌آورد: translate(x, y) برای اعمال یک ترجمه به‌صورت در-جا، و multiply(other) برای ترکیب آن با یک Matrix دیگر، که Matrix حاصل را برمی‌گرداند.

Matrix3D معادل سه‌بعدی است: یک بلوک چرخش/مقیاس ۳×۳ (m11 تا m33) به‌علاوهٔ مؤلفهٔ ترجمهٔ dx، dy، dz، که بدون آرگومان ساخته می‌شود (Matrix3D()) و با تنظیم خصوصیاتش پر می‌شود. PDF3DView.ctm به‌صورت Matrix3D | None تایپ شده است — ماتریس تبدیل فعلی برای یک نمای سه‌بعدی ذخیره‌شده.


نکات و بهترین روش‌ها

  • با آرگومان‌های موقعیتی و به ترتیب مستند شده (x, y[, z] / x, y, width, height)، Rectangle، Point و Point3D را بسازید — این انواع فقط مقادیر شناور ساده می‌پذیرند، نه آرگومان‌های فقط-کلیدواژه‌ای.
  • به‌جای ترکیب دستی شش مؤلفهٔ a–f، از Matrix.multiply() برای ترکیب تبدیل‌ها استفاده کنید.
  • وقتی نوع یک ویژگی اختیاری است (به عنوان مثال PDF3DAnnotation.background_color: Color | None یا PDF3DView.ctm: Matrix3D | None)، قبل از خواندن ویژگی‌های تو در تو روی آن، وجود None را بررسی کنید.
  • فقط زمانی که به یک گرادیان خطی دو‌رنگ به‌عنوان فضای رنگ الگو نیاز دارید، از GradientAxialShading استفاده کنید؛ برای یک رنگ صاف و تک‌رنگ، مستقیماً از Color بهره ببرید.
  • ویژگی‌های left، bottom و right در Rectangle از x، y و width/height استخراج می‌شوند — آن‌ها را به‌عنوان یک نمای راحتی از همان مستطیل در نظر بگیرید نه به‌عنوان وضعیت مستقل.

مشکلات رایج

مشکلعلتراه‌حل
مختصات مستطیل یا نقطه به‌طور نادرست جابه‌جا یا مقیاس‌بندی شده‌اندآرگومان‌های موقعیتی به ترتیب نادرست به Rectangle(x, y, width, height) یا Point3D(x, y, z) ارسال شده‌انددوباره ترتیب آرگومان‌ها را نسبت به امضای سازنده بررسی کنید — این نوع‌ها هیچ‌گونه اعمال کلیدواژه-تنها ندارند
AttributeError هنگام خواندن ویژگی رنگ یا ماتریسدسترسی به ویژگی روی مقدار None از یک فیلد اختیاری (مثلاً background_color، ctm)قبل از دسترسی به خصوصیات تو در تو، اطمینان حاصل کنید که مقدار None نیست
گرادیان به‌صورت یک رنگ یکنواخت نمایش داده می‌شودمقادیر GradientAxialShading.start و end Point یکسان یا بسیار نزدیک به هم هستنداطمینان حاصل کنید که start و end دو نقطه بصری متمایز را در امتداد محور موردنظر گرادیان نشان می‌دهند

FAQ

آیا در استفادهٔ معمول نیاز دارم که Point، Rectangle یا Matrix را مستقیماً ایمپورت کنم؟

معمولاً نه — بیشتر اوقات این‌ها را به عنوان نوع یک ویژگی (مانند PDF3DAnnotation.rect یا PDF3DView.ctm) می‌بینید تا اینکه از ابتدا آن‌ها را بسازید، اگرچه هیچ چیزی مانع ساخت مستقیم آن‌ها وقتی به یک مقدار مستقل نیاز دارید، نمی‌شود.

فرق بین Color و ColorPrimitive چیست؟

Color داده‌های کانال به سبک RGB را به همراه یک pattern_color_space اختیاری برای پر کردن گرادیان حمل می‌کند. ColorPrimitive نوعی بسیار کوچکتر است که فقط یک مقدار transparency را نشان می‌دهد.

چگونه دو تبدیل را با Matrix ترکیب کنم؟

متد matrix_a.multiply(matrix_b) را صدا بزنید که Matrix ترکیبی را برمی‌گرداند. برای یک جابجایی ساده بدون ساختن یک ضرب ماتریس کامل، از translate(x, y) استفاده کنید.

آیا Matrix3D در جایی خارج از حاشیه‌نویسی‌های سه‌بعدی استفاده می‌شود؟

در این خوشه، Matrix3D به عنوان نوع PDF3DView.ctm ظاهر می‌شود — ماتریس تبدیل فعلی مرتبط با یک نمای سه‌بعدی ذخیره‌شده.


API Reference خلاصه

کلاس/متدتوضیح
Pointمختصات دو بعدی (x، y ویژگی‌های شناور)
Point3Dمختصات 3بعدی (x, y, z ویژگی‌های float)
Rectangleموقعیت و اندازه (x, y, width, height, به‌علاوه left، bottom، right محاسبه‌شده)
Matrixتبدیل افین دو‌بعدی (a–f مؤلفه)؛ روش‌های translate / multiply
Matrix3Dماتریس تبدیل سه‌بعدی (m11–m33 بلوک چرخش/مقیاس، dx/dy/dz جابجایی)
Colorمقدار رنگ با پر کردن گرادیان pattern_color_space به صورت اختیاری
ColorPrimitiveپریمیتیو رنگی حداقل که transparency را نمایش می‌دهد
GradientAxialShadingگرادیان محوری (خطی) بین دو مقدار Color در طول دو نقطه انتهایی Point

همچنین ببینید:

 فارسی