Code snippets/de

Einführung
Diese Seite enthält Beispiele, Stücke, Brocken von FreeCAD Python Code, die aus den Erfahrungen und Diskussionen der Benutzer auf den Foren gesammelt wurden. Lies und verwende sie als Ausgangspunkt für deine eigenen Skripte...

Schnipsel


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



Eine typische Moduldatei
Dies ist ein Beispiel für eine Hauptmoduldatei, die alles enthält, was dein Modul macht. Es handelt sich um die Datei Scripts.py, die durch das vorherige Beispiel aufgerufen wurde. Du kannst alle deine benutzerdefinierten Befehle hier haben.



Importieren eines neuen Dateityps
Es ist einfach, einen Importeur für einen neuen Dateityp in FreeCAD zu erstellen. FreeCAD berücksichtigt nicht, dass du Daten in ein geöffnetes Dokument importierst, sondern vielmehr, dass du den neuen Dateityp einfach direkt öffnen kannst. Was du also tun musst, ist, die neue Dateierweiterung zur Liste der bekannten Erweiterungen in FreeCAD hinzuzufügen und den Code zu schreiben, der die Datei liest und die von dir gewünschten FreeCAD Objekte erzeugt:

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

Dann in der Datei Import_Ext.py:

Das Exportieren deines Dokuments in einen neuen Dateityp funktioniert auf demselben Weg, nur dass Du verwendest: FreeCAD.addExportType("Dein neuer Dateityp (*.ext)", "Export_Ext")



Hinzufügen einer Linie
Eine Linie hat einfach 2 Punkte.



Hinzufügen eines Polygons
Ein Polygon ist einfach ein Satz verbundener Liniensegmente (in AutoCAD eine Polylinie). Es muss nicht geschlossen sein.



Hinzufügen und Entfernen eines Objekts in/aus eine(r) Gruppe
Hinweis: Du kannst auch andere Gruppen zu einer Gruppe hinzufügen...



Hinzufügen eines Polygonnetzes


Hinzufügen eines Bogens oder eines Kreises


Zugriff und Änderung der Darstellung eines Objekts
Jedes Objekt in einem FreeCAD Dokument hat ein zugeordnetes Ansichtsdarstellungsobjekt, das alle Parameter speichert, die definieren, wie das Objekt erscheint: d.h. Farbe, Linienbreite, usw... Siehe auch Liste die Komponenten eines Objekts auf Schnipsel unten



Ersetze die Form der Maus durch ein Bild


Ersetze die Form der Maus durch ein Bild einschliesslich (Kreuz)
Das Bild wird durch Gimp erstellt exportiert in eine .XPM-Datei. Kopiere und verwende den Code zwischen der Klammer "{" Code zu kopieren "}"



Beobachten von Kameraänderungen im 3D-Betrachter über Python
Dies erreicht man, indem man einen Node-Sensor zur Kamera hinzufügt.



Beobachten von Mausereignissen im 3D Betrachter über Python
Das Inventor Framework ermöglicht es, einen oder mehrere Aufrufknoten zum Szenegraphen des Betrachters hinzuzufügen. Standardmäßig wird in FreeCAD ein Aufrufknoten vom Betrachter installiert, der es erlaubt, globale oder statische C++ Funktionen hinzuzufügen. In der entsprechenden Python Bindung werden einige Methoden zur Verfügung gestellt, um diese Technik aus dem Python Code heraus zu nutzen.

Wähle nun irgendwo auf der Fläche im 3D Betrachter 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

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.



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



Handhabung des Szenegraphen in Python
Es ist auch möglich, den Szenegraphen in Python zu bekommen 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



Hinzufügen und Entfernen von Objekten zum/vom Szenegraphen
Hinzufügen neuer Knoten zum Szenegraphen kann auf diese Weise erfolgen. Achte darauf, dass immer einen SoSeparator hinzufügen, der die Geometrie, Koordinaten und Materialinformationen eines Objekts enthält. Das folgende Beispiel fügt eine rote Linie von (0,0,0,0) bis (10,0,0,0) hinzu:

Um es zu entfernen, stelle es einfach aus:

<span id="Save_the_sceneGraph_in_3_series_of_36_files">

Speichern des SzenenGraphs in 3 Serien von 36 Dateien
Sieh dir das Codeschnipsel durch Erweitern dieses Abschnitts an

<span id="Add_custom_widgets_to_the_interface">

Hinzufügen von benutzerdefinierten Assistenten zur Oberfläche
Du kannst benutzerdefinierte Widgets mit dem Qt Designer erstellen, sie in ein Python-Skript umwandeln und sie dann mit PySide in die FreeCAD Benutzeroberfläche laden.

Der Python Code, der vom Ui Python Compiler erzeugt wird (das Tool, das qt-designer .ui Dateien in Python Code umwandelt), sieht im Allgemeinen so aus (es ist einfach, Du kannst ihn auch direkt in Python kodieren):

Dann musst Du nur noch einen Verweis auf das FreeCAD Qt Fenster erstellen, ein benutzerdefiniertes Widget einfügen und dieses Widget mit dem gerade erstellten Ui Code in Dein Widget "transformieren":

<span id="Add_a_Tab_to_the_Combo_View">

Hinzufügen eines Reiters zur Comboansicht
Der folgende Code erlaubt dir, einen Reiter zur Combo Ansicht hinzuzufügen, getrennt von den bereits vorhandenen "Modell" und "Aufgaben Reitern . Er verwendet auch das  Modul, um eine UI Datei direkt in diesen Reiter zu laden.

<span id="Enable_or_disable_a_window">

Aktivieren oder Deaktivieren eines Fensters
Dieses Skript bietet die Möglichkeit, das UI von der Python Konsole aus zu verändern, um verschiedene Komponenten in der FreeCAD Benutzeroberfläche ein-/auszublenden, wie z.B:
 * Berichtsansicht
 * Baumansicht
 * Eigenschaftsansicht
 * Auswahlansicht
 * Combo Ansicht
 * Python Konsole
 * EntwurfWerkzeugleiste

<span id="Open_a_custom_webpage">

Öffnen einer angepassten Webseite
<span id="Get_the_HTML_contents_of_an_opened_webpage">

Erfassung des HTML Inhalts einer geöffneten Webseite
<span id="Retrieve_the_coordinates_of_3_selected_points_or_objects">

Abruf der Koordinaten von 3 ausgewählten Punkten oder Objekten
<span id="List_all_objects">

Liste alle Objekte
<span id="List_the_dimensions_of_an_object,_given_its_name">

Liste die Abmessungen eines Objekts, angegeben durch seinen Namen
<span id="Function_resident_with_the_mouse_click_action">

Der Mausklickhandlung innewohnende Funktion
Hier mit SelObserver auf einem Objekt auswählen

Anderes Beispiel mit ViewObserver auf einem Objekt auswählen oder ansehen

<span id="Find/select_all_elements_below_the_cursor">

Finde/Wähle alle Elemente unter dem Mauszeiger
<span id="List_the_components_of_an_object">

Liste die Komponenten eines Objektes auf
Diese Funktion listet die Komponenten eines Objekts auf und extrahiert:
 * diesem Objekt seine XYZ Koordinaten,
 * seine Kanten und ihre Längen Massenmittelpunkt und Koordinaten
 * seine Flächen und deren Massenzentrum
 * seine Flächen und deren Oberflächen und Koordinaten

<span id="List_the_PropertiesList">

Liste die EigenschaftenListe
<span id="Add_a_single_Property_Comment">

Hinzufügen eines einzelnen Eigenschaftskommentars
<span id="Search_and_data_extraction">

Suche und Datenentnahme
Beispiele für Forschung und Entschlüsselung von Informationen über ein Objekt.

Jeder Abschnitt ist unabhängig und durch "###############" getrennt und kann direkt in die Python Konsole oder in ein Makro kopiert werden oder dieses Makro verwenden. Die Beschreibung des Makros im Kommentar.

Anzeige im "Berichtsansichts" Fenster (Ansicht > Ansichten > Berichtsansicht)

<span id="Manual_search_of_an_element_with_label">

Manuelle Suche eines Elements mit Kennzeichnung
Hinweis: Normalerweise sind die Winkel im Bogenmaß angegeben. Um sie zu konvertieren:


 * 1) Winkel in Grad zu Bogenmaß :
 * 2) *Winkel im Bogenmaß = pi * (Winkel in Grad) / 180
 * 3) *Winkel im Bogenmaß = math.radians(Winkel in Grad)
 * 4) Winkel im Bogenmaß in Grad :
 * 5) *Winkel in Grad = 180 * (Winkel im Bogenmaß) / pi
 * 6) *Winkel in Grad = math.degrees(Winkel im Bogenmaß)

<span id="Cartesian_coordinates">

Kartesische Koordinaten
Dieser Code zeigt die kartesischen Koordinaten des ausgewählten Elements an.

Ändere den Wert von "numberOfPoints", wenn du eine andere Anzahl von Punkten (Präzision) willst

Andere Methodenanzeige bei "Int" und "Float"

<span id="Select_all_objects_in_the_document">

Auswahl aller Objekte im Dokument
<span id="Select_a_face_of_an_object_by_Name_object_and_Face_number">

Auswahl einer Fläche eines Objekts nach Objektname und Flächennummer
<span id="Get_the_normal_vector_of_a_face_of_an_object_by_Name_object_and_number_Face_(r.Q)">

Ermittelt den Normalenvektor einer Fläche eines Objekts nach Name Objekt und Nummer Fläche (r.Q)
<span id="Get_the_normal_vector_of_a_face_of_an_object_by_Name_object_and_number_of_Face">

Ermittelt den Normalenvektor einer Fläche eines Objekts durch Name Objekt und Nummer der Fläche
<span id="Get_the_normal_vector_of_an_object_selected_and_number_of_Face">

Ermittelt den Normalenvektor eines gewählten Objekts und die Nummer der Fläche
<span id="Get_the_normal_vector_on_the_surface">

Ermittelt den Normalenvektor auf der Oberfläche
Dieses Beispiel zeigt, wie man einen Normalenvektor auf der Oberfläche findet, indem man die u,v Parameter eines Punktes auf der Oberfläche findet und die u,v Parameter benutzt, um den Normalenvektor zu finden

Get the normal vector of the face and create a line at the point mouse clicked
<span id="Get_the_normal_vector_of_a_surface_from_a_STL_file">

Ermittelt den Normalenvektor einer Fläche aus einer STL Datei
Du bist fertig gehst dann zum Beenden:

<span id="Create_one_object_to_the_position_of_the_Camera">

Erstellt ein Objekt zur Position der Kamera
hier gleicher Code vereinfacht

<span id="Read_And_write_one_Expression">

Lese und schreibe einen Ausdruck
<span id="Create_a_Sketch_on_a_Surface_in_PartDesign">

Erstelle eine Skizze auf einer Oberfläche in PartDesign
Dieser Schnipsel kann nützlich sein, wenn du eine Skizze auf einer Oberfläche in PartDesign aus dem Inneren eines Makros heraus erstellen möchtest. Beachte, dass der Körper möglicherweise Keiner ist, wenn kein aktiver Körper ausgewählt ist, und dass die Auswahl möglicherweise leer ist.

<span id="How_to_Simulate_a_Mouse_Click_at_a_given_Coordinate">

Wie man einen Mausklick auf eine gegebene Koordinate simuliert
Die Position ist relativ zum GL Widget. Siehe Forumsbeitrag.

Wenn du einen 3D Punkt hast und den 2D Punkt auf dem Opengl Assistenten bekommen möchtest, verwende dies:

<span id="How_to_create_a_face_with_holes_using_Python_API">

Erstellen einer Fläche mit Löchern mit der Python-API
Dieser Schnipsel demonstriert, wie eine Fläche mit internen Löchern mit der Python-API erstellt werden kann. Siehe auch forum thread.

<span id="Close_and_restart_FreeCAD">

Coin3D
Siehe Coin3d Schnippsel

Verwandt

 * geskriptete Objekte
 * Makros