Code snippets/de

Diese Seite enthält Beispiele, Stücke, Brocken von Python-Code, entstanden aus Benutzererfahrungen und Diskussionen in den Foren. Lies und benutze sie als Ausgangsbasis für Deine eigenen Skripte...

Eine typische InitGui.py-Datei
Jedes Modul muss, neben Deiner Modul-Hauptdatei, eine InitGui.py-Datei enthalten, die verantwortlich ist für das Einfügen des Moduls in die übergeordnete Benutzeroberfläche. Dies ist ein Beispiel einer einfachen Datei.

Eine typische Modul-Datei
Dies ist ein Beispiel einer Modul-Hauptdatei, die alles zu Deinem gehörige enthält. Es ist die Scripts.py-Datei, die vom vorigen Beispiel aufgerufen wird. Hier können alle benutzerdefinierten Befehle eingefügt werden.

Importieren eines neuen Dateityps
Das Erstellen einer Importfunktion für einen neuen FreeCAD-Dateityp ist einfach. FreeCAD berücksichtigt nicht, dass Daten in ein geöffnetes Dokument importiert werden, sondern es versucht, einfach den neuen Dateityp zu öffnen. Daher muss die neue Dateierweiterung in die Liste der bekannten FreeCAD-Erweiterungen eingefügt sowie der Code zum Lesen der Datei und das Anlegen der gewünschten FreeCAD-Objekte erstellt werden:

Diese Zeile muss zur Datei InitGui.py hinzugefügt werden, um die neue Erweiterung in die Liste einzufügen:

Dann in der Datei Import_Ext.py:

Das Exportieren Deines Dokuments in einen neuen Dateityp funktioniert fast genauso: FreeCAD.addExportType("Dein neuer Dateityp (*.ext)","Export_Ext")

Hinzufügen einer Linie
Eine Linie zwischen zwei Punkten.

Hinzufügen eines Polygons
Ein Polygon ist ein Satz von verbundenen Liniensegmenten (eine Polylinie in AutoCAD). Es muss nicht geschlossen sein.

Hinzufügen und Entfernen eines Objekts zu einer Gruppe
Hinweis: Man kann auch andere Gruppen zu einer Gruppe hinzufügen...

Zugriff und Änderung der Darstellung eines Objekts
Jedes Objekt in einem FreeCAD-Dokument hat ein zugeordnetes Ansichts-/Darstellungsobjekt, in dem alle Parameter gespeichert werden, die definieren, wie das Objekt erscheint, wie Farbe, Linienstärke etc...

Beobachten von Mausereignissen im 3D Betrachter über Python
Das Inventor Framework ermöglicht es, einen oder mehrere Callback Knoten zur Szenegrafik des Betrachters hinzuzufügen. Standardmäßig ist in FreeCAD pro Viewer ein Callback Knoten installiert, der es ermöglicht, globale oder statische C++ Funktionen hinzuzufügen. In der entsprechenden Python Bindung sind einige Methoden vorgesehen, um diese Technik aus dem Python Code heraus zu nutzen.

Wähle nun irgendwo auf der Fläche im 3D-Viewer und beobachte die Meldungen im Ausgabefenster. Um die Beobachtung zu beenden, rufe einfach auf

Folgende Ereignistypen werden unterstützt
 * SoEvent -- alle Arten von Ereignissen
 * SoButtonEvent -- alle Maus- und Schlüsselereignisse
 * SoLocation2Event -- 2D Bewegungsereignisse (normalerweise Mausbewegungen)
 * SoMotion3Event -- 3D Bewegungsereignisse (normalerweise Spaceball)
 * SoKeyboardEvent -- Tastendruck auf und ab Ereignisse
 * SoMouseButtonEvent -- Maustaste nach unten und oben Ereignisse
 * SoSpaceballButtonEvent -- Spaceball Taste runter und hoch Ereignisse

Übersetzt mit www.DeepL.com/Translator

Die Python Funktion, die mit addEventCallback registriert werden kann, erwartet ein Verzeichnis. Abhängig vom beobachteten Ereignis kann das Verzeichnis verschiedene Schlüssel enthalten. Für alle Ereignisse hat es die Schlüssel: Für alle Tastenereignisse, d.h. Tastatur-, Maus- oder Spaceballereignisse. Für Tastaturereignisse: Für das Ereignis der Maustaste Für Spaceball-Events: Und schließlich Bewegungsereignisse:
 * Typ -- der Name des Veranstaltungstyps, z.B. SoMouseEvent, SoLocation2Event, .....
 * Zeit -- die aktuelle Zeit als Zeichenkette
 * Position -- ein Tupel von zwei ganzen Zahlen, Mausposition
 * ShiftDown -- ein boolescher, wahrer Wert, wenn Shift gedrückt wurde, ansonsten falsch.
 * CtrlDown -- ein Boolescher, true, wenn Ctrl gedrückt wurde, ansonsten false.
 * AltDown -- a boolean, true if Alt was pressed otherwise false
 * Zustand -- Eine Zeichenkette'UP', wenn die Taste oben war,'DOWN', wenn sie unten war, oder'UNKNOWN' für alle anderen Fälle.
 * Taste -- ein Zeichen der gedrückten Taste
 * Taste -- Die gedrückte Taste kann TASTE1, ...., TASTE5 oder JEDER sein.
 * Taste -- Die gedrückte Taste kann TASTE1, ...., TASTE7 oder JEDER sein.
 * Übersetzung -- ein Tupel von drei Gleitkommazahlen.
 * Rotation -- ein Quaternion für die Drehung, d.h. ein Tupel von vier Gleitkommazahlen.

Tasten gedrückt anzeigen und Ereignisbefehl
Dieses Makro zeigt in der Berichtsansicht die gedrückten Tasten und alle Ereignisse an.

Manipuliere den Szenegraphen in Python
Es ist auch möglich, den Szenegraphen in Python zu erhalten und zu ändern, mit dem Modul 'pivy' - einer Python-Bindung für Coin.

Die Python API von pivy wird mit dem Tool SWIG erstellt. Da wir in FreeCAD einige selbstgeschriebene Knoten verwenden, können Sie diese nicht direkt in Python erstellen. Es ist jedoch möglich, einen Knoten über seinen internen Namen anzulegen. Eine Instanz vom Typ'SoFCSelection' kann erzeugt werden mit

Adding and removing objects to/from the scenegraph
Adding new nodes to the scenegraph can be done this way. Take care of always adding a SoSeparator to contain the geometry, coordinates and material info of a same object. The following example adds a red line from (0,0,0) to (10,0,0):

To remove it, simply issue:

Adding custom widgets to the interface
You can create custom widgets with Qt designer, transform them into a python script, and then load them into the FreeCAD interface with PySide.

The python code produced by the Ui python compiler (the tool that converts qt-designer .ui files into python code) generally looks like this (it is simple, you can also code it directly in python):

Then, all you need to do is to create a reference to the FreeCAD Qt window, insert a custom widget into it, and "transform" this widget into yours with the Ui code we just made:

Adding a Tab to the Combo View
The following code allows you to add a tab to the FreeCAD ComboView, besides the "Project" and "Tasks" tabs. It also uses the uic module to load an ui file directly in that tab.

Function resident with the mouse click action
Here with SelObserver on a object select

Other example with ViewObserver on a object select or view

Search and data extraction
Examples of research and decoding information on an object.

Each section is independently and is separated by "############" can be copied directly into the Python console, or in a macro or use this macro. The description of the macro in the commentary.

Displaying it in the "View Report" window (View > Views > View report)

Manual search of an element with label
PS: Usually the angles are given in Radian to convert :


 * 1) angle in Degrees to Radians :
 * 2) *Angle in radian = pi * (angle in degree) / 180
 * 3) *Angle in radian = math.radians(angle in degree)
 * 4) angle in Radians to Degrees :
 * 5) *Angle in degree = 180 * (angle in radian) / pi
 * 6) *Angle in degree = math.degrees(angle in radian)

Cartesian coordinates
This code displays the Cartesian coordinates of the selected item.

Change the value of "numberOfPoints" if you want a different number of points (precision)

Other method display on "Int" and "Float"

Create one object to the position of the Camera
here same code simplified

Find normal vector on the surface
This example show how to find normal vector on the surface by find the u,v parameters of one point on the surface and use u,v parameters to find normal vector

Liefert den normalen Vektor einer Fläche aus einer STL Datei
Du bist fertig und läufst dann zum Beenden: