Primitives
Primitives
Це керівництво охоплює невеликі, практично незмінні типи значень, які передають геометричні та колірні дані через решту API: 2D та 3D точки, прямокутники, матриці перетворень і колірні значення. Зазвичай ви не імпортуєте їх безпосередньо за назвою у простих робочих процесах — вони з’являються як типи властивостей у об’єктах вищого рівня, таких як анотації, розміщення зображень і 3D-перегляди — проте розуміння їхньої структури полегшує читання та створення властивостей цих об’єктів.
Точки: Point і Point3D
Point — це простий 2D-координат з x та y властивостями типу float. Point3D — його 3D-аналог, створений як Point3D(x, y, z) і що надає властивості x, y та z типу float. Point — тип, що використовується для GradientAxialShading.start / end; трансформації на базі Matrix3D та 3D-перегляди працюють у тому ж координатному просторі, який описує Point3D.
Rectangles
Rectangle(x, y, width, height) описує позицію та розмір, а також надає обчислені властивості left, bottom та right типу float поряд з x, y, width і height. Rectangle — це тип, що стоїть за PDF3DAnnotation.rect, тому межі 3D-анотації на сторінці читаються і встановлюються через ту ж форму, що й будь-який інший прямокутник у API.
Матриці перетворень: Matrix і Matrix3D
Matrix містить 2D афінне перетворення у вигляді шести компонент типу float — a, b, c, d, e, f — і надає два методи: translate(x, y) для застосування зсуву на місці та multiply(other) для композиції з іншим Matrix, повертаючи отриманий Matrix.
Matrix3D — це 3D-еквівалент: блок обертання/масштабування 3x3 (m11-по-m33) плюс компонент трансляції dx, dy, dz, створений без аргументів (Matrix3D()) і заповнюваний шляхом встановлення його властивостей. PDF3DView.ctm має тип Matrix3D | None — поточна матриця перетворення для збереженого 3D-виду.
Поради та кращі практики
- Створюйте
Rectangle,PointтаPoint3Dза допомогою позиційних аргументів у задокументованому порядку (x, y[, z]/x, y, width, height) — ці типи приймають прості float, а не лише аргументи, передані за іменем. - Використовуйте
Matrix.multiply()для композиції перетворень, а не комбінуйте вручну шість компонентa–f. - Коли тип властивості є необов’язковим (наприклад
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) | Перевірте порядок аргументів згідно сигнатури конструктора — у цих типів немає примусу keyword-only |
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 де-небудь поза 3D анотаціями?
У цьому кластері Matrix3D з’являється як тип PDF3DView.ctm — поточна матриця перетворення, пов’язана зі збереженим 3D переглядом.
Підсумок API Reference
| Клас/Метод | Опис |
|---|---|
Point | 2D координата (x, y властивості типу float) |
Point3D | 3D координата (x, y, z float властивості) |
Rectangle | Позиція та розмір (x, y, width, height, плюс обчислені left, bottom, right) |
Matrix | 2D афінне перетворення (a–f компоненти); методи translate / multiply |
Matrix3D | 3D матриця трансформації (m11–m33 блок обертання/масштабування, dx/dy/dz трансляція) |
Color | Значення кольору з необов’язковим заповненням градієнтом pattern_color_space |
ColorPrimitive | Мінімальний кольоровий примітив, який розкриває transparency |
GradientAxialShading | Вісьовий (лінійний) градієнт між двома Color значеннями вздовж двох Point кінцевих точок |