Zeichnen und Grafik in Wisej.NET
Früher oder später verlangt jede Betriebsanwendung Pixel, die kein Standard-Control und kein Stylesheet liefern kann: ein Gauge, eine Sparkline in einer Grid-Zelle, eine bedienbare Topologiekarte oder ein PNG, das am Schichtbericht hängt. Dieser Advanced-Kurs zeigt Ihnen, wie Sie solche Grafiken auf die Wisej.NET-Art erzeugen – indem Sie die Rendering-Oberfläche wählen, bevor Sie den ersten Zeichenaufruf schreiben. Alles entsteht rund um VisualOperationsStudio, eine Betriebsanwendung, in der ein einziges Telemetrie- und Topologiemodell auf vier verschiedene Arten gerendert wird. Sieben Module beginnen bei der Zeichenarchitektur von Wisej.NET und der Grenze zwischen Server und Browser und führen weiter zum sauber umgesetzten Paint-Event von Controls, zum Zellenzeichnen in der DataGridView auf Grids mit tausend Zeilen sowie zu Wisej.Web.Canvas und dem HTML5-Canvas-2D-Modell. Von dort machen Sie aus der Canvas einen interaktiven Editor mit Trefferprüfung, Verschieben und Zoomen, erzeugen Off-Screen-Bilder mit System.Drawing.Managed unter Windows, Linux, macOS, iOS und Android und schließen mit einer produktivreifen, instrumentierten und gemessenen Zeichenarchitektur im Abschlussprojekt ab. Gedacht ist er für erfahrene .NET-Entwicklerinnen und -Entwickler, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen.
Erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed.
- Niveau: Advanced
- Dauer: 10 Stunden
- Module: 7
Lehrplan
Modul 1: Die Zeichenarchitektur von Wisej.NET
Modul 1 von Zeichnen und Grafik in Wisej.NET – erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed. Lesen Sie den Lektionsleitfaden und den Lab- und Prüfungsleitfaden, sehen Sie sich den Walkthrough zur Zeichenarchitektur an, bestehen Sie den Wissenstest und schließen Sie dann das praktische Lab in VisualOperationsStudio ab.
- LektüreLektionsleitfaden · 14 Min.
Vier Rendering-Pipelines und wie Sie zwischen ihnen wählen: das Paint-Event eines Controls, das ein auf dem Server gerendertes Bild ausliefert, DataGridView CellPaint innerhalb einer einzelnen Zelle, Wisej.Web.Canvas, das Zeichenbefehle an den Browser schickt, und das Off-Screen-Rendering mit System.Drawing.Managed, das Bild-Bytes erzeugt – dazu die Entscheidungsleiter, die Standard-Controls und CSS als Normalfall beibehält. Was das für erfahrene .NET-Entwickler bedeutet, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen – und wie Sie dieses Modul lesen.
- LektüreLab- und Prüfungsleitfaden · 10 Min.
Was Sie im praktischen Lab bauen, das vorgeschlagene Vorgehen und die geforderten Ergebnisse.
- VideolektionVier Oberflächen, ein Wert: woher die Pixel kommen · 14 Min.
Vier Oberflächen, ein Wert: woher die Pixel kommen – ein geführter Video-Walkthrough zu Modul 1, Schritt für Schritt in VisualOperationsStudio aufgebaut. Läuft direkt hier im Player.
Transkript der Sprecherstimme
Zeichnen und Malen in Wisej.NET beginnt mit einer Entscheidung, die vor jedem Zeichencode steht: wo die Pixel tatsächlich entstehen. In diesem Modul erscheint ein einziger Telemetriemesswert auf vier verschiedenen Oberflächen von Visual Operations Studio, sodass Sie sie direkt nebeneinander vergleichen können.
Eine Zahl zu zeichnen ist nicht eine Anforderung, sondern vier. Ein Rundinstrument auf einer Betriebsseite, eine kleine Anzeige in einer Grid-Zelle, ein Knoten auf einer Topologiekarte und ein Bild in einer Reportdatei zeigen denselben Wert. Doch jedes entsteht an anderer Stelle, und jedes schickt etwas anderes zum Browser.
Ein Paint-Handler läuft auf dem Server; das Ergebnis erreicht den Browser als fertiges Bild. CellPaint leistet dieselbe Arbeit, begrenzt auf eine einzelne Grid-Zelle. Die Canvas verhält sich anders: Sie sendet Zeichenbefehle, die der Browser selbst ausführt. Das Off-Screen-Rendering erzeugt Bildbytes, die kein Control jemals anzeigt.
Auf der Seite lesen alle vier Oberflächen dasselbe TelemetrySample-Feld; keine besitzt den Wert. Ein Button ändert dieses Feld und frischt jede Oberfläche auf ihre Weise auf: Label und Fortschrittsbalken lesen es einfach, das gezeichnete Panel wird invalidiert und vom Server neu gezeichnet, die Szenenmethode der Canvas läuft erneut, und ein frisches Off-Screen-Bild entsteht.
Eigenes Zeichnen steht am Ende einer Entscheidungsleiter, nicht am Anfang. Greifen Sie zuerst zu einem Standard-Control, dann zu gewöhnlichem Markup, und erst danach zu einem Paint-Handler, einer gezeichneten Zelle oder einer Canvas. Das Off-Screen-Rendering folgt darauf, und eine Zeichenschleife im Browser bleibt den Fällen vorbehalten, in denen die Bildrate wirklich zählt.
Eine Canvas neu zu zeichnen heißt, sie zu leeren und die ganze Szene aus dem Modell neu aufzubauen, denn auf die Kopie im Browser kann sich der Server nicht verlassen. Der Off-Screen-Renderer steht am anderen Ende: eine Bitmap und eine darüber erzeugte Graphics-Fläche genügen für ein Bild, ganz ohne Control.
Führen Sie die Seite aus und klicken Sie auf New reading. Dieselbe Zahl erscheint an allen vier Stellen gleichzeitig, als wäre es ein einziger Vorgang. Das ist es nicht. Jede Oberfläche hat dafür etwas ganz anderes auf die Leitung gelegt, und genau um diesen Unterschied geht es hier.
Ändern Sie nun die Größe des Browserfensters. Drei Oberflächen kehren von selbst zurück, denn der Server besitzt weiterhin, was sie zeigen. Die Canvas kommt leer zurück und bleibt leer, bis die Redraw-Methode sie aus dem gespeicherten Messwert neu aufbaut. Diese Asymmetrie ist die praktische Folge der Grenze.
Im ersten Lab bauen Sie diese Seite selbst: ein Modell hinter vier Oberflächen, ein Button, der alle vier auffrischt, und eine kurze Notiz dazu, was pro Oberfläche über das Netz geht und welche Darstellung eine Größenänderung übersteht.
- LektüreKI-Coding-Übung · 20 Min.
Erstellen Sie das Beispielprojekt VisualOperationsStudio dieses Moduls mit ChatGPT oder Claude aus einem fertigen Prompt, der das Modell auf die Spezifikation des Moduls verweist – und prüfen, starten und erweitern Sie dann, was Sie erhalten.
- WissenstestWissenstest – Modul 1 · 10 Min. · Bestehensgrenze 80%
- Praktisches LabLab – Ein Wert, vier Rendering-Oberflächen · 45 Min.
Ziel: Bauen Sie die Shell von VisualOperationsStudio und stellen Sie einen einzigen Telemetriewert gleichzeitig auf vier Oberflächen dar. Erstellen Sie eine VisualOperationsPage, die genau eine TelemetrySample-Modellinstanz hält, und zeigen Sie deren Wert dann (1) als schlichtes Label mit ProgressBar, (2) in einem Panel mit Paint-Handler, der einen Balken aus PaintEventArgs.Graphics und e.ClipRectangle zeichnet, (3) in einer Wisej.Web.Canvas, deren Redraw-Handler denselben Balken aus dem Modell neu aufbaut, und (4) als Off-Screen-Bitmap, die mit Graphics.FromImage gerendert und in einer PictureBox angezeigt wird. Verdrahten Sie einen Button, der den Modellwert ändert und alle vier Oberflächen über Invalidate() und ein Canvas-Redraw aktualisiert, ändern Sie dann die Browsergröße und halten Sie fest, welche Oberflächen das überstehen und welche neu aufgebaut werden müssen. Ergebnisse: VisualOperationsPage mit einem TelemetrySample-Modell, aus dem jede Oberfläche liest; Paint-Handler, der aus PaintEventArgs.Graphics innerhalb von e.ClipRectangle zeichnet; Canvas-Redraw-Handler, der die gesamte Szene nach einer Größenänderung aus dem Modell neu aufbaut; Off-Screen-Bitmap, die mit Graphics.FromImage gerendert und auf der Seite angezeigt wird; SurfaceNotes.md mit der Notiz, was pro Oberfläche über das Netzwerk geht und welche Darstellungen eine Größenänderung überleben.
Modul 2: Das Paint-Event von Controls meistern
Modul 2 von Zeichnen und Grafik in Wisej.NET – erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed. Lesen Sie den Lektionsleitfaden und den Lab- und Prüfungsleitfaden, sehen Sie sich den Walkthrough zum gezeichneten Gauge an, bestehen Sie den Wissenstest und schließen Sie dann das praktische Lab in VisualOperationsStudio ab.
- LektüreLektionsleitfaden · 14 Min.
Server-seitig gezeichnete Controls, sauber gemacht: PaintEventArgs.Graphics und ClipRectangle, Geometrie getrennt vom Zeichnen, das Freigeben jedes selbst erzeugten Pen, Brush und Font, Property-Setter, die Invalidate() genau einmal aufrufen, und das Kostenbudget fürs Zeichnen, das entscheidet, wann ein gethemtes Control die bessere Antwort ist. Was das für erfahrene .NET-Entwickler bedeutet, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen – und wie Sie dieses Modul lesen.
- LektüreLab- und Prüfungsleitfaden · 10 Min.
Was Sie im praktischen Lab bauen, das vorgeschlagene Vorgehen und die geforderten Ergebnisse.
- VideolektionEin gezeichnetes Gauge bauen, das sich nur neu zeichnet, wenn es muss · 14 Min.
Ein gezeichnetes Gauge bauen, das sich nur neu zeichnet, wenn es muss – ein geführter Video-Walkthrough zu Modul 2, Schritt für Schritt in VisualOperationsStudio aufgebaut. Läuft direkt hier im Player.
Transkript der Sprecherstimme
Dieses Modul baut ein gezeichnetes Control richtig. Das TelemetryGauge zeichnet einen Ring, seine Schwellenzonen, einen Zeiger und einen Zahlenwert. Jede öffentliche Property begrenzt zuerst den übergebenen Wert und entscheidet erst danach, ob überhaupt neu gezeichnet werden muss.
Ihr Zeichencode läuft auf dem Server, und der Browser bekommt das fertige Bild. Das ist bequem, und genau deshalb ist ein in sechs Panels kopierter Handler teuer: Es entstehen sechs Bilder, sechs Sätze von Zeichenobjekten und Neuzeichnungen, um die niemand gebeten hat.
Also erst rechnen, dann zeichnen. Der Helfer GaugeGeometry nimmt ein Rechteck und liefert die Ringgrenzen, die Winkelbereiche, die Zeigerpunkte und das Rechteck der Beschriftung. Das ist gewöhnliche Mathematik ohne jeden Zeichenaufruf, und deshalb lässt sich der schwierige Teil prüfen, ohne je ein Control zu erzeugen.
Jeder Property-Setter folgt einem Rezept: den eingehenden Wert begrenzen, mit dem aktuellen vergleichen, sofort zurückkehren, wenn sich nichts geändert hat, zuweisen und genau einmal invalidieren. Dieselbe Stelle frischt die AccessibleDescription auf, sodass der Messwert auch als Text verfügbar bleibt und nicht nur als Pixel.
Der Handler sichert sich gegen ein ClipRectangle ohne Größe ab, ruft die Messung einmal auf und zeichnet dann. Fünf using-Deklarationen decken die fünf Objekte ab, die dieser Code erzeugt und damit besitzt. Das Graphics aus den Ereignisargumenten gehört nicht dazu; es freizugeben wäre ein Fehler.
Der Besitz klärt die meisten heiklen Fragen. Brushes und Pens des Frameworks sind geteilt und bleiben unangetastet. Ein eigener statischer Pen ist unsicher, sobald mehrere Sitzungen gleichzeitig zeichnen. Und ein Datenbankaufruf, das Laden einer Schrift oder ein Timer haben im Zeichenpfad nichts zu suchen.
Sehen Sie zu. Ein Messwert ändert sich, also invalidiert ein Gauge, und ein Bild entsteht. Die beiden anderen Setter haben ihre Werte verglichen und sind früh zurückgekehrt — genau darum geht es. Eine Größenänderung baut danach jedes Bild aus dem neuen ClipRectangle auf, in der neuen Größe.
Dann kommt das Budget: Prozessorzeit auf dem Server, Speicher für die temporäre Bitmap und die Bytes, die jedes Neuzeichnen versendet. Wenn diese Zahlen die Pixel nicht mehr rechtfertigen, ist ein gethemtes Control die bessere Antwort. In beiden Fällen müssen die Werte als Text lesbar bleiben.
Im zweiten Lab bauen Sie das Gauge und seinen reinen Geometrie-Helfer, sichern Größe null und einen umgekehrten Wertebereich ab, veröffentlichen den Messwert über die AccessibleDescription und notieren die Kosten eines Neuzeichnens.
- LektüreKI-Coding-Übung · 20 Min.
Erstellen Sie das Beispielprojekt VisualOperationsStudio dieses Moduls mit ChatGPT oder Claude aus einem fertigen Prompt, der das Modell auf die Spezifikation des Moduls verweist – und prüfen, starten und erweitern Sie dann, was Sie erhalten.
- WissenstestWissenstest – Modul 2 · 10 Min. · Bestehensgrenze 80%
- Praktisches LabLab – Ein wiederverwendbares gezeichnetes Telemetrie-Gauge · 45 Min.
Ziel: Ergänzen Sie VisualOperationsStudio um ein wiederverwendbares TelemetryGauge-Control, das einen Ring, farbige Schwellenzonen, einen Zeiger, einen Zahlenwert und eine Beschriftung zeichnet. Geben Sie ihm die Properties Value, Minimum, Maximum, WarningThreshold und CriticalThreshold, deren Setter die Eingabe begrenzen, bei unveränderten Werten sofort zurückkehren und Invalidate() einmal aufrufen. Legen Sie die Koordinatenmathematik in einen seiteneffektfreien GaugeGeometry-Helfer, der ein Rectangle entgegennimmt und Ringgrenzen, Winkelbereiche, Zeigerpunkte und das Beschriftungsrechteck zurückgibt; zeichnen Sie dann aus diesen Werten mit per using begrenzten Pens, Brushes und einem GraphicsPath und lassen Sie das übergebene Graphics unangetastet. Behandeln Sie ein Control der Größe null, einen umgekehrten Wertebereich und einen Wert außerhalb des Bereichs, ohne eine Exception auszulösen, und veröffentlichen Sie den Messwert über AccessibleDescription, damit er nicht nur als Pixel existiert. Ergebnisse: TelemetryGauge-Control mit begrenzenden Value-, Minimum-, Maximum- und Schwellen-Properties, die pro echter Änderung genau einmal Invalidate() aufrufen; seiteneffektfreier GaugeGeometry-Helfer, der Ringgrenzen, Winkelbereiche, Zeigerpunkte und das Beschriftungsrechteck liefert; Paint-Handler, der jeden selbst erzeugten Pen, Brush, Font und Path freigibt und e.Graphics niemals freigibt; Absicherungen für Größe null, umgekehrten Bereich und Werte außerhalb des Bereichs, dazu eine AccessibleDescription mit dem Messwert; PaintCost.md mit Notizen zur Größe des neu gezeichneten Bereichs, zur Häufigkeit des Neuzeichnens und dazu, wann ein gethemtes Control günstiger wäre.
Modul 3: Zellenzeichnen in der DataGridView
Modul 3 von Zeichnen und Grafik in Wisej.NET – erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed. Lesen Sie den Lektionsleitfaden und den Lab- und Prüfungsleitfaden, sehen Sie sich den Walkthrough zum Zellenzeichnen in der DataGridView an, bestehen Sie den Wissenstest und schließen Sie dann das praktische Lab in VisualOperationsStudio ab.
- LektüreLektionsleitfaden · 14 Min.
Zeichnen im Grid: UserPaint auf Zellen- oder Spaltenebene, DataGridViewCellPaintEventArgs mit RowIndex und ColumnIndex, Fortschritts- und Sparkline-Zellen, die Zeilen sparsam auslesen, und der ehrliche Vergleich mit AllowHtml-Zellinhalten in einem Grid mit tausend Zeilen. Was das für erfahrene .NET-Entwickler bedeutet, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen – und wie Sie dieses Modul lesen.
- LektüreLab- und Prüfungsleitfaden · 10 Min.
Was Sie im praktischen Lab bauen, das vorgeschlagene Vorgehen und die geforderten Ergebnisse.
- VideolektionSparklines und Gauges in Grid-Zellen, auch bei großen Datenmengen · 14 Min.
Sparklines und Gauges in Grid-Zellen, auch bei großen Datenmengen – ein geführter Video-Walkthrough zu Modul 3, Schritt für Schritt in VisualOperationsStudio aufgebaut. Läuft direkt hier im Player.
Transkript der Sprecherstimme
In diesem Modul zeichnet das Grid. Visual Operations Studio zeigt jetzt tausend Maschinen, und zwei seiner Spalten müssen auf einen Blick lesbar sein statt Zahl für Zahl.
Dorthin führen drei Wege. Eine gebundene Zahl, die niemand überfliegt, ist ehrlich, aber nutzlos. Ein Gauge-Control in jeder Zeile ist lesbar und ruinös, denn das wären tausend serverseitige Controls in einer einzigen Sitzung. Der dritte Weg ist eine Zelle, die sich selbst zeichnet, und das nur, solange sie wirklich sichtbar ist.
UserPaint kommt immer vor CellPaint: Eine Zelle oder eine ganze Spalte wird auf selbst gezeichnet geschaltet, und erst dann löst das Grid dafür sein CellPaint-Event aus. Die Ereignisargumente leiten sich von den gewöhnlichen Paint-Argumenten ab, tragen also Graphics und ClipRectangle, und ergänzen RowIndex und ColumnIndex für die Verteilung.
Ein Unterschied wiegt schwerer als alle anderen. Die Ereignisargumente von Wisej.NET bieten keine Helfer für Hintergrund oder Inhalt, Ihr Handler verantwortet also alles, was in dieser Zelle erscheint. Ein Windows-Forms-Beispiel unverändert zu übernehmen funktioniert nicht. Abonnieren Sie einmal am Grid und verzweigen Sie auf die beiden Spalten, die Ihnen gehören.
Sichern Sie ab, bevor Sie zeichnen. Ein negativer RowIndex ist eine Kopfzeile und keine Datenzeile, und eine fremde Spalte kehrt sofort zurück. Erst danach nehmen Sie die Geometrie aus dem ClipRectangle und lesen die benötigten Werte in einem einzigen Schritt aus dem Objekt, an das die Zeile bereits gebunden ist.
Im Lauf erzeugen sechs sichtbare Zeilen zwölf Aufrufe im Handler: ein schwellenwertgefärbter Balken für die Gesundheit und eine kleine Sparkline für den Trend. Die ausgewählte Zeile wird mit eigenen Farben gezeichnet, denn eine gezeichnete Zelle, die die Auswahl ignoriert, wirkt defekt, sobald jemand sie anklickt.
Scrollen Sie nun durch die tausend Zeilen. Jede neu sichtbare Zelle ruft den Handler erneut auf, und damit wird er zu einem heißen Pfad. Deshalb enthält er keinen Datei- oder Datenbankzugriff, erzeugt keine Schriften oder Bilder pro Zelle, und das Auslesen einer Zeile bleibt ein Schritt mit konstanter Laufzeit.
Danach der ehrliche Vergleich. Markup in der Zelle gewinnt bei Text, Icons und Barrierefreiheit. Zeichnen gewinnt bei Geometrie, die Markup nicht ausdrücken kann. Und ein echter Zellentyp gewinnt immer dann, wenn die Benutzerin mit der Zelle arbeiten und sie nicht nur lesen soll.
Im dritten Lab bauen Sie zwei gezeichnete Spalten hinter einem abgesicherten Handler, lesen die Werte jeder Zeile in einem Schritt, bauen dieselbe Statusanzeige noch einmal als Markup-Zelle und halten fest, welche der beiden Sie wirklich ausliefern würden.
- LektüreKI-Coding-Übung · 20 Min.
Erstellen Sie das Beispielprojekt VisualOperationsStudio dieses Moduls mit ChatGPT oder Claude aus einem fertigen Prompt, der das Modell auf die Spezifikation des Moduls verweist – und prüfen, starten und erweitern Sie dann, was Sie erhalten.
- WissenstestWissenstest – Modul 3 · 10 Min. · Bestehensgrenze 80%
- Praktisches LabLab – Selbst gezeichnete Fortschritts- und Sparkline-Zellen · 45 Min.
Ziel: Geben Sie VisualOperationsStudio ein Betriebs-Grid mit zwei selbst gezeichneten Spalten. Fügen Sie gridOperations explizite Spalten hinzu, setzen Sie UserPaint = true ausschließlich für die Spalten Health und Trend und behandeln Sie CellPaint an einer einzigen Stelle: Kehren Sie sofort zurück, wenn e.RowIndex negativ ist oder e.ColumnIndex keine der beiden Zielspalten trifft, und zeichnen Sie dann innerhalb von e.ClipRectangle einen schwellenwertgefärbten Fortschrittsbalken für Health und eine Sparkline als Linienzug für Trend. Lesen Sie die Werte jeder Zeile aus dem gebundenen MachineStatus-Objekt, statt im Handler eine Liste zu durchsuchen, respektieren Sie die Farben der markierten Zeile und halten Sie den Handler frei von Seiteneffekten. Binden Sie 1.000 generierte Zeilen an, scrollen Sie und bauen Sie denselben Statusindikator anschließend ein zweites Mal als AllowHtml-Zelle, damit Sie schriftlich begründen können, welche Variante Sie ausliefern würden. Ergebnisse: gridOperations mit expliziten Spalten und UserPaint = true nur für die Spalten Health und Trend; ein einziger CellPaint-Handler, der e.RowIndex und e.ColumnIndex prüft, bevor irgendetwas gezeichnet wird; schwellenwertgefärbte Fortschrittszelle und eine Sparkline-Zelle als Linienzug, gezeichnet innerhalb von e.ClipRectangle; Zeilenwerte, die aus dem gebundenen MachineStatus-Objekt gelesen werden, ohne Suche, Allokation oder Control-Erzeugung pro Zelle; eine parallel aufgebaute AllowHtml-Statusspalte samt Notiz, die beide beim Scrollen über 1.000 Zeilen vergleicht.
Modul 4: Wisej.Web.Canvas und das HTML5-Canvas-2D-Modell
Modul 4 von Zeichnen und Grafik in Wisej.NET – erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed. Lesen Sie den Lektionsleitfaden und den Lab- und Prüfungsleitfaden, sehen Sie sich den Walkthrough zu Canvas 2D an, bestehen Sie den Wissenstest und schließen Sie dann das praktische Lab in VisualOperationsStudio ab.
- LektüreLektionsleitfaden · 14 Min.
Browser-Dokumentation zu Canvas 2D lesen und das Wisej.NET-Äquivalent schreiben: Member in PascalCase auf Wisej.Web.Canvas, Winkel in Grad, wo der Browser Radiant verwendet, Save und Restore um Transformationen herum, Farbverläufe, Muster, Schatten und Clipping – und Redraw als die eine Stelle, an der eine Szene neu aufgebaut wird. Was das für erfahrene .NET-Entwickler bedeutet, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen – und wie Sie dieses Modul lesen.
- LektüreLab- und Prüfungsleitfaden · 10 Min.
Was Sie im praktischen Lab bauen, das vorgeschlagene Vorgehen und die geforderten Ergebnisse.
- VideolektionEin Canvas-Beispiel aus dem Browser in Wisej-C# übersetzen · 14 Min.
Ein Canvas-Beispiel aus dem Browser in Wisej-C# übersetzen – ein geführter Video-Walkthrough zu Modul 4, Schritt für Schritt in VisualOperationsStudio aufgebaut. Läuft direkt hier im Player.
Transkript der Sprecherstimme
Visual Operations Studio braucht jetzt eine echte Zeichenfläche. Die Canvas von Wisej.NET öffnet Ihnen den zweidimensionalen Zeichenkontext des Browsers aus C# heraus, mit einer Bedingung: Sie merkt sich nichts für Sie.
Paint und CellPaint senden beide ein fertiges Bild, und der Server weiß, was darauf zu sehen ist. Die Canvas sendet stattdessen Zeichenbefehle, die der Browser ausführt. Auf dem Server bleibt nichts zurück, und eine Größenänderung kann das Ergebnis löschen. Die Szene muss also dort leben, wo Sie sie beherrschen.
Ein Browser-Beispiel zu übersetzen braucht drei Durchgänge. Passen Sie die Schreibweise an, denn die Member sind die vertrauten in der C#-Konvention. Ersetzen Sie die Stilzeichenketten durch .NET-Typen wie Color und Font. Rechnen Sie Winkel von Radiant in Grad um. Prüfen Sie zuletzt, ob es den Member wirklich gibt, statt anzunehmen, alles aus dem Browser sei übernommen worden.
Das Redraw-Event ruft genau eine Methode auf. Diese Methode leert zuerst die ganze Fläche, und jede Form beginnt einen neuen Pfad, bevor sie zeichnet. Lässt man das weg, zieht ein späterer Strich die vorige Kontur mit — einer der häufigsten Fehler beim Übersetzen eines Beispiels.
Text wird über TextAlign und TextBaseline positioniert statt vermessen, denn der Messaufruf des Browsers gehört nicht zur dokumentierten Oberfläche. Farbverläufe sind eigenständige Objekte: Sie bauen einen und weisen ihn dann als Füllstil zu, statt ihn jedes Mal direkt zu beschreiben.
Jede Transformation steht zwischen Save und Restore. Ebenso der Clipping-Bereich, ebenso die Transparenz, ebenso Strichmuster und Schatten, denn all das ist Zustand der Canvas und kein Argument eines einzelnen Aufrufs. Diese Klammer verhindert, dass ein Abschnitt in den nächsten überläuft.
Fünf Abschnitte gehen gemeinsam in einer Aktualisierung hinaus, denn LiveUpdate bleibt standardmäßig aus. Schalten Sie es nur ein, wenn eine lange Serveroperation ihren Fortschritt zeigen soll. Es ist kein Mittel zum Animieren, und eine Anfrage pro Einzelbild ist die falsche Architektur.
Zwei Fehler sollten Sie absichtlich sehen. Ändern Sie die Größe der Fläche, und sie bleibt leer, bis Redraw sie aus dem Modell neu aufbaut. Entfernen Sie einen einzigen Restore-Aufruf, und alles danach Gezeichnete verrutscht. Keiner von beiden zeigt sich im Designer, und genau deshalb kosten sie so viel Zeit.
Im vierten Lab zeichnen Sie die ganze Spielwiese aus einer Methode, die Redraw aufruft, klammern jede Transformation, ergänzen einen Clip, einen Transparenzabschnitt, ein Strichmuster und einen Schatten und portieren ein Beispiel von Radiant in die Grad, die der Rotate-Aufruf von Wisej.NET erwartet.
- LektüreKI-Coding-Übung · 20 Min.
Erstellen Sie das Beispielprojekt VisualOperationsStudio dieses Moduls mit ChatGPT oder Claude aus einem fertigen Prompt, der das Modell auf die Spezifikation des Moduls verweist – und prüfen, starten und erweitern Sie dann, was Sie erhalten.
- WissenstestWissenstest – Modul 4 · 10 Min. · Bestehensgrenze 80%
- Praktisches LabLab – Ein Canvas-Spielplatz, per Redraw neu aufgebaut · 45 Min.
Ziel: Bauen Sie in VisualOperationsStudio eine Canvas-Spielwiese, die eine Reihe von Canvas-2D-Beispielen aus dem Browser auf die dokumentierte Wisej.Web.Canvas-API portiert. Steuern Sie alles über eine Methode DrawPlayground, die vom Redraw-Event der Canvas aufgerufen wird, damit die Szene nach einer Größenänderung zurückkehrt, und beginnen Sie sie mit ClearRect über die gesamte Fläche. Rendern Sie einen umrissenen Pfad, gefüllte Rechtecke, eine platzierte Beschriftung, einen linearen und einen radialen Farbverlauf, klammern Sie dann jeden transformierten Abschnitt in Save() und Restore() und führen Sie Translate, Scale, Rotate und SetTransform vor. Ergänzen Sie einen beschnittenen Bereich, einen Alpha-Abschnitt, eine gestrichelte Linie und einen Schatten, portieren Sie ein Browser-Beispiel, das um Math.PI / 4 dreht, in den Gradwert, den Wisej erwartet, und lassen Sie LiveUpdate für das Hauptrendering ausgeschaltet, während Sie es in einem kleinen fortlaufenden Beispiel zeigen. Ergebnisse: Canvas-Spielwiese, deren gesamte Szene von einer aus Redraw aufgerufenen Methode DrawPlayground gezeichnet wird; Pfade, Rechtecke, eine platzierte Beschriftung, ein linearer und ein radialer Farbverlauf ausschließlich mit dokumentierten Wisej.Web.Canvas-Membern; Save() und Restore() um jeden Abschnitt mit Translate, Scale, Rotate und SetTransform; Clipping, Alpha, eine gestrichelte Linie und ein Schatten, dazu eine als Kommentar ausgeschriebene Umrechnung von Radiant in Grad; eine LiveUpdate-Demonstration getrennt vom Hauptrendering, mit einer Notiz, wann sie angebracht ist.
Modul 5: Interaktives Canvas: Zustand, Eingaben, Trefferprüfung und Performance
Modul 5 von Zeichnen und Grafik in Wisej.NET – erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed. Lesen Sie den Lektionsleitfaden und den Lab- und Prüfungsleitfaden, sehen Sie sich den Walkthrough zum interaktiven Canvas an, bestehen Sie den Wissenstest und schließen Sie dann das praktische Lab in VisualOperationsStudio ab.
- LektüreLektionsleitfaden · 14 Min.
Eine Canvas in einen Editor verwandeln: die Schleife aus Modell, Eingabe, Zustand und Rendering, Pointer- und Touch-Events aus Control, die Umrechnung von Bildschirm- in Weltkoordinaten, damit die Trefferprüfung Verschieben und Zoomen übersteht, Szenenzustand pro Sitzung statt in statischen Feldern, Viewport-Culling und der Punkt, an dem eine Schleife im Client die Server-Roundtrips ablöst. Was das für erfahrene .NET-Entwickler bedeutet, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen – und wie Sie dieses Modul lesen.
- LektüreLab- und Prüfungsleitfaden · 10 Min.
Was Sie im praktischen Lab bauen, das vorgeschlagene Vorgehen und die geforderten Ergebnisse.
- VideolektionAuswahl, Ziehen, Verschieben und Zoomen, ohne die Szene zu verlieren · 14 Min.
Auswahl, Ziehen, Verschieben und Zoomen, ohne die Szene zu verlieren – ein geführter Video-Walkthrough zu Modul 5, Schritt für Schritt in VisualOperationsStudio aufgebaut. Läuft direkt hier im Player.
Transkript der Sprecherstimme
Die Canvas vergisst, das Modell darf es nicht. In diesem Modul wird die Spielwiese aus dem vorigen Modul zu einem Topologie-Editor mit Auswahl, Ziehen, Verschieben und Zoomen, und jede dieser Gesten muss ein Neuzeichnen überstehen.
Ein Rechteck im Browser ist keine Pumpe. Die Bedeutung liegt im Szenenobjekt auf dem Server: die Knoten, die Kanten, was ausgewählt ist, wo der Viewport steht. Eingaben ändern diesen Zustand, und eine einzige Render-Methode macht daraus Zeichenaufrufe. Der Renderer entscheidet nie etwas.
Das Rendering rechnet Weltkoordinaten in Bildschirmkoordinaten um: erst der Zoom, dann die Verschiebung. Die Trefferprüfung muss diese Umrechnung rückwärts laufen lassen und die Zeigerposition zurück in Weltkoordinaten bringen, bevor sie sie mit einem Knoten vergleicht. Die Canvas bietet keine Punkt-im-Pfad-Prüfung, diese Mathematik gehört Ihnen.
Beginnen Sie beim Modell. Knoten und Kanten tragen stabile Kennungen und ihre eigene Geometrie, und die Szene lebt pro Sitzung, niemals in einem veränderlichen statischen Feld, das alle Benutzer teilen würden. Die Trefferprüfung geht die Liste rückwärts durch, sodass der zuletzt und damit obenauf gezeichnete Knoten gewinnt.
Die drei Zeiger-Handler tun sehr wenig. MouseDown rechnet um und prüft den Treffer, MouseMove zieht die Auswahl oder verschiebt den Viewport, MouseUp beendet die Geste. Jeder ändert Zustand und ruft dann die eine Render-Methode. Redraw ruft dieselbe Methode auf, und deshalb baut eine Größenänderung die Szene einfach neu auf.
Wird das Neuzeichnen zu teuer, arbeiten Sie eine Leiter ab: erst weniger Primitive, dann Culling für alles außerhalb des Bildes, dann einfachere Geometrie, dann Zwischenspeichern selten wechselnder Ebenen. Die Schleife in den Browser zu verlegen ist der letzte Schritt, nicht der erste, und LiveUpdate bleibt beim Haupt-Rendering aus.
Im Browser wird der Klick in Weltkoordinaten umgerechnet, findet die zweite Pumpe, markiert sie als ausgewählt und rendert. Beobachten Sie den Anfragezähler beim Ziehen. Diese Zahl ist der wahre Preis eines serverseitigen Ziehens, und sie sagt Ihnen, wann Schluss sein sollte.
Zoomen Sie um den Zeiger herum, und die Auswahl trifft weiterhin den richtigen Knoten, denn die umgekehrte Umrechnung berücksichtigt den neuen Zoom. Knoten außerhalb des sichtbaren Rechtecks werden ganz übersprungen. Und die Tabulatortaste zusammen mit den Pfeiltasten erreicht jeden Knoten, der Editor braucht also keine Maus.
Im fünften Lab bauen Sie die Szene pro Sitzung, prüfen Treffer in Weltkoordinaten, lassen alle drei Handler dieselbe Render-Methode aufrufen, ergänzen Viewport-Culling und den Tastaturpfad und halten fest, ab wann Sie die Interaktion in den Browser verlegen würden.
- LektüreKI-Coding-Übung · 20 Min.
Erstellen Sie das Beispielprojekt VisualOperationsStudio dieses Moduls mit ChatGPT oder Claude aus einem fertigen Prompt, der das Modell auf die Spezifikation des Moduls verweist – und prüfen, starten und erweitern Sie dann, was Sie erhalten.
- WissenstestWissenstest – Modul 5 · 10 Min. · Bestehensgrenze 80%
- Praktisches LabLab – Ein Topologie-Editor mit modellbasierter Trefferprüfung · 45 Min.
Ziel: Machen Sie aus der Canvas-Spielwiese einen Topologie-Editor für VisualOperationsStudio. Erstellen Sie die Klassen NodeModel und EdgeModel mit stabilen IDs und Geometrie in Weltkoordinaten, halten Sie die Szene in einem TopologyScene-Objekt pro Sitzung statt in einem statischen Feld und lassen Sie RenderScene die einzige zeichnende Methode bleiben. Ergänzen Sie ToWorld- und ToScreen-Umrechnungen für den aktuellen Verschiebe-Offset und den Zoomfaktor, behandeln Sie dann MouseDown, um die Knotengrenzen in Weltkoordinaten per Trefferprüfung zu ermitteln und Selected zu setzen, MouseMove, um den ausgewählten Knoten zu ziehen oder den Viewport zu verschieben, und MouseUp, um die Geste zu beenden – jeweils so, dass sie den Zustand ändern und anschließend RenderScene aufrufen. Ergänzen Sie Zoomen per Mausrad oder Button um die Zeigerposition herum, überspringen Sie beim Rendern Knoten außerhalb des sichtbaren Rechtecks, geben Sie Tastaturnutzern einen Weg, einen Knoten auszuwählen und zu verschieben, und halten Sie fest, wie viele Anfragen ein Ziehvorgang erzeugt und ab welchem Punkt Sie die Schleife nach JavaScript im Client verlagern würden. Ergebnisse: NodeModel, EdgeModel und eine TopologyScene pro Sitzung mit stabilen IDs und ohne veränderlichen statischen Zustand; ToWorld- und ToScreen-Umrechnungen für die Trefferprüfung, damit die Auswahl nach Verschieben und Zoomen korrekt bleibt; MouseDown-, MouseMove- und MouseUp-Handler, die den Zustand ändern und dann die eine Methode RenderScene aufrufen; Viewport-Culling, das Knoten außerhalb des sichtbaren Rechtecks überspringt, dazu ein Tastaturweg zum Auswählen und Verschieben; InteractionNotes.md mit den während eines Ziehvorgangs gemessenen Anfragen und der Grenze, ab der Sie auf den Client umstellen würden.
Modul 6: System.Drawing.Managed unter Windows, Linux, macOS, iOS und Android
Modul 6 von Zeichnen und Grafik in Wisej.NET – erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed. Lesen Sie den Lektionsleitfaden und den Lab- und Prüfungsleitfaden, sehen Sie sich den Walkthrough zum plattformübergreifenden Managed Drawing an, bestehen Sie den Wissenstest und schließen Sie dann das praktische Lab in VisualOperationsStudio ab.
- LektüreLektionsleitfaden · 14 Min.
Off-Screen-Rendering, das überall läuft: warum System.Drawing.Common im modernen .NET nur unter Windows funktioniert, was das Paket Managed.System.Drawing und die Assembly System.Drawing.Managed tatsächlich sind, die Schrift- und Grafikmatrix von Wisej.NET 4, eine deterministische Schriftenstrategie und die Wahl zwischen dieser Lösung, ImageSharp, SkiaSharp, Aspose.Drawing und Microsoft.Maui.Graphics je nach Anwendungsfall. Was das für erfahrene .NET-Entwickler bedeutet, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen – und wie Sie dieses Modul lesen.
- LektüreLab- und Prüfungsleitfaden · 10 Min.
Was Sie im praktischen Lab bauen, das vorgeschlagene Vorgehen und die geforderten Ergebnisse.
- VideolektionEin PNG auf dem Server erzeugen, das auch unter Linux läuft · 14 Min.
Ein PNG auf dem Server erzeugen, das auch unter Linux läuft – ein geführter Video-Walkthrough zu Modul 6, Schritt für Schritt in VisualOperationsStudio aufgebaut. Läuft direkt hier im Player.
Transkript der Sprecherstimme
Dieses Modul erzeugt eine Datei statt eines Bildschirms. Der Betrieb möchte dieselbe Topologie als Bild zum Aufbewahren, erzeugt auf einem Server, unter dem kein klassisches Grafiksubsystem liegt.
Keine der drei bisherigen Oberflächen kann das, denn jede braucht ein lebendes Control und eine lebende Sitzung. Auch die naheliegende Bibliothek fällt aus: Microsoft hat System.Drawing.Common ab .NET 6 als Windows-spezifisch gekennzeichnet, und der Schalter für andere Systeme fiel mit .NET 7 weg.
Drei Namen beschreiben eine Sache, und sie auseinanderzuhalten spart einen Nachmittag. Das Paket, das Sie referenzieren, heißt Managed.System.Drawing, die Assembly auf der Platte heißt System.Drawing.Managed, und der Namespace in Ihrem Code bleibt der vertraute. Es ist eine verwaltete Rendering-Engine und keine Hülle über der Grafikschicht der Plattform.
Der Renderer nimmt eine Szene und eine Ausgabegröße und liefert Bytes. Er erzeugt eine Bitmap, holt sich darüber eine Graphics-Fläche, zeichnet die Kanten, die Knoten und die Beschriftungen mit Pens, Brushes und einem Pfad und speichert das Ergebnis als PNG in einen Speicherstrom. Ein Control kommt darin nirgends vor.
Die Plattformmatrix sollten Sie sich merken. Die Schriftvermessung ist überall verwaltet. Das Zeichnen ist im modernen .NET auf jedem Betriebssystem verwaltet und fällt nur im .NET Framework und im Designer-Build auf die Plattformschicht zurück. Binden Sie eine plattformübergreifende Auslieferung nie an ein reines Windows-Zielframework, um ein Zeichenproblem loszuwerden.
Zwei Entscheidungen bestimmen dann, ob das die Auslieferung übersteht. Lösen Sie die Schrift über eine Kette auf, die bei einer Datei endet, die Sie selbst mitliefern, statt eine Schrift auf dem Host vorauszusetzen. Und halten Sie genau eine Zeichenimplementierung im Referenzgraphen, denn zwei, die dieselben Typnamen auflösen, ergeben ein Fehlerbild, das Sie ungern suchen.
Führen Sie es aus. Der Export rendert off-screen in etwa vierunddreißig Millisekunden, ganz ohne Control, und die Bytes gehen als Download an den Browser. Begrenzen Sie aber die angeforderte Größe: Eine Bitmap mit viertausend mal dreitausend Pixeln kostet rund achtundvierzig Megabyte, bevor Sie überhaupt gezeichnet haben.
Jetzt der Container. Derselbe Test besteht unter Linux, nichts ist gegen libgdiplus gelinkt, und die beiden Bilder sind byteidentisch, weil die Schrift mit der Anwendung ausgeliefert und nicht vom Host geborgt wurde.
Im sechsten Lab bauen Sie den Control-freien Renderer, geben ihm eine Fallback-Kette für Schriften, laden das Bild von der Seite herunter, prüfen die Referenzen auf eine zweite Zeichenimplementierung und halten Ihre Belege aus Windows und Linux fest, samt dem, was daraus für die mobilen und die Desktop-Ziele folgt.
- LektüreKI-Coding-Übung · 20 Min.
Erstellen Sie das Beispielprojekt VisualOperationsStudio dieses Moduls mit ChatGPT oder Claude aus einem fertigen Prompt, der das Modell auf die Spezifikation des Moduls verweist – und prüfen, starten und erweitern Sie dann, was Sie erhalten.
- WissenstestWissenstest – Modul 6 · 10 Min. · Bestehensgrenze 80%
- Praktisches LabLab – Ein Off-Screen-PNG-Renderer, der überall läuft · 45 Min.
Ziel: Ergänzen Sie VisualOperationsStudio um einen TopologyImageRenderer, der das Topologiemodell in ein PNG verwandelt, ohne ein einziges Wisej-Control anzufassen. Geben Sie ihm eine Render-Methode, die Szene und Ausgabegröße entgegennimmt, die Bitmap erzeugt, deren Graphics über Graphics.FromImage bezieht, Knoten, Kanten, Beschriftungen und eine Legende mit Pens, Brushes und einem GraphicsPath zeichnet und alles freigibt, was ihm gehört, während die Objekte des Aufrufers unangetastet bleiben. Lösen Sie seinen Font über eine Methode ResolveFont auf, die eine von der Anwendung mitgelieferte Schriftfamilie versucht und auf eine garantiert vorhandene zurückfällt, statt eine Systemschrift vorauszusetzen; speichern Sie als PNG in einen MemoryStream und übergeben Sie die Bytes zum Download an die Seite. Prüfen Sie anschließend die Projektverweise, um sicherzustellen, dass Sie System.Drawing.Common nicht neben der Managed-Implementierung von Wisej hinzufügen, führen Sie den Renderer unter Windows und in einem Linux-Container aus oder bereiten Sie das vor, und beschreiben Sie, wie sich derselbe Code auf iOS-, Android- und macOS-Hybrid-Zielen verhält. Ergebnisse: TopologyImageRenderer ohne Abhängigkeit von einem Wisej-Control, der über Graphics.FromImage in eine Bitmap rendert; Methode ResolveFont mit einer expliziten Fallback-Kette statt einer vorausgesetzten Systemschrift; PNG in einen MemoryStream geschrieben und von der Seite heruntergeladen, wobei jedes eigene Grafikobjekt freigegeben wird; Verweisprüfung, die bestätigt, dass Managed.System.Drawing verwendet und System.Drawing.Common nicht danebengestellt wird; CrossPlatform.md mit Belegen von Windows und aus dem Linux-Container sowie den Folgen für iOS, Android und macOS.
Modul 7: Zeichenarchitektur für den Produktivbetrieb, Performance und Abschlussprojekt
Modul 7 von Zeichnen und Grafik in Wisej.NET – erstellen Sie eigene Grafiken mit Paint, CellPaint, Canvas und dem plattformübergreifenden System.Drawing.Managed. Lesen Sie den Lektionsleitfaden und den Lab- und Prüfungsleitfaden, sehen Sie sich den Walkthrough zu Produktivarchitektur und Abschlussprojekt an, bestehen Sie den Wissenstest und schließen Sie dann das praktische Lab in VisualOperationsStudio ab.
- LektüreLektionsleitfaden · 14 Min.
Zeichencode auslieferbar machen: ein visuelles Modell mit einer seiteneffektfreien Geometrieschicht und getrennten Renderern pro Oberfläche, Instrumentierung für Renderdauer und Datenmenge, das Profiling eines gezeichneten Pfades gegen einen Off-Screen-Pfad, das Verhalten bei Größenänderung, Theme-Wechsel, leeren Daten und fehlender Schrift, ein barrierefreies textliches Äquivalent und das Abschlussprojekt Visual Operations Studio. Was das für erfahrene .NET-Entwickler bedeutet, die bereits Wisej.NET-Oberflächen bauen und nun eigene Grafiken brauchen – und wie Sie dieses Modul lesen.
- LektüreLab- und Prüfungsleitfaden · 10 Min.
Was Sie im praktischen Lab bauen, das vorgeschlagene Vorgehen und die geforderten Ergebnisse.
- VideolektionEin Modell, vier Renderer, gemessen und ausgeliefert · 14 Min.
Ein Modell, vier Renderer, gemessen und ausgeliefert – ein geführter Video-Walkthrough zu Modul 7, Schritt für Schritt in VisualOperationsStudio aufgebaut. Läuft direkt hier im Player.
Transkript der Sprecherstimme
Das ist das Abschlussprojekt. Sechs Module haben in Visual Operations Studio vier Rendering-Oberflächen gebaut, jede für sich korrekt. Sie auszuliefern heißt, sie miteinander in Einklang zu bringen und das auch zu belegen.
Im Moment hält jede Oberfläche ihre eigenen Schwellen, ihre eigenen Farben und ihre eigene Vorstellung davon, wo etwas sitzt. Verschieben Sie die Warnschwelle einmal, und das exportierte Bild widerspricht still dem Bildschirm, von dem es stammt. Das ist kein Renderfehler, sondern eine Fachregel in vier Kopien.
Die Abhilfe sind drei Schichten. Ein visuelles Modell hält semantischen Zustand: Werte, Status, Auswahl. Eine Geometrieschicht macht aus diesem Zustand und einer Größe Formen, und sie ist reine Mathematik. Dann ein Renderer pro Oberfläche, jeder mit den Primitiven, die zu ihm passen, denn eine gemeinsame Schnittstelle hilft hier niemandem.
Einigen Sie sich als Nächstes auf Zahlen, bevor Sie irgendetwas optimieren. Ein gezeichnetes Control sollte unter etwa fünf Millisekunden bleiben. Ein vollständiges Canvas-Neuzeichnen gehört in den Bereich von sechzehn bis fünfzig Millisekunden. Ein Export darf langsamer sein, solange er nie die Sitzung einer anderen Benutzerin blockiert.
Der Geometrie-Aufruf nimmt das Modell und eine Größe und liefert Formen; beide Renderer rufen ihn auf, also kann keiner abdriften. Daneben hält ein kleiner Metrik-Helfer fest, wie lange ein Rendering gedauert hat, wie groß die Ausgabe war und wie viele Szenenobjekte tatsächlich gezeichnet wurden. Ohne diese drei Zahlen ist Optimieren Raten.
Zeichnen Sie danach die schlechten Zustände absichtlich. Leere Daten, eine Fläche ohne Größe, ein Wertebereich, dessen Minimum größer ist als sein Maximum, eine fehlende Schrift: Jeder Fall soll zu etwas Lesbarem herabstufen, statt eine Ausnahme zu werfen. Und ein gescheiterter Export soll als Meldung bei der Benutzerin ankommen, nicht als leere Stelle.
Ein Wert ändert sich, und alle vier Oberflächen folgen ihm: das gezeichnete Gauge, die gezeichneten Zellen, die Canvas-Topologie und das exportierte Bild. Daneben steht eine schlichte Tabelle mit jedem Messwert, und genau sie macht die Information auch für jemanden verfügbar, der die Grafik gar nicht nutzen kann.
Zum Schluss die Belege. Das gezeichnete Gauge fiel von etwa elf Millisekunden auf vier, der Export von rund dreihundertzehn Millisekunden auf hundertachtundzwanzig, und die Testmatrix deckt Windows, Linux, die Hybrid-Ziele und drei Browser ab. Auch eine gemessene Entscheidung, nicht zu optimieren, zählt, solange sie aufgeschrieben ist.
Das letzte Lab ist das Abschlussprojekt: ein Modell hinter allen vier Oberflächen, ein Metrik-Helfer, eine Optimierung mit Messung davor und danach, vier herabgestufte Pfade, die sanft scheitern, und die Notizen, die die Architektur und ihre Grenze erklären.
- LektüreKI-Coding-Übung · 20 Min.
Erstellen Sie das Beispielprojekt VisualOperationsStudio dieses Moduls mit ChatGPT oder Claude aus einem fertigen Prompt, der das Modell auf die Spezifikation des Moduls verweist – und prüfen, starten und erweitern Sie dann, was Sie erhalten.
- WissenstestWissenstest – Modul 7 · 10 Min. · Bestehensgrenze 80%
- Praktisches LabLab – Abschlussprojekt: Visual Operations Studio · 45 Min.
Ziel: Schließen Sie das Abschlussprojekt VisualOperationsStudio ab, indem Sie ein einziges Modell hinter alle vier Oberflächen stellen. Gliedern Sie das Projekt in die Ordner Models, Geometry, Renderers und einen Wisej-Adapter um, sodass das gezeichnete Gauge, die selbst gezeichneten Grid-Zellen, die Canvas-Topologie und der PNG-Export alle dasselbe OperationsModel lesen und die seiteneffektfreie Geometrieschicht teilen, ohne fachlichen Zustand pro Renderer zu duplizieren. Ergänzen Sie einen RenderMetrics-Helfer, der Renderdauer, Größe der Ausgabebitmap und die Anzahl der gezeichneten Szenenobjekte erfasst, und vergleichen Sie damit das server-seitig gezeichnete Gauge mit dem Off-Screen-Renderer – vor und nach einer Optimierung, die Sie wählen und begründen. Spielen Sie die Fehlerpfade durch – leere Daten, eine Oberfläche der Größe null, ein ungültiger Wertebereich, eine fehlende Schrift –, sodass jeder auf einen lesbaren Platzhalter statt auf eine Exception hinausläuft, ergänzen Sie eine barrierefreie Tabelle mit allen Werten, die die Grafik zeigt, und schreiben Sie die Abschlussnotizen zu Architektur, Browser-/Server-Grenze und Testmatrix. Ergebnisse: Models-, Geometry-, Renderers- und Adapterschichten mit einem OperationsModel, das alle vier Oberflächen speist; RenderMetrics-Helfer, der Renderdauer, Bitmapgröße und Anzahl gezeichneter Objekte pro Oberfläche erfasst; Vorher-nachher-Messungen für eine Optimierung samt Begründung der Wahl; Fehlerpfade für leere Daten, Größe null, ungültigen Bereich und fehlende Schrift, die abstufen statt eine Exception auszulösen; CapstoneNotes.md mit Architektur, Server-/Browser-Grenze, Testmatrix und einer barrierefreien Datentabelle.