Blender (jusqu'à 2.49)
Speed test 
Module Mesh versus NMesh 
 
    Début   Index
précédentScript Python
script python  Suivant

 
To create only vertices : Bad method (Nmesh is the winner)
To create only vertices : Good method (Mesh is the winner)
To create  vertices + faces :  Good method (Mesh is the winner...)
Index() problem ..

To create only vertices : Bad method (Nmesh is the winner)
 

import Blender
from Blender import *

LIM=10000
DIM=3.0

me=NMesh.GetRaw()
t0=sys.time()
for i in range(LIM): 
 me.verts.append(NMesh.Vert(Noise.random()*DIM,Noise.random()*DIM,Noise.random()*DIM))
NMesh.PutRaw(me,'NMESH_') 
t2=sys.time()-t0
print t2  # 0.3 second on my computer

# now be very patient :)
t0=sys.time()
Window.EditMode(0)
me=Mesh.New('MESH_')
sc=Scene.getCurrent()
ob=Object.New('Mesh')
ob.link(me)
sc.link(ob)
ob.select(1)
Window.EditMode(1)
Window.EditMode(0)
random=Noise.random()
t0=sys.time()
for i in range(LIM): 
 me.verts.extend(Noise.random()*DIM,Noise.random()*DIM,Noise.random()*DIM)
t1=sys.time()-t0
print t1
 # 277 seconds on my computer !!!!

print t1/t2 

To create only vertices : Good method (Mesh is the winner)
 

import Blender
from Blender import *

LIM=100000
DIM=3.0

me=NMesh.GetRaw()
t0=sys.time()
for i in range(LIM): 
 me.verts.append(NMesh.Vert(Noise.random()*DIM,Noise.random()*DIM,Noise.random()*DIM))
NMesh.PutRaw(me,'NMESH_') 
t2=sys.time()-t0
print t2  # always 0.3 second on my computer

t0=sys.time()
Window.EditMode(0)
me=Mesh.New('MESH_')
sc=Scene.getCurrent()
ob=Object.New('Mesh')
ob.link(me)
sc.link(ob)
ob.select(1)
Window.EditMode(1)
Window.EditMode(0)
random=Noise.random()
t0=sys.time()
# ------------------
#  Method advised  by :    Ken Hughes
# ------------------
verts=[]
for i in range(LIM):
   verts.append((Noise.random()*DIM,
        Noise.random()*DIM,Noise.random()*DIM))
me.verts.extend(verts)

t1=sys.time()-t0
print t1
# 0.289 second
print t1/t2 
 

To create  vertices + faces :  method (Mesh is the winner...)
 
 

import Blender
from Blender import *

LIM=10000
DIM=3.0

me=NMesh.GetRaw()
t0=sys.time()
for i in range(LIM): 
 me.verts.append(NMesh.Vert(Noise.random()*DIM,Noise.random()*DIM,Noise.random()*DIM))
for v in range(0,len(me.verts)-2,3):
  f=NMesh.Face() 
  [f.append(me.verts[v+n]) for n in 0,1,2] 
  me.faces.append(f) 
NMesh.PutRaw(me,'NMESH_') 
t2=sys.time()-t0
print t2  # always 0.3 second on my computer

t0=sys.time()
Window.EditMode(0)
me=Mesh.New('MESH_')
sc=Scene.getCurrent()
ob=Object.New('Mesh')
ob.link(me)
sc.link(ob)
ob.select(1)
Window.EditMode(1)
Window.EditMode(0)
random=Noise.random()
t0=sys.time()
# ------------------
#  Method advised  by :    Ken Hughes
# ------------------
verts=[]
for i in range(LIM):
   verts.append((Noise.random()*DIM,
        Noise.random()*DIM,Noise.random()*DIM))
me.verts.extend(verts)
# ------------------
#  Waiting for a best method
# ------------------
faces=[]
for v in range(0,len(me.verts)-2,3):
 faces.append([me.verts[v],me.verts[v+1],me.verts[v+2]]) 
me.faces.extend(faces) 
t1=sys.time()-t0
print t1

print t1/t2 

Index() problem ..
 
 

import Blender
from Blender import *

LIM=1000
DIM=3.0

me=NMesh.GetRaw()
t0=sys.time()
for i in range(LIM):
 me.verts.append(NMesh.Vert(Noise.random()*DIM,Noise.random()*DIM,Noise.random()*DIM))
for v in range(0,len(me.verts)-2,3):
  f=NMesh.Face() 
  [f.append(me.verts[v+n]) for n in 0,1,2] 
  me.faces.append(f)
  #------------------
  #  Here no problem to get the verts index :
  #------------------
  print 'v index in verts',me.verts.index(me.faces[-1].v[0]), 
  #------------------
  #  It works perfectely...
  #------------------
NMesh.PutRaw(me,'NMESH_') 
t2=sys.time()-t0
print t2  # always 0.3 second on my computer

t0=sys.time()
Window.EditMode(0)
me=Mesh.New('MESH_')
sc=Scene.getCurrent()
ob=Object.New('Mesh')
ob.link(me)
sc.link(ob)
ob.select(1)
Window.EditMode(1)
Window.EditMode(0)
random=Noise.random()
t0=sys.time()
# ------------------
#  Method advised  by :    Ken Hughes
# ------------------
verts=[]
for i in range(LIM):
   verts.append((Noise.random()*DIM,
        Noise.random()*DIM,Noise.random()*DIM))
me.verts.extend(verts)
# ------------------
#  Waiting for a best method
# ------------------
faces=[]
for v in range(0,len(me.verts)-2,3):
 faces.append([me.verts[v],me.verts[v+1],me.verts[v+2]])
 #------------------
 #  Here a call to the index function ...:
 #------------------
 print 'v index in verts',me.verts.index(faces[-1][0]), 
 #------------------
 # return an error :
 # """
 # Traceback (most recent call last):
 #   File "Text", line 45, in ?
 # AttributeError: 'Blender MVertSeq' object has no attribute 'index'
 # """
 #------------------
me.faces.extend(faces) 
t1=sys.time()-t0
print t1

print t1/t2 

précédentScript Python
script python  Suivant
Vers le  Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://news.zoo-logique.org/3D.Blender


 

 

Livre en français
Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
Blender Starter Kit

Forum
FAQ
Lexique
Didacticiels
Compilations
Blender2KT
Débuter
Modelage
Blender python
Materiaux
Lumière
Animation
API python (eng)
Archives nzn
Statistiques
Doc flash Sculptris
Galerie Sculptris

mon site de démos sur youtube