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.

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

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

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

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

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"

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

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: