Code snippets/it

Introduzione
Questa pagina contiene degli esempi di codice Python utilizzabili in FreeCAD, raccolti dalle esperienze degli utenti e dalle discussioni nei 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:

Torna all'inizio

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.

Torna all'inizio

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

Torna all'inizio

Aggiungere una linea
Una linea ha semplicemente 2 punti.

Torna all'inizio

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.

Torna all'inizio

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

Torna all'inizio

Aggiungere un Mesh
Torna all'inizio

Aggiungere un arco o un cerchio
Torna all'inizio

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... Vedere anche lo snippet sottostante Elencare i componenti di un oggetto.

Torna all'inizio

Replace the form of mouse with one image
top

Replace the form of mouse with one image (cross) include
The image is created by Gimp exported in a .XPM file. Copy and use the code between the bracket "{" code to copy  "}"

top

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.

The Inventor framework allows to add one or more callback nodes to the scenegraph of the viewer. By default in FreeCAD one callback node is installed per viewer which allows to add global or static C++ functions. In the appropriate Python binding some methods are provided to make use of this technique from within Python code.

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

top

Visualizzare i tasti premuti e gli eventi dei comandi
Questa macro visualizza nel report i tasti premuti e tutti gli eventi dei comandi

This macro displays in the report view the keys pressed and all events command

top

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.

It is also possible to get and change the scenegraph in Python, with the 'pivy' module -- a Python binding for 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:

top

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

Adding new nodes to the scenegraph can be done this way. Take care of always adding a SoSeparator to contain the geometry, coordinates and material info of a same object. The following example adds a red line from (0,0,0) to (10,0,0):

Per rimuoverla, è sufficiente scrivere:

top

Salvare il grafo della scaena con una rotazione in una serie di 36 file negli assi X Y Z.
View the code snippet by expanding this section

top

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

You can create custom widgets with Qt designer, transform them into a python script, and then load them into the FreeCAD interface with PySide.

Il codice Python prodotto dal compilatore Ui di Python (lo strumento che converte i file .ui di Qt-designer nel codice Python) appare in genere come questo (è semplice, si può anche codificare direttamente in Python):

Dopo, basta creare un riferimento alla finestra Qt di FreeCAD, inserire un widget personalizzato in essa, e "trasformare" questo widget nel proprio con il codice Ui che abbiamo appena creato:

top

Aggiungere una scheda alla Combo View
Il seguente codice consente di aggiungere una nuova scheda nel pannello ComboView (vista combinata) di FreeCAD, oltre le schede standard "Progetto" e "Attività". Questo codice utilizza anche il modulo UIC per caricare un file ui direttamente nella nuova scheda.

The following code allows you to add a tab to the Combo view, separate from the preexisting "Model" and "Tasks" tabs. It also uses the module to load an UI file directly in that tab.

top

Abilitare o disabilitare una finestra
This script give the ability to manipulate the UI from the Python console to show/hide different components in the FreeCAD interface such as:
 * Report view
 * Tree view
 * Property view
 * Selection view
 * Combo View
 * Python console
 * draftToolbar

top

Aprire una specifica pagina Web
top

Ottenere il contenuto HTML di una pagina web aperta
top

Reperire e utilizzare le coordinate di 3 punti o oggetti selezionati
top

Lista di oggetti
top

Ottenere la dimensione di un oggetto, dato il suo nome
top

Funzione residente per una azione con un clic del mouse
Qui con SelObserver sopra uno obietto selezionato

Altro esempio con ViewObserver sopra uno obbietto selezionato

top

Trovare-selezionare tutti gli elementi sotto il cursore
top

Elencare i componenti di un oggetto
Questa funzione elenca i componenti ed estrae le coordinate XYZ di un oggetto, i bordi (edge) e le loro lunghezze, le sue facce e la loro superficie.

This function list the components of an object and extracts:
 * this object its XYZ coordinates,
 * its edges and their lengths center of mass and coordinates
 * its faces and their center of mass
 * its faces and their surfaces and coordinates

top

List the PropertiesList
top

Aggiungere una Proprietà "Comment"
top

Ricerca e estrazione di dati
Esempi di ricerca e decodifica di informazioni su un oggetto.

Ogni sezione separata da "############" è indipendente e può essere copiata direttamente nella console Python, o in una macro o usata come macro a sè stante. La descrizione della macro si trova nel commento.

Le informazioni ricercate in questo modo sono visualizzate nella finestra dei rapporti attivabile con Visualizza -> Viste -> Report

top

Ricerca manuale di un elemento dall'etichetta
Note: Di solito gli angoli sono espressi in radianti da convertire con:


 * 1) da gradi a radianti :
 * 2) *angolo in radianti = pi * (angolo in gradi) / 180
 * 3) *angolo in radianti = math.radians(angolo in gradi)
 * 4) da radianti a gradi :
 * 5) *angolo in gradi = 180 * (angolo in radianti) / pi
 * 6) *angolo in gradi = math.degrees(angolo in radianti)

top

Coordinate Cartesiane
Questo codice visualizza le coordinate cartesiane dell'elemento selezionato.

Modificare il valore di "numberOfPoints" se si desidera un diverso numero di punti (modificare la precisione)

Altro metodo per visualizzare "Int" e "Float" (interi e valori in virgola mobile)

top

Selezionare tutti gli oggetti nel documento
top

Selezionare la faccia di un oggetto
top

Get the normal vector of a face of an object by Name object and number Face (r.Q)
top

Get the normal vector of a face of an object by Name object and number of Face
top

Get the normal vector of an object selected and number of Face
top

Trovare il vettore normale alla superficie
Questo esempio mostra come trovare vettore normale alla superficie trovando prima i parametri u, v di un punto sulla superficie e utilizzando poi i parametri u, v per trovare il vettore normale

top

Ottieni il vettore normale di una superficie da un file STL
top

Creare un oggetto della posizione della fotocamera
stesso codice semplificato

top

Leggere e scrivere una Expression
hai finito quindi fai questo per uscire:

top

Create a Sketch on a Surface in PartDesign
This snippet can be useful, if you want to create a sketch on a surface in PartDesign from inside a macro. Note, that body might be None, if no active body is selected and that the Selection might be empty.

top

How to Simulate a Mouse Click at a given Coordinate
The position is relative to the GL widget. See forum thread.

top

Related

 * Scripted objects
 * Macros

top