#--------------------------------------------
# spread a mesh in different
pieces by material
# Jm Soler 2005
# ce script est proposé sous licence GPL.
#--------------------------------------------
import Blender
from Blender import *
import sys
def split_materials_mesh(selected):
me=Blender.Object.Get(selected)
mesh=me.getData()
List_fragment=[]
Materials=mesh.getMaterials(0)
for mat in Materials:
List_fragment.append([])
for f1 in mesh.faces:
List_fragment[f1.materialIndex].append(f1)
if len(List_fragment)>1:
for nouveau in List_fragment:
fragment=Blender.NMesh.GetRaw()
for f1 in nouveau:
for v2
in f1.v:
if v2 not in fragment.verts:
fragment.verts.append(v2)
fragment.faces=nouveau
fragment.materials=[Materials[List_fragment.index(nouveau)]]
names = NMesh.GetNames()
n=0
nom_prov=mesh.name+'%s'
% List_fragment.index(nouveau)
while nom_prov in names:
nom_prov=nom_prov+'%s' % (List_fragment.index(nouveau)+n)
n+=1
ob=NMesh.PutRaw(fragment,nom_prov,1)
ob.setMatrix(me.getMatrix())
print "nothing to do"
try:
list=Blender.Object.GetSelected()[0]
if list.getType()=='Mesh':
split_materials_mesh(list.name )
else:
pass
except:
print 'perhaps not a mesh or no object selected'
Blender.Redraw()
|