Dokumentenmodell-Architektur
Das Dokumentenmodell ist das Rückgrat der Anwendung und repräsentiert das gesamte Benutzerprojekt als hierarchischen Objektbaum. Es ist reaktiv, serialisierbar und leicht durchquerbar konzipiert.
Übersicht
Die Architektur basiert auf dem Composite-Entwurfsmuster. Eine einzelne
abstrakte Basisklasse, DocItem, definiert die gemeinsame Schnittstelle für alle
Objekte, die im Dokumentenbaum existieren können (z.B. Ebenen, Workpieces,
Gruppen). Dies ermöglicht es, komplexe, verschachtelte Strukturen einheitlich zu behandeln.
Wichtige Prinzipien des Modells sind:
- Baumstruktur: Das
Doc-Objekt dient als Wurzel des Baums. Jedes Element (außer der Wurzel) hat ein einzelnesparentund kann mehrerechildrenhaben. - Reaktivität: Das Modell verwendet ein Signal/Slot-System (
blinker). Wenn ein Element geändert wird, emittiert es ein Signal. Elternelemente hören auf die Signale ihrer Kinder und "blubbern sie hoch" durch den Baum. Dies ermöglicht High-Level-Komponenten wie derPipeline, auf jede Änderung im Dokument zu hören, indem sie sich mit einem einzigen Signal am Wurzel-Doc-Objekt verbinden. Das System verfolgt sowohl Inhaltsänderungen als auch Transformations- änderungen getrennt für effiziente Updates. - Transformationshierarchie: Jedes
DocItemhat eine lokale TransformationMatrix. Die finale Position, Skalierung und Rotation eines Elements in der "Welt" (dem Haupt-Canvas) ist das Produkt seiner eigenen lokalen Matrix und der Weltmatrizen aller seiner Vorfahren. - Daten-Entkopplung: Die visuellen oder Rohdaten für ein
WorkPiecewerden nicht direkt darin gespeichert. Stattdessen hält dasWorkPieceeine UID, die einImportSource-Objekt in einer zentralen Registry auf demDocreferenziert. Dies entkoppelt die Dokumentenstruktur vom Datenmanagement, was das Modell leichter und flexibler macht.
Klassenvererbung
Dieses Diagramm zeigt die Klassenhierarchie. Jedes Objekt, das Teil des
räumlichen Baums des Dokuments ist, erbt von der abstrakten Basisklasse DocItem
und erhält Kernfunktionalitäten wie Parenting, Transformationen und Signal-
Blubbern.
DocItem: Die abstrakte Grundlage, die die Composite-Pattern- Implementierung bereitstellt.- Alle anderen Klassen sind konkrete Implementierungen von
DocItem, jede mit einer spezialisierten Rolle in der Dokumentenstruktur.
Objektzusammensetzung
Dieses Diagramm veranschaulicht, wie Instanzen der Klassen zusammengesetzt werden, um ein vollständiges Dokument zu bilden. Es zeigt die Eltern-Kind-Beziehungen und Referenzen zwischen Objekten.
- Ein
Docist das Top-Level-Objekt. Es enthält eine oder mehrereLayerundStockItems. Es verwaltet auch eine Registry allerImportSources im Projekt. - Jede
Layerenthält den Inhalt des Benutzers:WorkPieces undGroups. Entscheidend ist, dass eineLayerauch einWorkflowbesitzt. - Ein
Workflowenthält eine geordnete Liste vonSteps, die den Fertigungsprozess für diese Ebene definieren. - Eine
Groupist ein Container, derWorkPieces und andereGroups halten kann, was verschachtelte Transformationen ermöglicht. - Ein
WorkPieceist ein grundlegendes Design-Element. Es speichert seine Rohdaten nicht direkt. Stattdessen referenziert es eineImportSourceüber eine UID. Es hat auch seine eigeneGeometry(Vektordaten) und kann eine Liste vonTabs haben.
DocItem-Beschreibungen
-
DocItem(Abstrakt)- Rolle: Die abstrakte Basis für alle Baumknoten.
- Wichtige Eigenschaften:
uid,parent,children,matrix,updated- Signal,transform_changed-Signal. Stellt die Kern-Composite-Pattern-Logik bereit.
-
Doc- Rolle: Die Wurzel des Dokumentenbaums.
- Wichtige Eigenschaften:
children(Layers, StockItems),import_sources(ein Wörterbuch, das UIDsImportSource-Objekten zuordnet),active_layer.
-
Layer- Rolle: Die primäre Organisationseinheit für Inhalt. Eine Ebene verknüpft eine Gruppe von Workpieces mit einem einzigen Fertigungs- workflow.
- Wichtige Eigenschaften:
children(WorkPieces, Groups, ein Workflow),visible,stock_item_uid.
-
Group- Rolle: Ein Container für andere
DocItems (WorkPiece,Group). Ermöglicht, dass eine Sammlung von Elementen als eine Einheit transformiert wird.
- Rolle: Ein Container für andere
-
WorkPiece- Rolle: Repräsentiert ein einzelnes, greifbares Design-Element auf der Canvas (z.B. ein importiertes SVG).
- Wichtige Eigenschaften:
vectors(einGeometry-Objekt),import_source_uid,tabs,tabs_enabled. Seinevectorssind auf eine 1x1-Box normalisiert, wobei alle Skalierung und Positionierung durch seine Transformations-matrixgehandhabt wird.
-
Workflow- Rolle: Eine geordnete Sequenz von Verarbeitungsanweisungen. Besessen von einer
Layer. - Wichtige Eigenschaften:
children(eine geordnete Liste vonSteps).
- Rolle: Eine geordnete Sequenz von Verarbeitungsanweisungen. Besessen von einer
-
Step- Rolle: Eine einzelne Verarbeitungsanweisung innerhalb eines
Workflow(z.B., "Konturschnitt" oder "Rastergravur"). Es ist ein Konfigurationsobjekt, das Wörterbücher hält, die den zu verwendenden Produzenten, Modifizierer und Transformatoren definieren.
- Rolle: Eine einzelne Verarbeitungsanweisung innerhalb eines
-
StockItem- Rolle: Repräsentiert ein Stück physisches Material im Dokument,
definiert durch seine eigene Vektor-
geometry.Layers können einem spezifischen Stock-Item zugewiesen werden.
- Rolle: Repräsentiert ein Stück physisches Material im Dokument,
definiert durch seine eigene Vektor-