如何在3dMax中使用Python按类型选择对象?
3dMax提供了pymxs API,这是MAXScript的Python包装器,可帮助您扩展和自定义3dMax,并更轻松地将其集成到基于Python的管道中。
pymxs模块包含一个运行时成员,该成员提供对MAXScript环境中的接口、函数、结构、对象、属性和变量的访问,无论这些接口是内置的还是由用户定义的。
如果需要选择特定类型的对象(节点),例如灯光、相机等。
可以使用INode类的GetObject()方法获取对节点对象的引用,或3dmax命令中的“modified object”,并使用对象的GetSuperClassID()方法获得表示对象超类的整数id。
此外,MaxPlus SuperClassIds类包含方便的常量,可以用来避免检查和记住超类的数字id。
下面给出一个选择场景中所有灯光对象的脚本示例:
from MaxPlus import SuperClassIds
from MaxPlus import SelectionManagerdef 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():obj = o.GetObject()if obj.GetSuperClassID() == SuperClassIds.Light:SelectionManager.SelectNode(o, False)
在3dMax中测试上面代码的执行:
1.在3dmax中创建一个由灯光、几何体和其他类型对象构成的简单场景,如下图:
2.点击3dmax主菜单->脚本->新建脚本,将前面的Python代码复制粘贴到MAXScript脚本编辑器窗口中。(请注意的是:在复制和粘贴本例中的脚本时,缩进可能无法正确粘贴,这将影响代码的正确执行,所以,粘贴的时候要检查缩进的正确性。)
3.点击MAXScript脚本编辑器菜单中的“语言”,然后,选择“Python”作为当前编程语言,如图:
4.取消场景中所有对象的选择状态。然后,按下“Ctrl+e”键执行Python脚本,可以看到场景中所有灯光对象在脚本执行后,都处于被选中状态,如图:
提示:Python运行环境随3dMax一起被安装,所以,不需要再另外安装Python运行环境。