Python scripting tutorial/it: Difference between revisions

From FreeCAD Documentation
(Created page with "In questo tutorial si utilizzeranno entrambi i metodi, sia il copia/incolla di ogni riga, una per una, nella console Python seguito da {{KEY|Invio}} dopo ogni riga, sia il cop...")
No edit summary
 
(201 intermediate revisions by 6 users not shown)
Line 1: Line 1:
<languages/>
[http://it.wikipedia.org/wiki/Python Python] è un linguaggio di programmazione, molto semplice da usare e molto veloce da imparare.

{{Docnav
|[[Introduction_to_Python/it|Introduzione a Python]]
|[[FreeCAD_Scripting_Basics/it|Script di base per FreeCAD]]
}}


{{TOCright}}
E' open-source, multi-piattaforma, e può essere usato da solo per una vasta gamma di cose, sia per semplici script che per programmi molto complessi.


<span id="Introduction"></span>
Uno dei suoi usi più frequenti è sicuramente come linguaggio di script poiché è facile da incorporare in altre applicazioni. Questo è esattamente il modo in cui viene utilizzato all'interno di FreeCAD.
==Introduzione==


[https://it.wikipedia.org/wiki/Python Python] è un linguaggio di programmazione relativamente facile da imparare e comprendere. È open-source e multipiattaforma e può essere utilizzato per molti scopi: da semplici script di shell a programmi molto complessi. Ma il suo utilizzo più diffuso è come linguaggio di scripting incorporato in altre applicazioni. È in questa modalità che viene utilizzato all'interno di FreeCAD. Dalla [[Python_console/it|console Python]], o con script personalizzati, puoi controllare FreeCAD e fargli eseguire operazioni molto complesse.
Dalla console di Python, o tramite script personali, è possibile pilotare FreeCAD e fargli eseguire azioni molto complesse per le quali non esiste ancora lo strumento per l'interfaccia grafica utente.


Ad esempio, tramite uno script Python, è possibile:
Ad esempio, tramite uno script Python, è possibile:
* creare nuovi oggetti
* Creare nuovi oggetti
* modificare gli oggetti esistenti
* Modificare gli oggetti esistenti
* modificare la rappresentazione 3D degli oggetti
* Modificare la rappresentazione 3D degli oggetti
* modificare l'interfaccia di FreeCAD
* Modificare l'interfaccia di FreeCAD


Ci sono anche altri modi per utilizzare Python in FreeCAD:
Esistono diversi modi per utilizzare Python in FreeCAD:
* Tramite [[FreeCAD Scripting Basics/it|l'Interprete di Python in FreeCAD]], dove è possibile inviare semplici comandi come si fa in una interfaccia di tipo "linea di comando"
* Dall'[[FreeCAD Scripting Basics/it|Interprete Python di FreeCAD]], da cui si possono inviare comandi in un'interfaccia in stile "riga di comando".
* Tramite le [[macros/it|Macro]], che sono un modo pratico per aggiungere rapidamente all'interfaccia di FreeCAD uno strumento mancante
* Con le [[macros/it|macro]], che sono un modo conveniente per aggiungere rapidamente uno strumento mancante all'interfaccia di FreeCAD.
* Tramite degli script esterni, che possono essere utilizzati per programmare le cose molto complesse, ad esempio, creare completi [[Workbenches/it|Ambienti di lavoro]].
* Da script esterni, che possono essere utilizzati per creare soluzioni abbastanza complesse, anche interi [[Workbenches/it|Ambienti di Lavoro]].


In questo tutorial, lavoreremo su un paio di esempi semplici per consentirte a tutti di iniziare, ma in questo wiki è disponibile anche molta altra [[Power users hub/it|documentazione sugli script Python]].
In questo tutorial, lavoreremo su un paio di esempi di base per consentire a tutti di iniziare, ma in questo wiki è disponibile anche molta altra [[Power users hub/it|documentazione sugli script Python]].
Per chi ancora non conoscesse Python, ma è interessato a capire come funziona, c'è anche una [[Introduction to Python/it|Introduzione a Python]] per una formazione di base.


Prima di procedere con lo scripting Python, andare su {{MenuCommand|Modifica → Preferenze → Generale → Report}} e selezionare le due caselle:
Per chi non conosce ancora Python, ma è interessato a capire come funziona, c'è anche una [[Introduction to Python/it|Introduzione a Python]] per una formazione di base.
* {{MenuCommand|Reindirizza l'output interno di Python alla finestra di report}}.
* {{MenuCommand|Reindirizza gli errori interni di Python alla finestra di report}}.
Quindi andare su {{MenuCommand|Visualizza → Panelli}} e selezionare:
* {{MenuCommand|Report}}.


<span id="Writing_Python_code"></span>
'''Important!''' Before proceeding with Python scripting, go to Edit->Prefences->General->Output window and check 2 boxes:
==Scrivere codice Python==
* Redirect internal Python output to report view
* Redirect internal Python errors to report view
Then go to View->Views and check:
* Report view
This will save you a lot of aggravation!


Ci sono due modi per scrivere codice Python in FreeCAD. Nella [[Python_console/it|console Python]] (selezionare {{MenuCommand|Visualizza → Pannelli → Console Python}} dal menu) o nell'[[Std_DlgMacroExecute/it|editor delle Macro]] (selezionare {{MenuCommand|Macro → Macro...}} dal menu). Nella console si scrivono i comandi Python uno per uno, e li si eseguono premendo {{KEY|Enter}}, mentre le macro possono contenere codice più complesso formato da più righe, eseguito solo quando la macro viene eseguita.
== Scrivere un codice Python ==


[[Image:Screenshot_pythoninterpreter.jpg]]
In FreeCAD, ci sono due modi semplici per scrivere un codice Python: Tramite la console di Python (disponibile con Visualizza → Viste → Console Python) oppure tramite l'editor delle Macro (Strumenti → Macro).
{{Caption|la console Python di FreeCAD}}


In questo tutorial puoi usare entrambi i metodi. Puoi copiare e incollare ogni riga nella console Python e quindi premere {{KEY|Enter}}, oppure copiare e incollare l'intero codice in una nuova finestra Macro.
Nella console, si scrivono i comandi Python uno per uno (riga per riga), e questi vengono eseguiti quando si preme Invio, mentre le macro possono contenere uno script più complesso fatto di diverse righe, e i comandi vengono eseguiti solo quando viene eseguita la macro.
{{Top}}
<span id="Exploring_FreeCAD"></span>
==Esplorare FreeCAD==


Iniziamo creando un nuovo documento vuoto:
[[Image:Screenshot_pythoninterpreter.jpg|center|frame|La console di Python in FreeCAD]]


{{Code|code=
In questo tutorial si utilizzeranno entrambi i metodi, sia il copia/incolla di ogni riga, una per una, nella console Python seguito da {{KEY|Invio}} dopo ogni riga, sia il copia/incolla dell'intero codice in una nuova finestra Macro.

== Exploring FreeCAD ==
Let's start by creating a new empty document:

<syntaxhighlight>
doc = FreeCAD.newDocument()
doc = FreeCAD.newDocument()
}}
</syntaxhighlight>


Se lo si digita nella console Python di FreeCAD, si nota che non appena si digita {{incode|FreeCAD.}} si apre una finestra, che consente di completare automaticamente il resto della riga. Ancora meglio, ogni voce nell'elenco di completamento automatico ha un suggerimento che spiega cosa fa. Ciò semplifica l'esplorazione delle funzionalità disponibili. Prima di scegliere {{incode|newDocument}}, dare un'occhiata alle altre opzioni.
If you type this in the FreeCAD python console, you will notice that as soon as you type "FreeCAD.", a windows pops up, allowing to quickly autocomplete the rest of your line. Even better, each entry in the autocomplete list has a tooltip explaining what it does. This makes it very easy to explore the functionality available. Before choosing "newDocument", have a look at the other options available.


[[Image:Screenshot_classbrowser.jpg|center|frame|The autocomplete mechanism of the FreeCAD python console]]
[[Image:Screenshot_classbrowser.jpg]]
{{Caption|Il meccanismo di completamento automatico della console Python di FreeCAD}}


Ora verrà creato il nostro nuovo documento. Questo equivale alla pressione del pulsante {{Button|[[Image:Std_New.svg|16px]] [[Std_New|Nuovo]]}} sulla barra degli strumenti. In effetti, la maggior parte dei pulsanti in FreeCAD non fa altro che eseguire una o più righe di codice Python. Ancora meglio, si può impostare un'opzione in {{MenuCommand|Modifica → Preferenze → Python → Macro}} su {{MenuCommand|Mostra lo scritp dei comandi nella console python}}. Questo visualizzerà nella console tutto il codice Python che viene eseguito quando si premono i vari pulsanti. Ciò è molto utile per imparare a riprodurre azioni in Python.
Now our new document will be created. This is similar to pressing the "new document" button on the toolbar. In fact, most buttons in FreeCAD do nothing else than executing a line or two of python code. Even better, you can set an option in {{MenuCommand|Edit->Preferences->General->Macro}} to "show script commands in python console". This will print in the console all python code executed when you press buttons. Very useful to learn how to reproduce actions in python.


Ora torniamo al nostro documento e vediamo cosa si può fare:
Now let's get back to our document. Let's see what we can do with it:


{{Code|code=
<syntaxhighlight>
doc.
doc.
}}
</syntaxhighlight>


Esploriamo le opzioni disponibili.
Explore the available options. Usually names that begin with a capital letter are attributes, they contain a value, while names that begin with small letter are functions (also called methods), they "do something". Names that begin with an underscore are usually there for the internal working of the module, and you shouldn't care about them. Let's use one of the methods to add a new object to our document:


Di solito i nomi che iniziano con la lettera maiuscola sono attributi e contengono un valore, mentre i nomi che iniziano con la lettera minuscola sono funzioni (chiamate anche metodi) e "fanno qualcosa".
<syntaxhighlight>
box = doc.addObject("Part::Box","myBox")
</syntaxhighlight>


I nomi che iniziano con un carattere di sottolineatura di solito sono lì per il funzionamento interno del modulo e non dobbiamo preoccuparci di loro.
Nothing happens. Why? Because FreeCAD is made for the big picture. One day, it will work with hundreds of complex objects, all depending one from another. Making a small change somewhere could have a big impact, you may need to recalculate the whole document, which could take a long time... For that reason, almost no command updates the scene automatically. You must do it manually:


Usiamo ora uno dei metodi per aggiungere un nuovo oggetto al nostro documento:
<syntaxhighlight>
doc.recompute()
</syntaxhighlight>


{{Code|code=
See? Now our box appeared! Many of the buttons that add objects in FreeCAD actually do 2 things: add the object, and recompute. If you turned on the "show script commands in python console" option above, try now adding a sphere with the GUI button, you'll see the two lines of python code being executed one after the other.
box = doc.addObject("Part::Box", "myBox")
}}


Non succede nulla. Perché? Perché FreeCAD è pensato per realizzare lavori molto complessi. In futuro, lavorerà con centinaia di oggetti complessi, tutti dipendenti l'uno dall'altro. Apportare una piccola modifica da qualche parte potrebbe avere un grande impatto; potrebbe essere necessario ricalcolare l'intero documento, operazione che potrebbe richiedere molto tempo. Per questo motivo, quasi nessun comando aggiorna la scena automaticamente. È necessario farlo manualmente:
What about the "Part::Box" will you ask? How can I know what other kind of objects can be added? It's all here:


{{Code|code=
<syntaxhighlight>
doc.supportedTypes()
doc.recompute()
}}
</syntaxhighlight>

Ora il box è apparso. Molti dei pulsanti che aggiungono oggetti in FreeCAD in realtà fanno due cose: aggiungere l'oggetto, e ricalcolare. Se l'opzione {{MenuCommand|mostra lo script dei comandi nella console Python}} di cui sopra è attivata, provate ad aggiungere una sfera con il pulsante della GUI e vedrete le due righe di codice Python che vengono eseguite una dopo l'altra.


Ora esploriamo le caratteristiche del nostro box:
Now let's explore the contents of our box:


{{Code|code=
<syntaxhighlight>
box.
box.
}}
</syntaxhighlight>


Si possono vedere subito un paio di cose molto interessanti quali:
You'll immediately see a couple of very interesting things such as:


{{Code|code=
<syntaxhighlight>
box.Height
box.Height
}}
</syntaxhighlight>


Questo comando stampa l'altezza corrente del nostro box. Ora proviamo a cambiarla:
This will print the current height of our box. Now let's try to change that:


{{Code|code=
<syntaxhighlight>
box.Height = 5
box.Height = 5
}}
</syntaxhighlight>


Se si seleziona la casella con il mouse, si nota che nel [[Property_editor/it|pannello delle proprietà]], nella scheda {{MenuCommand|Data}}, appare la nostra proprietà {{PropertyData|Height}}. Tutte le proprietà di un oggetto FreeCAD che appaiono lì (e anche nella scheda {{MenuCommand|View}}, di cui parleremo più avanti), sono direttamente accessibili anche in Python, con i loro nomi, come abbiamo fatto con la proprietà {{PropertyData|Height }}. Si provi a cambiare le altre dimensioni di box.
If you select your box with the mouse, you'll see that in the properties panel, in the "Data" tab, our "Height" property appears. All properties of a FreeCAD object that appear there (and also in the "View" tab, more about that later), are directly accessible by python too, by their names, like we did with the "Height" property. Try changing the other dimensions of that box.
{{Top}}
<span id="Vectors_and_placements"></span>
==Vettori e posizionamenti==


I [http://it.wikipedia.org/wiki/Vettore_%28matematica%29 vettori] sono un concetto fondamentale in qualsiasi applicazione 3D. Si tratta di un elenco di 3 numeri (x, y, z), che descrivono un punto o una posizione nello spazio 3D. Con i vettori si possono eseguire diverse operazioni, ad esempio, sommarli, sottrarli, proiettarli e [http://it.wikipedia.org/wiki/Spazio_vettoriale molto altro]. In FreeCAD, con i vettori si lavora in questo modo:
== Vectors and Placements ==
[http://en.wikipedia.org/wiki/Euclidean_vector Vectors] are a very fundamental concept in any 3D application. It is a list of 3 numbers (x, y and z), describing a point or position in the 3D space. A lot of things can be done with vectors, such as additions, subtractions, projections and [http://en.wikipedia.org/wiki/Vector_space much more]. In FreeCAD vectors work like this:


{{Code|code=
<syntaxhighlight>
myvec = FreeCAD.Vector(2,0,0)
myvec = FreeCAD.Vector(2, 0, 0)
myvec
myvec.x
myvec.x
myvec.y
myvec.y
othervec = FreeCAD.Vector(0,3,0)
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)
sumvec = myvec.add(othervec)
}}
</syntaxhighlight>


Un'altra caratteristica comune degli oggetti FreeCAD è il loro [[Placement/it|posizionamento]]. Ogni oggetto ha una proprietà {{PropertyData|Placement}}, che contiene {{PropertyData|Base}} (posizione) e {{PropertyData|Rotation}} (asse) dell'oggetto. Sono facili da manipolare, ad esempio per spostare il nostro oggetto:
Another common feature of FreeCAD objects is their [[Placement|placement]]. Each object has a Placement attributes, which contains the position (Base) and orientation (Rotation) of the object. It is easy to manipulate, for example to move our object:


{{Code|code=
<syntaxhighlight>
box.Placement.
box.Placement
box.Placement.Base
box.Placement.Base
box.Placement.Base = sumvec
box.Placement.Base = sumvec
Line 119: Line 127:
otherpla = FreeCAD.Placement()
otherpla = FreeCAD.Placement()
box.Placement = otherpla
box.Placement = otherpla
}}
</syntaxhighlight>


Prima di continuare, si devono vedere un paio di concetti importanti.
Now you must understand a couple of important concepts before we get further.
{{Top}}
<span id="App_and_Gui"></span>
==App e Gui==


FreeCAD è stato progettato in modo da poter essere utilizzato anche senza la sua interfaccia utente, come applicazione a riga di comando. Quasi tutti gli oggetti in FreeCAD sono quindi costituiti da due parti: un {{incode|Object}}, il suo componente "geometrico", e un {{incode|ViewObject}}, il suo componente "visivo". Quando si lavora in modalità riga di comando, la parte geometrica è presente, ma la parte visiva è disabilitata.
== App and Gui ==
FreeCAD is made from the beginning to work as a command-line application, without its user interface. As a result, almost everything is separated between a "geometry" component and a "visual" component. When you work in command-line mode, the geometry part is present, but all the visual part is simply disabled. Almost any object in FreeCAD therefore is made of two parts, an Object and a ViewObject.


Per illustrare il concetto diamo un'occhiata al nostro oggetto cubo. Le proprietà geometriche del cubo, come le sue dimensioni, posizione, ecc. sono memorizzate in {{incode|Object}}. Mentre le sue proprietà visive, come il colore, lo spessore della linea, ecc. sono archiviate in {{incode|ViewObject}}. Ciò corrisponde alle schede '''Dati''' e '''Vista''' nel [[Property_editor/it|pannello Proprietà]]. L'oggetto di visualizzazione di un oggetto è accessibile in questo modo:
To illustrate the concept, see our cube object, the geometric properties of the cube, such as its dimensions, position, etc... are stored in the object, while its visual properties, such as its color, line thickness, etc... are stored in the viewobject. This corresponds to the "Data" and "View" tabs in the property window. The view object of an object is accessed like this:


{{Code|code=
<syntaxhighlight>
vo = box.ViewObject
vo = box.ViewObject
}}
</syntaxhighlight>
Ora puoi anche modificare le proprietà nella scheda '''Visualizza''':
Now you can also change the properties of the "View" tab:


{{Code|code=
<syntaxhighlight>
vo.Transparency = 80
vo.Transparency = 80
vo.hide()
vo.hide()
vo.show()
vo.show()
}}
</syntaxhighlight>


When you start FreeCAD, the python console already loads 2 base modules: FreeCAD and FreeCADGui (which can also be accessed by their shortcuts App and Gui). They contain all kinds of generic functionality to work with documents and their objects. To illustrate our concept, see that both FreeCAD and FreeCADGui contain an ActiveDocument attribute, which is the currently opened document. FreeCAD.ActiveDocument and FreeCADGui.ActiveDocument are not the same object. They are the two components of a FreeCAD document, and they contain different attributes and methods. For example, FreeCADGui.ActiveDocument contains ActiveView, which is the currently opened 3D view
Quando si avvia FreeCAD, la console Python carica da subito due moduli di base: {{incode|FreeCAD}} e {{incode|FreeCADGui}} (a cui è possibile accedere anche tramite le loro scorciatoie {{incode|App}} e {{incode| Gui}}). Queste contengono tutti i tipi di funzionalità generiche per lavorare con i documenti e i loro oggetti. Per illustrare questo concetto, si noti che sia {{incode|FreeCAD}} che {{incode|FreeCADGui}} contengono un attributo {{incode|ActiveDocument}}, che è il documento attualmente aperto. {{incode|FreeCAD.ActiveDocument}} e {{incode|FreeCADGui.ActiveDocument}} non sono tuttavia lo stesso oggetto. Sono i due componenti di un documento FreeCAD e contengono attributi e metodi diversi. Ad esempio, {{incode|FreeCADGui.ActiveDocument}} contiene {{incode|ActiveView}}, che è la [[3D_view/it|vista 3D]] attualmente aperta.
{{Top}}
<span id="Modules"></span>
==Moduli==


Il vero potere di FreeCAD risiede nei suoi moduli, con i rispettivi ambienti di lavoro. L'applicazione di base di FreeCAD è più o meno un contenitore vuoto. Senza i suoi moduli può fare poco più che creare nuovi documenti vuoti. Ogni modulo non solo aggiunge nuovi ambienti di lavoro all'interfaccia, ma anche nuovi comandi Python e nuovi tipi di oggetti. Di conseguenza, nello stesso documento possono coesistere diversi tipi di oggetti, anche totalmente incompatibili. I moduli più importanti di FreeCAD che esamineremo in questo tutorial sono: [[Part_Workbench/it|Part]], [[Mesh_Workbench/it|Mesh]], [[Sketcher_Workbench/it|Sketcher]] e [[Draft_Workbench/it|Draft]].
== Modules ==
Now you must surely wonder, what else than "Part::Box" can I do? The FreeCAD base application is more or less an empty container. Without its modules, it can do little more than creating new, empty documents. The true power of FreeCAD is in its faithful modules. Each of them adds not only new workbenches to the interface, but also new python commands and new object types. As a result, several different or even totally incompatible object types can coexist in the same document. The most important modules in FreeCAD, that we'll look at in this tutorial, are [[Part Module|Part]], [[Mesh Module|Mesh]], [[Sketcher Workbench|Sketcher]] or [[Draft Module|Draft]].


[[Sketcher Workbench|Sketcher]] and [[Draft Module|Draft]] both use the [[Part Module|Part]] module to create and handle their geometry, which are BRep while [[Mesh Module|Mesh]] is totally independent, and handles its own objects. More about that below.
[[Sketcher_Workbench/it|Sketcher]] e [[Draft_Workbench/it|Draft]] utilizzano entrambi il modulo [[Part_Workbench/it|Part]] per creare e gestire la loro geometria. Mentre [[Mesh_Workbench/it|Mesh]] è totalmente indipendente e gestisce i propri oggetti. Maggiori informazioni di seguito.


È possibile sapere quali tipi di oggetti di base sono disponibili per il documento corrente in questo modo:
You can check all the available base object types for the current document like this:


{{Code|code=
<syntaxhighlight>
doc.supportedTypes()
doc.supportedTypes()
}}
</syntaxhighlight>


I diversi moduli di FreeCAD non vengono caricati automaticamente nella console Python. Questo per evitare un avvio molto lento. I moduli vengono caricati solo quando ne hai bisogno. Quindi, ad esempio, per esplorare cosa c'è all'interno del modulo Parte:
The different FreeCAD modules, although they added their object types to FreeCAD, are not automatically loaded in the python console. This is to avoid having a very slow startup. Modules are loaded only when you need them. So, for example, to explore what's inside the Part module:


{{Code|code=
<syntaxhighlight>
import Part
import Part
Part.
Part.
}}
</syntaxhighlight>


Ma parleremo più avanti del modulo Parte.
But we'll talk more about the Part module below.
{{Top}}
<span id="Mesh_module"></span>
==Modulo Mesh==


I [https://it.wikipedia.org/wiki/Mesh_poligonale Mesh] sono un tipo molto semplice di oggetto 3D, utilizzato ad esempio da [https://it.wikipedia.org/wiki/SketchUp Sketchup], [https://it.wikipedia.org/wiki/Blender_(programma) Blender] e [https://it.wikipedia.org/wiki/3ds_Max 3D Studio Max]. Sono composti da 3 elementi: punti (detti anche vertici), linee (detti anche spigoli) e facce. In molte applicazioni, incluso FreeCAD, le facce possono avere solo 3 vertici. Naturalmente nulla vieta di avere una faccia più grande composta da diverse facce triangolari complanari.
By now, you know a bit more about the different modules of FreeCAD: The core modules (FreeCAD, FreeCADGui), and the workbenches modules (Part, Mesh, Sketcher). The other important modules are the 3d scene module (pivy) and the interface module (pyqt), we'll talk about them too below.


I Mesh sono semplici, ma proprio perché sono semplici si può facilmente averne milioni in un unico documento. Tuttavia, in FreeCAD hanno un uso minore e sono per lo più presenti per poter importare oggetti in formati mesh ({{FileName|.stl}}, {{FileName|.obj}}) da altre applicazioni. Il modulo Mesh è stato anche ampiamente utilizzato come modulo di test principale nel primo mese di vita di FreeCAD.
Now it's time to explore a bit deeper the important ones, which are the workbench modules.


Gli oggetti mesh e gli oggetti FreeCAD sono cose diverse. Si può pensare l'oggetto FreeCAD come un contenitore per un oggetto Mesh (e, come vedremo più avanti, anche per gli oggetti Parte). Quindi, per aggiungere un oggetto mesh in FreeCAD, dobbiamo prima creare un oggetto FreeCAD e un oggetto Mesh, poi aggiungere l'oggetto Mesh all'oggetto FreeCAD:
== Mesh ==


{{Code|code=
[http://en.wikipedia.org/wiki/Polygon_mesh Meshes] are a very simple kind of 3D objects, used for example by [http://en.wikipedia.org/wiki/SketchUp Sketchup], [http://en.wikipedia.org/wiki/Blender_%28software%29 Blender] or [http://en.wikipedia.org/wiki/Autodesk_3ds_Max 3D studio Max]. They are composed of 3 elements: points (also called vertices), lines (also called edges) and faces. In many applications, FreeCAD included, faces can have only 3 vertices. But of course nothing prevents you from having a bigger plane face made of several coplanar triangles.

Meshes are simple, this can be a bad thing, but for many applications such as those above, it turns to be an advantage, because they are so simple that you can easily have millions of them in a single document. In FreeCAD, though, they have less use, and are mostly there so you can import objects in mesh formats (.stl, .obj) from other applications. It was also extensively used as the main test module in the first month of life of FreeCAD.

Mesh objects and FreeCAD objects are different things. You can see the FreeCAD object as a container for a Mesh object (like, we'll see below, for Part objects too). So in order to add a mesh object to FreeCAD, we must first create a FreeCAD object and a Mesh object, then add the Mesh object to the FreeCAD object:

<syntaxhighlight>
import Mesh
import Mesh
mymesh = Mesh.createSphere()
mymesh = Mesh.createSphere()
mymesh.
mymesh.Facets
mymesh.Facets
mymesh.Points
mymesh.Points
meshobj = doc.addObject("Mesh::Feature","MyMesh")
meshobj = doc.addObject("Mesh::Feature", "MyMesh")
meshobj.Mesh = mymesh
meshobj.Mesh = mymesh
doc.recompute()
doc.recompute()
}}
</syntaxhighlight>


Questo è un esempio standard, che utilizza il metodo {{incode|createSphere()}} per creare automaticamente una sfera, ma si può benissimo creare propri oggetti mesh da uno schizzo, definendo i loro vertici e facce.
This is a standard example, that uses the createSphere() method to automatically create a sphere, but you can very well create custom meshes from scratch, by defining their vertices and faces.


[[Mesh Scripting|Read more about mesh scripting...]]
Per ulteriori informazioni leggere [[Mesh Scripting/it| Script per Mesh...]]
{{Top}}
<span id="Part_module"></span>
==Modulo Part==


Il modulo [[Part_Workbench/it|Part]] è il modulo più potente dell'intero FreeCAD. Ti permette di creare e manipolare oggetti [https://it.wikipedia.org/wiki/B-Rep BRep]. BREP sta per "Rappresentazione del confine". Un oggetto BREP è definito da superfici che racchiudono e definiscono un volume interno. A differenza delle mesh, gli oggetti BREP possono avere un'ampia varietà di componenti, dalle facce planari alle superfici NURBS molto complesse.
== Part ==
The [[Part Module]] is the most powerful module of the whole FreeCAD. It allows to create and manipulate [http://en.wikipedia.org/wiki/Boundary_representation BRep] objects. This kind of object, unlike meshes, can have a wide variety of components. To resume a bit, Brep means Boundary Representation. which means that they are defined by their surfaces, which enclose and define an inner volume. These surface can be a variety of things, such as plane faces or very complex NURBS surfaces. They also carry the concept of volume.


The Part module is based on the powerful [http://en.wikipedia.org/wiki/Open_CASCADE_Technology OpenCasCade] library, which allows a wide range of complex operations to be easily performed on those objects, such as boolean operations, filleting, lofts, etc...
Il modulo Parte si basa sulla potente libreria [https://it.wikipedia.org/wiki/Open_CASCADE_Technology OpenCasCade], che permette di eseguire facilmente sugli oggetti una vasta gamma di operazioni complesse, come le operazioni booleane, gli arrotondamenti, loft, ecc ..


The Part module works the same way as the Mesh module: You create a FreeCAD object, a Part object, then add the Part object to the FreeCAD object:
Il modulo Parte funziona allo stesso modo del modulo Mesh: Si crea un oggetto FreeCAD, un oggetto Parte, quindi si aggiunge l'oggetto Parte all'oggetto FreeCAD:


{{Code|code=
<syntaxhighlight>
import Part
import Part
myshape = Part.makeSphere(10)
myshape = Part.makeSphere(10)
myshape.
myshape.Volume
myshape.Volume
myshape.Area
myshape.Area


shapeobj = doc.addObject("Part::Feature","MyShape")
shapeobj = doc.addObject("Part::Feature", "MyShape")
shapeobj.Shape = myshape
shapeobj.Shape = myshape
doc.recompute()
doc.recompute()
}}
</syntaxhighlight>


Il modulo Parte (come il modulo Mesh) ha anche un comando veloce che crea automaticamente un oggetto FreeCAD e gli attribuisce una forma, in questo modo è possibile accorciare le 3 ultime righe dell'esempio precedente con:
The Part module (like the Mesh module) also has a shortcut that automatically creates a FreeCAD object and add a shape to it, so you can skip the 3 last lines above:


{{Code|code=
<syntaxhighlight>
Part.show(myshape)
Part.show(myshape)
}}
</syntaxhighlight>


By exploring the contents of myshape, you will notice many interesting available subcomponents such as Faces, Edges, Vertexes, Solids or Shells, and a wide range of geometry operations such as cut (subtraction), common (intersection) or fuse (union). The [[Topological data scripting]] page explains all that in detail.
Esplorando i contenuti di myshape, noterai molti sottocomponenti interessanti come {{incode|Faces}}, {{incode|Edges}}, {{incode|Vertexes}}, {{incode|Solids}} e {{incode |Shells}} e un'ampia gamma di operazioni geometriche come {{incode|cut}} (sottrazione), {{incode|common}} (intersezione) o {{incode|fuse}} (unione). La pagina [[Topological_data_scripting/it|Script di dati topologici]] spiega tutto in dettaglio.


[[Topological_data_scripting/it|Approfondimento sugli script in Parte...]]
[[Topological data scripting|Read more about part scripting...]]
{{Top}}
<span id="Draft_module"></span>
== Modulo Draft ==


FreeCAD offre molti altri moduli, come [[Sketcher_Workbench/it|Sketcher]] e [[Draft_Workbench/it|Draft]], che creano anche oggetti Part. Questi moduli aggiungono ulteriori parametri agli oggetti creati o addirittura implementano un modo completamente nuovo di gestire la geometria della parte in essi contenuta. Il nostro esempio sopra di una scatola è un perfetto esempio di un oggetto parametrico. Tutto ciò che serve per definire la scatola è specificare i parametri altezza, larghezza e lunghezza. Sulla base di questi, l'oggetto calcolerà automaticamente la sua forma della parte. FreeCAD ti consente di [[Scripted_objects/it|creare tali oggetti in Python]].
== Draft ==
FreeCAD features many more modules, such as [[Sketcher Workbench|Sketcher]] or [[Draft Module|Draft]], which also create Part objects, but add parameters to it, or even carry a whole new way to handle the Part geometry in them. Our box example above, is a perfect example of parametric object. All you need, to define the box, is to specify a couple of parameters, such as height, width and length. Based on those, the object will automatically calculate its Part shape. FreeCAD allows you to [[Scripted objects|create such objects in python]].


Il Modulo [[Draft_Workbench/it|Draft]] aggiunge tipi di oggetti 2D parametrici (che sono tutti oggetti di Parte) quali linee e cerchi, e fornisce anche alcune funzioni generiche, che agiscono non solo sugli oggetti creati con Draft, ma su qualsiasi oggetto Parte. Per esplorare ciò che è disponibile, fare semplicemente:
The [[Draft Module]] adds a couple of 2D parametric objects types (which are all Part objects) such as lines and circles, and also provides some generic functions that work not only on Draft-made objects, but on any Part object. To explore what is available, simply do:


{{Code|code=
<syntaxhighlight>
import Draft
import Draft
rec = Draft.makeRectangle(5, 2)
Draft.
mvec = FreeCAD.Vector(4, 4, 0)
rec = Draft.makeRectangle(5,2)
Draft.move(rec, mvec)
mvec = FreeCAD.Vector(4,4,0)
Draft.move(rec,mvec)
Draft.move(box, mvec)
}}
Draft.move(box,mvec)
{{Top}}
</syntaxhighlight>
<span id="Interface"></span>
==Interfaccia==


L'interfaccia utente di FreeCAD è realizzata con [https://it.wikipedia.org/wiki/Qt_(toolkit) Qt], un potente sistema di interfaccia grafica, responsabile del disegno e della gestione di tutti i controlli, menu, barre degli strumenti e pulsanti intorno alla [[3D_view/it|vista 3D]].
== Interface ==
Qt fornisce un modulo, [[PySide]], che consente a Python di accedere e modificare le interfacce Qt come quelle di FreeCAD.
The FreeCAD user interface is made with [http://en.wikipedia.org/wiki/Qt_%28framework%29 Qt], a powerful graphical interface system, responsible for drawing and handling all the controls, menus, toolbars, buttons around the 3D view. Qt provides a module, called PyQt, which allows python to access and modify Qt interfaces, such as FreeCAD. Let's try to fiddle with the Qt interface and produce a simple dialog:
Proviamo a giocherellare con l'interfaccia Qt e produrre una semplice finestra di dialogo:


{{Code|code=
<syntaxhighlight>
from PyQt4 import QtGui
from PySide import QtGui
QtGui.QMessageBox.information(None,"Apollo program","Houston, we have a problem")
QtGui.QMessageBox.information(None, "Apollo program", "Houston, we have a problem")
}}
</syntaxhighlight>


Si noti che la finestra di dialogo che appare ha l'icona di FreeCAD nella sua barra degli strumenti, il che significa che Qt sa che l'ordine è stato emesso dall'interno dell'applicazione FreeCAD. È possibile manipolare qualsiasi parte dell'interfaccia di FreeCAD.
See that the dialog that appears has the FreeCAD icon in its toolbar, meaning that Qt knows that the order has been issued from inside the FreeCAD application. We can therefore easily directly manipulate any part of the FreeCAD interface.


Qt è un sistema di interfaccia molto potente, che permette di fare cose molto complesse, inoltre dispone anche di vari strumenti molto facili da usare, come il Qt Designer con il quale è possibile progettare graficamente le finestre di dialogo e poi aggiungerle all'interfaccia di FreeCAD con poche righe di codice Python.
Qt is a very powerful interface system, that allows you to do very complex things, but also has a couple of very easy-to use tools such as the Qt Designer with which you can design dialogs graphically and then add them to the FreeCAD interface with a couple of lines of python.


[[PySide/it|Quì si trovano altre informazioni su PySide...]]
[[PyQt|Read more about pyqt here...]]
{{Top}}
<span id="Macros"></span>
==Macro==


Ora che si ha una buona conoscenza delle nozioni di base, dove conserviamo i nostri script Python, e come si fa ad eseguirli facilmente in FreeCAD? Per questo vi è un sistema semplice, chiamato [[Macros/it|Macro]].
== Macros ==
Una macro è semplicemente uno script Python, che può essere aggiunto a una barra degli strumenti e poi essere lanciato con un semplice clic del mouse.
Now that you have a good understanding of the basics, where are we going to keep our python scripts, and how are we going to launch them easily from FreeCAD? There is an easy mechanism for that, called [[Macros]]. A macro is simply a python script, that can then be added to a toolbar and be launched from a simple mouse click. FreeCAD provides you with a simple text editor (Macro -> Macros -> Create) where you can write or paste scripts. Once it is done, the Tools -> Customize -> Macros allow you to define a button for it, that can be added to toolbars.
FreeCAD fornisce un semplice editor di testo (Macro → Macro → Crea) in cui è possibile scrivere o incollare degli script. Terminata la scrittura, il menu Strumenti → Personalizza → Macro permette di definire un pulsante per questo script che può anche essere aggiunto alle barre degli strumenti.


<span id="External_scripts"></span>
Now you are ready for more in-depth FreeCAD scripting. Head on to the [[Power users hub]]!
==Script esterni==


Un metodo alternativo per creare, salvare ed eseguire i propri script Python consiste nel crearli al di fuori di FreeCAD, utilizzando un editor di propria scelta (ad esempio, Vim). Per eseguire il proprio script Python all'interno di FreeCAD, assicurarsi di salvarlo con l'estensione {{FileName|.py}}.
{{docnav|Introduction to Python|FreeCAD Scripting Basics}}


Quindi usare {{MenuCommand|File → Apri}} per aprire il proprio script. Verrà caricato in una nuova scheda nell'[[Main_view_area/it|Area di visualizzazione principale]]. Si può eseguire lo script facendo clic sul pulsante {{Button|[[Image:Std_DlgMacroExecuteDirect.svg|16px]] [[Std_DlgMacroExecuteDirect/it|Esegui macro]]}}. Eventuali errori o output dello script verranno mostrati nella finestra [[Report_view/it|Report]].
[[Category:Tutorials]]


Quando si apportano e si salvano modifiche allo script già caricato, viene visualizzata una finestra di dialogo che chiede se si desidera ricaricare lo script modificato in FreeCAD.
{{clear}}

<languages/>
Si può continuare alla pagina [[FreeCAD_Scripting_Basics/it|Script di base per FreeCAD]], oppure si può accedere a quella pagina e ad altre pagine pertinenti nell'[[Power_users_hub/it|Hub degli utenti esperti]].
{{Top}}

{{Docnav
|[[Introduction_to_Python/it|Introduzione a Python]]
|[[FreeCAD_Scripting_Basics/it|Script di base per FreeCAD]]
}}

{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]

Latest revision as of 06:49, 10 August 2023

Introduzione

Python è un linguaggio di programmazione relativamente facile da imparare e comprendere. È open-source e multipiattaforma e può essere utilizzato per molti scopi: da semplici script di shell a programmi molto complessi. Ma il suo utilizzo più diffuso è come linguaggio di scripting incorporato in altre applicazioni. È in questa modalità che viene utilizzato all'interno di FreeCAD. Dalla console Python, o con script personalizzati, puoi controllare FreeCAD e fargli eseguire operazioni molto complesse.

Ad esempio, tramite uno script Python, è possibile:

  • Creare nuovi oggetti
  • Modificare gli oggetti esistenti
  • Modificare la rappresentazione 3D degli oggetti
  • Modificare l'interfaccia di FreeCAD

Esistono diversi modi per utilizzare Python in FreeCAD:

  • Dall'Interprete Python di FreeCAD, da cui si possono inviare comandi in un'interfaccia in stile "riga di comando".
  • Con le macro, che sono un modo conveniente per aggiungere rapidamente uno strumento mancante all'interfaccia di FreeCAD.
  • Da script esterni, che possono essere utilizzati per creare soluzioni abbastanza complesse, anche interi Ambienti di Lavoro.

In questo tutorial, lavoreremo su un paio di esempi di base per consentire a tutti di iniziare, ma in questo wiki è disponibile anche molta altra documentazione sugli script Python. Per chi ancora non conoscesse Python, ma è interessato a capire come funziona, c'è anche una Introduzione a Python per una formazione di base.

Prima di procedere con lo scripting Python, andare su Modifica → Preferenze → Generale → Report e selezionare le due caselle:

  • Reindirizza l'output interno di Python alla finestra di report.
  • Reindirizza gli errori interni di Python alla finestra di report.

Quindi andare su Visualizza → Panelli e selezionare:

  • Report.

Scrivere codice Python

Ci sono due modi per scrivere codice Python in FreeCAD. Nella console Python (selezionare Visualizza → Pannelli → Console Python dal menu) o nell'editor delle Macro (selezionare Macro → Macro... dal menu). Nella console si scrivono i comandi Python uno per uno, e li si eseguono premendo Enter, mentre le macro possono contenere codice più complesso formato da più righe, eseguito solo quando la macro viene eseguita.

la console Python di FreeCAD

In questo tutorial puoi usare entrambi i metodi. Puoi copiare e incollare ogni riga nella console Python e quindi premere Enter, oppure copiare e incollare l'intero codice in una nuova finestra Macro.

Inizio

Esplorare FreeCAD

Iniziamo creando un nuovo documento vuoto:

doc = FreeCAD.newDocument()

Se lo si digita nella console Python di FreeCAD, si nota che non appena si digita FreeCAD. si apre una finestra, che consente di completare automaticamente il resto della riga. Ancora meglio, ogni voce nell'elenco di completamento automatico ha un suggerimento che spiega cosa fa. Ciò semplifica l'esplorazione delle funzionalità disponibili. Prima di scegliere newDocument, dare un'occhiata alle altre opzioni.

Il meccanismo di completamento automatico della console Python di FreeCAD

Ora verrà creato il nostro nuovo documento. Questo equivale alla pressione del pulsante Nuovo sulla barra degli strumenti. In effetti, la maggior parte dei pulsanti in FreeCAD non fa altro che eseguire una o più righe di codice Python. Ancora meglio, si può impostare un'opzione in Modifica → Preferenze → Python → Macro su Mostra lo scritp dei comandi nella console python. Questo visualizzerà nella console tutto il codice Python che viene eseguito quando si premono i vari pulsanti. Ciò è molto utile per imparare a riprodurre azioni in Python.

Ora torniamo al nostro documento e vediamo cosa si può fare:

doc.

Esploriamo le opzioni disponibili.

Di solito i nomi che iniziano con la lettera maiuscola sono attributi e contengono un valore, mentre i nomi che iniziano con la lettera minuscola sono funzioni (chiamate anche metodi) e "fanno qualcosa".

I nomi che iniziano con un carattere di sottolineatura di solito sono lì per il funzionamento interno del modulo e non dobbiamo preoccuparci di loro.

Usiamo ora uno dei metodi per aggiungere un nuovo oggetto al nostro documento:

box = doc.addObject("Part::Box", "myBox")

Non succede nulla. Perché? Perché FreeCAD è pensato per realizzare lavori molto complessi. In futuro, lavorerà con centinaia di oggetti complessi, tutti dipendenti l'uno dall'altro. Apportare una piccola modifica da qualche parte potrebbe avere un grande impatto; potrebbe essere necessario ricalcolare l'intero documento, operazione che potrebbe richiedere molto tempo. Per questo motivo, quasi nessun comando aggiorna la scena automaticamente. È necessario farlo manualmente:

doc.recompute()

Ora il box è apparso. Molti dei pulsanti che aggiungono oggetti in FreeCAD in realtà fanno due cose: aggiungere l'oggetto, e ricalcolare. Se l'opzione mostra lo script dei comandi nella console Python di cui sopra è attivata, provate ad aggiungere una sfera con il pulsante della GUI e vedrete le due righe di codice Python che vengono eseguite una dopo l'altra.

Ora esploriamo le caratteristiche del nostro box:

box.

Si possono vedere subito un paio di cose molto interessanti quali:

box.Height

Questo comando stampa l'altezza corrente del nostro box. Ora proviamo a cambiarla:

box.Height = 5

Se si seleziona la casella con il mouse, si nota che nel pannello delle proprietà, nella scheda Data, appare la nostra proprietà DatiHeight. Tutte le proprietà di un oggetto FreeCAD che appaiono lì (e anche nella scheda View, di cui parleremo più avanti), sono direttamente accessibili anche in Python, con i loro nomi, come abbiamo fatto con la proprietà DatiHeight . Si provi a cambiare le altre dimensioni di box.

Inizio

Vettori e posizionamenti

I vettori sono un concetto fondamentale in qualsiasi applicazione 3D. Si tratta di un elenco di 3 numeri (x, y, z), che descrivono un punto o una posizione nello spazio 3D. Con i vettori si possono eseguire diverse operazioni, ad esempio, sommarli, sottrarli, proiettarli e molto altro. In FreeCAD, con i vettori si lavora in questo modo:

myvec = FreeCAD.Vector(2, 0, 0)
myvec.x
myvec.y
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)

Un'altra caratteristica comune degli oggetti FreeCAD è il loro posizionamento. Ogni oggetto ha una proprietà DatiPlacement, che contiene DatiBase (posizione) e DatiRotation (asse) dell'oggetto. Sono facili da manipolare, ad esempio per spostare il nostro oggetto:

box.Placement
box.Placement.Base
box.Placement.Base = sumvec
 
otherpla = FreeCAD.Placement()
box.Placement = otherpla

Prima di continuare, si devono vedere un paio di concetti importanti.

Inizio

App e Gui

FreeCAD è stato progettato in modo da poter essere utilizzato anche senza la sua interfaccia utente, come applicazione a riga di comando. Quasi tutti gli oggetti in FreeCAD sono quindi costituiti da due parti: un Object, il suo componente "geometrico", e un ViewObject, il suo componente "visivo". Quando si lavora in modalità riga di comando, la parte geometrica è presente, ma la parte visiva è disabilitata.

Per illustrare il concetto diamo un'occhiata al nostro oggetto cubo. Le proprietà geometriche del cubo, come le sue dimensioni, posizione, ecc. sono memorizzate in Object. Mentre le sue proprietà visive, come il colore, lo spessore della linea, ecc. sono archiviate in ViewObject. Ciò corrisponde alle schede Dati e Vista nel pannello Proprietà. L'oggetto di visualizzazione di un oggetto è accessibile in questo modo:

vo = box.ViewObject

Ora puoi anche modificare le proprietà nella scheda Visualizza:

vo.Transparency = 80
vo.hide()
vo.show()

Quando si avvia FreeCAD, la console Python carica da subito due moduli di base: FreeCAD e FreeCADGui (a cui è possibile accedere anche tramite le loro scorciatoie App e Gui). Queste contengono tutti i tipi di funzionalità generiche per lavorare con i documenti e i loro oggetti. Per illustrare questo concetto, si noti che sia FreeCAD che FreeCADGui contengono un attributo ActiveDocument, che è il documento attualmente aperto. FreeCAD.ActiveDocument e FreeCADGui.ActiveDocument non sono tuttavia lo stesso oggetto. Sono i due componenti di un documento FreeCAD e contengono attributi e metodi diversi. Ad esempio, FreeCADGui.ActiveDocument contiene ActiveView, che è la vista 3D attualmente aperta.

Inizio

Moduli

Il vero potere di FreeCAD risiede nei suoi moduli, con i rispettivi ambienti di lavoro. L'applicazione di base di FreeCAD è più o meno un contenitore vuoto. Senza i suoi moduli può fare poco più che creare nuovi documenti vuoti. Ogni modulo non solo aggiunge nuovi ambienti di lavoro all'interfaccia, ma anche nuovi comandi Python e nuovi tipi di oggetti. Di conseguenza, nello stesso documento possono coesistere diversi tipi di oggetti, anche totalmente incompatibili. I moduli più importanti di FreeCAD che esamineremo in questo tutorial sono: Part, Mesh, Sketcher e Draft.

Sketcher e Draft utilizzano entrambi il modulo Part per creare e gestire la loro geometria. Mentre Mesh è totalmente indipendente e gestisce i propri oggetti. Maggiori informazioni di seguito.

È possibile sapere quali tipi di oggetti di base sono disponibili per il documento corrente in questo modo:

doc.supportedTypes()

I diversi moduli di FreeCAD non vengono caricati automaticamente nella console Python. Questo per evitare un avvio molto lento. I moduli vengono caricati solo quando ne hai bisogno. Quindi, ad esempio, per esplorare cosa c'è all'interno del modulo Parte:

import Part
Part.

Ma parleremo più avanti del modulo Parte.

Inizio

Modulo Mesh

I Mesh sono un tipo molto semplice di oggetto 3D, utilizzato ad esempio da Sketchup, Blender e 3D Studio Max. Sono composti da 3 elementi: punti (detti anche vertici), linee (detti anche spigoli) e facce. In molte applicazioni, incluso FreeCAD, le facce possono avere solo 3 vertici. Naturalmente nulla vieta di avere una faccia più grande composta da diverse facce triangolari complanari.

I Mesh sono semplici, ma proprio perché sono semplici si può facilmente averne milioni in un unico documento. Tuttavia, in FreeCAD hanno un uso minore e sono per lo più presenti per poter importare oggetti in formati mesh (.stl, .obj) da altre applicazioni. Il modulo Mesh è stato anche ampiamente utilizzato come modulo di test principale nel primo mese di vita di FreeCAD.

Gli oggetti mesh e gli oggetti FreeCAD sono cose diverse. Si può pensare l'oggetto FreeCAD come un contenitore per un oggetto Mesh (e, come vedremo più avanti, anche per gli oggetti Parte). Quindi, per aggiungere un oggetto mesh in FreeCAD, dobbiamo prima creare un oggetto FreeCAD e un oggetto Mesh, poi aggiungere l'oggetto Mesh all'oggetto FreeCAD:

import Mesh
mymesh = Mesh.createSphere()
mymesh.Facets
mymesh.Points
 
meshobj = doc.addObject("Mesh::Feature", "MyMesh")
meshobj.Mesh = mymesh
doc.recompute()

Questo è un esempio standard, che utilizza il metodo createSphere() per creare automaticamente una sfera, ma si può benissimo creare propri oggetti mesh da uno schizzo, definendo i loro vertici e facce.

Per ulteriori informazioni leggere Script per Mesh...

Inizio

Modulo Part

Il modulo Part è il modulo più potente dell'intero FreeCAD. Ti permette di creare e manipolare oggetti BRep. BREP sta per "Rappresentazione del confine". Un oggetto BREP è definito da superfici che racchiudono e definiscono un volume interno. A differenza delle mesh, gli oggetti BREP possono avere un'ampia varietà di componenti, dalle facce planari alle superfici NURBS molto complesse.

Il modulo Parte si basa sulla potente libreria OpenCasCade, che permette di eseguire facilmente sugli oggetti una vasta gamma di operazioni complesse, come le operazioni booleane, gli arrotondamenti, loft, ecc ..

Il modulo Parte funziona allo stesso modo del modulo Mesh: Si crea un oggetto FreeCAD, un oggetto Parte, quindi si aggiunge l'oggetto Parte all'oggetto FreeCAD:

import Part
myshape = Part.makeSphere(10)
myshape.Volume
myshape.Area

shapeobj = doc.addObject("Part::Feature", "MyShape")
shapeobj.Shape = myshape
doc.recompute()

Il modulo Parte (come il modulo Mesh) ha anche un comando veloce che crea automaticamente un oggetto FreeCAD e gli attribuisce una forma, in questo modo è possibile accorciare le 3 ultime righe dell'esempio precedente con:

Part.show(myshape)

Esplorando i contenuti di myshape, noterai molti sottocomponenti interessanti come Faces, Edges, Vertexes, Solids e Shells e un'ampia gamma di operazioni geometriche come cut (sottrazione), common (intersezione) o fuse (unione). La pagina Script di dati topologici spiega tutto in dettaglio.

Approfondimento sugli script in Parte...

Inizio

Modulo Draft

FreeCAD offre molti altri moduli, come Sketcher e Draft, che creano anche oggetti Part. Questi moduli aggiungono ulteriori parametri agli oggetti creati o addirittura implementano un modo completamente nuovo di gestire la geometria della parte in essi contenuta. Il nostro esempio sopra di una scatola è un perfetto esempio di un oggetto parametrico. Tutto ciò che serve per definire la scatola è specificare i parametri altezza, larghezza e lunghezza. Sulla base di questi, l'oggetto calcolerà automaticamente la sua forma della parte. FreeCAD ti consente di creare tali oggetti in Python.

Il Modulo Draft aggiunge tipi di oggetti 2D parametrici (che sono tutti oggetti di Parte) quali linee e cerchi, e fornisce anche alcune funzioni generiche, che agiscono non solo sugli oggetti creati con Draft, ma su qualsiasi oggetto Parte. Per esplorare ciò che è disponibile, fare semplicemente:

import Draft
rec = Draft.makeRectangle(5, 2)
mvec = FreeCAD.Vector(4, 4, 0)
Draft.move(rec, mvec)
Draft.move(box, mvec)

Inizio

Interfaccia

L'interfaccia utente di FreeCAD è realizzata con Qt, un potente sistema di interfaccia grafica, responsabile del disegno e della gestione di tutti i controlli, menu, barre degli strumenti e pulsanti intorno alla vista 3D. Qt fornisce un modulo, PySide, che consente a Python di accedere e modificare le interfacce Qt come quelle di FreeCAD. Proviamo a giocherellare con l'interfaccia Qt e produrre una semplice finestra di dialogo:

from PySide import QtGui
QtGui.QMessageBox.information(None, "Apollo program", "Houston, we have a problem")

Si noti che la finestra di dialogo che appare ha l'icona di FreeCAD nella sua barra degli strumenti, il che significa che Qt sa che l'ordine è stato emesso dall'interno dell'applicazione FreeCAD. È possibile manipolare qualsiasi parte dell'interfaccia di FreeCAD.

Qt è un sistema di interfaccia molto potente, che permette di fare cose molto complesse, inoltre dispone anche di vari strumenti molto facili da usare, come il Qt Designer con il quale è possibile progettare graficamente le finestre di dialogo e poi aggiungerle all'interfaccia di FreeCAD con poche righe di codice Python.

Quì si trovano altre informazioni su PySide...

Inizio

Macro

Ora che si ha una buona conoscenza delle nozioni di base, dove conserviamo i nostri script Python, e come si fa ad eseguirli facilmente in FreeCAD? Per questo vi è un sistema semplice, chiamato Macro. Una macro è semplicemente uno script Python, che può essere aggiunto a una barra degli strumenti e poi essere lanciato con un semplice clic del mouse. FreeCAD fornisce un semplice editor di testo (Macro → Macro → Crea) in cui è possibile scrivere o incollare degli script. Terminata la scrittura, il menu Strumenti → Personalizza → Macro permette di definire un pulsante per questo script che può anche essere aggiunto alle barre degli strumenti.

Script esterni

Un metodo alternativo per creare, salvare ed eseguire i propri script Python consiste nel crearli al di fuori di FreeCAD, utilizzando un editor di propria scelta (ad esempio, Vim). Per eseguire il proprio script Python all'interno di FreeCAD, assicurarsi di salvarlo con l'estensione .py.

Quindi usare File → Apri per aprire il proprio script. Verrà caricato in una nuova scheda nell'Area di visualizzazione principale. Si può eseguire lo script facendo clic sul pulsante Esegui macro. Eventuali errori o output dello script verranno mostrati nella finestra Report.

Quando si apportano e si salvano modifiche allo script già caricato, viene visualizzata una finestra di dialogo che chiede se si desidera ricaricare lo script modificato in FreeCAD.

Si può continuare alla pagina Script di base per FreeCAD, oppure si può accedere a quella pagina e ad altre pagine pertinenti nell'Hub degli utenti esperti.

Inizio