Python scripting tutorial/de: Difference between revisions

From FreeCAD Documentation
(Created page with "Category:Tutorials/de")
 
(Created page with "Wird das schon geladene Skript bearbeitet und gespeichert, öffnet sich ein Dialogfenster, und erfragt, ob das geänderte Skript wieder in FreeCAD geladen werden soll.")
 
(248 intermediate revisions by 10 users not shown)
Line 1: Line 1:
<languages/>
[http://en.wikipedia.org/wiki/Python_%28programming_language%29 Python] is a programming language, very simple to use and very fast to learn. It is open-source, multi-platform, and can be used alone for a wide array of things, from programming simple shell scripts to very complex programs. But one of its most widespread uses is as a scripting language, since it is easy to embed in other applications. That's exactly how it is used inside FreeCAD. From the python console, or from your custom scripts, you can pilot FreeCAD, and make it perform very complex actions for which there is still no graphical user interface tool.

{{Docnav/de
|[[Introduction_to_Python/de|Einführung in Python]]
|[[FreeCAD_Scripting_Basics/de|FreeCAD Grundlagen Skripten]]
}}

{{TOCright}}

<span id="Introduction"></span>
==Einführung==

[http://en.wikipedia.org/wiki/Python_%28programming_language%29 Python] ist eine Programmiersprache, sehr einfach zu bedienen und sehr schnell zu erlernen. Sie ist quelloffen, plattformübergreifend und kann für eine Vielzahl von Aufgaben allein verwendet werden, von der Programmierung einfacher Shell Skripte bis hin zu sehr komplexen Programmen. Aber eine der am weitesten verbreiteten Anwendungen ist die Skriptsprache, da sie leicht in andere Anwendungen integriert werden kann. Genau so wird es in FreeCAD verwendet. Von der [[Python_console/de|Python Konsole]] oder von deinen benutzerdefinierten Skripten aus kannst du FreeCAD steuern und es sehr komplexe Aktionen ausführen lassen.

Zum Beispiel aus einem Python Skript, kannst Du:
* neue Objekte erstellen
* bestehende Objekte ändern
* die 3D Darstellung dieser Objekte ändern
* die FreeCAD Oberfläche verändern


Es gibt mehrere Möglichkeiten, Python in FreeCAD zu verwenden:
For example, from a python script, you can:
* Aus dem [[FreeCAD Scripting Basics/de|FreeCAD Python Interpreter]], wo du einfache Befehle wie in einer "Kommandozeile" ähnlichen Oberfläche ausgeben kannst.
* create new objects
* Aus [[Macros/de|Makros]], die eine bequeme Möglichkeit darstellen, ein fehlendes Werkzeug schnell zur FreeCAD Oberfläche hinzuzufügen.
* modify existing objects
* Aus externen Skripten, mit denen man viel komplexere Dinge programmieren kann, wie z.B. ganze [[Workbenches/de|Arbeitsbereiche]].
* modify the 3D representation of those objects
* modify the FreeCAD interface


In diesem Tutorial werden wir an ein paar einfachen Beispielen arbeiten, um dir den Einstieg zu erleichtern, aber es gibt auch viel mehr [[Power users hub/de|Dokumentation über Python Skripten]] auf diesem Wiki. Wenn du völlig neu in Python bist und verstehen willst, wie es funktioniert, haben wir auch eine grundlegende [[introduction to Python/de|Einführung in Python]].
There are also several different ways to use python in FreeCAD:
* From the [[FreeCAD Scripting Basics|FreeCAD python interpreter]], where you can issue simple commands like in a "command line"-style interface
* From [[macros]], which are a convenient way to quickly add a missing tool to the FreeCAD interface
* From external scripts, which can be used to program much more complex things. like entire [[Workbenches]].


Bevor Wir mit dem Python-Skripten fortfahren, öffne {{MenuCommand|Bearbeiten → Einstellungen → Allgemein → Ausgabefenster}} und aktiviere folgende Optionen:
In this tutorial, we'll work on a couple of simple examples to get you started, but there is also much more [[Power users hub|documentation about python scripting]] available on this wiki. If you are totally new to python and want to understand how it works, we also have a basic [[introduction to Python]].
* {{MenuCommand|Interne Python-Meldungen auf Ausgabefenster umleiten}}.
* {{MenuCommand|Interne Python-Fehlermeldungen auf Ausgabefenster umleiten}}.
Danach unter {{MenuCommand|Ansicht → Paneele}} folgende Option aktivieren:
* {{MenuCommand|Ausgabefenster}}


<span id="Writing_Python_code"></span>
'''Important!''' Before proceeding with Python scripting, go to {{MenuCommand|Edit->Prefences->General->Output}} window and check 2 boxes:
==Python Code schreiben==
* Redirect internal Python output to report view
* Redirect internal Python errors to report view
Then go to {{MenuCommand|View->Views}} and check:
* Report view
This will save you a lot of aggravation!


Es gibt zwei einfache Wege, Python Code in FreeCAD zu schreiben: Über die Python Konsole (verfügbar im Menü Ansicht → Paneele → Python Konsole) oder über den Makro Editor (Werkzeuge → Makros). In der Konsole schreibst Du nacheinander Python Befehle, die ausgeführt werden, wenn Du die Eingabetaste drückst, während die Makros ein komplexeres Skript aus mehreren Zeilen enthalten können, das erst bei der Ausführung des Makros ausgeführt wird.
== Writing python code ==
There are two easy ways to write python code in FreeCAD: From the python console (available from the View -> Views -> Python console menu) or from the Macro editor (Tools -> Macros). In the console, you write python commands one by one, which are executed when you press return, while the macros can contain a more complex script made of several lines, which is executed only when the macro is executed.


[[Image:Screenshot_pythoninterpreter.jpg|center|frame|The FreeCAD python console]]
[[Image:Screenshot_pythoninterpreter.jpg]]
{{Caption|Die FreeCAD Python Konsole}}


In diesem Tutorium kannst Du beide Methoden verwenden. Du kannst Kopieren/Einfügen von einzelnen Zeilen in die Python Konsole und drücken der {{KEY|Eingabetaste}} oder Kopieren/Einfügen des gesamten Codes in ein neues Makro Fenster.
In this tutorial, you will be able to use both methods, either by copying/pasting each line one by one in the python console and pressing {{KEY|Return}} after each line, or by copying/pasting the entire code in a new Macro window.
{{Top}}
<span id="Exploring_FreeCAD"></span>
==Erkunden von FreeCAD==


Wir beginnen damit, ein neues leeres Dokument zu erstellen:
== Exploring FreeCAD ==
Let's start by creating a new empty document:


{{Code|code=
{{Code|code=
Line 35: Line 51:
}}
}}


Wenn du dies in der FreeCAD Python Konsole eingibst, wirst du feststellen, dass sobald du {{incode|FreeCAD.}} eingibst, ein Fenster erscheint, in dem du den Rest deiner Zeile schnell automatisch vervollständigen kannst. Besser noch, jeder Eintrag in der Autovervollständigungsliste hat einen Werkzeugtip, der erklärt, was er tut. Dies macht es einfacher, die verfügbare Funktionalität zu erkunden. Bevor du {{incode|newDocument}} wählst, wirf einen Blick auf die anderen Optionen.
If you type this in the FreeCAD python console, you will notice that as soon as you type "FreeCAD.", a windows pops up, allowing to quickly autocomplete the rest of your line. Even better, each entry in the autocomplete list has a tooltip explaining what it does. This makes it very easy to explore the functionality available. Before choosing "newDocument", have a look at the other options available.


[[Image:Screenshot_classbrowser.jpg|center|frame|The autocomplete mechanism of the FreeCAD python console]]
[[Image:Screenshot_classbrowser.jpg]]
{{Caption|Autovervollständigungsmechanismus der FreeCAD Pythonkonsole}}


Nun wird unser neues Dokument erstellt. Dies entspricht dem Drücken der Schaltfläche {{Button|[[Image:Std_New.svg|16px]] [[Std_New/de|Neu]]}} in der Symbolleiste. Tatsächlich tun die meisten Schaltflächen in FreeCAD nichts anderes, als eine oder mehrere Zeilen Python-Code auszuführen. Noch besser, du kannst die Option {{MenuCommand|Skript-Befehle in der Python-Konsole anzeigen}} unter {{MenuCommand|Bearbeiten → Einstellungen → Python → Makro}} aktivieren. Dadurch wird in der Konsole der gesamte Python-Code ausgegeben, der ausgeführt wird, wenn du Tasten drückst. Sehr nützlich, um zu lernen, wie man Aktionen in Python reproduziert.
Now our new document will be created. This is similar to pressing the "new document" button on the toolbar. In fact, most buttons in FreeCAD do nothing else than executing a line or two of python code. Even better, you can set an option in {{MenuCommand|Edit->Preferences->General->Macro}} to "show script commands in python console". This will print in the console all python code executed when you press buttons. Very useful to learn how to reproduce actions in python.


Lass uns nun zu unserem Dokument zurückkehren und sehen, was wir mit ihm machen können:
Now let's get back to our document. Let's see what we can do with it:


{{Code|code=
{{Code|code=
Line 47: Line 64:
}}
}}


Erkunde die verfügbaren Optionen. Normalerweise sind Namen, die mit einem Großbuchstaben beginnen, Attribute, sie enthalten einen Wert, während Namen, die mit einem Kleinbuchstaben beginnen, Funktionen (auch Methoden genannt) sind, sie "tun etwas". Namen, die mit einem Unterstrich beginnen, sind normalerweise für die interne Arbeit des Moduls da, und du solltest dich nicht um sie kümmern. Lasse uns eine der Methoden verwenden, um ein neues Objekt zu unserem Dokument hinzuzufügen:
Explore the available options. Usually names that begin with a capital letter are attributes, they contain a value, while names that begin with small letter are functions (also called methods), they "do something". Names that begin with an underscore are usually there for the internal working of the module, and you shouldn't care about them. Let's use one of the methods to add a new object to our document:


{{Code|code=
{{Code|code=
box = doc.addObject("Part::Box","myBox")
box = doc.addObject("Part::Box", "myBox")
}}
}}


Es geschieht nichts. Warum nicht? Weil FreeCAD für das große Ganze gemacht ist. Eines Tages wird es mit Hunderten von komplexen Objekten arbeiten, die alle voneinander abhängen. Wenn du irgendwo eine kleine Änderung vornimmst, kann das große Auswirkungen haben, und du musst vielleicht das ganze Dokument neu berechnen, was sehr lange dauern kann. Aus diesem Grund aktualisiert fast kein Befehl die Szene automatisch. Du musst es manuell durchführen:
Nothing happens. Why? Because FreeCAD is made for the big picture. One day, it will work with hundreds of complex objects, all depending one from another. Making a small change somewhere could have a big impact, you may need to recalculate the whole document, which could take a long time... For that reason, almost no command updates the scene automatically. You must do it manually:


{{Code|code=
{{Code|code=
Line 59: Line 76:
}}
}}


Nun erschien unser Würfel. Viele der Schaltflächen, mit denen in FreeCAD Objekte hinzugefügt werden können, tun eigentlich zwei Dinge: das Objekt hinzufügen und neu berechnen. Wenn du die obige Option {{MenuCommand|Skriptbefehle in der Python Konsole anzeigen}} eingeschaltet hast, versuche, mit der GUI Schaltfläche eine Kugel hinzuzufügen. Du wirst sehen, wie die beiden Zeilen des Python Codes nacheinander ausgeführt werden.
See? Now our box appeared! Many of the buttons that add objects in FreeCAD actually do 2 things: add the object, and recompute. If you turned on the "show script commands in python console" option above, try now adding a sphere with the GUI button, you'll see the two lines of python code being executed one after the other.


Lass uns nun den Inhalt unseres Würfels erkunden:
What about the "Part::Box" will you ask? How can I know what other kind of objects can be added? It's all here:

{{Code|code=
doc.supportedTypes()
}}

Now let's explore the contents of our box:


{{Code|code=
{{Code|code=
Line 73: Line 84:
}}
}}


Du wirst sofort einige sehr interessante Dinge sehen, wie zum Beispiel:
You'll immediately see a couple of very interesting things such as:


{{Code|code=
{{Code|code=
Line 79: Line 90:
}}
}}


Dadurch wird die aktuelle Höhe unseres Würfels ausgegeben. Lass uns nun versuchen das zu ändern:
This will print the current height of our box. Now let's try to change that:


{{Code|code=
{{Code|code=
Line 85: Line 96:
}}
}}


Wenn du dein Feld mit der Maus auswählst, siehst du, dass im [[Property_editor/de|Eigenschaftseditor]] auf dem {{MenuCommand|Daten}} Reiter unsere Eigenschaft {{PropertyData|Höhe}} erscheint. Alle Eigenschaften eines FreeCAD Objekts, die dort (und auch auf dem {{MenuCommand|Ansicht}} Reiter erscheinen, dazu später mehr), sind auch von Python direkt zugänglich, und zwar über ihren Namen, wie wir es mit der {{PropertyData|Höhe}} Eigenschaft getan haben. Versuche, die anderen Dimensionen des Würfels zu ändern.
If you select your box with the mouse, you'll see that in the properties panel, in the "Data" tab, our "Height" property appears. All properties of a FreeCAD object that appear there (and also in the "View" tab, more about that later), are directly accessible by python too, by their names, like we did with the "Height" property. Try changing the other dimensions of that box.
{{Top}}
<span id="Vectors_and_placements"></span>
==Vektoren und Platzierungen==


[https://de.wikipedia.org/wiki/vektor Vektoren] sind ein fester Bestandteil jeder 3D-Anwendung. Ein Vektor ist dabei eine Liste von Zahlen (x,y,z), die einen Ort im dreidimensionalen Raum beschreiben. Mit Vektoren sind verschiedene mathematische Operationen möglich, wie z.B. Addition, Subtraktion, Projektion (Skalarprodukt) und [https://de.wikipedia.org/wiki/Vektorraum vieles mehr]. In FreeCAD funktionieren Vektoren wie folgt:
== Vectors and Placements ==
[http://en.wikipedia.org/wiki/Euclidean_vector Vectors] are a very fundamental concept in any 3D application. It is a list of 3 numbers (x, y and z), describing a point or position in the 3D space. A lot of things can be done with vectors, such as additions, subtractions, projections and [http://en.wikipedia.org/wiki/Vector_space much more]. In FreeCAD vectors work like this:


{{Code|code=
{{Code|code=
myvec = FreeCAD.Vector(2,0,0)
myvec = FreeCAD.Vector(2, 0, 0)
myvec
myvec.x
myvec.x
myvec.y
myvec.y
othervec = FreeCAD.Vector(0,3,0)
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)
sumvec = myvec.add(othervec)
}}
}}


Ein weiteres gemeinsames Merkmal von FreeCAD Objekten ist ihre [[Placement/de|Placement]]. Jedes Objekt hat eine {{PropertyData|Platzierung}}s Eigenschaft, die die {{PropertyData|Base}} enthält. (Position) und {{PropertyData|Rotation}} (Orientierung) des Objekts. Es ist leicht zu bearbeiten, zum Beispiel um unser Objekt zu bewegen:
Another common feature of FreeCAD objects is their [[Placement|placement]]. Each object has a Placement attributes, which contains the position (Base) and orientation (Rotation) of the object. It is easy to manipulate, for example to move our object:


{{Code|code=
{{Code|code=
box.Placement.
box.Placement
box.Placement.Base
box.Placement.Base
box.Placement.Base = sumvec
box.Placement.Base = sumvec
Line 110: Line 122:
}}
}}


Nun musst du einige wichtige Konzepte verstehen, bevor wir weiter kommen.
Now you must understand a couple of important concepts before we get further.
{{Top}}
<span id="App_and_Gui"></span>
==App und GUI==


FreeCAD wurde von Anfang an als Kommandozeilen-Anwendung konzipiert, d.h. ohne notwendige Benutzeroberfläche. Als Folge davon ist fast alles zwischen einer "geometrischen" Komponente und einer "visuellen" Komponente aufgeteilt. Wenn man im Kommandozeilenmodus arbeitet, dann ist der geometrische Teil vorhanden, aber der visuelle Teil deaktiviert. Fast jedes Objekt in FreeCAD besteht deshalb aus zwei Teilen, einem ''Object'' und einem ''ViewObject'' (Objektansicht).
== App and Gui ==
FreeCAD is made from the beginning to work as a command-line application, without its user interface. As a result, almost everything is separated between a "geometry" component and a "visual" component. When you work in command-line mode, the geometry part is present, but all the visual part is simply disabled. Almost any object in FreeCAD therefore is made of two parts, an Object and a ViewObject.


Um das Konzept zu veranschaulichen, schauen wir uns unser Würfel Objekt an. Die geometrischen Eigenschaften des Würfels wie Abmessungen, Position usw. sind im {{incode|Objekt}} gespeichert. Während seine visuellen Eigenschaften wie Farbe, Linienstärke usw. im {{incode|AnsichtObjekt}} gespeichert sind, werden seine visuellen Eigenschaften wie Farbe, Linienstärke usw. im {{incode|AnsichtObjekt}} gespeichert. Dies entspricht den '''Daten''' und '''Ansicht''' Reitern im [[Property_editor/de|Eigenschaftseditor]]. Auf das Ansicht Objekt eines Objekts wird wie folgt zugegriffen:
To illustrate the concept, see our cube object, the geometric properties of the cube, such as its dimensions, position, etc... are stored in the object, while its visual properties, such as its color, line thickness, etc... are stored in the viewobject. This corresponds to the "Data" and "View" tabs in the property window. The view object of an object is accessed like this:


{{Code|code=
{{Code|code=
vo = box.ViewObject
vo = box.ViewObject
}}
}}
Jetzt kannst du auch die Eigenschaften auf dem '''Ansicht''' Reiter ändern:
Now you can also change the properties of the "View" tab:


{{Code|code=
{{Code|code=
Line 128: Line 142:
}}
}}


When you start FreeCAD, the python console already loads 2 base modules: FreeCAD and FreeCADGui (which can also be accessed by their shortcuts App and Gui). They contain all kinds of generic functionality to work with documents and their objects. To illustrate our concept, see that both FreeCAD and FreeCADGui contain an ActiveDocument attribute, which is the currently opened document. FreeCAD.ActiveDocument and FreeCADGui.ActiveDocument are not the same object. They are the two components of a FreeCAD document, and they contain different attributes and methods. For example, FreeCADGui.ActiveDocument contains ActiveView, which is the currently opened 3D view
Wenn du FreeCAD startest, lädt die Python Konsole bereits zwei Basismodule: {{incode|FreeCAD}} und {{incode|FreeCADGui}} (die auch über ihre Kürzel {{incode|App}} und {{incode|Gui}} erreicht werden können). Sie enthalten alle Arten von generischer Funktionalität für die Arbeit mit Dokumenten und ihren Objekten. Um unser Konzept zu veranschaulichen, siehe, dass sowohl {{incode|FreeCAD}} als auch {{incode|FreeCADGui}} ein {{incode|ActiveDocument}} Attribut enthalten, das das aktuell geöffnete Dokument ist. {{incode|FreeCAD.ActiveDocument}} und {{incode|FreeCADGui.ActiveDocument}} sind jedoch nicht dasselbe Objekt. Sie sind die beiden Komponenten eines FreeCAD Dokuments, und sie enthalten unterschiedliche Attribute und Methoden. So enthält z.B. {{incode|FreeCADGui.ActiveDocument}} {{incode|ActiveView}}, welches die aktuell geöffnete [[3D_view/de|3D Ansicht]] ist.
{{Top}}
<span id="Modules"></span>
== Module ==


Die wahre Stärke von FreeCAD liegt in seinen treuen Modulen mit ihren jeweiligen Arbeitsbereichen. Die FreeCAD Basisanwendung ist mehr oder weniger ein leerer Behälter. Ohne seine Module kann es kaum mehr tun, als neue, leere Dokumente zu erstellen. Jedes Modul fügt der Oberfläche nicht nur neue Arbeitsbereiche hinzu, sondern auch neue Python Befehle und neue Objekttypen. So können mehrere verschiedene, sogar völlig inkompatible Objekttypen in einem Dokument koexistieren. Die wichtigsten Module in FreeCAD, die wir uns in diesem Tutorium ansehen werden, sind: [[Part_Workbench/de|Part]], [[Mesh_Workbench/de|Netz]], [[Sketcher_Workbench/de|Skizzierer]] und [[Draft_Workbench/de|Entwurf]].
== Modules ==
Now, you must be wondering, what, other than "Part::Box", can I do? The FreeCAD base application is more or less an empty container. Without its modules, it can do little more than create new, empty documents. The true power of FreeCAD is in its faithful modules. Each of them adds not only new workbenches to the interface, but also new python commands and new object types. As a result, several different or even totally incompatible object types can coexist in the same document. The most important modules in FreeCAD, that we'll look at in this tutorial, are [[Part Module|Part]], [[Mesh Module|Mesh]], [[Sketcher Workbench|Sketcher]] or [[Draft Module|Draft]].


[[Sketcher_Workbench/de|Skizzierer]] und [[Draft_Workbench/de|Entwurf]] verwenden beide das [[Part_Workbench/de|Part]] Modul, um ihre Geometrie zu erzeugen und handzuhaben. Während [[Mesh_Workbench/de|Netz]] völlig unabhängig ist und seine eigenen Objekte handhabt. Mehr dazu weiter unten.
[[Sketcher Workbench|Sketcher]] and [[Draft Module|Draft]] both use the [[Part Module|Part]] module to create and handle their geometry, which are BRep while [[Mesh Module|Mesh]] is totally independent, and handles its own objects. More about that below.


Du kannst alle verfügbaren Basisobjekttypen für das aktuelle Dokument folgendermaßen prüfen:
You can check all the available base object types for the current document like this:


{{Code|code=
{{Code|code=
Line 141: Line 157:
}}
}}


Die verschiedenen FreeCAD Module werden nicht automatisch in die Python Konsole geladen. Damit soll ein sehr langsamer Start vermieden werden. Die Module werden nur geladen, wenn du sie benötigst. So kannst du z.B. untersuchen, was sich innerhalb des Part Moduls befindet:
The different FreeCAD modules, although they added their object types to FreeCAD, are not automatically loaded in the python console. This is to avoid having a very slow startup. Modules are loaded only when you need them. So, for example, to explore what's inside the Part module:


{{Code|code=
{{Code|code=
Line 148: Line 164:
}}
}}


Aber wir werden weiter unten mehr über das Part Modul sprechen.
But we'll talk more about the Part module below.
{{Top}}
<span id="Mesh_module"></span>
==Modul Mesh==


[https://de.wikipedia.org/wiki/Polygonnetz Polygonnetze] (engl.: Meshes) sind eine sehr einfache Art von 3D Objekten, die z.B. von [https://en.wikipedia.org/wiki/SketchUp Sketchup], [https://en.wikipedia.org/wiki/Blender_(software) Blender] und [https://en.wikipedia.org/wiki/Autodesk_3ds_Max 3D Studio Max] verwendet werden. Sie werden aus 3 Elementen gebildet: Punkte (auch Knoten genannt), Linien (auch Kanten genannt) und Flächen. In vielen Anwendungen, einschließlich FreeCAD, können Flächen nur 3 Knoten haben. Natürlich hindert Dich nichts daran, eine größere ebene Fläche aus mehreren nebeneinander liegenden Dreiecken zu haben.
By now, you know a bit more about the different modules of FreeCAD: The core modules (FreeCAD, FreeCADGui), and the workbenches modules (Part, Mesh, Sketcher). The other important modules are the 3d scene module (pivy) and the interface module (pyside), we'll talk about them too below.


Polygonnetze sind einfach, aber weil sie einfach sind, kannst Du leicht Millionen von ihnen in einem einzigen Dokument haben. Allerdings sind sie in FreeCAD weniger nützlich und meist vorhanden, so dass Du Objekte in Netzformaten ({{FileName|.stl}}, {{FileName|.obj}}) aus anderen Anwendungen importieren kannst. Das Netzmodul wurde auch im ersten Monat des FreeCAD Lebens ausgiebig als Haupttestmodul verwendet.
Now it's time to explore a bit deeper the important ones, which are the workbench modules.


Netzobjekte und FreeCAD Objekte sind unterschiedliche Dinge. Du kannst das FreeCAD Objekt als einen Behälter für ein Netzobjekt betrachten (und wie wir unten sehen werden, auch für Part Objekte). Um also ein Netz Objekt zu FreeCAD hinzuzufügen, müssen wir zuerst ein FreeCAD Objekt und ein Mesh Objekt erstellen und dann das Netz Objekt zum FreeCAD Objekt hinzufügen:
== Mesh ==

[http://en.wikipedia.org/wiki/Polygon_mesh Meshes] are a very simple kind of 3D objects, used for example by [http://en.wikipedia.org/wiki/SketchUp Sketchup], [http://en.wikipedia.org/wiki/Blender_%28software%29 Blender] or [http://en.wikipedia.org/wiki/Autodesk_3ds_Max 3D studio Max]. They are composed of 3 elements: points (also called vertices), lines (also called edges) and faces. In many applications, FreeCAD included, faces can have only 3 vertices. But of course nothing prevents you from having a bigger plane face made of several coplanar triangles.

Meshes are simple, this can be a bad thing, but for many applications such as those mentioned above, it turns to be an advantage, because they are so simple that you can easily have millions of them in a single document. In FreeCAD, though, they have less use, and are mostly there so you can import objects in mesh formats (.stl, .obj) from other applications. It was also used extensively as the main test module in the first month of FreeCAD's life.

Mesh objects and FreeCAD objects are different things. You can see the FreeCAD object as a container for a Mesh object (like, we'll see below, for Part objects too). So in order to add a mesh object to FreeCAD, we must first create a FreeCAD object and a Mesh object, then add the Mesh object to the FreeCAD object:


{{Code|code=
{{Code|code=
import Mesh
import Mesh
mymesh = Mesh.createSphere()
mymesh = Mesh.createSphere()
mymesh.
mymesh.Facets
mymesh.Facets
mymesh.Points
mymesh.Points
meshobj = doc.addObject("Mesh::Feature","MyMesh")
meshobj = doc.addObject("Mesh::Feature", "MyMesh")
meshobj.Mesh = mymesh
meshobj.Mesh = mymesh
doc.recompute()
doc.recompute()
}}
}}


Dies ist ein Standardbeispiel, das die {{incode|createSphere()}} Methode verwendet, um eine Kugel zu erstellen, aber Du kannst auch benutzerdefinierte Netze von Grund auf neu erstellen, indem Du ihre Knoten und Flächen definierst.
This is a standard example, that uses the createSphere() method to automatically create a sphere, but you can very well create custom meshes from scratch, by defining their vertices and faces.


[[Mesh Scripting|Read more about mesh scripting...]]
[[Mesh_Scripting/de|Lies mehr über Netz Skripten...]]
{{Top}}
<span id="Part_module"></span>
==Modul Part==


Das [[Part_Workbench/de|Part]] Modul ist das leistungsfähigste Modul im gesamten FreeCAD. Es erlaubt Dir [http://en.wikipedia.org/wiki/Boundary_representation BREP] Objekte zu erstellen und zu verändern. Diese Art von Objekten kann, im Gegensatz zu Netzen, eine Vielzahl von Komponenten haben. BREP steht für Begrenzungsflächenmodell (engl.: Boundary Representation), was bedeutet, dass BREP Objekte durch ihre Oberflächen definiert werden; diese Oberflächen umschließen und definieren ein Innenvolumen. Eine Oberfläche kann eine Vielzahl von Dingen sein, wie z.B. ebene Flächen oder sehr komplexe NURBS Oberflächen.
== Part ==
The [[Part Module]] is the most powerful module of the whole FreeCAD. It allows to create and manipulate [http://en.wikipedia.org/wiki/Boundary_representation BRep] objects. This kind of object, unlike meshes, can have a wide variety of components. To resume a bit, Brep means Boundary Representation. which means that they are defined by their surfaces, which enclose and define an inner volume. These surface can be a variety of things, such as plane faces or very complex NURBS surfaces. They also carry the concept of volume.


The Part module is based on the powerful [http://en.wikipedia.org/wiki/Open_CASCADE_Technology OpenCasCade] library, which allows a wide range of complex operations to be easily performed on those objects, such as boolean operations, filleting, lofts, etc...
Das Part Modul basiert auf der leistungsstarken [https://en.wikipedia.org/wiki/Open_CASCADE_Technology OpenCasCade] Bibliothek, die es ermöglicht, eine Vielzahl von komplexen Operationen auf diesen Objekten einfach durchzuführen, wie z.B. boolesche Operationen, Verrundungung, Ausformungen, usw.


The Part module works the same way as the Mesh module: You create a FreeCAD object, a Part object, then add the Part object to the FreeCAD object:
Das Part-Modul arbeitet auf dieselbe Weise wie das Netz Modul: Man erzeugt ein FreeCAD Objekt, ein Part Objekt, danach fügt man das Part Objekt zum FreeCAD Objekt hinzu:


{{Code|code=
{{Code|code=
import Part
import Part
myshape = Part.makeSphere(10)
myshape = Part.makeSphere(10)
myshape.
myshape.Volume
myshape.Volume
myshape.Area
myshape.Area


shapeobj = doc.addObject("Part::Feature","MyShape")
shapeobj = doc.addObject("Part::Feature", "MyShape")
shapeobj.Shape = myshape
shapeobj.Shape = myshape
doc.recompute()
doc.recompute()
}}
}}


The Part module (like the Mesh module) also has a shortcut that automatically creates a FreeCAD object and add a shape to it, so you can skip the 3 last lines above:
Das Part Modul (wie das Netz Modul) hat auch ein Tastaturkürzel, das automatisch ein FreeCAD Objekt erstellt und eine Form hinzufügt, so dass du die letzten drei Zeilen verkürzen kannst auf:


{{Code|code=
{{Code|code=
Line 203: Line 216:
}}
}}


Beim erforschen der Inhalt von myshape, wirst Du viele interessante Unterkomponenten wie {{incode|Flächen}}, {{incode|Kanten}}, {{incode|Knoten}}, {{incode|Festkörper}} und {{incode|Schalen}}, und eine weite Bandbreite von Geometrieoperationen wie {{incode|Schnitt}} (Subtraktion), {{incode|Gemeinsam}} (Schnittpunkt) oder {{incode|Verschmelzung}} (Vereinigung) bemerken. Die [[Topological data scripting/de|Topologisches Daten Skripten]] Seite erklärt all das im Detail.
By exploring the contents of myshape, you will notice many interesting available subcomponents such as Faces, Edges, Vertexes, Solids or Shells, and a wide range of geometry operations such as cut (subtraction), common (intersection) or fuse (union). The [[Topological data scripting]] page explains all that in detail.


[[Topological_data_scripting/de|Lies mehr über Part Skripten...]]
[[Topological data scripting|Read more about part scripting...]]
{{Top}}
<span id="Draft_module"></span>
==Modul Draft==


FreeCAD bietet noch viele weitere Module, wie [[Sketcher_Workbench/de|Skizzierer]] und [[Draft_Workbench/de|Entwurf]], die ebenfalls Teilobjekte erzeugen. Diese Module fügen zusätzliche Parameter zu den erzeugten Objekten hinzu oder implementieren sogar eine völlig neue Art und Weise, die Teilegeometrie in ihnen zu handhaben. Unser obiges Box Beispiel ist ein perfektes Beispiel für ein parametrisches Objekt. Alles was Du zur Definition der Box benötigst, ist die Angabe der Parameter Höhe, Breite und Länge. Basierend auf diesen Parametern berechnet das Objekt automatisch seine Teileform. FreeCAD erlaubt es Dir [[Scripted_objects/de|Erzeuge solche Objekte in Python]].
== Draft ==
FreeCAD features many more modules, such as [[Sketcher Workbench|Sketcher]] or [[Draft Module|Draft]], which also create Part objects, but add parameters to it, or even carry a whole new way to handle the Part geometry in them. Our box example above, is a perfect example of parametric object. All you need, to define the box, is to specify a couple of parameters, such as height, width and length. Based on those, the object will automatically calculate its Part shape. FreeCAD allows you to [[Scripted objects|create such objects in python]].


Das [[Draft_Workbench/de|Entwurf]] Modul fügt parametrische 2D Objekttypen (die alle Part Objekte sind) wie Linien und Kreise hinzu und bietet auch einige grundlegende Funktionen, die nicht nur auf Entwurfsobjekte, sondern auf jedes Part Objekt wirken. Um zu erkunden, was verfügbar ist, mache einfach:
The [[Draft Module]] adds a couple of 2D parametric objects types (which are all Part objects) such as lines and circles, and also provides some generic functions that work not only on Draft-made objects, but on any Part object. To explore what is available, simply do:


{{Code|code=
{{Code|code=
import Draft
import Draft
rec = Draft.makeRectangle(5, 2)
Draft.
mvec = FreeCAD.Vector(4, 4, 0)
rec = Draft.makeRectangle(5,2)
Draft.move(rec, mvec)
mvec = FreeCAD.Vector(4,4,0)
Draft.move(rec,mvec)
Draft.move(box, mvec)
Draft.move(box,mvec)
}}
}}
{{Top}}
<span id="Interface"></span>
==Benutzeroberfläche==


Die Benutzeroberfläche von FreeCAD ist mit [http://en.wikipedia.org/wiki/Qt_%28framework%29 Qt], einer leistungsstarken grafischen Schnittstellensystem, erstellt worden, das für das Zeichnen und die Handhabung aller Bedienelemente, Menüs, Werkzeugleisten und Schaltflächen rund um die 3D Ansicht verantwortlich ist. Qt stellt ein Modul, PySide, zur Verfügung, welches Python erlaubt, auf die Qt Schnittstellen wie FreeCAD zuzugreifen und zu verändern. Lass uns versuchen, mit der Qt Schnittstelle zu tüfteln und einen einfachen Dialog zu erzeugen:
== Interface ==
The FreeCAD user interface is made with [http://en.wikipedia.org/wiki/Qt_%28framework%29 Qt], a powerful graphical interface system, responsible for drawing and handling all the controls, menus, toolbars, buttons around the 3D view. Qt provides a module, called PySide, which allows python to access and modify Qt interfaces, such as FreeCAD. Let's try to fiddle with the Qt interface and produce a simple dialog:


{{Code|code=
{{Code|code=
from PySide import QtGui
from PySide import QtGui
QtGui.QMessageBox.information(None,"Apollo program","Houston, we have a problem")
QtGui.QMessageBox.information(None, "Apollo program", "Houston, we have a problem")
}}
}}


Beachte, dass der erscheinende Dialog das FreeCAD Symbol in seiner Werkzeugleiste hat, was bedeutet, dass Qt weiß, dass der Auftrag aus der FreeCAD Anwendung heraus erteilt wurde. Es ist möglich, jeden Teil der FreeCAD Oberfläche zu verändern.
See that the dialog that appears has the FreeCAD icon in its toolbar, meaning that Qt knows that the order has been issued from inside the FreeCAD application. We can therefore easily directly manipulate any part of the FreeCAD interface.


Qt ist ein sehr mächtiges Schnittstellensystem, das es dir erlaubt, sehr komplexe Dinge zu tun. Es hat auch einige einfach zu benutzende Werkzeuge wie den Qt Designer, mit dem du Dialoge grafisch entwerfen kannst und sie dann mit ein paar Zeilen Python Code zur FreeCAD Oberfläche hinzufügen kannst.
Qt is a very powerful interface system, that allows you to do very complex things, but also has a couple of very easy-to use tools such as the Qt Designer with which you can design dialogs graphically and then add them to the FreeCAD interface with a couple of lines of python.


[[PySide|Read more about PySide here...]]
[[PySide/de|Erfahre hier mehr über PySide...]]
{{Top}}
<span id="Macros"></span>
==Makros==


Nun, da Du ein gutes Verständnis der Grundlagen hast, wo werden wir unsere Python Skripte aufbewahren und wie werden wir sie einfach von FreeCAD aus starten? Dafür gibt es einen einfachen Mechanismus, genannt [[Macros/de|Makros]]. Ein Makro ist einfach ein Python Skript, das zu einer Werkzeugleiste hinzugefügt und per Mausklick gestartet werden kann. FreeCAD bietet dir einen einfachen Texteditor ({{MenuCommand|Makro → Makros → Erstellen}}), in dem du Skripte schreiben oder einfügen kannst. Sobald das Skript fertig ist, verwende {{MenuCommand|Werkzeuge → Anpassung → Makros}}, um eine Schaltfläche dafür zu definieren, die zu den Werkzeugleisten hinzugefügt werden kann.
== Macros ==
Now that you have a good understanding of the basics, where are we going to keep our python scripts, and how are we going to launch them easily from FreeCAD? There is an easy mechanism for that, called [[Macros]]. A macro is simply a python script, that can then be added to a toolbar and be launched from a simple mouse click. FreeCAD provides you with a simple text editor (Macro -> Macros -> Create) where you can write or paste scripts. Once it is done, the Tools -> Customize -> Macros allow you to define a button for it, that can be added to toolbars.


<span id="External_scripts"></span>
Now you are ready for more in-depth FreeCAD scripting. Head on to the [[Power users hub]]!
==Externe Skripte==


Eine alternative Methode zum erstellen, sichern und ausführen der eigenen Python-Skripte ist das Erstellen außerhalb von FreeCAD, mit einem selbst gewählten Editor (z.B. Vim). Um ein eigenes Python-Skript innerhalb von FreeCAD auszuführen, sollte man darauf achten, dass es mit der Endung {{FileName|.py}} gespeichert wird.
{{docnav|Introduction to Python|FreeCAD Scripting Basics}}


Dann wird {{MenuCommand|Datei → Öffnen}} zum Öffnen des Skripts verwendet; es wird in einen neuen Reiter des [[Main_view_area/de|Hauptansichtsbereiches]] geladen. Das Skript kann durch Drücken der Schaltfläche {{Button|[[Image:Std_DlgMacroExecuteDirect.svg|16px]] [[Std_DlgMacroExecuteDirect/de|Makro ausführen]]}} ausgeführt werden. Alle Fehlermeldungen und Skript-Ausgaben werden im [[Report_view/de|Ausgabefenster]] angezeigt.
[[Category:Tutorials/de]]


Wird das schon geladene Skript bearbeitet und gespeichert, öffnet sich ein Dialogfenster, und erfragt, ob das geänderte Skript wieder in FreeCAD geladen werden soll.
{{clear}}

<languages/>
Jetzt kannst Du zur Seite [[FreeCAD_Scripting_Basics/de|FreeCAD Grundlagen der Skripterstellung]] fortfahren, oder Du kannst diese und andere zugehörige Seiten über das [[Power_users_hub/de|Hauptanwenderzentrum]] erreichen.
{{Top}}

{{Docnav/de
|[[Introduction_to_Python/de|Einführung in Python]]
|[[FreeCAD_Scripting_Basics/de|FreeCAD Grundlagen Skripten]]
}}

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

Latest revision as of 07:10, 2 September 2023

Einführung

Python ist eine Programmiersprache, sehr einfach zu bedienen und sehr schnell zu erlernen. Sie ist quelloffen, plattformübergreifend und kann für eine Vielzahl von Aufgaben allein verwendet werden, von der Programmierung einfacher Shell Skripte bis hin zu sehr komplexen Programmen. Aber eine der am weitesten verbreiteten Anwendungen ist die Skriptsprache, da sie leicht in andere Anwendungen integriert werden kann. Genau so wird es in FreeCAD verwendet. Von der Python Konsole oder von deinen benutzerdefinierten Skripten aus kannst du FreeCAD steuern und es sehr komplexe Aktionen ausführen lassen.

Zum Beispiel aus einem Python Skript, kannst Du:

  • neue Objekte erstellen
  • bestehende Objekte ändern
  • die 3D Darstellung dieser Objekte ändern
  • die FreeCAD Oberfläche verändern

Es gibt mehrere Möglichkeiten, Python in FreeCAD zu verwenden:

  • Aus dem FreeCAD Python Interpreter, wo du einfache Befehle wie in einer "Kommandozeile" ähnlichen Oberfläche ausgeben kannst.
  • Aus Makros, die eine bequeme Möglichkeit darstellen, ein fehlendes Werkzeug schnell zur FreeCAD Oberfläche hinzuzufügen.
  • Aus externen Skripten, mit denen man viel komplexere Dinge programmieren kann, wie z.B. ganze Arbeitsbereiche.

In diesem Tutorial werden wir an ein paar einfachen Beispielen arbeiten, um dir den Einstieg zu erleichtern, aber es gibt auch viel mehr Dokumentation über Python Skripten auf diesem Wiki. Wenn du völlig neu in Python bist und verstehen willst, wie es funktioniert, haben wir auch eine grundlegende Einführung in Python.

Bevor Wir mit dem Python-Skripten fortfahren, öffne Bearbeiten → Einstellungen → Allgemein → Ausgabefenster und aktiviere folgende Optionen:

  • Interne Python-Meldungen auf Ausgabefenster umleiten.
  • Interne Python-Fehlermeldungen auf Ausgabefenster umleiten.

Danach unter Ansicht → Paneele folgende Option aktivieren:

  • Ausgabefenster

Python Code schreiben

Es gibt zwei einfache Wege, Python Code in FreeCAD zu schreiben: Über die Python Konsole (verfügbar im Menü Ansicht → Paneele → Python Konsole) oder über den Makro Editor (Werkzeuge → Makros). In der Konsole schreibst Du nacheinander Python Befehle, die ausgeführt werden, wenn Du die Eingabetaste drückst, während die Makros ein komplexeres Skript aus mehreren Zeilen enthalten können, das erst bei der Ausführung des Makros ausgeführt wird.

Die FreeCAD Python Konsole

In diesem Tutorium kannst Du beide Methoden verwenden. Du kannst Kopieren/Einfügen von einzelnen Zeilen in die Python Konsole und drücken der Eingabetaste oder Kopieren/Einfügen des gesamten Codes in ein neues Makro Fenster.

Anfang

Erkunden von FreeCAD

Wir beginnen damit, ein neues leeres Dokument zu erstellen:

doc = FreeCAD.newDocument()

Wenn du dies in der FreeCAD Python Konsole eingibst, wirst du feststellen, dass sobald du FreeCAD. eingibst, ein Fenster erscheint, in dem du den Rest deiner Zeile schnell automatisch vervollständigen kannst. Besser noch, jeder Eintrag in der Autovervollständigungsliste hat einen Werkzeugtip, der erklärt, was er tut. Dies macht es einfacher, die verfügbare Funktionalität zu erkunden. Bevor du newDocument wählst, wirf einen Blick auf die anderen Optionen.

Autovervollständigungsmechanismus der FreeCAD Pythonkonsole

Nun wird unser neues Dokument erstellt. Dies entspricht dem Drücken der Schaltfläche Neu in der Symbolleiste. Tatsächlich tun die meisten Schaltflächen in FreeCAD nichts anderes, als eine oder mehrere Zeilen Python-Code auszuführen. Noch besser, du kannst die Option Skript-Befehle in der Python-Konsole anzeigen unter Bearbeiten → Einstellungen → Python → Makro aktivieren. Dadurch wird in der Konsole der gesamte Python-Code ausgegeben, der ausgeführt wird, wenn du Tasten drückst. Sehr nützlich, um zu lernen, wie man Aktionen in Python reproduziert.

Lass uns nun zu unserem Dokument zurückkehren und sehen, was wir mit ihm machen können:

doc.

Erkunde die verfügbaren Optionen. Normalerweise sind Namen, die mit einem Großbuchstaben beginnen, Attribute, sie enthalten einen Wert, während Namen, die mit einem Kleinbuchstaben beginnen, Funktionen (auch Methoden genannt) sind, sie "tun etwas". Namen, die mit einem Unterstrich beginnen, sind normalerweise für die interne Arbeit des Moduls da, und du solltest dich nicht um sie kümmern. Lasse uns eine der Methoden verwenden, um ein neues Objekt zu unserem Dokument hinzuzufügen:

box = doc.addObject("Part::Box", "myBox")

Es geschieht nichts. Warum nicht? Weil FreeCAD für das große Ganze gemacht ist. Eines Tages wird es mit Hunderten von komplexen Objekten arbeiten, die alle voneinander abhängen. Wenn du irgendwo eine kleine Änderung vornimmst, kann das große Auswirkungen haben, und du musst vielleicht das ganze Dokument neu berechnen, was sehr lange dauern kann. Aus diesem Grund aktualisiert fast kein Befehl die Szene automatisch. Du musst es manuell durchführen:

doc.recompute()

Nun erschien unser Würfel. Viele der Schaltflächen, mit denen in FreeCAD Objekte hinzugefügt werden können, tun eigentlich zwei Dinge: das Objekt hinzufügen und neu berechnen. Wenn du die obige Option Skriptbefehle in der Python Konsole anzeigen eingeschaltet hast, versuche, mit der GUI Schaltfläche eine Kugel hinzuzufügen. Du wirst sehen, wie die beiden Zeilen des Python Codes nacheinander ausgeführt werden.

Lass uns nun den Inhalt unseres Würfels erkunden:

box.

Du wirst sofort einige sehr interessante Dinge sehen, wie zum Beispiel:

box.Height

Dadurch wird die aktuelle Höhe unseres Würfels ausgegeben. Lass uns nun versuchen das zu ändern:

box.Height = 5

Wenn du dein Feld mit der Maus auswählst, siehst du, dass im Eigenschaftseditor auf dem Daten Reiter unsere Eigenschaft DatenHöhe erscheint. Alle Eigenschaften eines FreeCAD Objekts, die dort (und auch auf dem Ansicht Reiter erscheinen, dazu später mehr), sind auch von Python direkt zugänglich, und zwar über ihren Namen, wie wir es mit der DatenHöhe Eigenschaft getan haben. Versuche, die anderen Dimensionen des Würfels zu ändern.

Anfang

Vektoren und Platzierungen

Vektoren sind ein fester Bestandteil jeder 3D-Anwendung. Ein Vektor ist dabei eine Liste von Zahlen (x,y,z), die einen Ort im dreidimensionalen Raum beschreiben. Mit Vektoren sind verschiedene mathematische Operationen möglich, wie z.B. Addition, Subtraktion, Projektion (Skalarprodukt) und vieles mehr. In FreeCAD funktionieren Vektoren wie folgt:

myvec = FreeCAD.Vector(2, 0, 0)
myvec.x
myvec.y
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)

Ein weiteres gemeinsames Merkmal von FreeCAD Objekten ist ihre Placement. Jedes Objekt hat eine DatenPlatzierungs Eigenschaft, die die DatenBase enthält. (Position) und DatenRotation (Orientierung) des Objekts. Es ist leicht zu bearbeiten, zum Beispiel um unser Objekt zu bewegen:

box.Placement
box.Placement.Base
box.Placement.Base = sumvec
 
otherpla = FreeCAD.Placement()
box.Placement = otherpla

Nun musst du einige wichtige Konzepte verstehen, bevor wir weiter kommen.

Anfang

App und GUI

FreeCAD wurde von Anfang an als Kommandozeilen-Anwendung konzipiert, d.h. ohne notwendige Benutzeroberfläche. Als Folge davon ist fast alles zwischen einer "geometrischen" Komponente und einer "visuellen" Komponente aufgeteilt. Wenn man im Kommandozeilenmodus arbeitet, dann ist der geometrische Teil vorhanden, aber der visuelle Teil deaktiviert. Fast jedes Objekt in FreeCAD besteht deshalb aus zwei Teilen, einem Object und einem ViewObject (Objektansicht).

Um das Konzept zu veranschaulichen, schauen wir uns unser Würfel Objekt an. Die geometrischen Eigenschaften des Würfels wie Abmessungen, Position usw. sind im Objekt gespeichert. Während seine visuellen Eigenschaften wie Farbe, Linienstärke usw. im AnsichtObjekt gespeichert sind, werden seine visuellen Eigenschaften wie Farbe, Linienstärke usw. im AnsichtObjekt gespeichert. Dies entspricht den Daten und Ansicht Reitern im Eigenschaftseditor. Auf das Ansicht Objekt eines Objekts wird wie folgt zugegriffen:

vo = box.ViewObject

Jetzt kannst du auch die Eigenschaften auf dem Ansicht Reiter ändern:

vo.Transparency = 80
vo.hide()
vo.show()

Wenn du FreeCAD startest, lädt die Python Konsole bereits zwei Basismodule: FreeCAD und FreeCADGui (die auch über ihre Kürzel App und Gui erreicht werden können). Sie enthalten alle Arten von generischer Funktionalität für die Arbeit mit Dokumenten und ihren Objekten. Um unser Konzept zu veranschaulichen, siehe, dass sowohl FreeCAD als auch FreeCADGui ein ActiveDocument Attribut enthalten, das das aktuell geöffnete Dokument ist. FreeCAD.ActiveDocument und FreeCADGui.ActiveDocument sind jedoch nicht dasselbe Objekt. Sie sind die beiden Komponenten eines FreeCAD Dokuments, und sie enthalten unterschiedliche Attribute und Methoden. So enthält z.B. FreeCADGui.ActiveDocument ActiveView, welches die aktuell geöffnete 3D Ansicht ist.

Anfang

Module

Die wahre Stärke von FreeCAD liegt in seinen treuen Modulen mit ihren jeweiligen Arbeitsbereichen. Die FreeCAD Basisanwendung ist mehr oder weniger ein leerer Behälter. Ohne seine Module kann es kaum mehr tun, als neue, leere Dokumente zu erstellen. Jedes Modul fügt der Oberfläche nicht nur neue Arbeitsbereiche hinzu, sondern auch neue Python Befehle und neue Objekttypen. So können mehrere verschiedene, sogar völlig inkompatible Objekttypen in einem Dokument koexistieren. Die wichtigsten Module in FreeCAD, die wir uns in diesem Tutorium ansehen werden, sind: Part, Netz, Skizzierer und Entwurf.

Skizzierer und Entwurf verwenden beide das Part Modul, um ihre Geometrie zu erzeugen und handzuhaben. Während Netz völlig unabhängig ist und seine eigenen Objekte handhabt. Mehr dazu weiter unten.

Du kannst alle verfügbaren Basisobjekttypen für das aktuelle Dokument folgendermaßen prüfen:

doc.supportedTypes()

Die verschiedenen FreeCAD Module werden nicht automatisch in die Python Konsole geladen. Damit soll ein sehr langsamer Start vermieden werden. Die Module werden nur geladen, wenn du sie benötigst. So kannst du z.B. untersuchen, was sich innerhalb des Part Moduls befindet:

import Part
Part.

Aber wir werden weiter unten mehr über das Part Modul sprechen.

Anfang

Modul Mesh

Polygonnetze (engl.: Meshes) sind eine sehr einfache Art von 3D Objekten, die z.B. von Sketchup, Blender und 3D Studio Max verwendet werden. Sie werden aus 3 Elementen gebildet: Punkte (auch Knoten genannt), Linien (auch Kanten genannt) und Flächen. In vielen Anwendungen, einschließlich FreeCAD, können Flächen nur 3 Knoten haben. Natürlich hindert Dich nichts daran, eine größere ebene Fläche aus mehreren nebeneinander liegenden Dreiecken zu haben.

Polygonnetze sind einfach, aber weil sie einfach sind, kannst Du leicht Millionen von ihnen in einem einzigen Dokument haben. Allerdings sind sie in FreeCAD weniger nützlich und meist vorhanden, so dass Du Objekte in Netzformaten (.stl, .obj) aus anderen Anwendungen importieren kannst. Das Netzmodul wurde auch im ersten Monat des FreeCAD Lebens ausgiebig als Haupttestmodul verwendet.

Netzobjekte und FreeCAD Objekte sind unterschiedliche Dinge. Du kannst das FreeCAD Objekt als einen Behälter für ein Netzobjekt betrachten (und wie wir unten sehen werden, auch für Part Objekte). Um also ein Netz Objekt zu FreeCAD hinzuzufügen, müssen wir zuerst ein FreeCAD Objekt und ein Mesh Objekt erstellen und dann das Netz Objekt zum FreeCAD Objekt hinzufügen:

import Mesh
mymesh = Mesh.createSphere()
mymesh.Facets
mymesh.Points
 
meshobj = doc.addObject("Mesh::Feature", "MyMesh")
meshobj.Mesh = mymesh
doc.recompute()

Dies ist ein Standardbeispiel, das die createSphere() Methode verwendet, um eine Kugel zu erstellen, aber Du kannst auch benutzerdefinierte Netze von Grund auf neu erstellen, indem Du ihre Knoten und Flächen definierst.

Lies mehr über Netz Skripten...

Anfang

Modul Part

Das Part Modul ist das leistungsfähigste Modul im gesamten FreeCAD. Es erlaubt Dir BREP Objekte zu erstellen und zu verändern. Diese Art von Objekten kann, im Gegensatz zu Netzen, eine Vielzahl von Komponenten haben. BREP steht für Begrenzungsflächenmodell (engl.: Boundary Representation), was bedeutet, dass BREP Objekte durch ihre Oberflächen definiert werden; diese Oberflächen umschließen und definieren ein Innenvolumen. Eine Oberfläche kann eine Vielzahl von Dingen sein, wie z.B. ebene Flächen oder sehr komplexe NURBS Oberflächen.

Das Part Modul basiert auf der leistungsstarken OpenCasCade Bibliothek, die es ermöglicht, eine Vielzahl von komplexen Operationen auf diesen Objekten einfach durchzuführen, wie z.B. boolesche Operationen, Verrundungung, Ausformungen, usw.

Das Part-Modul arbeitet auf dieselbe Weise wie das Netz Modul: Man erzeugt ein FreeCAD Objekt, ein Part Objekt, danach fügt man das Part Objekt zum FreeCAD Objekt hinzu:

import Part
myshape = Part.makeSphere(10)
myshape.Volume
myshape.Area

shapeobj = doc.addObject("Part::Feature", "MyShape")
shapeobj.Shape = myshape
doc.recompute()

Das Part Modul (wie das Netz Modul) hat auch ein Tastaturkürzel, das automatisch ein FreeCAD Objekt erstellt und eine Form hinzufügt, so dass du die letzten drei Zeilen verkürzen kannst auf:

Part.show(myshape)

Beim erforschen der Inhalt von myshape, wirst Du viele interessante Unterkomponenten wie Flächen, Kanten, Knoten, Festkörper und Schalen, und eine weite Bandbreite von Geometrieoperationen wie Schnitt (Subtraktion), Gemeinsam (Schnittpunkt) oder Verschmelzung (Vereinigung) bemerken. Die Topologisches Daten Skripten Seite erklärt all das im Detail.

Lies mehr über Part Skripten...

Anfang

Modul Draft

FreeCAD bietet noch viele weitere Module, wie Skizzierer und Entwurf, die ebenfalls Teilobjekte erzeugen. Diese Module fügen zusätzliche Parameter zu den erzeugten Objekten hinzu oder implementieren sogar eine völlig neue Art und Weise, die Teilegeometrie in ihnen zu handhaben. Unser obiges Box Beispiel ist ein perfektes Beispiel für ein parametrisches Objekt. Alles was Du zur Definition der Box benötigst, ist die Angabe der Parameter Höhe, Breite und Länge. Basierend auf diesen Parametern berechnet das Objekt automatisch seine Teileform. FreeCAD erlaubt es Dir Erzeuge solche Objekte in Python.

Das Entwurf Modul fügt parametrische 2D Objekttypen (die alle Part Objekte sind) wie Linien und Kreise hinzu und bietet auch einige grundlegende Funktionen, die nicht nur auf Entwurfsobjekte, sondern auf jedes Part Objekt wirken. Um zu erkunden, was verfügbar ist, mache einfach:

import Draft
rec = Draft.makeRectangle(5, 2)
mvec = FreeCAD.Vector(4, 4, 0)
Draft.move(rec, mvec)
Draft.move(box, mvec)

Anfang

Benutzeroberfläche

Die Benutzeroberfläche von FreeCAD ist mit Qt, einer leistungsstarken grafischen Schnittstellensystem, erstellt worden, das für das Zeichnen und die Handhabung aller Bedienelemente, Menüs, Werkzeugleisten und Schaltflächen rund um die 3D Ansicht verantwortlich ist. Qt stellt ein Modul, PySide, zur Verfügung, welches Python erlaubt, auf die Qt Schnittstellen wie FreeCAD zuzugreifen und zu verändern. Lass uns versuchen, mit der Qt Schnittstelle zu tüfteln und einen einfachen Dialog zu erzeugen:

from PySide import QtGui
QtGui.QMessageBox.information(None, "Apollo program", "Houston, we have a problem")

Beachte, dass der erscheinende Dialog das FreeCAD Symbol in seiner Werkzeugleiste hat, was bedeutet, dass Qt weiß, dass der Auftrag aus der FreeCAD Anwendung heraus erteilt wurde. Es ist möglich, jeden Teil der FreeCAD Oberfläche zu verändern.

Qt ist ein sehr mächtiges Schnittstellensystem, das es dir erlaubt, sehr komplexe Dinge zu tun. Es hat auch einige einfach zu benutzende Werkzeuge wie den Qt Designer, mit dem du Dialoge grafisch entwerfen kannst und sie dann mit ein paar Zeilen Python Code zur FreeCAD Oberfläche hinzufügen kannst.

Erfahre hier mehr über PySide...

Anfang

Makros

Nun, da Du ein gutes Verständnis der Grundlagen hast, wo werden wir unsere Python Skripte aufbewahren und wie werden wir sie einfach von FreeCAD aus starten? Dafür gibt es einen einfachen Mechanismus, genannt Makros. Ein Makro ist einfach ein Python Skript, das zu einer Werkzeugleiste hinzugefügt und per Mausklick gestartet werden kann. FreeCAD bietet dir einen einfachen Texteditor (Makro → Makros → Erstellen), in dem du Skripte schreiben oder einfügen kannst. Sobald das Skript fertig ist, verwende Werkzeuge → Anpassung → Makros, um eine Schaltfläche dafür zu definieren, die zu den Werkzeugleisten hinzugefügt werden kann.

Externe Skripte

Eine alternative Methode zum erstellen, sichern und ausführen der eigenen Python-Skripte ist das Erstellen außerhalb von FreeCAD, mit einem selbst gewählten Editor (z.B. Vim). Um ein eigenes Python-Skript innerhalb von FreeCAD auszuführen, sollte man darauf achten, dass es mit der Endung .py gespeichert wird.

Dann wird Datei → Öffnen zum Öffnen des Skripts verwendet; es wird in einen neuen Reiter des Hauptansichtsbereiches geladen. Das Skript kann durch Drücken der Schaltfläche Makro ausführen ausgeführt werden. Alle Fehlermeldungen und Skript-Ausgaben werden im Ausgabefenster angezeigt.

Wird das schon geladene Skript bearbeitet und gespeichert, öffnet sich ein Dialogfenster, und erfragt, ob das geänderte Skript wieder in FreeCAD geladen werden soll.

Jetzt kannst Du zur Seite FreeCAD Grundlagen der Skripterstellung fortfahren, oder Du kannst diese und andere zugehörige Seiten über das Hauptanwenderzentrum erreichen.

Anfang