#----------------------------------------------
Cube Generator
© Jean-michel Soler (2001-2004)
#----------------------------------------------
#----------------------------------------------
Page officielle :
jmsoler.free.fr/util/blenderfile … erator.htm
Communiquer les problemes et erreurs sur:
zoo-logique.org/3D.Blender/n … 3D.Blender
#---------------------------------------------
import Blender
from Blender import *
import sys
import genmazeb
from genmazeb import *
from Blender.Draw import *
from Blender.BGL import *
BL_VERSION=Blender.Get(‘version’)
if BL_VERSION==233:
faceflags = Blender.NMesh.FaceFlags
elif BL_VERSION==225:
faceflags = Blender.NMesh.Const
SizeX=Create(int(size_x))
SizeY=Create(int(size_y))
RandNum=Create(20)
Solveur=Create(0)
SOLVER=0
c=[
[0.0,0.0,0.0],
[0.0,1.0,0.0],
[1.0,1.0,0.0],
[1.0,1.0,0.0],
[0.0,0.0,1.0],
[0.0,1.0,1.0],
[1.0,1.0,1.0],
[1.0,0.0,1.0]
]
V=[[0,1,2,3],
[4,5,6,7],
[0,4,7,3],
[1,2,6,5],
[0,1,5,4],
[3,7,6,2]]
nb_x=float(size_x)
nb_y=float(size_y)
nb_z=1.0
Rnb_x=int(nb_x)
Rnb_y=int(nb_y)
Rnb_z=int(nb_z)
def valeurs_(nb,max,dim):
if nb>1:
div_=(nb*2)+(nb-1)
else:
div_=nb
espace_=0/div_
if max==0:
taille_=dim/nb
else:
taille_=max*dim/nb
return espace_,taille_
espace_x,taille_x=valeurs_(nb_x,0,dim)
espace_y,taille_y=valeurs_(nb_y,0,dim)
espace_z,taille_z=valeurs_(nb_z,.05,dim)
def create_verts(n,m,ux,uy,uz,c,V):
global taille_x,espace_x,taille_y,espace_y,taille_z,espace_z
n2=[0.0,0.0,0.0];
for ux in range(Rnb_x+1):
for uy in range(Rnb_y+1):
n2[0]=taille_x+ux*(taille_x+espace_x)
n2[1]=taille_y+uy*(taille_y+espace_y)
n2[2]=taille_z+uz*(taille_z+espace_z)
v=NMesh.Vert(n2[0],n2[1],0.0)
m.verts.append(v)
v=NMesh.Vert(n2[0],n2[1],n2[2])
m.verts.append(v)
def create_face(n,m,ux,uy,uz,c,V,SOLVER):
global taille_x,espace_x,taille_y,espace_y,taille_z,espace_z
p=[uy*2+(size_y+1)*2*ux];
p.append(p[0]+(size_y+1)*2)
p.append(p[1]+2)
p.append(p[0]+2)
p.append(p[0]+1)
p.append(p[1]+1)
p.append(p[2]+1)
p.append(p[3]+1)
v=NMesh.Face()
for n1 in V[n]:
v.v.append(m.verts[p[n1]])
if SOLVER==0:
for nc in [0,1,2,3]:
r=v.v[nc].co[0]*255/size_x
g=v.v[nc].co[1]*255/size_y
b=v.v[nc].co[2]*255
a=0
v.col.append(NMesh.Col(r, g, b, a))
else:
for nc in [0,1,2,3]:
r=255
g=255
b=0
a=0
v.col.append(NMesh.Col(r, g, b, a))
v.uv = [ (0,0), (0,1), (1,1), (1,0) ] # Needed because of bug
v.mode =8721
#print v.mode
m.faces.append(v)
def gen_mesh(name,maze,Rnb_x,Rnb_y,Rnb_z,c,V,t,SOLVER):
m=NMesh.GetRaw()
create_verts(0,m,Rnb_x,Rnb_y,Rnb_z,c,V)
uz=Rnb_z
for ux in range(Rnb_x):
for uy in range(Rnb_y):
#for uz in range(Rnb_z):
if maze[ux][uy]!=t:
create_face(0,m,ux,uy,uz,c,V,SOLVER)
#create_face(1,m,ux,uy,uz,c,V)
if uy==0:
create_face(4,m,ux,uy,uz,c,V,SOLVER)
if ux==0:
create_face(2,m,ux,uy,uz,c,V,SOLVER)
if uy==Rnb_y-1:
create_face(5,m,ux,uy,uz,c,V,SOLVER)
if ux==Rnb_x-1:
create_face(3,m,ux,uy,uz,c,V,SOLVER)
if (uy>0):
if maze[ux][uy-1]==t:
create_face(4,m,ux,uy,uz,c,V,SOLVER)
if (uy<Rnb_y-1):
if maze[ux][uy+1]==t:
create_face(5,m,ux,uy,uz,c,V,SOLVER)
if (ux>0):
if maze[ux-1][uy]==t:
create_face(2,m,ux,uy,uz,c,V,SOLVER)
if (ux<Rnb_x-1):
if maze[ux+1][uy]==t:
create_face(3,m,ux,uy,uz,c,V,SOLVER)
elif t==0:
create_face(1,m,ux,uy,uz,c,V,SOLVER)
NMesh.PutRaw(m,name)
for o in Object.Get():
if o.getType()=='Mesh' and o.getData().name==name:
if SOLVER==0:
if BL_VERSION>=233:
o.setSize(4.0,-4.0,0.<img src="/uploads/default/original/1X/ae031e9834d19166598edd060b063d44f1829139.gif" width="15" height="15" alt="8)" title="Cool"/>
o.setEuler([3.1416,0.0,0.0])
else:
o.SizeX=4.0;o.SizeY=-4.0;o.SizeZ=0.8
o.RotX=3.1416
elif SOLVER==1:
if BL_VERSION>=233:
o.setSize(4.0,-4.0,1.20)
o.setEuler([3.1416,0.0,0.0])
o.setLocation(0.0,0.0,-0.75)
else:
o.SizeX=4.0;o.SizeY=-4.0;o.SizeZ=0.8
o.RotX=3.1416
o.LocZ=-0.75
Blender.Redraw()
def draw():
global SizeX, SizeY, RandNum, Dim, Solveur
glClear(GL_COLOR_BUFFER_BIT)
glRasterPos2i(20, 150)
Text(“Generateur/solveur de labyrinthe © jm soler 2001”)
SizeX=Slider(“Dim X”,3, 20, 50, 180, 20, SizeX.val,4,75,1,“Dimension en X”)
SizeY=Slider(“Dim Y”,3, 20, 75, 180, 20, SizeY.val,4,75,1,“Dimension en Y”)
RandNum=Slider(“Random”,3, 20, 100, 180, 20, RandNum.val,0,1024,1,“random”)
Button("Exit", 1, 20, 10, 80, 19)
Button("maze", 2, 20, 30, 80, 19)
Solveur=Toggle("Solveur",4, 100, 10, 100, 40, Solveur.val)
def event(evt, val):
if (evt== QKEY and not val): Exit()
def bevent(evt):
global SizeX, SizeY, rand_num, RandNum, Dim
global size_x, size_y,Rnb_x,Rnb_y,Rnb_z,c,V
global Solveur, SOLVEUR
if (evt== 1): Exit()
elif (evt== 2):
nb_x=float(size_x)
nb_y=float(size_y)
nb_z=1.0
Rnb_x=int(nb_x)
Rnb_y=int(nb_y)
Rnb_z=int(nb_z)
SOLVER=0
maze=calc_maze(size_x,size_y,rand_num,dim)
gen_mesh('maze',maze,Rnb_x,Rnb_y,Rnb_z,c,V,0,SOLVER)
if Solveur.val==1:
SOLVER=1
maze=solve_maze(maze,size_x,size_y)
gen_mesh('solution',maze,Rnb_x,Rnb_y,Rnb_z,c,V,1,SOLVER)
Draw()
elif (evt== 3):
size_x= SizeX.val
size_y= SizeY.val
rand_num=RandNum.val
Register(draw, event, bevent)
sys.stdout.flush()