• 如何在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()”即可获得场景中所有对象的列表。

    1. def scene_objects():
    2. def list_children(node):
    3. list = []
    4. for c in node.Children:
    5. list.append(c)
    6. list = list + list_children(c)
    7. return list
    8. return list_children(MaxPlus.Core.GetRootNode())
    9. for o in scene_objects():
    10. print o.Name

    在3dMax中测试代码:

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

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

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

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

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

  • 相关阅读:
    台灯应该买什么样的才能护眼?五款专业的护眼台灯推荐
    C语言——实用调试技巧——第1篇——(第22篇)
    Scroll zkEvm技术设计全面思考
    1029 旧键盘
    60行PHP代码实现值班信息查询带万年历
    什么是粘包和半包问题
    鲜花商城管理系统
    OP-TEE的内存和缓存管理(四):MMU的初始化和映射页表
    Dockerfile打包nginx镜像
    【技术干货】华为云FusionInsight MRS的自研超级调度器Superior Scheduler
  • 原文地址:https://blog.csdn.net/mufenglaoshi/article/details/134542980