Strumenti Utente



tutorial_freecad:tutorial_04

Tutorial FreeCAD #4 - Python e la riga di comando

In questo quarto tutorial vedremo come creare oggetti tridimensionali da linea di comando. Questo ci consentirà, con un po' di lavoro, di capire meglio come funziona FreeCAD ma soprattutto di aumentare la nostra produttività mediante la creazione di script personalizzati. Se ci limitassimo alla sola interfaccia grafica, FreeCAD avrebbe ben poco da offrirci rispetto ad analoghi CAD parametrici. E' proprio la linea di comando che ne fa un programma già pronto per “il mondo reale”.

Nei precedenti tutorial abbiamo modellato alcuni solidi tridimensionali utilizzando la GUI. Per chi se ne fosse perso qualcuno riporto di seguito i relativi link link:

Cos'è python?!?

Python è un linguaggio di programmazione che si è molto diffuso negli ultimi anni sia per la sua semplicità che per la sua potenza. In rete trovate molte risorse per imparare a programmare in python. Vi consiglio in particolare di visitare il sito di riferimento www.python.org. Un altro sito utile per muovere i primi passi con python è www.learnpython.org/it/. Una sola accortezza: python è arrivato alla versione 3, ma FreeCAD per il momento supporta solo la versione 2, anche se le due versioni sono in realtà molto simili.

Sicuramente conoscere bene python può essere utile per usare al meglio FreeCAD, ma per portare a termine questo tutorial non avrete bisogno di essere degli esperti programmatori! Di seguito vedremo i pochi concetti necessari per cominciare a modellare da linea di comando.

Per prendere dimestichezza cominciamo a scrivere qualche riga di codice dopo aver lanciato FreeCAD. Prima di tutto verifichiamo che sia visibile la console python. Se non lo è la attiviamo spuntando la voce di menu Visualizza → Viste → Console python.

Per visualizzare la console python usiamo la voce del menu Visualizza -> Viste -> Console python

Python è un linguaggio interpretato interattivo, questo vuol dire che possiamo digitare un comando sulla console e vederne direttamente il risultato. Individuiamo il prompt della console python costituito dai tre simboli “»>”.

Cominciamo definendo due variabili b e h

>>> b = 500.0
>>> h = 100.0

Automaticamente python ha creato due variabili contenenti entrambe un numero in virgola mobile. Per calcolarne la somma basta digitare

>>> print b + h

print è un primo esempio di comando python che permette di visualizzare a video il contenuto di un'operazione tra variabili (come in questo caso) o una variabile.

Analogamente possiamo calcolare il prodotto b * h ed assegnare il relativo valore ad una terza variabile

>>> A = b * h

Per visualizzare il contenuto di A usiamo nuovamente print

>>> print A

L'altra importante funzinoalità di python che ci serve per cominciare con la modellazione vera e propria è costituita dai moduli. Un modulo python è una sorta di scatola degli attrezzi, all'interno della quale troviamo strumenti specifici per un certo scopo. Gli strumenti possono essere oggetti o funzioni. FreeCAD mette a nostra disposizione vari moduli, ognuno finalizzato ad una particolare attività (modellazione solida, creazione e modifica di mesh, disegno bidimensionale etc.).

Per rendere disponibile un modulo dobbiamo importarlo con il comando

>>> import <nome modulo>

Alcuni oggetti python presenti in FreeCAD

Per questo tutorial ci necessari due moduli: FreeCAD e Part. Per attivare tali moduli dalla console python di FreeCAD digitiamo

>>> import Part, FreeCAD

Il modulo FreeCAD contiene il sottomodulo Base, anche questo necessario per il tutorial. Per importarlo digitiamo

>>> from FreeCAD import Base

Ora siamo pronti per la modellazione vera e propria!

Modellando solidi ci fa comodo definire uno o più variabili di modo da rendere il codice più leggibile e facilitare eventuali modifiche. Sulla base di quanto visto al paragrafo precedente potremmo definire le coordinate di un punto con tre variabili, ma sarebbe abbastanza scomodo. Il modulo Base ci mette a disposizione la classe Vector. Per definire un oggetto Vector scriviamo

>>> Vert = Base.Vector(0,0,0)

Il segmento che unisce due punti può essere invece rappresentato con un oggetto di tipo Line, contenuto nel modulo Part. Per definire un oggetto Line scriviamo

>>> V1 = Base.Vector(0,0,0)
>>> V2 = Base.Vector(3,4,6)
>>> L1 = Part.Line(V1,V2)

Le prime due linee ne definiscono i vertici, la terza crea l'oggetto Line.

I tipi di oggetti definibili in Python sono molti ed in questa sede cominceremo a vederne una piccola parte. In particolare citiamo alcuni degli oggetti del modulo Part:

  • Shape: è un oggetto generico, che può essere impiegato per riferirsi a qualsiasi oggetto di questa lista
  • Compound: un insieme di più oggetti di tipo Shape
  • Edge: uno spigolo, di solito è limitato da oggetti di tipo Vertex
  • Wire: un insieme di oggetti Edge; possono essere aperti o chiusi
  • Face: in 2D è una porzione di piano; in 3D è una porzione di una superficie
  • Shell: un insieme di oggetti Face connessi tramite i rispettivi Edge; anche questi oggetti possono essere aperti o chiusi
  • Solid: una parte di spazio delimitata da oggetti di tipo Shell
  • Compsolid: un insieme di oggetti Solid connessi tramite le rispettive facce

Per approfondire questi aspetti vi consiglio di dare un'occhiata alla pagina dal wiki di FreeCAD sul Topological data scripting.

Modellazione da linea di comando

Dopo questa necessaria premessa partiamo con la modellazione (finalmente!).

Prima di tutto definiamo tre variabili in cui inseriremo le dimensioni significative del solido che intendiamo realizzare

>>> b = 500.0
>>> h = 100.0
>>> l = 400.0

Questo passaggio ci permetterà nel prossimo tutorial di creare agevolmente solidi con ingombri diversi.

Preoccupiamoci ora di disegnare la figura piana della figura

La figura piana da cui partiamo per la nostra modellazione

Definiamo i quattro vertici della figura. I punti saranno inseriti definendo oggetti Vertex

>>> Vert1 = Base.Vector(0,0,0)
>>> Vert2 = Base.Vector(b,0,0)
>>> Vert3 = Base.Vector(b,h,0)
>>> Vert4 = Base.Vector(0,h,0)

Disegniamo ora due linee usando l'oggetto Line del modulo Part

>>> Line1 = Part.Line(Vert1,Vert2)
>>> Line2 = Part.Line(Vert3,Vert4)

Passiamo quindi ai due archi di cerchio. Per definire un arco dobbiamo indicarne tre punti. Creiamo quindi un oggetto Arc1 che va da Vert2 a Vert3, passando per il punto intermedio VertC1

>>> VertC1 = Base.Vector(b+h/2,h/2,0)
>>> Arc1 = Part.Arc(Vert2,VertC1,Vert3)

Analogamente creiamo Arc2

>>> VertC2 = Base.Vector(-h/2,h/2,0)
>>> Arc2 = Part.Arc(Vert4,VertC2,Vert1)

Assembliamo il tutto creando un oggetto Shape

>>> Shape1 = Part.Shape([Line1,Arc1,Line2,Arc2])

Per estrudere l'oggetto appena creato è necessario convertirlo in un'oggetto Face. Lo facciamo con due passaggi

>>> Wire1 = Part.Wire(Shape1.Edges)
>>> Face1 = Part.Face(Wire1)

Il primo comando crea un oggetto Wire dagli oggeti Edge associati a Shape1. Il secondo crea l'oggetto Face.

Infine creiamo il solido estrudendo la faccia creata; utilizziamo il comando

>>> Solid1 = Face1.extrude(Base.Vector(0,0,l))

A video non abbiamo visto ancora nulla di quanto fatto. Questo accade perché gli oggetti definiti nella console non sono stati inseriti in FreeCAD. Per inserire Solid1 in FreeCAD ricorriamo alla funzione show() del modulo Part

>>> Part.show(Solid1)

Nel prossimo tutorial ritorneremo su quest'ultimo passaggio per approfondirlo.

Per vedere meglio il risultato del nostro lavoro digitiamo infine i comandi

>>> Gui.activeDocument().activeView().viewAxometric()
>>> Gui.SendMsgToActiveView("ViewFit")

Il primo imposta una vista assonometrica, il secondo modifica lo zoom per farci vedere tutto il solido creato. Se tutto è andato bene dovremmo avere la seguente vista

Il solido finale modellato in questo tutorial

Riepiloghiamo tutti i comando visti in successione

import Part, FreeCAD
from FreeCAD import Base

b = 500.0
h = 100.0
l = 400.0
Vert1 = Base.Vector(0,0,0)
Vert2 = Base.Vector(b,0,0)
Vert3 = Base.Vector(b,h,0)
Vert4 = Base.Vector(0,h,0)

Line1 = Part.Line(Vert1,Vert2)
VertC1 = Base.Vector(b+h/2,h/2,0)
Arc1 = Part.Arc(Vert2,VertC1,Vert3)
Line2 = Part.Line(Vert3,Vert4)
VertC2 = Base.Vector(-h/2,h/2,0)
Arc2 = Part.Arc(Vert4,VertC2,Vert1)

Shape1 = Part.Shape([Line1,Arc1,Line2,Arc2])

Wire1 = Part.Wire(Shape1.Edges)
Face1 = Part.Face(Wire1)

Solid1 = Face1.extrude(Base.Vector(0,0,l))
Part.show(Solid1)

Gui.activeDocument().activeView().viewAxometric()
Gui.SendMsgToActiveView("ViewFit")

Potete copiare le linee sopra riportate e incollarle direttamente sulla console python di FreeCAD per vedere in pochi istanti il risultato finale.

Per approfondire...

Lista completa tutorial

Comments


tutorial_freecad/tutorial_04.txt · Ultima modifica: 2015/05/03 10:39 da mickele77

Facebook Twitter Google+ Digg Reddit LinkedIn StumbleUpon Email