123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- """
- import azlmbr.scene as sceneApi
- from scene_api import scene_data as sceneData
- import uuid
- def update_manifest(scene):
- graph = sceneData.SceneGraph(scene.graph)
- rootNode = graph.get_root()
- kidNode = graph.get_node_child(rootNode)
- chunkNameList = []
- siblingNode = graph.get_node_child(kidNode)
- while siblingNode.IsValid():
- chunkGraphName = sceneData.SceneGraphName(graph.get_node_name(siblingNode))
- chunkName = chunkGraphName.get_name()
- chunkNameList.append(chunkName)
- siblingNode = graph.get_node_sibling(siblingNode)
- sceneManifest = sceneData.SceneManifest()
- for activeMeshIndex in range(len(chunkNameList)):
- chunkName = chunkNameList[activeMeshIndex]
- meshGroup = sceneManifest.add_mesh_group(chunkName)
- meshGroup['id'] = '{' + str(uuid.uuid5(uuid.NAMESPACE_DNS, scene.sourceFilename + chunkName)) + '}'
- sceneManifest.mesh_group_add_comment(meshGroup, 'auto generated by test_chunks_builder')
- sceneManifest.mesh_group_add_advanced_coordinate_system(meshGroup)
- for meshIndex in range(len(chunkNameList)):
- if (activeMeshIndex == meshIndex):
- sceneManifest.mesh_group_select_node(meshGroup, chunkNameList[meshIndex])
- else:
- sceneManifest.mesh_group_unselect_node(meshGroup, chunkNameList[meshIndex])
- return sceneManifest.export()
- mySceneJobHandler = None
- def on_update_manifest(args):
- scene = args[0]
- result = update_manifest(scene)
- global mySceneJobHandler
- # do not delete or set sceneJobHandler to None, just disconnect from it.
- # this call is occuring while the scene Job Handler itself is in the callstack, so deleting it here
- # would cause a crash.
- mySceneJobHandler.disconnect()
- return result
- def main():
- global mySceneJobHandler
- mySceneJobHandler = sceneApi.ScriptBuildingNotificationBusHandler()
- mySceneJobHandler.connect()
- mySceneJobHandler.add_callback('OnUpdateManifest', on_update_manifest)
- if __name__ == "__main__":
- main()
|