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)
Example #3
0
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)