• 如何在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# 10新特性
    【java计算机毕设】博客管理系统 javaweb springboot vue mysql
    uni-app vuex全局计时
    Centos服务在服务器重启后自启
    球幕投影有哪些常见的物理表现形式?
    LVM 原理及动态调整空间使用
    uniapp自定义顶部导航栏
    【IDEA】使用idea调试时查看对象集合的值
    曲线艺术编程 coding curves 第七章 抛物线(Parabolas)
    Inkscape如何将png图片转换为svg图片并且不失真
  • 原文地址:https://blog.csdn.net/mufenglaoshi/article/details/134542980