コード例 #1
0
def sunflower(scene,nseeds=100,npetals=50):
  pos = kernelpositions(nseeds)
  headverts=pos2verts(pos)
  faces=[(v,v+1,v+2) for v in range(0,len(headverts),3)]
  
  head=Tools.addmeshobject(scene,headverts,faces,name='head')
  
  kernelverts,kernelfaces=kernel(radius=1.5,scale=(1.0,1.0,0.3))
  #print len(kernelverts),kernelfaces
  
  kernelmesh = Tools.newmesh(kernelverts,kernelfaces,name='kernel')
  kernels = [Tools.addmeshduplicate(scene,kernelmesh,name='kernel') for i in range(nseeds)]
  
  for i in range(nseeds):
    #print(kernels[i],head.data.verts[i*3:(i+1)*3])
    loc = Tools.center(head.data.verts[i*3:(i+1)*3])
    kernels[i].setLocation(loc)
    head.makeParentVertex([kernels[i]],tuple([v.index for v in head.data.verts[i*3:(i+1)*3]]))
    
  # add petals (parent to head)
  petalverts,petalfaces=petal((2.0,1.0,1.0))
  petalmesh = Tools.newmesh(petalverts,petalfaces,name='petal')
  
  r = sqrt(nseeds)
  petals = [Tools.addmeshduplicate(scene,petalmesh,name='petal') for i in range(npetals)]
  for i,p in enumerate(petals):
    a=float(i)*2*pi/npetals
    p.setLocation(r*cos(a),r*sin(a),0)
    e=p.getEuler('localspace')
    e.z=a
    p.setEuler(e)
  head.makeParent(petals)
  
  # add stalk (parent head to stalk)
  stalkverts,stalkfaces=stalk()
  stalkob = Tools.addmeshobject(scene,stalkverts,stalkfaces,name='stalk')
  stalkob.makeParent([head])
  
  # create a group of kernels and a group of petals for easy scaling
  kernelgroup = Blender.Group.New('kernels')
  kernelgroup.objects=kernels
  
  petalgroup = Blender.Group.New('petals')
  petalgroup.objects=petals
  
  # create a group consisting of all objects
  # unfortunately you cannot make a group of groups
  all = Blender.Group.New('sunflower')
  all.objects=sum([kernels,petals],[head,stalkob]) # trick to flatten lists