Code snippets/it

Questa pagina contiene deli esempi di codice Python utilizzabili in FreeCAD, raccolti dalle esperienze degli utenti e dalle discussioni nel forum. Dopo averli letti, è possibile usarli per iniziare a creare degli script personali ...

Un tipico file InitGui.py
Ogni modulo deve contenere, oltre al file del modulo principale, un file InitGui.py che ha il compito di inserire il modulo nella finestra grafica principale (GUI).

Questo è un esempio semplice di un file InitGui.py:

Un tipico file del modulo
Il seguente è un esempio di un file del modulo principale. Esso contiene tutto ciò che il modulo deve seguire. È il file Scripts.py richiamato dall'esempio precedente. In esso è possibile inserire tutti i comandi personalizzati.

Importare un nuovo tipo di file
In FreeCAD, è facile creare un importatore per un nuovo tipo di file. FreeCAD non considera che si importano dati in un documento aperto, ma piuttosto che si può semplicemente aprire direttamente il nuovo tipo di file. Quindi, quello che si deve fare è aggiungere la nuova estensione di file alla lista delle estensioni conosciute di FreeCAD, scrivere il codice che legge il file e creare gli oggetti di FreeCAD che si desidera:

Per aggiungere la nuova estensione di file all'elenco si deve aggiungere questa riga al file InitGui.py : Poi nel file Import_Ext.py: L'esportazione di un proprio documento in un nuovo tipo di file funziona allo stesso modo, ma si utilizza:

FreeCAD.addExportType("Your new File Type (*.ext)","Export_Ext")

Aggiungere una linea
Una linea ha semplicemente 2 punti.

Aggiungere un poligono
Un poligono è semplicemente un insieme di segmenti di linea collegati tra di loro (una polilinea in AutoCAD). Non è necessario che sia chiuso.

Aggiungere e rimuovere un oggetto in un gruppo
Nota: È anche possibile annidare dei gruppi in altri gruppi e creare dei sottogruppi...

Accedere alla rappresentazione di un oggetto e modificarla
A ogni oggetto di un documento di FreeCAD è associato un oggetto di rappresentazione della sua vista in cui sono memorizzati tutti i parametri che definiscono il modo in cui l'oggetto deve apparire, come il colore, la larghezza di linea, ecc ..

Controllare gli eventi del mouse nel visualizzatore 3D tramite Python
La struttura di Inventor permette di aggiungere uno o più nodi di richiamo (callback) al grafo di scena (Scenegraph) della vista. In FreeCAD è installato di default un nodo callback per la vista che permette di aggiungere funzioni C++ globali o statiche. In appropriate associazioni Python vengono forniti alcuni metodi per utilizzare questa tecnica all'interno del codice Python. Ora, cliccate in qualche parte nella zona nella vista 3D e osservate i messaggi nella finestra di output. Per terminare l'osservazione basta chiamare: Sono supportati i seguenti tipi di eventi:


 * SoEvent -- Tutti i tipi di eventi
 * SoButtonEvent -- Tutti gli eventi del mouse e della tastiera
 * SoLocation2Event -- Eventi di movimento 2D (normalmente i movimenti del mouse)
 * SoMotion3Event -- Eventi di movimento 3D (normalmente di spaceball)
 * SoKeyboardEvent -- Eventi dei tasti alto e basso
 * SoMouseButtonEvent -- Eventi dei pulsanti del mouse verso il basso e verso l'alto
 * SoSpaceballButtonEvent -- Eventi di SpaceBall in basso e in alto

La funzione di Python che può essere registrata con addEventCallback si aspetta una difinizione. Secondo l'evento controllato la definizione può contenere chiavi differenti.

Per tutti gli eventi esistono le seguenti chiavi:


 * Type -- Il nome del tipo di evento, ad esempio SoMouseEvent, SoLocation2Event, ...
 * Time -- L'ora corrente come stringa
 * Position -- Una tupla di due interi, dipendenti dalla posizione del mouse
 * ShiftDown -- un valore booleano, vero (true) se Shift è stato premuto altrimenti false
 * CtrlDown -- un valore booleano, true se è stato premuto Ctrl altrimenti false
 * AltDown -- un valore booleano, true se è stato premuto Alt altrimenti false

Per tutti gli eventi dei pulsanti, ad esempio eventi di tastiera, mouse o spaceball:

Per gli eventi da tastiera:
 * State -- Una stringa 'UP' se il pulsante è verso l'alto, 'DOWN' se è verso il basso o 'UNKNOWN' per tutti gli altri casi

Per gli eventi del pulsante del mouse
 * Key -- Un carattere del tasto premuto

Per gli eventi di Spaceball:
 * Button -- Il pulsante premuto, potrebbe essere BUTTON1, ..., BUTTON5 o ANY

E infine eventi di movimento:
 * Button -- Il pulsante premuto, potrebbe essere BUTTON1, ..., BUTTON7 o ANY


 * Translation -- Una tupla di tre numeri in virgola mobile
 * Rotation -- Un quaternione per la rotazione, cioè una tupla di quattro numeri in virgola mobile

Manipolare il grafo della scena in Python
È anche possibile ottenere il Scenegraph (grafo della scena) in Python e modificarlo, con il modulo 'Pivy '- una associazione di Python per Coin. L'API in Python di Pivy viene creato utilizzando lo strumento SWIG. In FreeCAD si usano alcuni nodi auto-scritti che non è possibile creare direttamente in Python. Tuttavia, è possibile creare un nodo dal suo nome interno. Si può creare una istanza di tipo 'SoFCSelection' con:

Aggiungere e rimuovere oggetti nel grafo della scena
Questo è un modo per aggiungere dei nuovi nodi al Scenegraph. Accertarsi di aggiungere sempre un SoSeparator per contenere la geometria, le coordinate e le informazioni sui materiale di uno stesso oggetto. L'esempio seguente aggiunge una linea rossa da (0,0,0) a (10,0,0): Per rimuoverla, è sufficiente scrivere:

Aggiungere dei widget personalizzati all'interfaccia
È possibile creare widget personalizzati con Qt designer, trasformarli in uno script Python e poi caricarli nell'interfaccia di FreeCAD con PyQt4.

The python code produced by the Ui python compiler (the tool that converts qt-designer .ui files into python code) generally looks like this (it is simple, you can also code it directly in python): Then, all you need to do is to create a reference to the FreeCAD Qt window, insert a custom widget into it, and "transform" this widget into yours with the Ui code we just made:

Adding a Tab to the Combo View
The following code allows you to add a tab to the FreeCAD ComboView, besides the "Project" and "Tasks" tabs. It also uses the uic module to load an ui file directly in that tab.