Primitives
Primitives
Questa guida copre i piccoli tipi di valore, immutabili nella pratica, che trasportano dati di geometria e colore attraverso il resto del API: punti 2D e 3D, rettangoli, matrici di trasformazione e valori di colore. Di solito non importerai questi direttamente per nome nei flussi di lavoro semplici — compaiono come tipi di proprietà su oggetti di livello superiore come annotazioni, posizionamenti di immagini e viste 3D — ma conoscere la loro struttura rende le proprietà di quegli oggetti facili da leggere e costruire.
Punti: Point e Point3D
Point è una semplice coordinata 2D con le proprietà float x e y. Point3D è la sua controparte 3D, costruita come Point3D(x, y, z) ed espone le proprietà float x, y e z. Point è il tipo usato per GradientAxialShading.start / end; le trasformazioni basate su Matrix3D e le viste 3D operano nello stesso spazio di coordinate che descrive Point3D.
Rectangles
Rectangle(x, y, width, height) descrive una posizione e una dimensione, e inoltre espone le proprietà float calcolate left, bottom e right insieme a x, y, width e height. Rectangle è il tipo alla base di PDF3DAnnotation.rect, così i limiti sulla pagina di un’annotazione 3D sono letti e impostati tramite la stessa forma di qualsiasi altro rettangolo nel API.
Matrici di trasformazione: Matrix e Matrix3D
Matrix contiene una trasformazione affine 2D come sei componenti float — a, b, c, d, e, f — e fornisce due metodi: translate(x, y) per applicare una traslazione in loco, e multiply(other) per comporla con un altro Matrix, restituendo il Matrix risultante.
Matrix3D è la controparte 3D: un blocco di rotazione/scalatura 3x3 (m11 fino a m33) più una componente di traduzione dx, dy, dz, costruito senza argomenti (Matrix3D()) e popolato impostando le sue proprietà. PDF3DView.ctm è tipizzato come Matrix3D | None — la matrice di trasformazione corrente per una vista 3D salvata.
Suggerimenti e migliori pratiche
- Costruisci
Rectangle,PointePoint3Dcon argomenti posizionali nell’ordine documentato (x, y[, z]/x, y, width, height) — questi tipi accettano float semplici, non argomenti solo keyword. - Usa
Matrix.multiply()per comporre le trasformazioni invece di combinare manualmente i sei componentia–fa mano. - Quando il tipo di una proprietà è opzionale (ad esempio
PDF3DAnnotation.background_color: Color | NoneoPDF3DView.ctm: Matrix3D | None), verifica la presenza diNoneprima di leggere le proprietà annidate su di essa. - Ricorri a
GradientAxialShadingsolo quando ti serve un gradiente lineare a due colori come spazio colore del pattern; per un colore piatto e unico usa direttamenteColor. - Le proprietà
left,bottomerightdiRectanglesono derivate dax,yewidth/height— considerale come una vista di comodità dello stesso rettangolo piuttosto che uno stato indipendente.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
| Le coordinate del rettangolo o del punto appaiono scambiate o scalate in modo errato | Argomenti posizionali passati nell’ordine sbagliato a Rectangle(x, y, width, height) o Point3D(x, y, z) | Verifica nuovamente l’ordine degli argomenti rispetto alla firma del costruttore — questi tipi non hanno alcuna imposizione di keyword-only |
AttributeError quando si legge una proprietà colore o matrice | Proprietà acceduta su un valore None da un campo opzionale (ad es. background_color, ctm) | Verifica che il valore non sia None prima di accedere alle proprietà annidate |
| Il gradiente viene visualizzato come un unico colore uniforme | I valori GradientAxialShading.start e end Point sono identici o molto vicini tra loro | Assicurati che start e end segnino due punti visivamente distinti lungo l’asse del gradiente previsto |
FAQ
Devo importare Point, Rectangle o Matrix direttamente nell’uso normale?
Di solito no — li incontrerai più spesso come tipo di una proprietà (come PDF3DAnnotation.rect o PDF3DView.ctm) piuttosto che costruirli da zero, anche se nulla impedisce di costruirli direttamente quando ti serve un valore autonomo.
Qual è la differenza tra Color e ColorPrimitive?
Color contiene dati di canale in stile RGB più un opzionale pattern_color_space per i riempimenti a gradiente. ColorPrimitive è un tipo molto più piccolo che espone solo un valore transparency.
Come posso combinare due trasformazioni con Matrix?
Chiama matrix_a.multiply(matrix_b), che restituisce il Matrix composito. Usa translate(x, y) per una semplice traslazione senza costruire una moltiplicazione completa di matrici.
Matrix3D è usato da qualche parte al di fuori delle annotazioni 3D?
All’interno di questo cluster, Matrix3D appare come il tipo di PDF3DView.ctm — la matrice di trasformazione corrente associata a una vista 3D salvata.
API Reference Riepilogo
| Classe/Metodo | Descrizione |
|---|---|
Point | Coordinate 2D (x, y proprietà float) |
Point3D | coordinate 3D (x, y, z proprietà float) |
Rectangle | Posizione e dimensione (x, y, width, height, più left, bottom, right calcolati) |
Matrix | Trasformazione affine 2D (a–f componenti); metodi translate / multiply |
Matrix3D | Matrice di trasformazione 3D (m11–m33 blocco rotazione/scalatura, traduzione dx/dy/dz) |
Color | Valore colore con riempimento a gradiente pattern_color_space opzionale |
ColorPrimitive | Primitiva di colore minimale che espone transparency |
GradientAxialShading | Gradiente assiale (lineare) tra due valori Color lungo due estremità Point |