如何在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中创建一个简单的多个对象构成的场景,如下图:    

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐风老师

真诚赞赏,手有余香!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值