Primitives
Primitives
Den här guiden täcker de små, i praktiken oföränderliga värdetyperna som bär geometridata och färgdata genom resten av API: 2D- och 3D-punkter, rektanglar, transformationsmatriser och färgvärden. Du importerar vanligtvis inte dessa direkt med namn i enkla arbetsflöden — de dyker upp som egenskapstyper på högre nivå-objekt som annotationer, bildplaceringar och 3D-vyer — men att känna till deras struktur gör dessa objekts egenskaper enkla att läsa och konstruera.
Punkter: Point och Point3D
Point är en enkel 2D-koordinat med x och y flyttals-egenskaper. Point3D är dess 3D-motsvarighet, konstruerad som Point3D(x, y, z) och exponerar x, y och z flyttals-egenskaper. Point är typen som används för GradientAxialShading.start / end; Matrix3D-baserade transformationer och 3D-vyer arbetar i samma koordinatrum som Point3D beskriver.
Rectangles
Rectangle(x, y, width, height) beskriver en position och storlek, och exponerar dessutom beräknade left, bottom och right flyttals-egenskaper tillsammans med x, y, width och height. Rectangle är typen bakom PDF3DAnnotation.rect, så en 3D-annotations sidans gränser läses och sätts via samma form som alla andra rektanglar i API.
Transformationsmatriser: Matrix och Matrix3D
Matrix håller en 2D affin transform som sex flyttal-komponenter — a, b, c, d, e, f — och tillhandahåller två metoder: translate(x, y) för att tillämpa en translation på plats, och multiply(other) för att komponera den med en annan Matrix, vilket returnerar den resulterande Matrix.
Matrix3D är 3D-motsvarigheten: ett 3×3 rotations-/skalningsblock (m11 till m33) plus en dx, dy, dz translateringskomponent, konstruerad utan argument (Matrix3D()) och fylld genom att sätta dess egenskaper. PDF3DView.ctm har typen Matrix3D | None — den aktuella transformationsmatrisen för en sparad 3D-vy.
Tips och bästa praxis
- Konstruera
Rectangle,PointochPoint3Dmed positionsargument i den dokumenterade ordningen (x, y[, z]/x, y, width, height) — dessa typer tar vanliga flyttal, inte enbart nyckelordsargument. - Använd
Matrix.multiply()för att komponera transformationer istället för att manuellt kombinera de sexa–fkomponenterna för hand. - När en egenskaps typ är valfri (till exempel
PDF3DAnnotation.background_color: Color | NoneellerPDF3DView.ctm: Matrix3D | None), kontrolleraNoneinnan du läser inbäddade egenskaper på den. - Använd
GradientAxialShadingendast när du behöver ett tvåfärgs linjärt gradient som ett mönsterfärgrymd; för en platt, enfärgad nyans, användColordirekt. Rectanglesleft,bottomochrightegenskaper härrör frånx,yochwidth/height— betrakta dem som en bekvämlighetsvy av samma rektangel snarare än ett oberoende tillstånd.
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
| Rektangel- eller punktkoordinater visas ombytta eller felaktigt skalade | Positionsargumenten har passerats i fel ordning till Rectangle(x, y, width, height) eller Point3D(x, y, z) | Dubbelkolla argumentordningen mot konstruktor-signaturen — dessa typer har ingen tvingad nyckelords-endast-parameter |
AttributeError vid läsning av en färg- eller matris-egenskap | Egenskap åtkoms på ett None-värde från ett valfritt fält (t.ex. background_color, ctm) | Kontrollera att värdet inte är None innan du får åtkomst till nästlade egenskaper |
| Gradienten renderas som en enda platt färg | GradientAxialShading.start och end Point värden är identiska eller mycket nära varandra | Se till att start och end markerar två visuellt distinkta punkter längs den avsedda gradientaxeln |
FAQ
Behöver jag importera Point, Rectangle eller Matrix direkt vid normal användning?
Vanligtvis inte — du kommer oftast att stöta på dessa som typen för en egenskap (som PDF3DAnnotation.rect eller PDF3DView.ctm) snarare än att konstruera dem från början, även om inget hindrar att konstruera dem direkt när du behöver ett fristående värde.
Vad är skillnaden mellan Color och ColorPrimitive?
Color innehåller kanaldata i RGB-stil plus ett valfritt pattern_color_space för gradientfyllningar. ColorPrimitive är en mycket mindre typ som bara exponerar ett transparency-värde.
Hur kombinerar jag två transformationer med Matrix?
Anropa matrix_a.multiply(matrix_b), som returnerar den sammansatta Matrix. Använd translate(x, y) för en enkel translation utan att bygga en full matrixmultiplikation.
Används Matrix3D någonstans utanför 3D-annotationerna?
Inom den här klustret förekommer Matrix3D som typen av PDF3DView.ctm — den aktuella transformationsmatrisen som är kopplad till en sparad 3D-vy.
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
Point | 2D-koordinat (x, y flyttalsegenskaper) |
Point3D | 3D-koordinat (x, y, z float-egenskaper) |
Rectangle | Position och storlek (x, y, width, height, plus beräknade left, bottom, right) |
Matrix | 2D affin transformation (a–f komponenter); translate / multiply metoder |
Matrix3D | 3D-transformationsmatris (m11–m33 rotations-/skalningsblock, dx/dy/dz translation) |
Color | Färgvärde med valfri pattern_color_space gradientfyllning |
ColorPrimitive | Minimal färgprimitiv som exponerar transparency |
GradientAxialShading | Axial (linjär) gradient mellan två Color-värden längs två Point-ändpunkter |