Start · Sprachen · PHP · Referenz · UI\Draw\Path

UI\Draw\Path

Klasse

Repräsentiert einen Zeichenpfad für die UI-Erweiterung, der festlegt, wo ein <code>UI\Draw\Pen</code> auf einer <code>UI\Area</code> zeichnet.

seit PHP 0.9.9 Kategorie: misc

Signatur

class UI\Draw\Path

Beschreibung

UI\Draw\Path ist ein zentrales Objekt der PHP-UI-Erweiterung (php-ui / libui-Binding). Ein Pfad beschreibt eine Abfolge von geometrischen Formen – Linien, Bögen, Rechtecke und Bezier-Kurven –, die anschließend von einem UI\Draw\Pen entweder gefüllt oder gezeichnet (gestrokt) werden können.

Der Pfad selbst enthält keine visuelle Darstellung; er definiert lediglich die Geometrie. Erst wenn der Pfad mit UI\Draw\Pen::fill() oder UI\Draw\Pen::stroke() auf einer UI\Area gerendert wird, werden Farbe, Linienstärke und andere Stil-Eigenschaften angewandt.

Ein UI\Draw\Path kann entweder im Modus Winding (UI\Draw\Path::Winding) oder Alternate (UI\Draw\Path::Alternate) erstellt werden. Der Modus bestimmt, wie überlagernde Flächen bei der Füll-Berechnung behandelt werden. Nach dem Aufbau des Pfades muss end() aufgerufen werden, bevor der Pfad gerendert wird.

Typische Verwendung ist das Zeichnen von Benutzeroberflächen-Komponenten in einem UI\Area::onDraw-Callback: Pfad anlegen, Formen hinzufügen, end() aufrufen, dann mit dem Pen rendern.

Parameter

Name Typ Default Beschreibung
$mode int UI\Draw\Path::Winding Füllmodus des Pfades. Mögliche Werte sind UI\Draw\Path::Winding (Standard) und UI\Draw\Path::Alternate. Bestimmt, wie sich überschneidende Teilpfade beim Füllen verhalten.

Beispiele

Einfaches Rechteck auf einer UI\Area zeichnen

<?php
use UI\Draw\Path;
use UI\Draw\Pen;
use UI\Draw\Brush;
use UI\Draw\Brush\Type;
use UI\Area;
use UI\Window;
use UI\Size;
use UI\Point;

$window = new Window('Rechteck-Demo', new Size(400, 300), false);

$area = new class extends Area {
    protected function onDraw(Pen $pen, Size $areaSize, Point $clipPoint, Size $clipSize): void {
        // Pfad anlegen
        $path = new Path(Path::Winding);
        $path->addRectangle(new Point(50, 50), new Size(200, 100));
        $path->end();

        // Pinsel (einfarbig rot)
        $brush = new Brush(Type::Solid, 1.0, 0.0, 0.0, 1.0);

        // Pfad füllen
        $pen->fill($path, $brush);
    }
};

$window->add($area);
$window->show();
UI\run();

Linie von Punkt zu Punkt zeichnen

<?php
use UI\Draw\Path;
use UI\Draw\Pen;
use UI\Draw\Brush;
use UI\Draw\Brush\Type;
use UI\Draw\Stroke;
use UI\Draw\Line\Cap;
use UI\Draw\Line\Join;
use UI\Area;
use UI\Window;
use UI\Size;
use UI\Point;

$window = new Window('Linien-Demo', new Size(400, 300), false);

$area = new class extends Area {
    protected function onDraw(Pen $pen, Size $areaSize, Point $clipPoint, Size $clipSize): void {
        $path = new Path(Path::Winding);
        // Figur beginnen und Linie ziehen
        $path->newFigure(new Point(10, 10));
        $path->lineTo(new Point(300, 200));
        $path->end();

        $brush  = new Brush(Type::Solid, 0.0, 0.0, 1.0, 1.0); // blau
        $stroke = new Stroke(Cap::Flat, Join::Miter, 2.0, 10.0);

        $pen->stroke($path, $brush, $stroke);
    }
};

$window->add($area);
$window->show();
UI\run();

// Wichtig · Fallstricke

Wichtig: end() muss zwingend aufgerufen werden, bevor der Pfad mit dem Pen gerendert wird. Ein nicht abgeschlossener Pfad führt zu undefiniertem Verhalten oder einem Fehler.

Die PHP-UI-Erweiterung (ui) ist nicht Bestandteil der PHP-Standardinstallation und muss separat über PECL installiert werden (pecl install ui). Sie erfordert die native libui-Bibliothek.

Die Konstantenwerte UI\Draw\Path::Winding und UI\Draw\Path::Alternate entsprechen den libui-Füllregeln NonZero bzw. EvenOdd und beeinflussen nur die Ausgabe bei Füll-Operationen (fill()), nicht bei Strich-Operationen (stroke()).