场景对象
场景对象指的是可以在视口中被创建和修改的对象。它们可能是:几何体(GeomObject),灯光(LightObject),相机(CameraObject),甚至是粒子和修改器。
必须为场景对象创建一个节点(Node),所有节点都实现自 INode 类
创建对象
通过 Factory.CreateObject() 方法和 Factory.CreateGeomObject() 方法来创建场景对象。然后,使用 Factory.CreateNode() 方法,并将场景对象做为传入的参数,为其创建节点。
通过为一个场景对象创建多个节点来创建场景对象的多个实例。
举个例子:
import MaxPlus
# 创建节点
# @param o: 场景对象
# @param cnt: 要创建的节点的数量
def createNodes(o, cnt):
return [MaxPlus.Factory.CreateNode(o) for i in xrange(cnt)]
# 链接节点的层级
# @param nodes: 节点列表+
def linkNodes(nodes):
for i in xrange(len(nodes) - 1):
nodes[i + 1].Parent = nodes[i]
# 直线排列所有节点
# @param nodes: 节点列表
# @param nodes: 间隔距离
def alignNodesInLine(nodes, pt):
for i in xrange(len(nodes)):
nodes[i].Move(MaxPlus.Point3(pt.X * i, pt.Y * i, pt.Z * i))
def main():
# 创建一个场景对象——球体
obj = MaxPlus.Factory.CreateGeomObject(MaxPlus.ClassIds.Sphere)
# 设置球体的半径
obj.ParameterBlock.Radius.Value = 3.0
# 创建节点,这里创建了10个节点
nodes = createNodes(obj, 10)
# 将创建的节点沿x轴,以5个单位的间隔排列
alignNodesInLine(nodes, MaxPlus.Point3(5, 0, 0))
# 链接节点
linkNodes(nodes)
# 以实例形式复制整个层级
copy = nodes[0].CreateTreeInstance()
# 将复制到的对象移动到新的位置
copy.Move(MaxPlus.Point3(0, 25, 0))
if __name__ == "__main__":
main()
执行结果如下图所示:
利用修改器来修改场景对象
添加修改器而已,没什么好说的,直接上代码
import MaxPlus
obj = MaxPlus.Factory.CreateGeomObject(MaxPlus.ClassIds.Cylinder)
obj.ParameterBlock.Radius.Value = 10.0
obj.ParameterBlock.Height.Value = 30.0
node = MaxPlus.Factory.CreateNode(obj)
# 创建一个Bend修改器
mod = MaxPlus.Factory.CreateObjectModifier(MaxPlus.ClassIds.Bend)
mod.ParameterBlock.BendAngle.Value = 45.0
node.AddModifier(mod)
照这么看的话,那么多修改器,不就都能添加了?嘿嘿嘿。。。