cg-Cad

Grafica 3D »Scripts »Disegnare un cubo parametrico in Blender (con Python)

In blender carica una scena F1 poi apri una finestra Text premendo MAIUSC+F11, apri lo script Alt+O e (con il cursore nella finestra dello script) fai ALT+P oppure da menu Run script; comunque su kino3d è in corso una traduzione in italiano del manuale e sull'argomento estendere blender trovi tutto!

cubo.py

cubo.py

cubo

Download CUBO.ZIP

Autore: Michele Ingenuo - 3eye

#CUBO CON PYTHON by INGOENIUS
#grazie a kino, S68, Manuel, Jody ,JSalvo

import Blender 
from Blender import NMesh 
from Blender.BGL import *
from Blender.Draw import *

# Parametri del CUBO
D_X = Create(1.0)
D_Y = Create(1.0)
D_Z = Create(1.0)

# Eventi
EVENT_NOEVENT = 1
EVENT_DRAW    = 2
EVENT_EXIT    = 3


######################################################
# disegno della GUI
######################################################
def draw():
     global D_X
     global D_Y
     global D_Z
     
     global EVENT_NOEVENT,EVENT_X,EVENT_Y,EVENT_Z,EVENT_DRAW,EVENT_EXIT

     ########## Titoli
     glClear(GL_COLOR_BUFFER_BIT)
     glRasterPos2d(8, 123)
     Text("1 CUBETTO?")# intestazione

     ######### Pulsanti GUI per i parametri
     glRasterPos2d(8, 100)
     Text("Parametri:")
     
     
     D_X		 = Slider("Dim X: ", EVENT_NOEVENT, 10, 35, 210, 18,
     #D_X é il valore da passare tramite lo slider alla def CUBO linea 74
                     D_X.val, 0.001, 20.0, 1, "Dimensioni in X");
 
     D_Y		 = Slider("Dim Y: ", EVENT_NOEVENT, 10, 55, 210, 18,
                     D_Y.val, 0.001, 20.0, 1, "Dimensioni in Y");
 
     D_Z		 = Slider("Dim Z: ", EVENT_NOEVENT, 10, 75, 210, 18,
                     D_Z.val, 0.001, 20.0, 1, "Dimensioni in Z");
 
                                             
     ######### Pulsanti Crea ed Esci
     Button("Crea",EVENT_DRAW , 10, 10, 80, 18)
     Button("Esci",EVENT_EXIT , 140, 10, 80, 18)
 
def event(evt, val):
     if (evt == QKEY and not val):
             Exit()

def bevent(evt):
     global D_X
     global D_Y
     global D_Z
     global EVENT_NOEVENT,EVENT_X,EVENT_Y,EVENT_Z,EVENT_DRAW,EVENT_EXIT

     ######### Gestisce gli eventi della GUI
     if (evt == EVENT_EXIT):
             Exit()
     elif (evt== EVENT_DRAW):
             CUBO(D_X.val, D_Y.val, D_Z.val)
             #D_X.val vuol dire il valore preso nello slider
             Blender.Redraw()

Register(draw, event, bevent)

#Definizione del cubo

def CUBO(X, Y, Z):
             
	me=NMesh.GetRaw() #crea la mesh vuota 


#creazione degli 8 vertici usando i valodi degli slider 
#e relativo append alla mesh creata prima 

	
	v=NMesh.Vert(0.0,0.0,0.0)#Vertice 0 
	me.verts.append(v) 
	v=NMesh.Vert(D_X.val,0.0,0.0) #Vertice 1 
	#prende il valore di D_X quindi D_X.val
	me.verts.append(v) 
	v=NMesh.Vert(D_X.val,D_Y.val,0.0) #Vertice 2
	me.verts.append(v) 
	v=NMesh.Vert(0.0,D_Y.val,0.0) #Vertice 3
	me.verts.append(v) 
	v=NMesh.Vert(0.0,D_Y.val,D_Z.val) #Vertice 4
	me.verts.append(v) 
	v=NMesh.Vert(0.0,0.0,D_Z.val) #Vertice 5
	me.verts.append(v) 
	v=NMesh.Vert(D_X.val,0.0,D_Z.val) #Vertice 6
	me.verts.append(v) 
	v=NMesh.Vert(D_X.val,D_Y.val,D_Z.val) #Vertice 7
	me.verts.append(v) 

# creazione delle facce ATT vanno selezionati i vertici in senso antiorario 
# att i vertici vanno da 0 a 7 e non da 1 a 8 

# Qui memorizzo gli indici dei vertici. Puoi vederla come una matrice, 
# oppure come una lista di liste (e' uguale)
 
	faccie = [ [0,1,2,3], [1,2,7,6], [3,2,7,4], [0,3,4,5], [0,1,6,5], [4,5,6,7] ] 

	for i in range(0, len(faccie)):
 
# range(0, len(faccie)) crea una lista chiamata "faccie" che contiene gli elementi 
# da 0 a len(faccie) 
# len(faccie) e' chiaramente la lunghezza di faccie, faccie contiene 6 liste di indici 
# qundi ha lunghezza 6. Quindi range(0, len(faccie)) = [0,1,2,3,4,5] (l'estremo 
# superiore del range e' escluso). Ora, l'istruzione "for", ripete le 
# istruzioni del suo corpo, facendo assumere ad "i", i valori della lista 
# [0,1,2,3,4,5] (in sostanza il for ripete le istruzioni presenti nel suo 
# corpo 6 volte, la prima facendo assumere ad "i" il valore 0, la seconda 
# il valore "1" e cosi' via). 
	
		f=NMesh.Face() 

# faccie[i], e' la lista i-esima presente in faccie. Questa volta, j assume i valori 
# della lista faccie[i]. L'istruzione presente nel suo corpo viene eseguita 
# len(faccie[i]) volte, cioe' 4 volte. 

		for j in faccie[i]: 
			f.v.append(me.verts[j]) 
		me.faces.append(f) 

#fine della creazione facce e creazione finale della mesh 
	NMesh.PutRaw(me,"Cube",1) 
	Blender.Redraw() 

Grafica 3D »Scripts

Ultimo Aggiornamento_Last Update: 20 Aprile 2004