# Function MakeOctaedron() creates an octaedron with the given Lenght import Blender from Blender import * def MakeOctaedron(L): editmode = Window.EditMode() # are we in edit mode? If so ... if editmode: Window.EditMode(0) # leave edit mode before getting the mesh # define vertices and faces for an octaedron D = 0.12 # distancia de semidiametro mayor del octaedro al extremo #L= 4.0 # longitud del hueso octaedro. coords=[ [0,0,0], [D, D, D], [D, D, -D], [-D, D, -D],[-D, D, D], [0,L,0]] #coords=[ [-1,-1,-1], [1,-1,-1], [1,1,-1], [-1,1,-1], [0,0,1] ] faces= [ [0,1,2], [0,2,3], [0,3,4], [0,4,1], [5,1,2],[5,2,3],[5,3,4],[5,4,1] ] me = Mesh.New('Bone') # create a new mesh me.verts.extend(coords) # add vertices to mesh me.faces.extend(faces) # add faces to the mesh (also adds edges) scn = Scene.GetCurrent() # link object to current scene ob = scn.objects.new(me, 'BoneMesh') return ob if editmode: Window.EditMode(1) # optional, just being nice #MakeOctaedron(12.0) # Makes a sample Octaedron def ReadBones(): scn= Scene.GetCurrent() arm_ob= scn.objects.active if not arm_ob or arm_ob.type != 'Armature': Draw.PupMenu('not an armature object') return # Deselect all for ob in scn.objects: if ob != arm_ob: ob.sel= 0 arm_mat= arm_ob.matrixWorld arm_data= arm_ob.getData() bones= arm_data.bones.values() print "huesos", bones for bone in bones: bone_mat= bone.matrix['ARMATURESPACE'] bone_mat_world= bone_mat*arm_mat bone_len= bone.length print bone_len if Blender.Armature.NO_DEFORM not in bone.options: print "Hueso no deformable", bone.name octaedron = MakeOctaedron(bone_len) octaedron.setMatrix(bone_mat_world) arm_ob.makeParentBone(octaedron, bone.name) print "Emparente malla: ",octaedron, "a hueso: ", bone.name #print bone_len # ob_empty= scn.objects.new('Empty') # ob_empty.setMatrix(bone_mat_world) ReadBones()