FreeCAD Scripting Basics/de: Difference between revisions

From FreeCAD Documentation
(Created page with "* Im '''App-Modul''', finden Sie alles im Zusammenhang mit der Anwendung selbst, wie Methoden zum Öffnen oder Schließen von Dateien, und zu den Dokumenten, wie z.B. die Eins...")
No edit summary
 
(109 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<languages/>
== Python scripting in FreeCAD ==

{{Docnav/de
|[[Python_scripting_tutorial/de|Python Tutorium Skripten]]
|[[Part_scripting/de|Part Skripten]]
}}

{{TOCright}}


<span id="Python_scripting_in_FreeCAD"></span>
FreeCAD ist von Grund auf von Python-Skripten gesteuert. Fast alle Teile von FreeCAD wie die Schnittstelle, der Szene-Inhalt, und sogar die Darstellung dieser Inhalte in den 3D-Ansichten sind vom eingebauten Python-Interpreter oder mittels Ihrer eigenen Skripte zugänglich. Infolgedessen ist FreeCAD wahrscheinlich eine der am weitesten anpassbaren Technikanwendungen auf dem Markt.
==Python skripten in FreeCAD==


FreeCAD wurde von Grund auf neu entwickelt, um vollständig von Python Skripten gesteuert zu werden. Nahezu alle Teile von FreeCAD, wie z.B. die Oberfläche, die Szeneninhalte und sogar die Darstellung dieser Inhalte in den 3D Ansichten, sind über den eingebauten Python Interpreter oder über eigene Skripte zugänglich. Damit ist FreeCAD wahrscheinlich eine der am weitesten anpassbaren Engineering Anwendungen, die heute verfügbar sind.
In seinem aktuellen Zustand hat jedoch FreeCAD sehr wenige "native" Befehle, um auf Ihre 3D-Objekten zu interagieren, vor allem, weil es ist immer noch im frühen Stadium der Entwicklung ist, sondern auch weil die Philosophie dahinter mehr ist, um eine Plattform für die CAD-Entwicklung zur Verfügung zu stellen, als eine spezifische Gebrauch-Anwendung. Aber die Leichtigkeit des Python-Scripting innerhalb FreeCAD ist ein schneller Weg, um neue Funktionalität durch "Power User" zu entwickeln, Benutzer, die typischerweise ein bisschen Python-Programmierung kennen. Python ist eine der populärsten Interpreter-Sprachen, und weil es im allgemeinen als leicht zu erlernen angesehen wird, können auch Sie schon bald Ihre eigenen FreeCAD "Power User"-Skripte erstelen.


Wenn Sie nicht mit Python vertraut sind, empfehlen wir Ihnen, nach Tutorien im Internet zu suchen, um so einen kurzen Blick auf seine Struktur zu bekommen. Python ist eine sehr einfache Sprache zu lernen, vor allem, weil es innerhalb eines Interpreters ausgeführt werden kann, wobei von einfachen Befehlen bis zu vollständigen Programmen alles dynamisch ausgeführt werden kann. Wenn Sie das Fenster mit der Aufschrift "Report-Ansicht", wie unten dargestellt nicht sehen, können Sie es unter der Ansicht-> Ansichten-> Berichtsansicht aktivieren, um den Interpreter anzeigen zu lassen.
Wenn du nicht mit Python vertraut bist, empfehlen wir dir, nach Tutorien im Internet zu suchen, um so einen kurzen Blick auf seine Struktur zu bekommen. Python ist eine sehr einfache Sprache zu lernen, vor allem, weil es innerhalb eines Interpreters ausgeführt werden kann, wobei von einfachen Befehlen bis zu vollständigen Programmen alles dynamisch ausgeführt werden kann. Wenn du das Fenster mit der Aufschrift "Python Konsole", wie unten dargestellt nicht siehst, kannst du es unter {{MenuCommand|Ansicht Paneele Python Konsole}} aktivieren.


<span id="The_interpreter"></span>
===Der Interpreter===
===Der Interpreter===


Über den Interpreter, können Sie auf alle Ihre systeminstallierten Python-Module zugreifen, sowie die eingebaute FreeCAD Module und alle zusätzlichen Module, die Sie später installiert haben. Der folgende Screenshot zeigt den Python-Interpreter:
Über den Interpreter, können Sie auf alle Ihre systeminstallierten Python-Module zugreifen, sowie die eingebaute FreeCAD Module und alle zusätzlichen Module, die Sie später installiert haben. Der folgende Screenshot zeigt den Python-Interpreter:


[[Image:screenshot_pythoninterpreter.jpg|The FreeCAD Python interpreter]]
[[Image:screenshot_pythoninterpreter.jpg|Der FreeCAD Python Interpreter]]


Im Interpreter kann man Python-Code ausführen und die verfügbaren Klassen und Funktion durchsuchen. FreeCAD stellt einen sehr handlichen Klassenbrowser für die Erforschung Ihrer neuen FreeCAD Welt zur Verfügung: Wenn Sie den Namen einer bekannten Klasse gefolgt von einem Punkt tippen (das heißt, Sie wollen etwas von dieser Klasse hinzufügen), öffnet sich ein Klassenbrowser-Fenster, wo Sie zwischen verfügbaren Unterklassen und Methoden navigieren können. Wenn Sie etwas auswählen, wird ein verbundener Hilfstext(falls bestehend) gezeigt:
Vom Interpreter aus kannst du Python Code ausführen und durch die verfügbaren Klassen und Funktionen blättern. FreeCAD bietet einen sehr handlichen Klassenbrowser zur Erkundung der FreeCAD Welt: Wenn du den Namen einer bekannten Klasse gefolgt von einem Punkt eingibst (d.h. wenn du etwas von dieser Klasse hinzufügen möchtest), öffnet sich ein Klassenbrowser Fenster, in dem du zwischen den verfügbaren Unterklassen und Methoden navigieren kannst. Wenn du etwas auswählst, wird ein zugehöriger Hilfetext (falls vorhanden) angezeigt:


[[Image:screenshot_classbrowser.jpg|The FreeCAD class browser]]
[[Image:screenshot_classbrowser.jpg|The FreeCAD class browser]]


Als Anfang tippen wir '"App."' oder '"Gui."' ein und sehen was passiert. Ein weiterer Python-üblicher Weg zur Erkundung der Inhalte der Module und Klassen ist es, den verwenden. print dir() -Befehl zu nutzen. Zum Beispiel, das Schreiben von '''print dir()''' wird alle in FreeCAD zurzeit geladenen Module auflisten. '''print dir(App)''' wird Ihnen alles innerhalb des App Moduls anzeigen, usw.
Beginne also hier mit der Eingabe von {{incode|App.}} oder {{incode|Gui.}} und schau was passiert. Eine andere, allgemeinere Python Methode, um den Inhalt von Modulen und Klassen zu untersuchen, ist die Verwendung des {{incode|print(dir())}} Befehls. Wenn du beispielsweise {{incode|print(dir())}} eingibst, werden alle derzeit in FreeCAD geladenen Module aufgelistet. {{incode|print(dir(App))}} zeigt dir alles innerhalb des App Moduls usw.


Eine weitere nützliche Funktion des Interpreters ist die Möglichkeit, zurück zu gehen in Kommando-History und eine Zeile des Codes wiederzubekommen, den Sie bereits früher tippten. Um in der zu navigieren, benutzen Sie einfach STRG + HOCH oder STRG + RUNTER.
Eine weitere nützliche Funktion des Interpreters ist die Möglichkeit, zurück zu gehen in der Befehlshistorie und eine Zeile des Codes wiederzubekommen, den du bereits früher getippt hast. Um durch die Befehlshistorie zu navigieren, benutze einfach {{KEY|Pfeil oben}} or {{KEY|Pfeil unten}}.

Mit der rechten Maustaste in der Interpreter-Fenster haben Sie auch einige andere Optionen, wie z. B. Kopie der gesamten Geschichte (nützlich, um hier etwas experimentieren, dann machen Sie eine vollständige Skript davon), oder fügen Sie Dateinamen mit dem ganzen Pfad ein.


Mit Rechtsklick im Interpreter Fenster hast du auch einige andere Optionen, wie z. B. Kopie der gesamten Historie (nützlich, wenn du mit Dingen experimentieren möchtest, bevor du ein vollständiges Skript davon erstellst), oder füge einen Dateinamen mit vollständigem Pfad ein.
{{Top}}
<span id="Python_Help"></span>
===Python Hilfe===
===Python Hilfe===


Im FreeCAD-Hilfsmenü finden Sie einen Eintrag mit der Bezeichnung "Python-Hilfe", der ein Browser-Fenster mit einem vollständigen Überblick in Echtzeit generierter Dokumentation aller Python-Module, die im FreeCAD Interpreter zur Verfügung stehen, einschließlich der Python- und FreeCAD eingebauten Module, systeminstallierten Module, und FreeCAD's zusätzlicher Module. Die vorhandenen Dokumentation hängt davon ab, wie viel Aufwand jeder Modul-Entwickler bei der Dokumentation seines Code einsetzt, aber in der Regel haben Python-Module einen Ruf als ziemlich gut dokumentiert. Damit dieses Dokumentationssystem funktioniert, muss Ihr FreeCAD Fenster offen sein.
Im FreeCAD {{MenuCommand|Hilfe}} findest Du einen mit {{MenuCommand|Automatische Python Moduldokumentation}} beschrifteten Eintrag, der ein Browserfenster öffnet, das eine vollständige, in Echtzeit generierte Dokumentation aller dem FreeCAD Interpreter zur Verfügung stehenden Python Module enthält, einschließlich Python- und FreeCAD Einbaumodule, systeminstallierte Module und FreeCAD Zusatzmodule. Die dort verfügbare Dokumentation hängt davon ab, wie viel Aufwand jeder Modulentwickler in die Dokumentation seines Codes gesteckt hat, aber normalerweise haben Python Module den Ruf, ziemlich gut dokumentiert zu sein. Dein FreeCAD Fenster muss geöffnet bleiben, damit dieses Dokumentationssystem funktioniert.
Der Eintrag {{MenuCommand|Python Skripten Dokumentation}} gibt dir einen schnelle Verknüpfung zum [[Power_users_hub/de|Vielnutzer Verteiler]] Wiki Bereich.

{{Top}}
<span id="Built-in_modules"></span>
==Eingebaute Module==
==Eingebaute Module==


Da FreeCAD dafür entworfen ist, ohne Graphische Benutzerschnittstelle geführt zu werden, wird fast seine ganze Funktionalität in zwei Gruppen getrennt: Kernfunktionalität, genannt App, und Gui Funktionalität, genannt Gui. Also sind unsere beiden wichtigsten eingebauten FreeCAD Module die, namens App und GUI. Auf diese zwei Module kann auch von Scripten außerhalb des Interpreters, durch die jeweiligen Namen von FreeCAD und FreeCADGui zugegriffen werden.
Da FreeCAD für den Betrieb ohne grafische Benutzeroberfläche (GUI) konzipiert ist, ist fast die gesamte Funktionalität in zwei Gruppen unterteilt: Kernfunktionalität, genannt {{incode|App}}, und GUI Funktionalität, genannt {{incode|Gui}}. Diese beiden Module heißen daher App und Gui. Auf diese beiden Module kann auch von Skripten ausserhalb des Interpreters unter den Namen {{incode|FreeCAD}} bzw. {{incode|FreeCADGui}} zugegriffen werden.


* Im '''App-Modul''', finden Sie alles im Zusammenhang mit der Anwendung selbst, wie Methoden zum Öffnen oder Schließen von Dateien, und zu den Dokumenten, wie z.B. die Einstellung des aktiven Dokuments oder wie sie ihre Inhalte auflisten.
* Im {{incode|App}} findest Du alles, was mit der Anwendung selbst zu tun hat, wie Methoden zum Öffnen oder Schließen von Dateien, und mit den Dokumenten, wie das Setzen des aktiven Dokuments oder das Auflisten seines Inhalts.


* Im {{incode|Gui}} Modul, wirst du Werkzeuge für den Zugriff und die Verwaltung von GUI Elementen finden, wie die Arbeitsbereiche und ihre Werkzeugleisten, und, noch interessanter, die grafische Darstellung aller FreeCAD Inhalte.
* In the '''Gui module''', you'll find tools for accessing and managing Gui elements, like the workbenches and their toolbars, and, more interestingly, the graphical representation of all FreeCAD content.


Eine Auflistung des Inhalts dieser Module ist nicht sehr nützlich, da sie mit der Entwicklung von FreeCAD recht schnell wachsen. Aber die beiden zur Verfügung gestellten Browsing Werkzeuge (der Klassenbrowser und die Python Hilfe) sollte dir jederzeit eine vollständige und aktuelle Dokumentation liefern.
Listing all the content of those modules is a bit counter-productive task, since they grow quite fast with FreeCAD development. But the two browsing tools provided (the class browser and the Python help) should give you, at any moment, complete and up-to-date documentation of these modules.
{{Top}}
<span id="The_App_and_Gui_objects"></span>
===Die App und GUI Objekte===


Wie gesagt, in FreeCAD, wird alles zwischen Kern und Darstellung getrennt. Dazu gehören auch die 3D-Objekte. Sie können auf die Definition von Eigenschaften von Objekten (so genannte Features in FreeCAD) über das App Modul zugreifen, und die Art ändern, wie sie auf dem Schirm über das Gui Modul dargestellt werden. Zum Beispiel hat ein Würfel Eigenschaften, um ihn zu definieren, wie Breite, Länge, Höhe, die in einem App-Objekt gespeichert sind, und Darstellung-Eigenschaften, wie Flächen-Farbe, Zeichnen-Modus, die in einem entsprechenden GUI-Objekt gespeichert sind.
===The App and Gui objects===
As we said, in FreeCAD, everything is separated between core and representation. This includes the 3D objects too. You can access defining properties of objects (called features in FreeCAD) via the App module, and change the way they are represented on screen via the Gui module. For example, a cube has properties that define it, (like width, length, height) that are stored in an App object, and representation properties, (like faces color, drawing mode) that are stored in a corresponding Gui object.


Diese Handlungsweise ermöglicht eine sehr breite Palette von Anwendungen, wie mit Algorithmen nur aem Teil der Definition von Features zu arbeiten, ohne die Notwendigkeit, sich um den visuellen Teil kümmern zu müssen, oder sogar den Inhalt des Dokumentes zu nichtgraphischen Anwendung, wie Listen, Spreadsheets, oder Element-Analysen umzuleiten.
This way of doing things allows a very wide range of uses, like having algorithms work only on the definition part of features, without the need to care about any visual part, or even redirect the content of the document to non-graphical application, such as lists, spreadsheets, or element analysis.


Für jedes {{incode|App}} Objekt in deinem Dokument gibt es ein entsprechendes {{incode|Gui}} Objekt. Tatsächlich hat das Dokument selbst sowohl ein {{incode|App}} als auch ein {{incode|Gui}} Objekt.
For every App object in your document, there exists a corresponding Gui object. Infact the document itself has both App and a Gui objects. This, of course, is only valid when you run FreeCAD with its full interface. In the command-line version no GUI exists, so only App objects are availible. Note that the Gui part of objects is re-generated every time an App object is marked as 'to be recomputed' (for example when one of its parameters changes), so changes you might have made directly to the Gui object may be lost.
Dies gilt natürlich nur, wenn du FreeCAD mit seiner vollständigen Benutzeroberfläche ausführst. In der Befehlszeilenversion gibt es keine GUI, so dass nur {{incode|App}} Objekte verfügbar sind.
Beachte, dass der {{incode|Gui}} Teil von Objekten jedes Mal neu erzeugt wird, wenn ein {{incode|App}} Objekt als "neu zu berechnen" markiert wird (z. B. wenn sich einer seiner Parameter ändert), so dass alle direkt am {{incode|Gui}} Objekt vorgenommenen Änderungen verloren gehen können.


Um auf den {{incode|App}} Teil von etwas zuzugreifen, gib ein:
To access the App part of something, you type:
<syntaxhighlight>
myObject = App.ActiveDocument.getObject("ObjectName")
</syntaxhighlight>
where "ObjectName" is the name of your object. You can also type:
<syntaxhighlight>
myObject = App.ActiveDocument.ObjectName
</syntaxhighlight>
To access the Gui part of the same object, you type:
<syntaxhighlight>
myViewObject = Gui.ActiveDocument.getObject("ObjectName")
</syntaxhighlight>
where "ObjectName" is the name of your object. You can also type:
<syntaxhighlight>
myViewObject = App.ActiveDocument.ObjectName.ViewObject
</syntaxhighlight>
If we have no GUI (for example we are in command-line mode), the last line will return 'None'.


{{Code|code=
=== The Document objects ===
myObject = App.ActiveDocument.getObject("ObjectName")
In FreeCAD all your work resides inside Documents. A document contains your geometry and can be saved to a file. Several documents can be opened at the same time. The document, like the geometry contained inside, has App and Gui objects. App object contains your actual geometry definitions, while the Gui object contains the different views of your document. You can open several windows, each one viewing your work with a different zoom factor or point of view. These views are all part of your document's Gui object.
}}


wobei {{incode|"ObjectName"}} der Name deines Objektes ist. Du kannst auch eingeben:
To access the App part the currently open (active) document, you type:
<syntaxhighlight>
myDocument = App.ActiveDocument
</syntaxhighlight>
To create a new document, type:
<syntaxhighlight>
myDocument = App.newDocument("Document Name")
</syntaxhighlight>
To access the Gui part the currently open (active) document, you type:
<syntaxhighlight>
myGuiDocument = Gui.ActiveDocument
</syntaxhighlight>
To access the current view, you type:
<syntaxhighlight>
myView = Gui.ActiveDocument.ActiveView
</syntaxhighlight>
== Using additional modules ==
The FreeCAD and FreeCADGui modules are solely responsibles for creating and managing objects in the FreeCAD document. They don't actually do anything such as creating or modifying geometry. That is because that geometry can be of several types, and so it is managed by additional modules, each responsible for managing a certain geometry type. For example, the [[Part Module]] uses the OpenCascade kernel, and therefore is able to create and manipulate [http://en.wikipedia.org/wiki/Boundary_representation B-rep] type geometry, which is what OpenCascade is built for. The [[Mesh Module]] is able to build and modify mesh objects. That way, FreeCAD is able to handle a wide variety of object types, that can all coexist in the same document, and new types could be added easily in the future.


{{Code|code=
=== Creating objects ===
myObject = App.ActiveDocument.ObjectName
Each module has its own way to treat its geometry, but one thing they usually all can do is create objects in the document. But the FreeCAD document is also aware of the available object types provided by the modules:
}}
<syntaxhighlight>
FreeCAD.ActiveDocument.supportedTypes()
</syntaxhighlight>
will list you all the possible objects you can create. For example, let's create a mesh (treated by the mesh module) and a part (treated by the part module):
<syntaxhighlight>
myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature","myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature","myPartName")
</syntaxhighlight>
The first argument is the object type, the second the name of the object. Our two objects look almost the same: They don't contain any geometry yet, and most of their properties are the same when you inspect them with dir(myMesh) and dir(myPart). Except for one, myMesh has a "Mesh" property and "Part" has a "Shape" property. That is where the Mesh and Part data are stored. For example, let's create a Part cube and store it in our myPart object:
<syntaxhighlight>
import Part
cube = Part.makeBox(2,2,2)
myPart.Shape = cube
</syntaxhighlight>
You could try storing the cube inside the Mesh property of the myMesh object, it will return an error complaining of the wrong type. That is because those properties are made to store only a certain type. In the myMesh's Mesh property, you can only save stuff created with the Mesh module. Note that most modules also have a shortcut to add their geometry to the document:
<syntaxhighlight>
import Part
cube = Part.makeBox(2,2,2)
Part.show(cube)
</syntaxhighlight>
=== Modifying objects ===
Modifying an object is done the same way:
<syntaxhighlight>
import Part
cube = Part.makeBox(2,2,2)
myPart.Shape = cube
</syntaxhighlight>
Now let's change the shape by a bigger one:
<syntaxhighlight>
biggercube = Part.makeBox(5,5,5)
myPart.Shape = biggercube
</syntaxhighlight>
=== Querying objects ===
You can always look at the type of an object like this:
<syntaxhighlight>
myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print myObj.Type
</syntaxhighlight>
or know if an object is derived from one of the basic ones (Part Feature, Mesh Feature, etc):
<syntaxhighlight>
print myObj.isDerivedFrom("Part::Feature")
</syntaxhighlight>
Now you can really start playing with FreeCAD! To look at what you can do with the [[Part Module]], read the [[Topological data scripting|Part scripting]] page, or the [[Mesh Scripting]] page for working with the [[Mesh Module]]. Note that, although the Part and Mesh modules are the most complete and widely used, other modules such as the [[Draft Module]] also have [[Draft API|scripting]] APIs that can be useful to you. For a complete list of each modules and their available tools, visit the [[:Category:API]] section.


Um auf den {{incode|Gui}} Teil desselben Objekts zuzugreifen, gib ein:
{{docnav|Python scripting tutorial|Mesh Scripting}}


{{Code|code=
[[Category:Poweruser Documentation]]
myViewObject = Gui.ActiveDocument.getObject("ObjectName")
}}


wobei {{incode|"ObjectName"}} der Name deines Objektes ist. Du kannst auch eingeben:
{{clear}}

<languages/>
{{Code|code=
myViewObject = App.ActiveDocument.ObjectName.ViewObject
}}

Wenn du dich im Befehlszeilenmodus befindest und keine GUI hast, wird in der letzten Zeile {{incode|None}} zurückgegeben.
{{Top}}
<span id="The_Document_objects"></span>
===Die Dokument Objekte===

In FreeCAD befindet sich deine gesamte Arbeit in Dokumenten. Ein Dokument enthält deine Geometrie und kann in einer Datei gespeichert werden. Mehrere Dokumente können gleichzeitig geöffnet werden. Das Dokument hat, wie die darin enthaltene Geometrie {{incode|App}} und {{incode|Gui}} Objekte. Das {{incode|App}} Objekt die verschiedenen Ansichten deines Dokuments enthält. Du kannst mehrere Fenster öffnen, von denen jedes deine Arbeit mit einem anderen Zoomfaktor oder aus einer anderen Richtung betrachtet. Diese Ansichten sind alle Teil deines {{incode|Gui}} Dokument Objekts.

Um auf den {{incode|App}} Teil des aktuell geöffneten (aktiven) Dokuments zuzugreifen, gib ein:

{{Code|code=
myDocument = App.ActiveDocument
}}

Um ein neues Dokument zu erstellen, gib ein:

{{Code|code=
myDocument = App.newDocument("Document Name")
}}

Um auf den {{incode|Gui}} Teil des aktuell geöffneten (aktiven) Dokuments zuzugreifen, gib ein:

{{Code|code=
myGuiDocument = Gui.ActiveDocument
}}

Um auf die aktuelle Ansicht zuzugreifen, gib ein:

{{Code|code=
myView = Gui.ActiveDocument.ActiveView
}}
{{Top}}
<span id="Using_additional_modules"></span>
==Das Verwenden zusätzlicher Module==

Die {{incode|FreeCAD}} und {{incode|FreeCADGui}} Module sind ausschließlich Verantwortlich für das Erstellen und Verwalten von Objekten in einem FreeCAD Dokument. Sie tun eigentlich nichts mehr, wie zum Beispiel Geometrie erstellen oder verändern. Das liegt daran, dass diese Geometrie aus mehreren Typen bestehen kann und daher zusätzliche Module erfordert, die jeweils für die Verwaltung eines bestimmten Geometrietyps zuständig ist. Beispielsweise ist der [[Part_Workbench/de|Part-Arbeitsbereich]] unter Verwendung des OpenCascade Kernels in der Lage, Geometrie vom Typ [http://en.wikipedia.org/wiki/Boundary_representation BRep] zu erstellen und zu verändern. Wohingegen der [[Mesh_Workbench/de|Netz-Arbeitsbereich]] in der Lage ist, Netzobjekte zu erstellen und zu modifizieren. Auf diese Weise ist FreeCAD in der Lage, eine Vielzahl von Objekttypen zu handhaben, die alle im selben Dokument koexistieren können, und neue Typen können in Zukunft leicht hinzugefügt werden.
{{Top}}
<span id="Creating_objects"></span>
===Erzeugen von Objekten===

Jedes Modul hat seine eigene Art, mit Geometrie umzugehen, aber eine Sache, die sie normalerweise alle tun können, ist, Objekte im Dokument zu erstellen. Das FreeCAD Dokument kennt aber auch die verfügbaren Objekttypen, die von den Modulen bereitgestellt werden:

{{Code|code=
FreeCAD.ActiveDocument.supportedTypes()
}}

listet alle möglichen Objekte auf, die du erstellen kannst. Lass uns zum Beispiel ein Netz (gehandhabt vom Modul {{incode|Mesh}}) und ein Teil (gehandhabt vom Modul {{incode|Part}}) erstellen:

{{Code|code=
myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature", "myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature", "myPartName")
}}

Das erste Argument ist der Objekttyp, das zweite der Name des Objekts. Unsere beiden Objekte sehen fast gleich aus: Sie enthalten noch keine Geometrie, und die meisten ihrer Eigenschaften sind die gleichen, wenn du sie mit {{incode|dir(myMesh)}} und {{incode|dir(myPart)}} inspizierst. Mit einer Ausnahme {{incode|myMesh}} hat eine {{incode|Mesh}} Eigenschaft und {{incode|myPart}} hat eine {{incode|Shape}} Eigenschaft. Dort werden die Netz und Teildaten gespeichert werden. Lass uns zum Beispiel einen {{incode|Part}} Würfel erstellen und speichern ihn in unserem {{incode|myPart}} Objekt:

{{Code|code=
import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube
}}

Du könntest versuchen, den Würfel innerhalb der {{incode|Mesh}} Eigenschaft des {{incode|myMesh}} Objekts zu speichern, aber es wird ein Fehler zurückgegeben. Das liegt daran, dass jede Eigenschaft dazu gemacht ist, nur einen bestimmten Typ zu speichern. In einer {{incode|Mesh}} Eigenschaft kannst du nur Dinge speichern, die mit dem {{incode|Mesh}} Modul erstellt wurden. Beachte, dass die meisten Module auch eine Verknüpfung zum Hinzufügen ihrer Geometrie zum Dokument haben:

{{Code|code=
import Part
cube = Part.makeBox(2, 2, 2)
Part.show(cube)
}}
{{Top}}
<span id="Modifying_objects"></span>
===Ändern von Objekten===

Das Ändern eines Objekts erfolgt auf die gleiche Weise:

{{Code|code=
import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube
}}

Nun wollen wir die Form durch eine größere verändern:

{{Code|code=
biggercube = Part.makeBox(5, 5, 5)
myPart.Shape = biggercube
}}
{{Top}}
<span id="Querying_objects"></span>
===Abfragen von Objekten===

Du kannst dir jederzeit den Typ eines solchen Objekts ansehen:

{{Code|code=
myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print(myObj.TypeId)
}}

oder prüfe, ob ein Objekt von einem der Basisobjekte (Part Formelement, Netz Formelement usw.) abgeleitet ist:

{{Code|code=
print(myObj.isDerivedFrom("Part::Feature"))
}}

Jetzt kannst du wirklich anfangen, mit FreeCAD zu spielen! Eine vollständige Liste der verfügbaren Module und ihrer Werkzeuge findest du im [[:Category:API|Category:API]] Abschnitt.
{{Top}}

{{Docnav/de
|[[Python_scripting_tutorial/de|Python Tutorium Skripten]]
|[[Part_scripting/de|Part Skripten]]
}}

{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]

Latest revision as of 13:05, 26 February 2023

Python skripten in FreeCAD

FreeCAD wurde von Grund auf neu entwickelt, um vollständig von Python Skripten gesteuert zu werden. Nahezu alle Teile von FreeCAD, wie z.B. die Oberfläche, die Szeneninhalte und sogar die Darstellung dieser Inhalte in den 3D Ansichten, sind über den eingebauten Python Interpreter oder über eigene Skripte zugänglich. Damit ist FreeCAD wahrscheinlich eine der am weitesten anpassbaren Engineering Anwendungen, die heute verfügbar sind.

Wenn du nicht mit Python vertraut bist, empfehlen wir dir, nach Tutorien im Internet zu suchen, um so einen kurzen Blick auf seine Struktur zu bekommen. Python ist eine sehr einfache Sprache zu lernen, vor allem, weil es innerhalb eines Interpreters ausgeführt werden kann, wobei von einfachen Befehlen bis zu vollständigen Programmen alles dynamisch ausgeführt werden kann. Wenn du das Fenster mit der Aufschrift "Python Konsole", wie unten dargestellt nicht siehst, kannst du es unter Ansicht → Paneele → Python Konsole aktivieren.

Der Interpreter

Über den Interpreter, können Sie auf alle Ihre systeminstallierten Python-Module zugreifen, sowie die eingebaute FreeCAD Module und alle zusätzlichen Module, die Sie später installiert haben. Der folgende Screenshot zeigt den Python-Interpreter:

Der FreeCAD Python Interpreter

Vom Interpreter aus kannst du Python Code ausführen und durch die verfügbaren Klassen und Funktionen blättern. FreeCAD bietet einen sehr handlichen Klassenbrowser zur Erkundung der FreeCAD Welt: Wenn du den Namen einer bekannten Klasse gefolgt von einem Punkt eingibst (d.h. wenn du etwas von dieser Klasse hinzufügen möchtest), öffnet sich ein Klassenbrowser Fenster, in dem du zwischen den verfügbaren Unterklassen und Methoden navigieren kannst. Wenn du etwas auswählst, wird ein zugehöriger Hilfetext (falls vorhanden) angezeigt:

The FreeCAD class browser

Beginne also hier mit der Eingabe von App. oder Gui. und schau was passiert. Eine andere, allgemeinere Python Methode, um den Inhalt von Modulen und Klassen zu untersuchen, ist die Verwendung des print(dir()) Befehls. Wenn du beispielsweise print(dir()) eingibst, werden alle derzeit in FreeCAD geladenen Module aufgelistet. print(dir(App)) zeigt dir alles innerhalb des App Moduls usw.

Eine weitere nützliche Funktion des Interpreters ist die Möglichkeit, zurück zu gehen in der Befehlshistorie und eine Zeile des Codes wiederzubekommen, den du bereits früher getippt hast. Um durch die Befehlshistorie zu navigieren, benutze einfach Pfeil oben or Pfeil unten.

Mit Rechtsklick im Interpreter Fenster hast du auch einige andere Optionen, wie z. B. Kopie der gesamten Historie (nützlich, wenn du mit Dingen experimentieren möchtest, bevor du ein vollständiges Skript davon erstellst), oder füge einen Dateinamen mit vollständigem Pfad ein.

Anfang

Python Hilfe

Im FreeCAD Hilfe findest Du einen mit Automatische Python Moduldokumentation beschrifteten Eintrag, der ein Browserfenster öffnet, das eine vollständige, in Echtzeit generierte Dokumentation aller dem FreeCAD Interpreter zur Verfügung stehenden Python Module enthält, einschließlich Python- und FreeCAD Einbaumodule, systeminstallierte Module und FreeCAD Zusatzmodule. Die dort verfügbare Dokumentation hängt davon ab, wie viel Aufwand jeder Modulentwickler in die Dokumentation seines Codes gesteckt hat, aber normalerweise haben Python Module den Ruf, ziemlich gut dokumentiert zu sein. Dein FreeCAD Fenster muss geöffnet bleiben, damit dieses Dokumentationssystem funktioniert. Der Eintrag Python Skripten Dokumentation gibt dir einen schnelle Verknüpfung zum Vielnutzer Verteiler Wiki Bereich.

Anfang

Eingebaute Module

Da FreeCAD für den Betrieb ohne grafische Benutzeroberfläche (GUI) konzipiert ist, ist fast die gesamte Funktionalität in zwei Gruppen unterteilt: Kernfunktionalität, genannt App, und GUI Funktionalität, genannt Gui. Diese beiden Module heißen daher App und Gui. Auf diese beiden Module kann auch von Skripten ausserhalb des Interpreters unter den Namen FreeCAD bzw. FreeCADGui zugegriffen werden.

  • Im App findest Du alles, was mit der Anwendung selbst zu tun hat, wie Methoden zum Öffnen oder Schließen von Dateien, und mit den Dokumenten, wie das Setzen des aktiven Dokuments oder das Auflisten seines Inhalts.
  • Im Gui Modul, wirst du Werkzeuge für den Zugriff und die Verwaltung von GUI Elementen finden, wie die Arbeitsbereiche und ihre Werkzeugleisten, und, noch interessanter, die grafische Darstellung aller FreeCAD Inhalte.

Eine Auflistung des Inhalts dieser Module ist nicht sehr nützlich, da sie mit der Entwicklung von FreeCAD recht schnell wachsen. Aber die beiden zur Verfügung gestellten Browsing Werkzeuge (der Klassenbrowser und die Python Hilfe) sollte dir jederzeit eine vollständige und aktuelle Dokumentation liefern.

Anfang

Die App und GUI Objekte

Wie gesagt, in FreeCAD, wird alles zwischen Kern und Darstellung getrennt. Dazu gehören auch die 3D-Objekte. Sie können auf die Definition von Eigenschaften von Objekten (so genannte Features in FreeCAD) über das App Modul zugreifen, und die Art ändern, wie sie auf dem Schirm über das Gui Modul dargestellt werden. Zum Beispiel hat ein Würfel Eigenschaften, um ihn zu definieren, wie Breite, Länge, Höhe, die in einem App-Objekt gespeichert sind, und Darstellung-Eigenschaften, wie Flächen-Farbe, Zeichnen-Modus, die in einem entsprechenden GUI-Objekt gespeichert sind.

Diese Handlungsweise ermöglicht eine sehr breite Palette von Anwendungen, wie mit Algorithmen nur aem Teil der Definition von Features zu arbeiten, ohne die Notwendigkeit, sich um den visuellen Teil kümmern zu müssen, oder sogar den Inhalt des Dokumentes zu nichtgraphischen Anwendung, wie Listen, Spreadsheets, oder Element-Analysen umzuleiten.

Für jedes App Objekt in deinem Dokument gibt es ein entsprechendes Gui Objekt. Tatsächlich hat das Dokument selbst sowohl ein App als auch ein Gui Objekt. Dies gilt natürlich nur, wenn du FreeCAD mit seiner vollständigen Benutzeroberfläche ausführst. In der Befehlszeilenversion gibt es keine GUI, so dass nur App Objekte verfügbar sind. Beachte, dass der Gui Teil von Objekten jedes Mal neu erzeugt wird, wenn ein App Objekt als "neu zu berechnen" markiert wird (z. B. wenn sich einer seiner Parameter ändert), so dass alle direkt am Gui Objekt vorgenommenen Änderungen verloren gehen können.

Um auf den App Teil von etwas zuzugreifen, gib ein:

myObject = App.ActiveDocument.getObject("ObjectName")

wobei "ObjectName" der Name deines Objektes ist. Du kannst auch eingeben:

myObject = App.ActiveDocument.ObjectName

Um auf den Gui Teil desselben Objekts zuzugreifen, gib ein:

myViewObject = Gui.ActiveDocument.getObject("ObjectName")

wobei "ObjectName" der Name deines Objektes ist. Du kannst auch eingeben:

myViewObject = App.ActiveDocument.ObjectName.ViewObject

Wenn du dich im Befehlszeilenmodus befindest und keine GUI hast, wird in der letzten Zeile None zurückgegeben.

Anfang

Die Dokument Objekte

In FreeCAD befindet sich deine gesamte Arbeit in Dokumenten. Ein Dokument enthält deine Geometrie und kann in einer Datei gespeichert werden. Mehrere Dokumente können gleichzeitig geöffnet werden. Das Dokument hat, wie die darin enthaltene Geometrie App und Gui Objekte. Das App Objekt die verschiedenen Ansichten deines Dokuments enthält. Du kannst mehrere Fenster öffnen, von denen jedes deine Arbeit mit einem anderen Zoomfaktor oder aus einer anderen Richtung betrachtet. Diese Ansichten sind alle Teil deines Gui Dokument Objekts.

Um auf den App Teil des aktuell geöffneten (aktiven) Dokuments zuzugreifen, gib ein:

myDocument = App.ActiveDocument

Um ein neues Dokument zu erstellen, gib ein:

myDocument = App.newDocument("Document Name")

Um auf den Gui Teil des aktuell geöffneten (aktiven) Dokuments zuzugreifen, gib ein:

myGuiDocument = Gui.ActiveDocument

Um auf die aktuelle Ansicht zuzugreifen, gib ein:

myView = Gui.ActiveDocument.ActiveView

Anfang

Das Verwenden zusätzlicher Module

Die FreeCAD und FreeCADGui Module sind ausschließlich Verantwortlich für das Erstellen und Verwalten von Objekten in einem FreeCAD Dokument. Sie tun eigentlich nichts mehr, wie zum Beispiel Geometrie erstellen oder verändern. Das liegt daran, dass diese Geometrie aus mehreren Typen bestehen kann und daher zusätzliche Module erfordert, die jeweils für die Verwaltung eines bestimmten Geometrietyps zuständig ist. Beispielsweise ist der Part-Arbeitsbereich unter Verwendung des OpenCascade Kernels in der Lage, Geometrie vom Typ BRep zu erstellen und zu verändern. Wohingegen der Netz-Arbeitsbereich in der Lage ist, Netzobjekte zu erstellen und zu modifizieren. Auf diese Weise ist FreeCAD in der Lage, eine Vielzahl von Objekttypen zu handhaben, die alle im selben Dokument koexistieren können, und neue Typen können in Zukunft leicht hinzugefügt werden.

Anfang

Erzeugen von Objekten

Jedes Modul hat seine eigene Art, mit Geometrie umzugehen, aber eine Sache, die sie normalerweise alle tun können, ist, Objekte im Dokument zu erstellen. Das FreeCAD Dokument kennt aber auch die verfügbaren Objekttypen, die von den Modulen bereitgestellt werden:

FreeCAD.ActiveDocument.supportedTypes()

listet alle möglichen Objekte auf, die du erstellen kannst. Lass uns zum Beispiel ein Netz (gehandhabt vom Modul Mesh) und ein Teil (gehandhabt vom Modul Part) erstellen:

myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature", "myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature", "myPartName")

Das erste Argument ist der Objekttyp, das zweite der Name des Objekts. Unsere beiden Objekte sehen fast gleich aus: Sie enthalten noch keine Geometrie, und die meisten ihrer Eigenschaften sind die gleichen, wenn du sie mit dir(myMesh) und dir(myPart) inspizierst. Mit einer Ausnahme myMesh hat eine Mesh Eigenschaft und myPart hat eine Shape Eigenschaft. Dort werden die Netz und Teildaten gespeichert werden. Lass uns zum Beispiel einen Part Würfel erstellen und speichern ihn in unserem myPart Objekt:

import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube

Du könntest versuchen, den Würfel innerhalb der Mesh Eigenschaft des myMesh Objekts zu speichern, aber es wird ein Fehler zurückgegeben. Das liegt daran, dass jede Eigenschaft dazu gemacht ist, nur einen bestimmten Typ zu speichern. In einer Mesh Eigenschaft kannst du nur Dinge speichern, die mit dem Mesh Modul erstellt wurden. Beachte, dass die meisten Module auch eine Verknüpfung zum Hinzufügen ihrer Geometrie zum Dokument haben:

import Part
cube = Part.makeBox(2, 2, 2)
Part.show(cube)

Anfang

Ändern von Objekten

Das Ändern eines Objekts erfolgt auf die gleiche Weise:

import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube

Nun wollen wir die Form durch eine größere verändern:

biggercube = Part.makeBox(5, 5, 5)
myPart.Shape = biggercube

Anfang

Abfragen von Objekten

Du kannst dir jederzeit den Typ eines solchen Objekts ansehen:

myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print(myObj.TypeId)

oder prüfe, ob ein Objekt von einem der Basisobjekte (Part Formelement, Netz Formelement usw.) abgeleitet ist:

print(myObj.isDerivedFrom("Part::Feature"))

Jetzt kannst du wirklich anfangen, mit FreeCAD zu spielen! Eine vollständige Liste der verfügbaren Module und ihrer Werkzeuge findest du im Category:API Abschnitt.

Anfang