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, Point och Point3D med 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 sex a–f komponenterna för hand.
  • När en egenskaps typ är valfri (till exempel PDF3DAnnotation.background_color: Color | None eller PDF3DView.ctm: Matrix3D | None), kontrollera None innan du läser inbäddade egenskaper på den.
  • Använd GradientAxialShading endast 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änd Color direkt.
  • Rectangles left, bottom och right egenskaper härrör från x, y och width/height — betrakta dem som en bekvämlighetsvy av samma rektangel snarare än ett oberoende tillstånd.

Vanliga problem

ProblemOrsakLösning
Rektangel- eller punktkoordinater visas ombytta eller felaktigt skaladePositionsargumenten 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-egenskapEgenskap å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ärgGradientAxialShading.start och end Point värden är identiska eller mycket nära varandraSe 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/MetodBeskrivning
Point2D-koordinat (x, y flyttalsegenskaper)
Point3D3D-koordinat (x, y, z float-egenskaper)
RectanglePosition och storlek (x, y, width, height, plus beräknade left, bottom, right)
Matrix2D affin transformation (a–f komponenter); translate / multiply metoder
Matrix3D3D-transformationsmatris (m11–m33 rotations-/skalningsblock, dx/dy/dz translation)
ColorFärgvärde med valfri pattern_color_space gradientfyllning
ColorPrimitiveMinimal färgprimitiv som exponerar transparency
GradientAxialShadingAxial (linjär) gradient mellan två Color-värden längs två Point-ändpunkter

Se även

 Svenska