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/von 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...

Observing mouse events in the 3D viewer via Python
The Inventor framework allows to add one or more callback nodes to the scenegraph of the viewer. By default in FreeCAD one callback node is installed per viewer which allows to add global or static C++ functions. In the appropriate Python binding some methods are provided to make use of this technique from within Python code.

Now, pick somewhere on the area in the 3D viewer and observe the messages in the output window. To finish the observation just call

The following event types are supported
 * SoEvent -- all kind of events
 * SoButtonEvent -- all mouse button and key events
 * SoLocation2Event -- 2D movement events (normally mouse movements)
 * SoMotion3Event -- 3D movement events (normally spaceball)
 * SoKeyboardEvent -- key down and up events
 * SoMouseButtonEvent -- mouse button down and up events
 * SoSpaceballButtonEvent -- spaceball button down and up events

The Python function that can be registered with addEventCallback expects a dictionary. Depending on the watched event the dictionary can contain different keys. For all events it has the keys: For all button events, i.e. keyboard, mouse or spaceball events For keyboard events: For mouse button event For spaceball events: And finally motion events:
 * Type -- the name of the event type i.e. SoMouseEvent, SoLocation2Event, ...
 * Time -- the current time as string
 * Position -- a tuple of two integers, mouse position
 * ShiftDown -- a boolean, true if Shift was pressed otherwise false
 * CtrlDown -- a boolean, true if Ctrl was pressed otherwise false
 * AltDown -- a boolean, true if Alt was pressed otherwise false
 * State -- A string 'UP' if the button was up, 'DOWN' if it was down or 'UNKNOWN' for all other cases
 * Key -- a character of the pressed key
 * Button -- The pressed button, could be BUTTON1, ..., BUTTON5 or ANY
 * Button -- The pressed button, could be BUTTON1, ..., BUTTON7 or ANY
 * Translation -- a tuple of three floats
 * Rotation -- a quaternion for the rotation, i.e. a tuple of four floats

Display keys pressed and Events command
This macro displays in the report view the keys pressed and all events command

Manipulate the scenegraph in Python
It is also possible to get and change the scenegraph in Python, with the 'pivy' module -- a Python binding for Coin.

The Python API of pivy is created by using the tool SWIG. As we use in FreeCAD some self-written nodes you cannot create them directly in Python. However, it is possible to create a node by its internal name. An instance of the type 'SoFCSelection' can be created with

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

Get the normal vector of a suface from a STL file
you are done then run for quit: