Guida Didattica · Librerie Python per Grafica 3D e CAD

PyVista

Griglie strutturate, operazioni booleane e analisi scientifica 3D basata su VTK.

0 di 5 passaggi completati

01Fondamenti

Cos'è PyVista?

PyVista è una libreria Python che rende semplice lavorare con VTK (Visualization Toolkit), uno strumento potente ma complesso usato in ambito scientifico e ingegneristico per visualizzare e analizzare dati 3D: simulazioni, mesh, griglie di dati, campi scalari (come temperatura o pressione) distribuiti nello spazio.

🧊Griglie e MeshRappresenta oggetti e volumi come griglie di punti e celle.
🔬Analisi scientificaIdeale per simulazioni ingegneristiche, dati geospaziali, campi fisici.

La tua prima mesh

import pyvista as pv

sfera = pv.Sphere(radius=1.0)
print(sfera)
sfera.plot()  # apre una finestra 3D interattiva

02Concetti Chiave

🧱 StructuredGrid▶

Una griglia di punti organizzata in modo regolare (come una scacchiera in 3D), usata per rappresentare volumi di dati, ad esempio il risultato di una simulazione fisica su una griglia regolare.

import numpy as np x, y, z = np.meshgrid(np.arange(-5,5,1), np.arange(-5,5,1), np.arange(-5,5,1)) griglia = pv.StructuredGrid(x, y, z)
🔷 Geometrie pronte▶

PyVista offre forme geometriche già pronte (sfere, cubi, cilindri, coni) per iniziare velocemente senza costruire mesh da zero.

cubo = pv.Cube() cilindro = pv.Cylinder() cono = pv.Cone()
✂️ Operazioni booleane▶

Permettono di combinare due mesh 3D come si fa con gli insiemi: unione, differenza, intersezione. Molto usate in ambito CAD e ingegneristico per creare forme complesse partendo da forme semplici.

risultato = sfera.boolean_difference(cubo) # sottrae il cubo dalla sfera
🌡️ Campi scalari (scalar fields)▶

Un valore numerico associato a ogni punto o cella della mesh (es. temperatura, pressione, altezza). PyVista può colorare la mesh in base a questi valori per visualizzarli intuitivamente.

sfera["altezza"] = sfera.points[:, 2] sfera.plot(scalars="altezza")
📸 Screenshot ed export▶

Le scene 3D possono essere salvate come immagini statiche, utile per report o presentazioni senza dover riaprire la visualizzazione interattiva.

plotter = pv.Plotter(off_screen=True) plotter.add_mesh(sfera) plotter.screenshot("sfera.png")

03Checklist Pratica

Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato di questa guida al termine.

Esempio per il punto 1

import pyvista as pv

sfera = pv.Sphere(radius=1.0)
cubo = pv.Cube()
print(sfera.n_points, cubo.n_points)
1. Crea due geometrie pronteCrea una sfera e un cubo con pv.Sphere() e pv.Cube(), come nell'esempio sopra.

Esempio per il punto 2

sfera["altezza"] = sfera.points[:, 2]
print(sfera["altezza"].min(), sfera["altezza"].max())
2. Aggiungi un campo scalareAssegna alla sfera un valore per punto basato sull'altezza, come nell'esempio sopra.

Esempio per il punto 3

differenza = sfera.boolean_difference(cubo)
print(differenza.n_points)
3. Esegui un'operazione booleanaSottrai il cubo dalla sfera con boolean_difference(), come nell'esempio sopra.

Esempio per il punto 4

plotter = pv.Plotter(off_screen=True)
plotter.add_mesh(sfera, scalars="altezza")
plotter.screenshot("sfera.png")
4. Salva uno screenshot della scenaUsa Plotter(off_screen=True) e .screenshot() come nell'esempio sopra.
5. Completa il quiz di verificaScendi in fondo alla guida e rispondi correttamente ad almeno l'80% delle domande.

04Glossario Interattivo

Tocca ogni termine per vederne la definizione.

05Quiz di Verifica

06Esercitazioni Pratiche

Esercizio 1

La sfera bucata

Crea una sfera e un cilindro più piccolo posizionato al centro. Usa boolean_difference() per "bucare" la sfera con il cilindro e salva uno screenshot del risultato.

⏱ 25 minuti📦 Script + immagine PNG generata🖥️ Individuale
Esercizio 2

Mappa di calore su una sfera

Crea una sfera e assegna un campo scalare basato sulla distanza di ogni punto dal centro. Visualizza la mesh colorata in base a questo valore e salva uno screenshot.

⏱ 20 minuti📦 Screenshot con colorazione a campo scalare🖥️ Individuale
Esercizio 3

Trova l'errore: campo scalare di dimensione sbagliata

Questo codice genera un errore: si assegna un array di 50 valori a una mesh che ha 200 punti, con mesh["valore"] = array_di_50_elementi. Spiega perché il numero di valori deve corrispondere al numero di punti della mesh.

⏱ 10 minuti📦 Spiegazione scritta🖥️ Individuale o in coppia

🎓 Attestato di completamento

Completa tutti i 5 passaggi della checklist per sbloccare il tuo attestato in PDF.

0 / 5 passaggi completati