如何在3dMax中使用Python返回场景内所有对象的列表?
3dMax支持开发基于Python的工具和扩展,因此可以对其进行自定义并将其集成到现代数字内容创建管道中。为此,3dMax集成了Python 3.9解释器,并通过pymxs API公开了3dMax的丰富功能。此外,可以使用包含的PySide2框架创建基于Python的工具的用户界面。
对3D动画软件中的脚本化工具和实用程序来说,遍历对象的所有层次或场景中的所有对象的列表是非常常见的要求。
对于MaxScript脚本来说,只需要写“objects”一词就可以引用场景中所有对象的列表。
除非我遗漏了一些显而易见的东西,但是,3dmax Python API中没有类似的快捷方法。
为了列出场景中的所有对象,您需要使用递归函数,该函数将返回节点的所有子级和子级的列表,等等。
在下面的示例中,函数“list_children()”将返回一个列表,列出所提供节点层次结构中的所有对象,并且当通过MaxPlus.Core.GetRootNode()给定场景的根节点时,它将返回场景中所有对象的列表。
将“list_children()”封装在“scene_objects()”函数中,提供了一种方便的方法,只需调用“scene_objects()”即可获得场景中所有对象的列表。
def scene_objects():def list_children(node):list = []for c in node.Children:list.append(c)list = list + list_children(c)return listreturn list_children(MaxPlus.Core.GetRootNode())for o in scene_objects():print o.Name
在3dMax中测试代码:
提示:3dmax是自带了Python运行环境的,不需要再安装。
1.在3dmax中创建一个简单的多个对象构成的场景,如下图:
2.点击3dmax主菜单->脚本->新建脚本,将前面的这段Python代码复制粘贴到脚本编辑器窗口中,然后,在编辑器窗口的“语言”菜单中选择“Python”,告诉3dmax编辑器中的代码是python语言。
3.打开侦听器窗口。按下“Ctrl+e”键执行代码,可以从侦听器窗口中看到执行的结果,如图:
需要注意的是:在复制和粘贴本例中的脚本时,缩进可能无法正确粘贴,这将影响代码的正确执行,所以,粘贴的时候要检查缩进的正确性。