12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #
- # 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 traceback, sys, uuid, os, json
- #
- # Utility methods for processing scenes
- #
- def log_exception_traceback():
- exc_type, exc_value, exc_tb = sys.exc_info()
- data = traceback.format_exception(exc_type, exc_value, exc_tb)
- print(str(data))
- def get_node_names(sceneGraph, nodeTypeName, testEndPoint = False, validList = None):
- import azlmbr.scene.graph
- import scene_api.scene_data
- node = sceneGraph.get_root()
- nodeList = []
- children = []
- paths = []
- while node.IsValid():
- # store children to process after siblings
- if sceneGraph.has_node_child(node):
- children.append(sceneGraph.get_node_child(node))
- nodeName = scene_api.scene_data.SceneGraphName(sceneGraph.get_node_name(node))
- paths.append(nodeName.get_path())
-
- include = True
-
- if (validList is not None):
- include = False # if a valid list filter provided, assume to not include node name
- name_parts = nodeName.get_path().split('.')
- for valid in validList:
- if (valid in name_parts[-1]):
- include = True
- break
- # store any node that has provides specifc data content
- nodeContent = sceneGraph.get_node_content(node)
- if include and nodeContent.CastWithTypeName(nodeTypeName):
- if testEndPoint is not None:
- include = sceneGraph.is_node_end_point(node) is testEndPoint
- if include:
- if (len(nodeName.get_path())):
- nodeList.append(scene_api.scene_data.SceneGraphName(sceneGraph.get_node_name(node)))
- # advance to next node
- if sceneGraph.has_node_sibling(node):
- node = sceneGraph.get_node_sibling(node)
- elif children:
- node = children.pop()
- else:
- node = azlmbr.scene.graph.NodeIndex()
- return nodeList, paths
|