3
def getObjectArmature(ob):
5
This returns the first armature the mesh uses.
6
remember there can be more then 1 armature but most people dont do that.
12
if arm and arm.type == 'Armature' and ob.parentType == Blender.Object.ParentTypes.ARMATURE:
15
for m in ob.modifiers:
16
if m.type== Blender.Modifier.Types.ARMATURE:
17
arm = m[Blender.Modifier.Settings.OBJECT]
24
def getDerivedObjects(ob, PARTICLES= True):
26
Takes an objects and returnes a list of (ob, maxrix4x4) pairs
27
that are derived from this object -
28
This will include the object its self if it would be rendered.
29
all dupli's for eg are not rendered themselves.
35
* static particles as a mesh
37
it is possible this function will return an empty list.
40
ob_mtx_pairs = ob.DupObjects
43
# Ignore self if were a dupli* or our parent is a duplivert.
44
if ob.enableDupFrames or ob.enableDupGroup or ob.enableDupVerts:
48
if parent and parent.enableDupVerts:
51
if effects and (not effects[0].flag & Blender.Effect.Flags.EMESH):
52
# Particles mesh wont render
55
ob_mtx_pairs.append((ob, ob.matrixWorld))
59
type_vec= type(Blender.Mathutils.Vector())
63
# TODO, particles per child object.
64
# TODO Support materials
65
me= Blender.Mesh.New()
67
par= eff.getParticlesLoc()
70
type_par= type(par[0])
72
if type_par == type_vec:
76
elif type_par == type_tp:
78
start_index= len(me.verts)
79
me.verts.extend([v for p in par for v in p])
80
me.edges.extend( [(i, i+1) for i in xrange(start_index, start_index + len(par) - 1 )] )
82
elif type_par == type_ls:
84
start_index= len(me.verts)
85
me.verts.extend([v for line in par for v in line])
89
edges.extend( [(i,i+1) for i in xrange(start_index, start_index+len(line)-1) ] )
90
start_index+= len(line)
92
me.edges.extend(edges)
95
# If we have verts, then add the mesh
96
ob_par = Blender.Object.New('Mesh')
99
LOOSE= Blender.Mesh.EdgeFlags.LOOSE
103
# Particle's are in worldspace so an identity matrix is fine.
104
ob_mtx_pairs.append( (ob_par, Blender.Mathutils.Matrix()) )