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

Adăugarea unei linii (segment)
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.

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

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, 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

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.

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

Pentru a șerge pe acesta, este cimplu:

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.

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

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

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.

Căutarea Manuală a unui element având eticheta sa
aici avem același sod simplificat

Icon personalised in ComboView
Here an example to create an object with properties and icon personalised in ComboView

Download the example icon to the same directory as the macro

Use of an icon for three different use cases: icon_in_file_disk (format .png), icon_XPM_in_macro (format .XPM) and icon_resource_FreeCAD



Complete example creating a cube and its icon

Use QFileDialog for writing to a file
Complete code:

Use QFileDialog to read a file
Complete code:

Use QColorDialog to get the color
Complete code:

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

PS: De obiecei unghiurile sunt dat în Radian, pentru a face conversia :

Coordonate Carteziene

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

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

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 9: ordinal not in range(128)

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

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