Code snippets/ro

Această pagină conține exemple, extrase, fragmente de cod Python de la FreeCAD, colectate din experiențele utilizatorilor și discuțiile pe forumuri. Citește și folosește-o ca un început pentru scripturile tale ...

Un fișier tipic InitGui.py
Fiecare modul trebuie să conțină, pe lângă fișierul modulului principal, un fișier InitGui.py, responsabil pentru înserarea modulului GUI principal. Acesta este un exemplu simplu.

Un fișier modul tipic
Acesta este un exemplu al unui fișier modul principal, care conține tot ceea ce face modul dvs. Acesta este fișierul Scripts.py invocat în exemplul anterior. Puteți să aveți toate comenzile personalizate aici.

Importul unui nou tip de fișier
Efectuarea unui import pentru un nou tip de fișier în FreeCAD este ușoară. FreeCAD nu ia în considerare că importați orice date într-un document deschis, pentru că nu puteți deschide direct un nou tip de fișier. Deci, ceea ce trebuie să faceți este să adăugați noua extensie de fișiere în lista de extensii cunoscute a FreeCAD și să scrieți codul care va citi fișierul și va crea obiectele FreeCAD pe care le doriți:

Această linie trebuie adăugată în fișierul InitGui.py pentru a adăuga noua extensie de fișier în listă de extensii:

Then in the Import_Ext.py file:

Pentru a exporta documentul la unele tipuri de fișiere noi funcționează în același mod, cu excepția faptului că utilizați: FreeCAD.addExportType("Your new File Type (*.ext)","Export_Ext")

Adding a line
O linie este definită doar de 2 puncte.

Adăugarea unui poligon
Un poligon este pur și simplu un set de segmente de linie conectate (o polilinie în AutoCAD). Nu este obligatoriu să fie închisă.

Adăugarea și îndepărtarea unui obiect într-un grup
Notă: Puteți chiar să adăugați un alt grup la un grup...

Accesarea și schimbarea reprezentării unui obiect
Fiecare obiect dintr-un document FreeCAD are un obiect vederii asociat, care stochează toți parametrii care definesc proprietățile obiectului, cum ar fi culoarea, lățimea liniei etc.

Observarea evenimentelor mouse-ului în vizualizatorul 3D via Python
Cadrul Inventor permite adăugarea unuia sau mai multor noduri de apel invers(callback) la scena grafică vizualizată. În mod implicit, în FreeCAD, un nod de apel invers este instalat per vizualizator(fereastra de afișare grafică), ceea ce permite adăugarea funcțiilor globale sau statice C ++. Metode de legarea adecvată sunt furnizate de Python, pentru a permite utilizarea acestei tehnici plecând de la codul Python.

Acum, alegeți undeva în zona din ecran (suprafață de lucru)vizualizatorul 3D și observați mesajele din fereastra de ieșire. Pentru a termina observația, trebuie doar să sunați

Următoarele tipuri de evenimente sunt suportate
 * SoEvent -- orice tip de evenimente
 * SoButtonEvent -- toate evenimentele butoanele /rotiță mouse
 * SoLocation2Event -- evenimente mișcări 2D (mișcările normale ale mouse-lui)
 * SoMotion3Event -- evenimentele mișcări 3D (normale pentru spaceball)
 * SoKeyboardEvent -- evenimente de tastare a tastelor cu săgeți sus/jos
 * SoMouseButtonEvent -- evenimentul de tastare și eliberare a butoanelor mouse
 * SoSpaceballButtonEvent -- evenimentul de tastare și eliberare a butoanelor spaceball

Funcțiile Python care pot fi înregistrate cu addEventCallback așteaptă definirea unei bilbioteci. Funcție de modul în care evenimentul survine, bilbioteca poate dispunde diferite taste. Este câte o tastă pentru fiecare evenimetn:

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

Afișați tastele apăsate și evenimentele comenzi
Această macrocomandă afișează în vizualizarea raportului tastele apăsate și comanda tuturor evenimentelor

Manipulați scenograful în Python
De asemenea, este posibil să se obțină și să se schimbe scenograful în Python, cu modulul "pivy" - o legare Python pentru monedă.

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

Determinarea vectorului normal la o suprafață
Acest exemplu arată modul de găsire a vectorului normal pe suprafață prin găsirea parametrilor u, v ai unui punct de pe suprafață și folosirea parametrilor u, v pentru a găsi vectorul normal