Primitives
Primitives
Acest ghid acoperă tipurile de valori mici, practic imuabile, care transportă date de geometrie și culoare prin restul API: puncte 2D și 3D, dreptunghiuri, matrici de transformare și valori de culoare. De obicei nu veți importa aceste tipuri direct prin nume în fluxuri de lucru simple — apar ca tipuri de proprietate pe obiecte de nivel superior, cum ar fi adnotări, plasări de imagini și vizualizări 3D — dar cunoașterea formei lor face ca proprietățile acelor obiecte să fie ușor de citit și de construit.
Puncte: Point și Point3D
Point este o coordonată 2D simplă cu proprietăți float x și y. Point3D este omologul său 3D, construit ca Point3D(x, y, z) și expune proprietăți float x, y și z. Point este tipul utilizat pentru GradientAxialShading.start / end; transformările bazate pe Matrix3D și vizualizările 3D operează în același spațiu de coordonate pe care Point3D îl descrie.
Rectangles
Rectangle(x, y, width, height) descrie o poziție și dimensiune și, în plus, expune proprietăți float calculate left, bottom și right alături de x, y, width și height. Rectangle este tipul din spatele PDF3DAnnotation.rect, astfel încât limitele pe pagină ale unei adnotări 3D sunt citite și setate prin aceeași formă ca orice alt dreptunghi din API.
Matrici de transformare: Matrix și Matrix3D
Matrix conține o transformare afine 2D ca șase componente float — a, b, c, d, e, f — și oferă două metode: translate(x, y) pentru a aplica o translație în loc, și multiply(other) pentru a o compune cu un alt Matrix, returnând Matrix rezultat.
Matrix3D este omologul 3D: un bloc de rotație/scalare 3x3 (m11 până la m33) plus o componentă de translație dx, dy, dz, construit fără argumente (Matrix3D()) și populat prin setarea proprietăților sale. PDF3DView.ctm are tipul Matrix3D | None — matricea de transformare curentă pentru o vizualizare 3D salvată.
Sfaturi și bune practici
- Construiți
Rectangle,PointșiPoint3Dcu argumente poziționale în ordinea documentată (x, y[, z]/x, y, width, height) — aceste tipuri acceptă float-uri simple, nu argumente doar pe cuvânt cheie. - Folosiți
Matrix.multiply()pentru a compune transformările în loc să combinați manual cele șase componentea–f. - Când tipul unei proprietăți este opțional (de exemplu
PDF3DAnnotation.background_color: Color | NonesauPDF3DView.ctm: Matrix3D | None), verificațiNoneînainte de a citi proprietățile încorporate ale acesteia. - Apelați la
GradientAxialShadingdoar când aveți nevoie de un gradient liniar cu două culori ca spațiu de culoare de tip model; pentru o singură culoare uniformă folosiți directColor. - Proprietățile
left,bottomșirightale luiRectanglesunt derivate dinx,yșiwidth/height— tratați-le ca pe o vedere convenabilă a aceluiași dreptunghi, nu ca stare independentă.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
| Coordonatele dreptunghiului sau ale punctului apar inversate sau scalate incorect | Argumentele poziționale sunt transmise în ordine greșită către Rectangle(x, y, width, height) sau Point3D(x, y, z) | Verificați din nou ordinea argumentelor față de semnătura constructorului — aceste tipuri nu impun utilizarea exclusivă a argumentelor numite |
AttributeError la citirea unei proprietăți de culoare sau matrice | Proprietate accesată pe o valoare None dintr-un câmp opțional (ex. background_color, ctm) | Verificați că valoarea nu este None înainte de a accesa proprietățile imbricate |
| Gradientul se redă ca o singură culoare uniformă | Valorile GradientAxialShading.start și end Point sunt identice sau foarte apropiate | Asigurați-vă că start și end marchează două puncte vizual distincte de-a lungul axei de gradient dorite |
FAQ
Trebuie să import Point, Rectangle sau Matrix direct în utilizarea normală?
De obicei nu — le veți întâlni cel mai adesea ca tipul unei proprietăți (cum ar fi PDF3DAnnotation.rect sau PDF3DView.ctm) mai degrabă decât să le construiți de la zero, deși nimic nu împiedică construirea lor directă când aveți nevoie de o valoare independentă.
Care este diferența dintre Color și ColorPrimitive?
Color conține date de canal în stil RGB plus un pattern_color_space opțional pentru umpleri de gradient. ColorPrimitive este un tip mult mai mic care expune doar o valoare transparency.
Cum combin două transformări cu Matrix?
Apelați matrix_a.multiply(matrix_b), care returnează Matrix compus. Utilizați translate(x, y) pentru o translație simplă fără a construi o multiplicare completă a matricei.
Este Matrix3D utilizat în altă parte în afara adnotărilor 3D?
În cadrul acestui grup, Matrix3D apare ca tipul lui PDF3DView.ctm — matricea de transformare curentă asociată cu o vizualizare 3D salvată.
API Reference Rezumat
| Clasă/Metodă | Descriere: |
|---|---|
Point | Coordonată 2D (x, y proprietăți float) |
Point3D | Coordonată 3D (x, y, z proprietăţi float) |
Rectangle | Poziție și dimensiune (x, y, width, height, plus calculate left, bottom, right) |
Matrix | Transformare afină 2D (a–f componente); metode translate / multiply |
Matrix3D | Matrice de transformare 3D (m11–m33 bloc de rotație/scalare, translație dx/dy/dz) |
Color | Valoare de culoare cu umplere gradient pattern_color_space opțională |
ColorPrimitive | Primitiv de culoare minimal care expune transparency |
GradientAxialShading | Gradient axial (linear) între două valori Color de-a lungul a două puncte finale Point |