Code snippets/ro

Introduction
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.

Every module must contain, besides your main module file, an InitGui.py file, responsible for inserting the module in the main Gui. This is an example of a simple one.

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.

This is an example of a main module file, containing everything your module does. It is the Scripts.py file invoked by the previous example. You can have all your custom commands here.

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:

Making an importer for a new filetype in FreeCAD is easy. FreeCAD doesn't consider that you import data in an opened document, but rather that you simply can directly open the new filetype. So what you need to do is to add the new file extension to FreeCAD's list of known extensions, and write the code that will read the file and create the FreeCAD objects you want:

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")

Adăugarea unei linii (segment)
O linie este definită doar de 2 puncte.

A line simply has 2 points.

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ă.

A polygon is simply a set of connected line segments (a polyline in AutoCAD). It doesn't need to be closed.

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.

Each object in a FreeCAD document has an associated view representation object that stores all the parameters that define how that object appears: i.e. color, linewidth, etc... See also List the components of an object snippet below

Replace the form of mouse with one image (cross) include
The image is created by Gimp exported in a .XPM file. Copy and use the code between the bracket "{" code to copy  "}"

Observe camera change in the 3D viewer via Python
This can be done adding a Node sensor to the camera.

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.

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.

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, biblioteca poate dispunde diferite taste. Este alocată câte o tastă pentru fiecare eveniment:

În funcție de eveniment, dicționarul poate conține diferite taste alocate. Pentru toate evenimentele are tastele: Pentru toate evenimentele gen apăsare de buton, adică evenimente de tip tastatură, mouse sau spațiu pentru evenimentele tip apăsare tastatură: pentru evenimente buton de mouse pentru evenimente tip spaceball: Și în sfârșit, evenimentele legate de deplasare:
 * Type -- the name of the event type i.e. SoMouseEvent, SoLocation2Event, ...
 * Time -- timpul curent ca șir de caractere
 * Position -- tuple de două numere întregi, reprezentând poziția mouse-ului
 * ShiftDown -- un indicator boolean, adevărat dacă Shift a fost apăsat altfel fals
 * CtrlDown -- un indicator boolean, adevărat dacă Ctrl a fost apăsat altfel fals
 * AltDown -- un indicator boolean, adevărat dacă Alt a fost apăsat altfel fals
 * State -- Un șir text dacă butonul este 'UP', 'DOWN' dacă butonul este jos, sau pentru orice alt caz 'UNKNOWN'
 * Key -- caracterul tastei apăsate
 * Button -- Butonul apăsat, poate lua valorile BUTTON1, ..., BUTTON5 sau oricare dintre ele
 * Button -- butonul apăsat poate lua valorile, BUTTON1, ..., BUTTON7 sau oricare dintre ele ANY
 * Translation -- o tuplă de trei numere cu virgulă float
 * Rotation -- un quaternion pentru rotație, adică o tuplă de patru valori exprimate cu virgulă float

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

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

Manipularea de scene grafice în Python
De asemenea, este posibil să se afișeze și să se schimbe scen în programul Python, cu modulul "pivy" - în combinație cu Coin.

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

API-ul Python API-ul de tip pivy este creat folosind instrumentul SWIG. Pe măsură ce folosim în FreeCAD niște noduri scrise automat, pe care nu le puteți crea direct în Python. Cu toate acestea, este posibil să creați un nod prin numele său intern. Un exemplu de tipul "SoFCSelection" poate fi creată cu:

Adăugarea și eliminarea obiectelor în / de la scena de grafică
Adăugarea de noi noduri în scena grafică poate fi făcută astfel. Aveți grijă să adăugați mereu un SoSeparator pentru a conține proprietățile formei geometrice, coordonatele și informațiile despre material ale aceluiași obiect. Următorul exemplu adaugă o linie roșie de la (0,0,0) până la (10,0,0):

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):

Pentru a șerge pe acesta, este cimplu:

Salvați sceneGraph cu o rotație într-o serie de 36 fișiere în axele X Y Z
View the code snippet by expanding this section

Adăugarea de widget-uri personalizate la interfață
Puteți crea widget-uri personalizate cu designerul Qt, le puteți transforma într-un script python și apoi le puteți încărca în interfața FreeCAD cu PySide.

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

Codul python produs de compilatorul Ui python (instrumentul care convertește fișierele qt-designer .ui în codul python), în general, arată astfel (este simplu, puteți, de asemenea, să îl codificați direct în Python):

Apoi, tot ce trebuie să faceți este să creați o referință la fereastra Qt FreeCAD, să-i inserați un widget personalizat în ea și să transferați codul Ui al acestui widget pe care tocmai l-am făcut:

Adăugarea unui tab în vizualizarea Combo
Următorul cod vă permite să adăugați o filă în FreeCAD ComboView, pe lângă filele "Project" și "Tasks". De asemenea, utilizează modulul uic pentru a încărca un fișier ui direct în acea filă.

The following code allows you to add a tab to the Combo view, separate from the preexisting "Model" and "Tasks" tabs. It also uses the module to load an UI file directly in that tab.

Activați sau dezactivați o fereastră
This script give the ability to manipulate the UI from the Python console to show/hide different components in the FreeCAD interface such as:
 * Report view
 * Tree view
 * Property view
 * Selection view
 * Combo view
 * Python console
 * draftToolbar

Funcția rezidentă cu acțiunea clicului mouse-ului
Here with SelObserver on a object select

Other example with ViewObserver on a object select or view

Lista componentelor unui obiect
This function list the components of an object and extracts:
 * this object its XYZ coordinates,
 * its edges and their lengths center of mass and coordinates
 * its faces and their center of mass
 * its faces and their surfaces and coordinates

Căutarea și extracția datelor
Example de cautare și decodare a informației despre un obiect.

Fiecare secțiune este independentă și este separată de diezi "############" poate fi copiată direct în consola Python sau într-o macrocomandă sau poate folosi această macrocomandă. Descrierea macrocomenzii în comentariu.

Afișajul se face în fereastra "View Report" (View > Views > View report)

Căutarea Manuală a unui element având eticheta sa
PS: De obiecei unghiurile sunt dat în Radian, pentru a face conversia :


 * 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)

Coordonate Carteziene
Acest cod afișează coordonatele cartesiene ale elementului selectat.

Modificați valoarea "numberOfPoints" dacă doriți o precizie mai mare sau mai mică

Altă metodă de afișarea a "Int" și "Float"

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

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

Crearea unui obiect față de poziția Camerei foto
aici avem același sod simplificat

Create a Sketch on a Surface in PartDesign
This snippet can be useful, if you want to create a sketch on a surface in PartDesign from inside a macro. Note, that body might be None, if no active body is selected and that the Selection might be empty.

How to Simulate a Mouse Click at a given Coordinate
The position is relative to the GL widget. See forum thread.

If you have a 3d point and want to get the 2d point on the opengl widget then use this:

How to create a face with holes using Python API
This snippet demonstrates how to create a face with internal holes through the Python API. See forum thread.

Coin3D
See Coin3d snippets

Related

 * Scripted objects
 * Macros
 * Topological_data_scripting