Python scripting tutorial/de: Difference between revisions
No edit summary |
(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.") |
||
(119 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
{{docnav/de|[[Introduction to Python/de|Einführung in Python]]|[[FreeCAD Scripting Basics/de|FreeCAD Skripten Grundlagen]]}} |
|||
{{ |
{{Docnav/de |
||
|[[Introduction_to_Python/de|Einführung in Python]] |
|||
|Topic=Programming |
|||
|[[FreeCAD_Scripting_Basics/de|FreeCAD Grundlagen Skripten]] |
|||
|Level=Intermediate |
|||
|Time= |
|||
|Author= |
|||
|FCVersion= |
|||
|Files= |
|||
}} |
}} |
||
{{TOCright}} |
|||
<span id="Introduction"></span> |
|||
[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 Konsole oder von deinen benutzerdefinierten Skripten aus kannst du FreeCAD steuern und es sehr komplexe Aktionen ausführen lassen, für die es noch kein Werkzeug für die grafische Benutzeroberfläche gibt. |
|||
==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: |
Zum Beispiel aus einem Python Skript, kannst Du: |
||
Line 18: | Line 17: | ||
* bestehende Objekte ändern |
* bestehende Objekte ändern |
||
* die 3D Darstellung dieser Objekte ändern |
* die 3D Darstellung dieser Objekte ändern |
||
* die FreeCAD |
* die FreeCAD Oberfläche verändern |
||
Es gibt |
Es gibt mehrere Möglichkeiten, Python in FreeCAD zu verwenden: |
||
* Aus dem [[FreeCAD Scripting Basics/de|FreeCAD Python Interpreter]], wo du einfache Befehle wie in einer "Kommandozeile" |
* Aus dem [[FreeCAD Scripting Basics/de|FreeCAD Python Interpreter]], wo du einfache Befehle wie in einer "Kommandozeile" ähnlichen Oberfläche ausgeben kannst. |
||
* Aus [[ |
* Aus [[Macros/de|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 [[Workbenches/de|Arbeitsbereiche]]. |
* Aus externen Skripten, mit denen man viel komplexere Dinge programmieren kann, wie z.B. ganze [[Workbenches/de|Arbeitsbereiche]]. |
||
In diesem Tutorial werden wir an ein paar einfachen Beispielen arbeiten, um dir den Einstieg zu erleichtern, aber es gibt auch viel mehr |
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]]. |
||
Bevor Wir mit dem Python-Skripten fortfahren, öffne {{MenuCommand|Bearbeiten → Einstellungen → Allgemein → Ausgabefenster}} und aktiviere folgende Optionen: |
|||
* {{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> |
|||
"'Wichtig!' Bevor Du mit dem Python-Skripting fortfährst, gehe zum {{MenuCommand/de|Bearbeiten → Einstellungen → Allgemein → Ausgabefenster}} und aktiviere 2 Kästchen: |
|||
==Python Code schreiben== |
|||
* Interne Python-Meldungen auf Ausgabefenster umleiten |
|||
* Interne Python-Fehlermeldungen auf Ausgabefenster umleiten |
|||
Dann gehe zu {{MenuCommand/de|Ansicht → Paneele}} und wähle: |
|||
* Ausgabefenster |
|||
Das erspart Dir eine Menge Ärger! |
|||
== 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. |
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. |
||
[[Image:Screenshot_pythoninterpreter.jpg |
[[Image:Screenshot_pythoninterpreter.jpg]] |
||
{{Caption|Die FreeCAD Python Konsole}} |
|||
In diesem |
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. |
||
{{Top}} |
|||
<span id="Exploring_FreeCAD"></span> |
|||
==Erkunden von FreeCAD== |
|||
== Erkunden von FreeCAD == |
|||
Wir beginnen damit, ein neues leeres Dokument zu erstellen: |
Wir beginnen damit, ein neues leeres Dokument zu erstellen: |
||
Line 48: | Line 51: | ||
}} |
}} |
||
Wenn |
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. |
||
[[Image:Screenshot_classbrowser.jpg |
[[Image:Screenshot_classbrowser.jpg]] |
||
{{Caption|Autovervollständigungsmechanismus der FreeCAD Pythonkonsole}} |
|||
Nun wird unser neues Dokument erstellt. Dies |
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. |
||
Lass uns nun zu unserem Dokument zurückkehren und sehen, was wir mit ihm machen können: |
|||
{{Code|code= |
{{Code|code= |
||
Line 60: | Line 64: | ||
}} |
}} |
||
Erkunde die verfügbaren |
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: |
||
{{Code|code= |
{{Code|code= |
||
box = doc.addObject("Part::Box","myBox") |
box = doc.addObject("Part::Box", "myBox") |
||
}} |
}} |
||
Es |
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: |
||
{{Code|code= |
{{Code|code= |
||
Line 72: | 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. |
|||
Lass uns nun den Inhalt unseres Würfels erkunden: |
|||
Was ist mit der "Part::Box", wirst Du fragen? Wie kann ich wissen, welche weiteren Objekte hinzugefügt werden können? Es ist alles hier: |
|||
{{Code|code= |
|||
doc.supportedTypes() |
|||
}} |
|||
Nun erkunden wir die Inhalte unseres Würfels: |
|||
{{Code|code= |
{{Code|code= |
||
Line 92: | Line 90: | ||
}} |
}} |
||
Dadurch wird die aktuelle Höhe unseres Würfels ausgegeben. |
Dadurch wird die aktuelle Höhe unseres Würfels ausgegeben. Lass uns nun versuchen das zu ändern: |
||
{{Code|code= |
{{Code|code= |
||
Line 98: | Line 96: | ||
}} |
}} |
||
Wenn |
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. |
||
{{Top}} |
|||
<span id="Vectors_and_placements"></span> |
|||
==Vektoren und Platzierungen== |
|||
== 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: |
[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: |
||
{{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 |
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: |
||
{{Code|code= |
{{Code|code= |
||
Line 123: | Line 122: | ||
}} |
}} |
||
Nun musst du einige wichtige Konzepte verstehen, bevor wir weiter kommen. |
|||
Bevor wir weitermachen können, müssen Sie erst noch einige wichtige Konzepte verstehen. |
|||
{{Top}} |
|||
<span id="App_and_Gui"></span> |
|||
==App und GUI== |
|||
== 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). |
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 |
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: |
||
{{Code|code= |
{{Code|code= |
||
vo = box.ViewObject |
vo = box.ViewObject |
||
}} |
}} |
||
Jetzt kannst du auch die Eigenschaften auf dem '''Ansicht''' Reiter ändern: |
|||
{{Code|code= |
{{Code|code= |
||
Line 141: | Line 142: | ||
}} |
}} |
||
Wenn |
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 == |
== Module == |
||
Nun fragst du dich sicher, was außer "Part::Box" kann ich noch tun ? Die FreeCAD Basisanwendung ist mehr oder weniger ein leerer Behälter. Ohne seine Module kann es kaum mehr tun, als neue, leere Dokumente erstellen. Die wahre Stärke von FreeCAD liegt in seinen zuverlässigen Modulen. |
|||
Jedes von ihnen fügt nicht nur neue Arbeitsbereiche zur Benutzeroberfläche hinzu, sondern auch neue Python Befehle und neue Objekttypen. |
|||
Als Ergebnis können mehrere unterschiedliche oder sogar völlig inkompatible Objekttypen in einem Dokument koexistieren. Die wichtigsten Module in FreeCAD, die wir in diesem Tutorial betrachten werden, sind [[Part Module/de|Part]], [[Mesh Module/de|Netz]], [[Sketcher Workbench/de|Skizzierer]] und [[Draft Module/de|Entwurf]]. |
|||
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]]. |
|||
[[Sketcher Workbench|Skizzierer]] und [[Draft Module/de|Entwurf]] verwenden beide das [[Part Module/de|Part]] Modul, um ihre Geometrie zu erzeugen und handzuhaben, die BRep ist, während [[Mesh Module/de|Netz]] völlig unabhängig ist und seine eigenen Objekte handhabt. Mehr dazu weiter unten. |
|||
[[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. |
|||
Du kannst alle verfügbaren Basisobjekttypen für das aktuelle Dokument folgendermaßen prüfen: |
Du kannst alle verfügbaren Basisobjekttypen für das aktuelle Dokument folgendermaßen prüfen: |
||
Line 156: | Line 157: | ||
}} |
}} |
||
Die verschiedenen FreeCAD Module werden |
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: |
||
{{Code|code= |
{{Code|code= |
||
Line 164: | Line 165: | ||
Aber wir werden weiter unten mehr über das Part Modul sprechen. |
Aber wir werden weiter unten mehr über das Part Modul sprechen. |
||
{{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. |
|||
Mittlerweile weist Du ein wenig mehr über die verschiedenen Module von FreeCAD: Die Kernmodule (FreeCAD, FreeCADGui), und die Module der Arbeitsbereiche (Part, Netz, Skizzierer). Die anderen wichtigen Module sind das 3D Szenenmodul (pivy) und das Schnittstellenmodul (pyside), auf die wir weiter unten ebenfalls sprechen werden. |
|||
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. |
|||
Jetzt ist es an der Zeit, die wichtigen Module, welche die Arbeitsbereichsmodule sind, etwas tiefergehender zu erforschen. |
|||
== Netz == |
|||
[https://de.wikipedia.org/wiki/Polygonnetz Polygonnetze] (engl. Meshes) sind eine sehr einfache Art von 3D Objekten, die z.B. von [https://de.wikipedia.org/wiki/SketchUp_(Software) Sketchup (Software)], [https://de.wikipedia.org/wiki/Blender_(Software) Blender (Software)] oder [https://de.wikipedia.org/wiki/3ds_Max 3ds Max] verwendet werden. Sie werden gebildet aus 3 Elementen: Punkte (auch Knoten genannt), Linien (auch Kanten genannt) und Flächen. In vielen Anwendungen, einschließlich FreeCAD, können Flächen nur 3 Eckpunkte 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: |
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: |
||
Line 180: | Line 178: | ||
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 createSphere() Methode verwendet, um |
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. |
||
[[ |
[[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 == |
|||
Das [[Part Module/de|Part Arbeitsbereich]] 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. |
|||
Das Part |
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. |
||
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: |
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: |
||
Line 203: | Line 202: | ||
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() |
||
}} |
}} |
||
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 |
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 218: | Line 216: | ||
}} |
}} |
||
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), |
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. |
||
[[ |
[[Topological_data_scripting/de|Lies mehr über Part Skripten...]] |
||
{{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]]. |
|||
== Entwurf == |
|||
FreeCAD bietet noch viele weitere Module, wie [[Sketcher Workbench/de|Skizzierer]] und [[Draft Module/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]]. |
|||
Das [[ |
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: |
||
{{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( |
Draft.move(box, mvec) |
||
Draft.move(box,mvec) |
|||
}} |
}} |
||
{{Top}} |
|||
<span id="Interface"></span> |
|||
==Benutzeroberfläche== |
|||
== 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: |
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: |
||
{{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. |
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. |
|||
<div class="mw-translate-fuzzy"> |
|||
Qt ist ein sehr leistungsfähige Benutzeroberfläche, mit der man sehr komplexe Dinge machen kann. Sie hat aber auch eine Reihe von einfach zu benutzenden Werkzeugen wie den Qt-Designer. Hiermit kann man Dialoge grafisch entwerfen und sie der FreeCAD-Oberfläche mit ein paar Zeilen Pythoncode hinzufügen. |
|||
</div> |
|||
[[PySide|Erfahre hier mehr über PySide...]] |
[[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. |
|||
<div class="mw-translate-fuzzy"> |
|||
== Makros == |
|||
Nachdem wir nun Grundlagen verstanden haben, kommt als nächstes, wie wir Pythonscripte erhalten und sie von der FreeCAD aus starten können. Dafür gibt es einfache Mechanismen genannt [[Macros/de]]. Ein Makro ist ein einfaches Pythonscript, das der Werkzeugleiste hinzugefügt werden kann und mit einem einfachen Mausklick gestartet werden kann. FreeCAD stellt dafür einen einfachen Texteditor (Makro -> Makros -> Create) zur Verfügung, mit dem man Scripte schreiben oder einfach einfügen Button festzulegen, der der Werkzeugleiste hinzugefügt werden kann. |
|||
</div> |
|||
<span id="External_scripts"></span> |
|||
Jetzt bist Du bereit für mehr tiefergehenderes FreeCAD Skripten. Weiter gehts zum [[Power users hub/de|Verteiler für Erfahrene Anwender]]! |
|||
==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/de|[[Introduction to Python/de|Einführung in Python]]|[[FreeCAD Scripting Basics/de|FreeCAD Skripte-Grundlagen]]}} |
|||
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. |
|||
{{Userdocnavi/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. |
|||
[[Category:Poweruser Documentation/de]] |
|||
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:}}}} |
|||
{{clear}} |
|||
[[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.
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.
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.
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.
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.
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...
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...
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)
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...
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.
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub