Primitives
Primitives
Dieser Leitfaden behandelt die kleinen, praktisch unveränderlichen Wertetypen, die Geometrie- und Farbdaten durch den Rest des API transportieren: 2D- und 3D-Punkte, Rechtecke, Transformationsmatrizen und Farbwerte. In einfachen Workflows importieren Sie diese normalerweise nicht direkt per Name — sie erscheinen als Eigenschaftstypen bei höherwertigen Objekten wie Anmerkungen, Bildplatzierungen und 3D-Ansichten — aber das Verständnis ihrer Struktur erleichtert das Lesen und Erzeugen der Eigenschaften dieser Objekte.
Punkte: Point und Point3D
Point ist eine einfache 2D-Koordinate mit den Float-Eigenschaften x und y. Point3D ist das 3D-Pendant, konstruiert als Point3D(x, y, z) und stellt die Float-Eigenschaften x, y und z bereit. Point ist der Typ, der für GradientAxialShading.start / end verwendet wird; Matrix3D-basierte Transformationen und 3D-Ansichten arbeiten im selben Koordinatenraum, den Point3D beschreibt.
Rectangles
Rectangle(x, y, width, height) beschreibt eine Position und Größe und stellt zusätzlich die berechneten Float-Eigenschaften left, bottom und right neben x, y, width und height bereit. Rectangle ist der Typ hinter PDF3DAnnotation.rect, sodass die Seitenränder einer 3D-Annotation über dieselbe Form wie jedes andere Rechteck im API gelesen und gesetzt werden.
Transformationsmatrizen: Matrix und Matrix3D
Matrix enthält eine 2D-Affine-Transformation als sechs Float-Komponenten — a, b, c, d, e, f — und stellt zwei Methoden bereit: translate(x, y), um eine Translation vor Ort anzuwenden, und multiply(other), um sie mit einer anderen Matrix zu kombinieren, wobei das resultierende Matrix zurückgegeben wird.
Matrix3D ist das 3D-Pendant: ein 3x3 Dreh-/Skalierungsblock (m11 bis m33) plus einer dx, dy, dz Übersetzungskomponente, erstellt ohne Argumente (Matrix3D()) und gefüllt durch Setzen ihrer Eigenschaften. PDF3DView.ctm ist vom Typ Matrix3D | None — die aktuelle Transformationsmatrix für eine gespeicherte 3D-Ansicht.
Tipps und bewährte Verfahren
- Erstelle
Rectangle,PointundPoint3Dmit Positionsargumenten in der dokumentierten Reihenfolge (x, y[, z]/x, y, width, height) — diese Typen akzeptieren reine Floats, keine ausschließlich benannten Argumente. - Verwende
Matrix.multiply(), um Transformationen zu kombinieren, anstatt die sechsa–fKomponenten manuell zusammenzufügen. - Wenn der Typ einer Eigenschaft optional ist (zum Beispiel
PDF3DAnnotation.background_color: Color | NoneoderPDF3DView.ctm: Matrix3D | None), prüfe aufNone, bevor du verschachtelte Eigenschaften daraus ausliest. - Greife nur auf
GradientAxialShadingzurück, wenn du einen zweifarbigen linearen Verlauf als Muster-Farbraum benötigst; für eine flache, einfarbige Darstellung verwende direktColor. - Die Eigenschaften
left,bottomundrightvonRectangleleiten sich vonx,yundwidth/heightab — betrachte sie als eine komfortable Ansicht desselben Rechtecks und nicht als unabhängigen Zustand.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Rechteck- oder Punktkoordinaten erscheinen vertauscht oder falsch skaliert | Positionsargumente in falscher Reihenfolge an Rectangle(x, y, width, height) oder Point3D(x, y, z) übergeben | Überprüfen Sie die Argumentreihenfolge anhand der Signatur des Konstruktors — diese Typen erzwingen keine Keyword-only-Parameter |
AttributeError beim Lesen einer Farb- oder Matrix-Eigenschaft | Auf einen None-Wert aus einem optionalen Feld zugegriffen (z. B. background_color, ctm) | Überprüfen Sie, dass der Wert nicht None ist, bevor Sie auf verschachtelte Eigenschaften zugreifen |
| Der Gradient wird als eine einheitliche flache Farbe dargestellt | GradientAxialShading.start und end Point Werte sind identisch oder sehr nahe beieinander | Stellen Sie sicher, dass start und end zwei visuell unterschiedliche Punkte entlang der beabsichtigten Gradientenachse markieren |
FAQ
Muss ich Point, Rectangle oder Matrix bei normaler Verwendung direkt importieren?
In der Regel nicht — Sie werden diese am häufigsten als Typ einer Eigenschaft (wie PDF3DAnnotation.rect oder PDF3DView.ctm) antreffen, statt sie von Grund auf neu zu erstellen, obwohl nichts dagegen spricht, sie direkt zu konstruieren, wenn Sie einen eigenständigen Wert benötigen.
Was ist der Unterschied zwischen Color und ColorPrimitive?
Color enthält RGB-artige Kanaldaten plus ein optionales pattern_color_space für Farbverläufe. ColorPrimitive ist ein viel kleinerer Typ, der nur einen transparency-Wert offenlegt.
Wie kombiniere ich zwei Transformationen mit Matrix?
Rufen Sie matrix_a.multiply(matrix_b) auf, das die zusammengesetzte Matrix zurückgibt. Verwenden Sie translate(x, y) für eine einfache Verschiebung, ohne eine vollständige Matrixmultiplikation zu erstellen.
Wird Matrix3D irgendwo außerhalb von 3D-Anmerkungen verwendet?
Innerhalb dieses Clusters erscheint Matrix3D als Typ von PDF3DView.ctm — die aktuelle Transformationsmatrix, die mit einer gespeicherten 3D-Ansicht verbunden ist.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
Point | 2D-Koordinate (x, y float properties) |
Point3D | 3D-Koordinate (x, y, z float-Eigenschaften) |
Rectangle | Position und Größe (x, y, width, height, plus berechnete left, bottom, right) |
Matrix | 2D affine Transformation (a–f Komponenten); translate / multiply Methoden |
Matrix3D | 3D-Transformationsmatrix (m11–m33 Rotations-/Skalierungsblock, dx/dy/dz Translation) |
Color | Farbwert mit optionaler pattern_color_space Gradientfüllung |
ColorPrimitive | Minimaler Farbprimitive, der transparency offenlegt |
GradientAxialShading | Axialer (linearer) Gradient zwischen zwei Color-Werten entlang zweier Point-Endpunkte |