Scripts/it

Introduzione allo Scripting
Per Scripting si intende l'uso dell'interprete Python interno di FreeCAD per generare oggetti. FreeCAD può essere usato come "ottimo" sostituto di OpenSCAD, perché possiede un vero e proprio interprete Python, con il pieno supporto per tutti i costrutti di un linguaggio di programmazione, quasi tutto quello che si può realizzare con l'interfaccia grafica è possibile realizzarlo anche attraverso un programma Python.

Le informazioni sullo scripting sono però sparse nella documentazione di FreeCAD, non c'è una uniformità di "scritture" e alcune cose sono spiegate in maniera complicata per chi comincia.

Primo assaggio
dobbiamo usare Purtroppo non esiste un modo per attivare direttamente con un comando di menù od un'icona nella barra degli strumenti, l'editor Python interno a FreeCAD, sapendo però che FreeCAD apre un file con estensione nell'editor Python interno, il trucco più semplice è quello di creare un file usando il proprio editor di testo preferito, poi aprirlo con FreeCAD.

Il file non deve necessariamente essere creato all'esterno, l'editor di FreeCAD possiede una decente "Evidenziazione di Sintassi" che molti editor non possiedono, per cui è sufficiente battere queste poche righe, in un file:

Salvarlo con un nome che abbia estensione e caricarlo in FreeCAD, come un normale file attraverso il comando File - Apri.

Il minimo indispensabile per lavorare in modo proficuo con FreeCAD è scrivere queste righe, che potete tranquillamente usare come modello per tutti gli script che create:

Alcuni trucchi che sono incorporati in questo codice:


 * Questo serve per importare FreeCAD all'interno dell'interprete Python, può sembrare superfluo, ma non lo è
 * Base e Vector sono molto usati, vi risparmiano molto testo da battere, e se non lo fate dovete scrivere ad esempio ogni volta che usate un

Partiamo con un piccolo script che fa poco, ma illustra la potenza di questo approccio.

Mettetelo dopo il primo codice e premete la freccia della Barra di strumenti Macro

e vedrete che si apre un nuovo file chiamato Pippo e si visualizza un cubo nella Vista 3D,



Qualcosa in più
Niente di eccezionale, quanto ci si può aspettare da un cubo, la stessa cosa possiamo fare con un cilindro, aggiungete queste linee dopo il metodo che crea il cubo e prima della riga obj = cubo(...

Anche qui nulla di eccezionale, notiamo alcune cose nella costruzione del codice:


 * L'assenza dei riferimenti usuali in molta documentazione ad, è pienamente voluto, in futuro si potrà riusare il codice per accedere a FreeCAD dall'esterno di FreeCAD, e sarà necessario importare FreeCAD come un normale modulo Python, con alcune accortezze. La scelta è voluta anche nel solco degli standard di Python per cui è meglio sapere sempre da dove arrivano le cose, ovviamente App è poco significativo.
 * La definizione all'inizio di una "costante" DOC, per contenere, ovviamente il nome "costante" è solo considerando dal punto di vista semantico il nostro "documento attivo", da qui l'uso della convenzione del nome "TUTTO MAIUSCOLO" per le "costanti".
 * ogni metodo ritorna un geometria, questo diventerà importante fra poco.
 * la creazione della geometria non comporta la proprietà, se si utilizzano geometrie semplici per creare geometrie più complesse, la gestione della proprietà è una cosa delicata.

Ora dobbiamo pur farci qualcosa con questi oggetti, quindi introduciamo le operazioni booleane. Un esempio di metodo che compie un'operazione di Unione è questo:

anche qui nulla di eccezionale, notate però l'uso di molta uniformità nel codice, aiuta molto quando si vuole fare copia e incolla nella creazioni complesse.

Inseriamo dopo il metodo le righe sopra e modifichiamo quelle sotto in modo da leggere:

Lanciamo con il tasto freccia della barra strumenti macro e otteniamo:



Posizionamento
Il concetto è relativamente complesso, vedere il Tutorial aeroplano per una trattazione più sistematica.

Possiamo aver bisogno di posizionare una geometria in una posizione relativa ad un'altra geometria, cosa abbastanza frequente, il modo più comune è usare la proprietà  della geometria.

Ovviamente le possibilità su come specificare questa proprietà sono molte, alcune complesse da capire, questa scrittura della proprietà, soprattutto per quanto riguarda la parte è in linea con quanto spiegato nel Tutorial citato e sembra la più gestibile.

Esiste sempre un punto di criticità, che è il punto di riferimento della costruzione, cioè il punto in base al quale è costruito l'oggetto, come descritto in questa tabella, copiata da Posizionamento:

Queste informazioni sono da tenere ben presente quando volete applicare una rotazione.

Facciamo qualche esempio, cancellate tutte le righe dopo il metodo ed inserite queste righe:

Analizziamo il codice:


 * Abbiamo definito un metodo per creare una sfera, abbiamo usato la definizione più semplice, definendo solo il raggio.
 * Abbiamo introdotto una seconda forma per l'Unione quella multipla, niente di speciale, notate solo che alla proprietà abbiamo passato una tupla
 * Abbiamo definito una forma complessa, in modo "parametrico", cioè definendo alcuni parametri e mettendo delle formule che calcolano in modo automatico molti dei valori da passare alla geometria finale.
 * Abbiamo usato prima di ritornare l'oggetto un posizionamento usando la poprietà e il vettore finale del gruppo che definisce il centro di rotazione, secondo la scrittura Yaw-Pitch-Roll

Potete facilmente notare che l'aereo ruota attorno al suo "baricentro" detto anche "centro di gravità", che ho fissato nel centro delle ali, in modo che la rotazione sia relativamente "naturale", ma che potete mettere dove più vi aggrada.

Il primo è il vettore di Translazione, che noi non abbiamo usato, ma se sostituite  con queste linee di codice:

Vedrete nella Finestra dei Report questo testo:

Cosa è successo?

FreeCAD ha tradotto l'informazione fornita in altre parole la nostra proprietà   è stata definita specificando tre componenti, Translazione, Rotazione and centro di rotazione ma è stata trasformata nella rappresentazione "interna" con sole due componenti: Translazioen e Rotazione'.

Potete facilmente visualizzare il valore di aggiungendo un'istruzione di print nel metodo  e vedrete che viene visualizzzato, nella finestra report :

In pratica il centro di rotazione della geometria è a, ma questo centro di rotazione non è mostrato dall'interfaccia grafica, può essere però passato alla  proprietà  usando la scritttura porposta ma non può essere facilmente recuperato.

Per questo motivo ho usato l'aggettivo "delicato" per definire la proprietà.