2 - 创建场景对象和利用修改器对场景对象做修改

场景对象

场景对象指的是可以在视口中被创建和修改的对象。它们可能是:几何体(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)

照这么看的话,那么多修改器,不就都能添加了?嘿嘿嘿。。。

转载于:https://my.oschina.net/sjmm/blog/1832826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值