The FreeCAD source code/de

Der FreeCAD Quellcode wird mit git verwaltet, und ist öffentlich, offen und unter der LGPL Lizenz verfügbar. Er kann von jedem kopiert, heruntergeladen, gelesen, analysiert, weiterverbreitet und modifiziert werden. Wenn du planst, Änderungen vorzunehmen, die du im offiziellen Code selbst sehen möchtest, denke daran, dass deine Änderungen von den FreeCAD Entwicklern genehmigt werden müssen. Daher ist es ratsam, deine Absichten und Ideen zuerst im Forum zu diskutieren, um das Risiko zu vermeiden, dass deine Änderungen aus einem nicht vorhersehbaren Grund abgelehnt werden.

Im Folgenden findest Du einige Hinweise und nützliche Informationen, um Dich auf den richtigen Weg zu bringen, wenn Du daran interessiert bist, den FreeCAD Code zu erforschen.


 * Der FreeCAD Code ist hauptsächlich in C++ programmiert, stützt sich aber stark auf Python. Ein sehr großer Teil seiner Funktionalität bietet zugehörige Python Bindungen, und es ist Teil der Kernphilosophie der FreeCAD Entwicklung, stets Python Zugriff auf jede neue, in C++ implementierte Funktion zu bieten. Um dies zu erreichen, wird CPython (die von Python selbst zur Verfügung gestellten C Schnittstellenwerkzeuge) und insbesondere PyCXX in FreeCAD stark genutzt. Viele Vorlagen und benutzerdefinierte Werkzeuge werden auch im FreeCAD Code selbst zur Verfügung gestellt, um das Erstellen der zugehörigen Python Bindungen sehr einfach zu machen. Einige weitere Spitzenbestandteile des FreeCAD Codes sind vollständig in Python geschrieben.


 * Der FreeCAD Quellcode ist vollständig plattformübergreifend, und es wird sehr darauf geachtet, dass die Anwendung auf einer möglichst großen Anzahl von Plattformen und Konfigurationen eingesetzt werden kann und bestehende Anwender nicht in Schwierigkeiten bringt. Daher werden neue Versionen der benötigten Komponenten so weit wie möglich vermieden, solange sie nicht auf allen Plattformen weit und einfach verfügbar sind. Abwärtskompatibilität (die Möglichkeit, eine mit einer neuen Version von FreeCAD erzeugte Datei auf einer älteren Version zu öffnen) ist eine wichtige Priorität.

Abk. GUI von englisch graphical user interface Diese Trennung spiegelt sich überall in der Dateistruktur des Quellcodes wider. Die Anwendung enthält die gesamte Funktionalität, die im reinen Konsolenmodus (ohne Grafische Benutzeroberfläche) laufen muss. Da FreeCAD ohne seine grafische Benutzeroberfläche kompiliert und ausgeführt werden kann, ist der Code in der Anwendung unabhängig von jeder GUI-bezogenen Bibliothek. Gui enthält den gesamten Code, der für die Ausführung im GUI Modus benötigt wird und ist um die App Funktionalität herum aufgebaut.
 * Fast die gesamte Funktionalität von FreeCAD ist in zwei verschiedene Teile aufgeteilt, die App und Gui (Abkürzung; engl.: Application and Graphical User Interface = Anwendung und Grafische Benutzeroberfläche) genannt werden.


 * Der Grossteil der FreeCAD Funktionalität ist in Modulen umgesetzt. FreeCAD ohne seine Module ist ein einfaches Container Fenster, das einfach eine Datei öffnen und speichern kann. Alle Geometriewerkzeuge und Arbeitsbereiche sind in Modulen umgesetzt. Module können in C++, in Python oder in einer Kombination aus dem Besten aus beiden Welten, hybride C++/Python-Module geschrieben werden, bei denen die stabile Kernfunktionalität in C++ programmiert wird, während die Werkzeuge für den Endanwender in Python erstellt werden und daher von FreeCAD Anwendern viel einfacher zu erweitern und anzupassen sind. Jedes Modul definiert und erzeugt normalerweise einen Arbeitsbereich in der FreeCAD Benutzeroberfläche, wenn es im GUI Modus verwendet wird, normalerweise mit dem gleichen Namen, aber es ist nicht zwingend erforderlich, dass die Module einen Arbeitsbereich enthalten.


 * FreeCAD Module sind oft abhängig von anderen Modulen. Die meisten Module, die Festkörpergeometrie verwenden, hängen von dem Teil Modul ab, welches das grundlegendste Modul von FreeCAD ist und die meisten Schnittstellen mit OpenCasCade umsetzt. Obwohl andere Module die OpenCasCade Funktionalität direkt nutzen können, verlassen sie sich oft auf übergeordnete Funktionen, die von Part zur Verfügung gestellt werden.


 * Module sind immer initialisiert durch Python. Auch wenn sie vollständig in C++ geschrieben sind, enthalten sie immer eine minimale Python/CPython-Struktur.


 * FreeCAD ist ein begeisterter Nutzer von anderen Quelloffenen Bibliotheken. Neben Python und Qt, die vom Kern und fast allen Modulen verwendet werden, sind die beiden schwergewichtigen Bibliotheken, die in den meisten Modulen verwendet werden, OpenCasCade Technologie und Coin3D. OpenCasCade wird verwendet, um die gesamte Festkörpergeometrie von FreeCAD zu erstellen und zu verwalten, während Coin3D für die Verwaltung der 3D Ansicht verwendet wird. OpenCascade wird hauptsächlich in der App Welt verwendet, und coin3D ausschließlich in der Gui Welt. Ein grundsätzliches Verständnis von OpenCasCade ist wesentlich, um jede geometriebezogene Arbeit mit FreeCAD durchzuführen. Spezifischere Module nutzen spezifischere Bibliotheken, und da es in diesem Punkt normalerweise keine Einschränkungen gibt, abgesehen davon, dass diese Bibliotheken auf allen Plattformen leicht verfügbar sind, kann die Liste der Abhängigkeiten einer vollständigen FreeCAD Installation mit all ihren Modulen ziemlich groß sein.


 * FreeCAD's document objects, which are all the objects contained in a FreeCAD document, are what appear in the Tree View in the GUI and in FreeCAD.ActiveDocument.Objects in Python. They may or may not have any geometrical data, and may or may not show anything in the 3D view. They are always separated in App and Gui parts. The Gui part is not loaded when running in console mode. Standard geometrical objects, such as those found in Part or PartDesign, have their OpenCasCade-based geometry defined in their App counterpart, while the Gui counterpart (also usually called "View Provider") is responsible for creating a coin3D representation of that geometry, which will be inserted into the main coin3D scene graph of the 3D view.


 * The basic directory structure of the source code is organized like this:
 * App: contains the FreeCAD console-mode application, defines basic structures and base classes for document objects, that are used by modules to build their own.
 * Base: contains core functionality commonly used everywhere in FreeCAD: 3D vectors, units, matrices, placements, etc.
 * Gui: contains the FreeCAD GUI-mode application, defines the 3D view, contains many tools and functions to be used by workbenches to interact with the interface and with the 3D view, defines base classes for view providers.
 * Doc: contains mainly an all-in-one Qt help file generated from this wiki.
 * Mod: contains all the modules, themselves further separated into App and Gui (except for python modules, which don't always follow that rule so clearly).

Related

 * Source Code Management
 * The Power users hub contains a lot of documentation about modules, OpenCasCade and Coin3D, mainly for the Python programmer. However, as the functionality is similar, these pages will be of interest to the C++ programmer as well.