Start · Sprachen · PHP · Referenz · ps_translate

ps_translate

Funktion

Verschiebt den Ursprung des Koordinatensystems im aktuellen PostScript-Dokument um die angegebenen Werte in x- und y-Richtung.

Kategorie: misc

Signatur

ps_translate(resource $psdoc, float $x, float $y): bool

Beschreibung

ps_translate gehört zur PS-Erweiterung (pslib) für PHP und ermöglicht es, den Koordinatenursprung des aktuellen PostScript-Grafikzustands zu verschieben. Dies entspricht der PostScript-Anweisung translate und verändert das aktuelle Transformationsmatrix (CTM).

Die Funktion ist besonders nützlich, wenn Grafikelemente relativ zu einem bestimmten Punkt positioniert werden sollen, ohne absolute Koordinaten verwenden zu müssen. So lässt sich beispielsweise ein ganzer Zeichenblock an eine neue Position verschieben, indem einmalig der Ursprung gesetzt wird.

Wie alle Transformationsfunktionen der PS-Erweiterung wirkt ps_translate kumulativ und beeinflusst alle nachfolgenden Zeichenoperationen. Es empfiehlt sich daher, den Grafikzustand vor der Translation mit ps_save zu sichern und nach Abschluss der Zeichenoperationen mit ps_restore wiederherzustellen.

Die Einheiten für x und y entsprechen PostScript-Punkten (1/72 Zoll). Das Koordinatensystem von PostScript hat seinen Ursprung standardmäßig unten links, mit der y-Achse nach oben.

Parameter

Name Typ Default Beschreibung
$psdoc Pflicht resource Die Ressource des PostScript-Dokuments, die zuvor mit ps_new() erstellt wurde.
$x Pflicht float Der Versatz in horizontaler Richtung (x-Achse) in PostScript-Punkten.
$y Pflicht float Der Versatz in vertikaler Richtung (y-Achse) in PostScript-Punkten. Positive Werte verschieben nach oben (PostScript-Koordinatensystem).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler.

Beispiele

Einfache Translation des Koordinatenursprungs

<?php
$ps = ps_new();
if (!$ps) {
    die('Fehler beim Erstellen des PS-Dokuments');
}

ps_open_file($ps, 'ausgabe.ps');
ps_begin_page($ps, 595, 842); // DIN A4

// Ursprung in die Mitte der Seite verschieben
ps_translate($ps, 297.5, 421);

// Jetzt zeichnen wir relativ zur Seitenmitte
// Ein kleines Rechteck rund um den neuen Ursprung
ps_moveto($ps, -50, -50);
ps_lineto($ps, 50, -50);
ps_lineto($ps, 50, 50);
ps_lineto($ps, -50, 50);
ps_closepath($ps);
ps_stroke($ps);

ps_end_page($ps);
ps_close($ps);
ps_delete($ps);

echo 'PostScript-Datei erfolgreich erstellt.';
?>
PostScript-Datei erfolgreich erstellt.

Translation mit gesichertem Grafikzustand

<?php
$ps = ps_new();
ps_open_file($ps, 'mehrere_elemente.ps');
ps_begin_page($ps, 595, 842);

// Grafik-Element 1: oben links
ps_save($ps);
ps_translate($ps, 100, 700);
ps_moveto($ps, 0, 0);
ps_lineto($ps, 80, 0);
ps_lineto($ps, 80, 80);
ps_lineto($ps, 0, 80);
ps_closepath($ps);
ps_fill($ps);
ps_restore($ps);

// Grafik-Element 2: unten rechts (Ursprung wieder zurückgesetzt)
ps_save($ps);
ps_translate($ps, 400, 150);
ps_moveto($ps, 0, 0);
ps_lineto($ps, 80, 0);
ps_lineto($ps, 80, 80);
ps_lineto($ps, 0, 80);
ps_closepath($ps);
ps_stroke($ps);
ps_restore($ps);

ps_end_page($ps);
ps_close($ps);
ps_delete($ps);

echo 'Zwei Elemente gezeichnet.';
?>
Zwei Elemente gezeichnet.

// Wichtig · Fallstricke

Kumulative Wirkung: Mehrfache Aufrufe von ps_translate addieren sich. Wird die Funktion ohne vorheriges ps_save mehrfach aufgerufen, verschiebt sich der Ursprung mit jedem Aufruf weiter. Verwende immer ps_save und ps_restore, um unbeabsichtigte Transformationen zu vermeiden.

Koordinatensystem: PostScript verwendet ein kartesisches Koordinatensystem mit dem Ursprung unten links. Dies unterscheidet sich von vielen anderen Grafiksystemen (z. B. Bildschirmkoordinaten), bei denen der Ursprung oben links liegt. Positive y-Werte zeigen nach oben.

Verfügbarkeit: Die PS-Erweiterung ist nicht standardmäßig in PHP enthalten. Sie muss über PECL installiert oder bei der PHP-Kompilierung mit --with-ps aktiviert werden.