You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
#
|
|
# 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
|