Drawing Documentation/de

Diese Seite dokumentiert jcc242s Verständnis des Zeichnungsmoduls. Sie enthält Dateien und Funktionen, an denen er derzeit arbeitet und die möglicherweise noch nicht im Master-Zweig enthalten sind. Die Quelle für diese Dateien befindet sich auf seinem Github, aber man sei vorsichtig, da diese sehr instabil ist!

Basis (Mod/Drawing)

gdtsvg.py

Python-Skript, das SVG-Schnipsel für Dinge wie GD&T-Symbole, Maßsymbole und grundlegende SVG-Elemente wie Linien, Kreise und Pfade generiert.

Es enthält mehrere Support-Dateien, die nicht wirklich viel bewirken. Man führt DrawingTest.py aus, um eine Reihe von SVG-Symbolen im Symbolverzeichnis zu erstellen, die eine Vorschau verschiedener Symbole in der Datei gdtsvg.py anzeigt. settingslist.py, dimesettings und convert.py sind alle veraltete Einstellungsmethoden und sollten wahrscheinlich entfernt werden, da der Drawing-Zweig kurz vor der Zusammenführung mit dem Master steht.

DrawingAlgos.py

Erstellt SVG-Linien aus einer Liste von Knoten und unterstützt sowohl versteckte als auch sichtbare Kanten. Sollte wahrscheinlich mit gdtsvg.py zusammengeführt werden, sobald diese Datei ausgereift ist.

createSVG

Akzeptiert Teil als Argument, projiziert den Teil in Linien aus dem Drawing.project-Objekt und zeichnet dann die SVG-Datei für jede Linie.

App

Enthält die Backend-Seite des Zeichenmoduls.

AppDrawing.cpp

Initialisiert die verschiedenen Namespaces, Module und Elemente, die im Drawing-Modul verwendet werden. Wenn das Part-Modul nicht geladen werden kann, wird eine Fehlermeldung ausgegeben.

DrawingExport.cpp

Zwei Klassen: SVGOutput und DXFOutput. Beide enthalten Methoden zum Ausgeben des Codes in ihrer jeweiligen Sprache. In der Regel benötigen sie ein Objekt des entsprechenden Typedefs und manchmal zusätzliche Identifikationsinformationen.

FeatureClip.cpp

Callback-Methoden (?) für die Feature-Clipping-GUI, so scheint es. Allein aufgerufen erstellt sie den Clip-Pfad, wenn ShowFrame.getValue auf TRUE gesetzt ist, zeigt sie auch den Rahmenrand an.

FeaturePage.cpp

Verwaltet die Ansichten.

onChanged() zum Ausführen von Aktionen, wenn Eigenschaften geändert werden.

execute() zum Neuberechnen einer Formelement-Ansicht, so wird es zumindest behauptet. Es scheint Funktionen zum Überprüfen von bearbeitbaren Texten und zum Speichern von Zeichnungen zu geben. Muss noch weiter untersucht werden.

getEditableTextsFromTemplate() zum Abrufen von Text, der von FreeCAD aus einer SVG-Datei bearbeitet werden kann.

FeatureProjection.cpp

Objekt zu einem 2D-Bild abflachen?

FeatureView.cpp

Definiert die Ansichts-Eigenschaften.

FeatureViewAnnotation.cpp

Definiert Eigenschaften für Anmerkungen (derzeit nur Text) und verfügt über eine Ausführungsmethode, um den Text bei Änderungen/Verschiebungen zu aktualisieren.

FeatureViewPart.cpp

Konstruktor zum Hinzufügen von Eigenschaften. Ruft Darstellungselemente für projizierte Teile ab.

PageGroup.cpp

Fügt lediglich eine Eigenschaft für eine Liste von Seiten hinzu, sonst nichts weiter.

Precompiled.cppp

Nur #include "PreCompiled.h"

ProjectionAlgos.cpp

Der Konstruktor führt lediglich die Methode execute() aus, um seine Inhalte zu aktualisieren.

invertY: Da SVG seine Y-Achse im Vergleich zu allen anderen Koordinatensystemen der Welt umgekehrt darstellt, müssen wir sie bei der Konvertierung von einem FreeCAD-Teil in eine SVG-Projektion für die Zeichnungsansicht umkehren.

getSVG: holt den SVG-Code aus dem DrawingExport-Zeug. Formatiert je nach Art der Linie (versteckt oder nicht und einige andere Dinge, die ich noch herausfinden muss).

getDXF: Wie getSVG, nur für das DXF-Format.


Grafische Benutzeroberfläche

AppDrawingGui.cpp

Initialisiert die Grafische Benutzeroberfläche von drawing.

AppDrawingGuiPy.cpp

Bietet Schnittstellen zum Öffnen, Importieren und Exportieren? Sieht so aus, als wäre es mit Python kompatibel.

Command.cpp

Verarbeitet Befehle (aus der Symbolleiste?), wie z. B. das Erstellen neuer Zeichnungen und ähnliches. Es sieht so aus, als würde dies QT-Aufrufe vom Klicken auf die Schaltfläche bis zu dem jeweiligen Befehl verarbeiten, der ausgeführt werden muss. Wenn man beispielsweise auf die Schaltfläche CmdDrawingOrthoViews klickt, wird die Ortho-Ansicht-GUI im Aufgaben-Dialogfeld angezeigt.

DrawingView.cpp

Macht eine Menge Qt-GUI-Sachen, muss mich noch mehr damit beschäftigen.

TaskDialog.cpp

Erstellt das Aufgaben-Dialogfeld an der Seite und wechselt gegebenenfalls von der Baumansicht dorthin.

TaskOrthoViews.cpp

Erstellt den Aufgabenfenster zum Platzieren der orthogonalen Ansichten!

Führt viele Berechnungen durch, um zu bestimmen, wo Dinge positioniert werden sollen (anscheinend auch automatische Berechnungen).

Nimmt die Eingabe aus der TaskOrthoViews-GUI entgegen und verarbeitet sie. Verwendet die auf der Qt-Website unter [1] beschriebene Methode der einfachen Vererbung.

ViewProviderPage.cpp

Der Konstruktor fügt einige Eigenschaften für die Ansicht hinzu. Der Destruktor führt keine Aktion aus. Fügt etwas hinzu (was fügt er hinzu? Fügt er die Ansicht zur Seite hinzu?) Legt Anzeigemodi fest und ruft sie ab (was sind Anzeigemodi? Was bewirken sie und welche Optionen gibt es?) Führt eine Aktion zur Aktualisierung bestimmter Daten aus Verfügt über ein Kontextmenü mit der Option "Zeichnung anzeigen" – findet man heraus, was dies bedeutet Verfügt über eine Funktion zum Auswählen der Ansicht durch Doppelklick (glaube ich zumindest)

showDrawingView scheint einige Einrichtungsaufgaben zu übernehmen: Es ruft das aktuelle Dokument ab, legt das Fenstersymbol und den Fenstertitel fest und fügt es zum Hauptfenster (von FreeCAD?) hinzu.

ViewProviderView.cpp

Es scheint nicht viel zu bewirken, obwohl ich mir sicher bin, dass es wichtig ist.

Workbench.cpp

Fügt die Symbole zu den Symbolleisten und so weiter hinzu.

Arbeitsablauf

Program Flow

CanvasView ist das eigentliche QGraphicsScene-Objekt, und DrawingView verarbeitet eine Liste von FeatureView, die durch Referenz in /App/FeatureViewPage verknüpft sind. DrawingView wählt dann die geeignete QGraphicsItem-Klasse (QGraphicsItemViewPart oder QGraphicsItemViewDimension) aus und ruft anschließend eine Funktion in CanvasView auf, um diese zu erstellen und zur Szene hinzuzufügen.

Hinzufügen von Befehlen zum Arbeitsbereich Drawing

4 einfache Schritte:

  1. Eine Klasse zu Command.cpp hinzufügen. Den anderen als Beispiel für die Formatierung folgen.
  2. Einen Titel, ein Symbol, einen Tooltip usw. hinzufügen. Auch hier den vorhandenen Klassen in command.cpp folgen.
  3. Die Klasse am Ende von Command.cpp hinzufügen.
  4. Die Informationen zu Workbench.cpp hinzufügen. Dadurch wird dem FreeCAD-/Zeichenmodul mitgeteilt, wo die in command.cpp definierten Symbole in der eigentlichen FreeCAD-Oberfläche (Symbolleisten, Dropdown-Menüs usw.) platziert werden sollen.