FreeCAD Scripting Basics

From FreeCAD Documentation
Jump to: navigation, search
This page is a translated version of the page FreeCAD Scripting Basics and the translation is 82% complete.

Outdated translations are marked like this.
Other languages:
čeština • ‎Deutsch • ‎English • ‎español • ‎français • ‎Bahasa Indonesia • ‎italiano • ‎polski • ‎português • ‎română • ‎русский • ‎svenska • ‎Türkçe • ‎中文(中国大陆)‎

Programarea script Python in FreeCAD

FreeCAD este construit de la zero pentru a fi controlat total de scripturile Python. Aproape toate componentele FreeCAD, cum ar fi interfața, conținutul scenelor și chiar reprezentarea acestui conținut în vizualizările 3D, sunt accesibile din interpretorul Python încorporat sau din propriile dvs. scripturi. Drept urmare, FreeCAD este probabil una dintre aplicațiile de inginerie cele mai profunde disponibile astăzi.

În starea sa actuală însă, FreeCAD are foarte puține comenzi "native" pentru a interacționa cu obiectele 3D, în principal pentru că se află încă în stadiu incipient de dezvoltare, dar și pentru că filozofia din spatele ei este mai degrabă o platformă pentru dezvoltarea CAD decât o aplicație specifică de utilizare. Dar ușurința scripturilor Python din cadrul FreeCAD este o modalitate rapidă de a vedea noi funcționalități dezvoltate de "utilizatorii de putere", de obicei utilizatorii care cunosc un pic de programare Python. Python este una dintre cele mai cunoscute limbi interpretate și, în general, este considerată ușor de învățat, și tu în curând poți crea propriile script-uri de utilizator ale PowerCAD.

Dacă nu sunteți familiarizat cu Python, vă recomandăm să căutați tutoriale pe internet și să vă aruncați o privire rapidă asupra structurii sale. Python este un limbaj de programare foarte ușor de învățat, mai ales pentru că poate fi rulat în interiorul unui interpretor, unde comenzile simple, chiar până la finalizarea programelor, pot fi executate în zbor fără a fi nevoie să compilați nimic. FreeCAD are un interpretor Python încorporat. Dacă nu vedeți fereastra etichetată "Consola Python" așa cum se arată mai jos, o puteți activa sub consola View -> Panels -> Python pentru a deschide interpretorul.

Interpretorul

Din interpretor, puteți accesa toate modulele Python instalate de sistem, precum și modulele FreeCAD încorporate și toate modulele FreeCAD suplimentare instalate ulterior. Imaginea de mai jos prezintă interpretorul Python:

The FreeCAD Python interpreter

Din interpretor, puteți executa codul Python și puteți naviga prin clasele și funcțiile disponibile. FreeCAD oferă un browser al claselor foarte util pentru explorarea noii tale lumi FreeCAD: Când introduceți numele unei clase cunoscute, urmată de un punct (adică doriți să adăugați ceva din acea clasă), se deschide o fereastră de browser de clasă, unde puteți naviga între subclasele și metodele disponibile. Când selectați ceva, este afișat un text de ajutor asociat (dacă există):

The FreeCAD class browser

Așa că, începeți aici tastând App. ori Gui. și priviți ce e tâmplă. O altă modalitate mai generală de a explora conținutul modulelor și claselor este utilizarea comenenzii Python'print dir()'. De exemplu, tastați print dir() și veți obține o listă a tuturor modulelor încărcat curent în FreeCAD. print dir(App) vă va arăta tot ceea ce este în interiorul modulelro App, etc.

O altă caracteristică utilă a interpretului este posibilitatea de a reveni prin istoria comenzilor și de a recupera o linie de cod pe care ați introdus-o deja mai devreme. Pentru a naviga prin istoricul comenzilor, trebuie doar să le utilizați CTRL+UP or CTRL+DOWN.

Dacă faceți clic dreapta în fereastra interpretului, aveți și alte câteva opțiuni, cum ar fi copierea întregului istoric (util atunci când doriți să experimentați lucrurile înainte de a face un script complet al acestora) sau introduceți un nume de fișier cu cale completă.

Python Help

În meniul de ajutor al FreeCAD veți găsi o intrare intitulată "Ajutor Python", care va deschide o fereastră de browser care conține o documentație completă, generată în timp real, a tuturor modulelor Python disponibile pentru interpretorul FreeCAD, inclusiv modulele Python și FreeCAD încorporate , modulele instalate în sistem și modulele suplimentare FreeCAD. Documentația disponibilă depinde de efortul fiecărui dezvoltator de module în documentarea codului său, dar, de obicei, modulele Python au o reputație de a fi destul de bine documentate. Fereastra FreeCAD trebuie să rămână deschisă pentru ca acest sistem de documentare să funcționeze.

Module integrate

Deoarece FreeCAD este proiectat să ruleze fără o interfață grafică de utilizator (GUI), aproape toate funcționalitățile sale sunt separate în două grupuri: funcționalitatea Core, numită "App", și funcționalitatea GUI, numită "Gui". Deci, cele două module principale FreeCAD încorporate se numesc App și Gui. Aceste două module pot fi accesate, de asemenea, din scripturile din afara interpretului, prin numele "FreeCAD" și respectiv "FreeCADGui".

  • In App module, veți găsi totul în legătură cu aplicația în sine, cum ar fi metodele de deschidere sau închidere a fișierelor și documentelor, cum ar fi setarea documentului activ sau listarea conținutului acestuia.
  • In Gui module, veți găsi instrumente pentru accesarea și gestionarea elementelor Gui, cum ar fi Atelierele de lucru și barele lor de instrumente și, mai interesant, reprezentarea grafică a conținutului FreeCAD.

Afișarea întregului conținut al acestor module este o sarcină puțin contraproductivă, deoarece acestea cresc destul de repede cu dezvoltarea FreeCAD. Dar cele două instrumente de navigare furnizate (browserul de clasă și Python help) vă vor oferi, în orice moment, o documentație completă și actualizată a acestor module.

Obiectele App și Gui

Așa cum am spus, în FreeCAD, totul este separat între nucleu și reprezentare. Aceasta include și obiectele 3D. Puteți accesa definirea proprietăților obiectelor (numite funcții în FreeCAD) prin modulul App și modificați modul în care sunt reprezentate pe ecran prin modulul Gui. De exemplu, un cub are proprietăți care îl definesc (cum ar fi lățimea, lungimea, înălțimea) stocate într-un obiect App și proprietăți de reprezentare (cum ar fi culoarea fețetelor, modul de desenare) stocate într-un obiect Gui corespunzător.

Acest mod de a face lucrurile permite o gamă largă de utilizări, cum ar fi ca algoritmii să funcționeze numai pe partea de definire a caracteristicilor, fără a avea nevoie să aibă grijă de nicio parte vizuală sau chiar să redirecționeze conținutul documentului la o aplicație non-grafică ca liste, foi de calcul sau analiza elementului finit.

Pentru fiecare obiect App din document, există un obiect Gui corespunzător. De fapt documentul în sine are atât obiecte App cât și obiecte Gui. Acest lucru, desigur, este valabil numai când rulați FreeCAD cu interfața sa completă. În versiunea de linie de comandă nu există nici o interfață grafică, astfel încât numai obiectele App sunt disponibile. Rețineți că partea Gui a obiectelor este re-generată de fiecare dată când un obiect App este marcat ca fiind "pentru a fi recalculat" (de exemplu, când unul dintre parametrii lui se modifică), astfel încât modificările pe care le-ați fi putut face direct la obiectul Gui pot fi pierdute.

Pentru a acesa partea App a unui obiect oarecare, scrieți:

myObject = App.ActiveDocument.getObject("ObjectName")

unde "ObjectName" este numele obiectului dvs. Puteți de asemenea tasta:

myObject = App.ActiveDocument.ObjectName

Pentru a accesa partea Gui a aceluiași obiect, scrieți:

myViewObject = Gui.ActiveDocument.getObject("ObjectName")

unde "ObjectName" este numele obeictului duvs. Puteți de asemena tasta:

myViewObject = App.ActiveDocument.ObjectName.ViewObject

Dacă nu aveți nici un GUI (de exemplul sunten în modul linie-de-comandă), ultima linie va returna 'None'.

Obiectele Documentului

În FreeCAD, toată munca dvs. se află în interiorul Documentelor. Un document conține geometria și poate fi salvat într-un fișier. Mai multe documente pot fi deschise în același timp. Documentul, ca geometria conținută în interior, are obiecte App și Gui. Obiectul App conține definițiile de geometrie reale, în timp ce obiectul Gui conține vederile diferite ale documentului. Puteți deschide mai multe ferestre, fiecare vizionând munca dvs. cu un alt factor de zoom sau unghi de vedere diferit. Aceste viziuni fac parte din obiectul Gui al documentului dvs.

Pentru a accesa partea App a documentului curent deschis (activ), scrieți:

myDocument = App.ActiveDocument

Pentru a crea un nou documente, scrieți:

myDocument = App.newDocument("Document Name")

Pentru a accesa partea Gui documentul deschis (activ), tastați:

myGuiDocument = Gui.ActiveDocument

Pentru a accesa vederea curentă, scrieți:

myView = Gui.ActiveDocument.ActiveView

Utilizarea de module adiționale

Modulele FreeCAD și FreeCADGui sunt singurele responsabile pentru crearea și gestionarea obiectelor din documentul FreeCAD. Ele nu fac de fapt nimic, cum ar fi crearea sau modificarea geometriei. Aceasta deoarece această geometrie poate fi de mai multe tipuri și astfel este gestionată de module suplimentare, fiecare responsabil pentru gestionarea unui anumit tip de geometrie. De exemplu, Part Module utilizează kernelul OpenCascade și, prin urmare, este capabil să creeze și să manipuleze B-rep type geometry, ceea ce este construit pentru OpenCascade. Modul Mesh Module poate construi și modifica obiecte tip plase. În acest fel, FreeCAD este capabil să gestioneze o mare varietate de tipuri de obiecte, care pot coexista în același document, iar noi tipuri pot fi adăugate cu ușurință în viitor.

Crearea obiectelor

Fiecare modul are propriul mod de a trata geometria sa, dar un lucru pe care, de obicei, pot să-l facă este să creeze obiecte în document. Dar documentul FreeCAD este, de asemenea, conștient de tipurile de obiecte disponibile furnizate de module:

FreeCAD.ActiveDocument.supportedTypes()

vă va lista toate obiectele posibile pe care le puteți crea. De exemplu, să creăm o plasă (tratată de modulul Mesh/Plasă) și o Piesă (tratată de modulul Part/Piesă):

myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature","myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature","myPartName")

Primul argument este tipul de obiect, al doilea este numele obiectului. Cele două obiecte arată aproape la fel: nu conțin încă nicio geometrie și majoritatea proprietăților lor sunt aceleași când le inspectați cu dir(myMesh) și dir(myPart). Cu o excepție, myMesh are o proprietate "Mesh" și "Part" are o proprietate "Shape". Acesta este locul în care sunt stocate datele de Plasă și Piesă. De exemplu, să creăm un cub Part și să îl stocăm în obiectul myPart:

import Part
cube = Part.makeBox(2,2,2)
myPart.Shape = cube

Puteți încerca să stocați cubul în interiorul proprietății Mesh-ului obiectului myMesh, va veni o eroare în care se plânge despre tipul greșit. Aceasta se datorează faptului că aceste proprietăți sunt făcute pentru a stoca numai un anumit tip. În proprietatea MyMesh a Mesh, puteți salva numai chestii create cu modulul Mesh. Rețineți că majoritatea modulelor au, de asemenea, o comandă rapidă pentru a adăuga geometria lor la document:

import Part
cube = Part.makeBox(2,2,2)
Part.show(cube)

Modificarea obiectelor

Modificarea unui obiect este făcută în același mod:

import Part
cube = Part.makeBox(2,2,2)
myPart.Shape = cube

Acum, să schimbăm forma printr-o formă mai mare:

biggercube = Part.makeBox(5,5,5)
myPart.Shape = biggercube

Interogarea obiectelor

Puteți să vă uitați mereu la tipul de obiect ca acesta:

myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print myObj.TypeId

sau să știm dacă un obiect este derivat dintr-unul dintre cele de bază (Part Feature, Mesh Feature, etc):

print myObj.isDerivedFrom("Part::Feature")

Acum puteți începe să jucați cu FreeCAD! Pentru a vedea ce puteți face cu Part Module, citiți pagina Pare scripting, sau pagina Mesh Scriptingpentru a lucra cu Mesh Module.Rețineți că, deși modulele Parte și Mesh sunt cele mai complete și utilizate pe scară largă, alte module cum ar fi Draft Module au, de asemenea, scripting APIs care vă pate fi utili.Pentru o listă completă a fiecărui modul și a instrumentelor disponibile, vizitați secțiunea Category:API.