如何在3dMax中使用Python返回场景内所有对象的列表?

如何在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 list
    return list_children(MaxPlus.Core.GetRootNode())


for o in scene_objects():
    print o.Name

在3dMax中测试代码:

提示:3dmax是自带了Python运行环境的,不需要再安装。

1.在3dmax中创建一个简单的多个对象构成的场景,如下图:    

如何在3dMax中使用Python返回场景内所有对象的列表?_第1张图片

2.点击3dmax主菜单->脚本->新建脚本,将前面的这段Python代码复制粘贴到脚本编辑器窗口中,然后,在编辑器窗口的“语言”菜单中选择“Python”,告诉3dmax编辑器中的代码是python语言。    

如何在3dMax中使用Python返回场景内所有对象的列表?_第2张图片

3.打开侦听器窗口。按下“Ctrl+e”键执行代码,可以从侦听器窗口中看到执行的结果,如图:

如何在3dMax中使用Python返回场景内所有对象的列表?_第3张图片

需要注意的是:在复制和粘贴本例中的脚本时,缩进可能无法正确粘贴,这将影响代码的正确执行,所以,粘贴的时候要检查缩进的正确性。

你可能感兴趣的:(3DMAX,python,开发语言,MAXScript,3dmax,3dmax插件)