def ExportObject(scene, parentNode, blenderScene, blenderObject): ''' recusivally load convert a blender scene to an alchemedia node''' # create an alchemedia scene node node = scene.CreateSceneNode(parentNode) sceneObject = pyScene.pyObject(scene, node) sceneObject.SetName(blenderObject.getName()) # save teh transformation matrix (x, y, z) = blenderObject.getLocation('worldspace') (SizeX, SizeY, SizeZ) = blenderObject.getSize('worldspace') euler = blenderObject.getEuler('worldspace') sceneObject.SetMatrix(x, y, z, euler.x, euler.y, euler.z, SizeX, SizeY, SizeZ) # if this object has a mesh, export the mesh if blenderObject.getType() == 'Mesh': ExportMesh(scene, node, blenderScene, blenderObject) # if thsi object is a rigif body export body isRigBody = blenderObject.rbFlags & (Blender.Object.RBFlags.RIGIDBODY | Blender.Object.RBFlags.BOUNDS) #isNotRigBody = blenderObject.rbFlags & Blender.Object.RBFlags.GHOST if isRigBody and blenderObject.isSoftBody == False: ExportRigidBody(scene, node, blenderScene, blenderObject) # it appears blender does not has interface for getting the children of an object # I need to do a brute for scan here for object in blenderScene.objects: if object.getParent() == blenderObject: type = object.getType() if type == 'Mesh' or type == 'Empty': ExportObject(scene, node, blenderScene, object)
def ExportObject(scene, parentNode, blenderScene, blenderObject): ''' recusivally load convert a blender scene to an alchemedia node''' # create an alchemedia scene node node = scene.CreateSceneNode(parentNode) sceneObject = pyScene.pyObject(scene, node); sceneObject.SetName (blenderObject.getName()) # save teh transformation matrix (x, y, z) = blenderObject.getLocation('worldspace') (SizeX, SizeY, SizeZ) = blenderObject.getSize('worldspace') euler = blenderObject.getEuler('worldspace') sceneObject.SetMatrix(x, y, z, euler.x, euler.y, euler.z, SizeX, SizeY, SizeZ); # if this object has a mesh, export the mesh if blenderObject.getType() == 'Mesh': ExportMesh (scene, node, blenderScene, blenderObject) # if thsi object is a rigif body export body isRigBody = blenderObject.rbFlags & (Blender.Object.RBFlags.RIGIDBODY | Blender.Object.RBFlags.BOUNDS) #isNotRigBody = blenderObject.rbFlags & Blender.Object.RBFlags.GHOST if isRigBody and blenderObject.isSoftBody == False: ExportRigidBody(scene, node, blenderScene, blenderObject) # it appears blender does not has interface for getting the children of an object # I need to do a brute for scan here for object in blenderScene.objects: if object.getParent() == blenderObject: type = object.getType() if type == 'Mesh' or type == 'Empty': ExportObject(scene, node, blenderScene, object)
def LoadNodesScene(scene, rootNode, blenderScene, chidrenList): ''' recusivally load convert a scene to a blender scene''' blenderObject = None meshNode = GetMeshNode(scene, rootNode) if meshNode != None: blenderObject = CreateBlenderMeshObjectFromNode( scene, meshNode, blenderScene) else: blenderObject = CreateBlenderEmptyOject(scene, rootNode, blenderScene) # add the object to the childer list chidrenList.append(blenderObject) # see if this node has more children and add then to the scene myChidren = [] childLink = scene.GetFirstChildLink(rootNode) while childLink != None: childNode = scene.GetNodeFromLink(childLink) if scene.IsSceneNode(childNode) == True: LoadNodesScene(scene, childNode, blenderScene, myChidren) childLink = scene.GetNextChildLink(rootNode, childLink) blenderObject.makeParent(myChidren) # set the object name blenderObject.setName(scene.GetNodeName(rootNode)) # set position and oriention object = pyScene.pyObject(scene, rootNode) #posit = object.GetLocalPosition() #eulers = object.GetLocalEulers() #scale = object.GetLocalScale() #euler = [eulers.x, eulers.y, eulers.z] #blenderObject.setSize(scale.x, scale.y, scale.z) #blenderObject.setLocation(posit.x, posit.y, posit.z) #blenderObject.setEuler(euler) objectMatrix = object.GetMatrix4x4() blenderMatrix = Blender.Mathutils.Matrix([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]) blenderMatrix[0][0] = objectMatrix.e00 blenderMatrix[0][1] = objectMatrix.e01 blenderMatrix[0][2] = objectMatrix.e02 blenderMatrix[1][0] = objectMatrix.e10 blenderMatrix[1][1] = objectMatrix.e11 blenderMatrix[1][2] = objectMatrix.e12 blenderMatrix[2][0] = objectMatrix.e20 blenderMatrix[2][1] = objectMatrix.e21 blenderMatrix[2][2] = objectMatrix.e22 blenderMatrix[3][0] = objectMatrix.e30 blenderMatrix[3][1] = objectMatrix.e31 blenderMatrix[3][2] = objectMatrix.e32 blenderObject.setMatrix(blenderMatrix)
def LoadNodesScene(scene, rootNode, blenderScene, chidrenList): ''' recusivally load convert a scene to a blender scene''' blenderObject = None meshNode = GetMeshNode(scene, rootNode) if meshNode != None: blenderObject = CreateBlenderMeshObjectFromNode (scene, meshNode, blenderScene) else: blenderObject = CreateBlenderEmptyOject (scene, rootNode, blenderScene) # add the object to the childer list chidrenList.append(blenderObject) # see if this node has more children and add then to the scene myChidren = [] childLink = scene.GetFirstChildLink (rootNode) while childLink != None: childNode = scene.GetNodeFromLink(childLink) if scene.IsSceneNode(childNode) == True: LoadNodesScene(scene, childNode, blenderScene, myChidren) childLink = scene.GetNextChildLink (rootNode, childLink) blenderObject.makeParent(myChidren) # set the object name blenderObject.setName (scene.GetNodeName(rootNode)) # set position and oriention object = pyScene.pyObject (scene, rootNode) #posit = object.GetLocalPosition() #eulers = object.GetLocalEulers() #scale = object.GetLocalScale() #euler = [eulers.x, eulers.y, eulers.z] #blenderObject.setSize(scale.x, scale.y, scale.z) #blenderObject.setLocation(posit.x, posit.y, posit.z) #blenderObject.setEuler(euler) objectMatrix = object.GetMatrix4x4() blenderMatrix = Blender.Mathutils.Matrix([1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1]) blenderMatrix[0][0] = objectMatrix.e00 blenderMatrix[0][1] = objectMatrix.e01 blenderMatrix[0][2] = objectMatrix.e02 blenderMatrix[1][0] = objectMatrix.e10 blenderMatrix[1][1] = objectMatrix.e11 blenderMatrix[1][2] = objectMatrix.e12 blenderMatrix[2][0] = objectMatrix.e20 blenderMatrix[2][1] = objectMatrix.e21 blenderMatrix[2][2] = objectMatrix.e22 blenderMatrix[3][0] = objectMatrix.e30 blenderMatrix[3][1] = objectMatrix.e31 blenderMatrix[3][2] = objectMatrix.e32 blenderObject.setMatrix(blenderMatrix)