c4d python_C4D python 创建物体修改属性

首先,这里会讨论c4d 对象管理器中的objects,以及编程语言中的实例。

Object中的对象是c4d.BaseObject类中的实例,其是c4d.BaseList2D的子类,实现了层级组织的数据,你在c4d中常会看到(对象管理器,

层级通道,渲染选项)。子类中可以使用父类中的函数。baseobject可以使用baselist2d中的函数。

修改物体属性

c4d.BaseList2D有一个c4d.BaseContainer的引用。其有一个数组包含了属性管理器中所有的属性。

1. Accessing the BaseContainer and using it’s methods

修改对象的参数很简单。首先,我们获取c4d.BaseContainer实例,然后,找到想修改参数的id,然后就可以改了。

运行脚本前确认cube对象被选中了

importc4d

bc =op.GetDataInstance()

bc.SetVector(c4d.PRIM_CUBE_LEN, c4d.Vector(500, 100, 20))

注意,c4d.BaseContainer.GetDataInstance()返回最初的容器,不是拷贝。修改容器会直接修改容器的参数。如果想使用拷贝,使用c4d.BaseObject.GetData()

2. Accessing the BaseContainer and using subscripting

有更简单的方法,替代方法就是SetVector,SetReal等。技巧就是使用索引下标法[]

importc4d

bc =op.GetDataInstance()

bc[c4d.PRIM_CUBE_LEN] =c4d.Vector(500, 100, 20)

3. Using subscripting directly on the object

直接在物体上使用下标。 第三种也就是最后一种修改物体参数的饿方法就是直接在物体上使用下标

import c4d

op[c4d.PRIM_CUBE_LEN] =c4d.Vector(500, 100, 20)

有更好的吗,基本上你会说“越不方便,效率越高”, 编程方面是对的。添加很多简便易用的接口就得包装更底层的接口。 可以这么说,

第一种方法最快,第二种和第三种是最慢的,但这是为什么呢

Creating new objects in Python

python中穿件新物体,讨论了如何修改物体的参数,现在可以学怎么创建物体了。有好几种方法呢.

1. Create an all new object from scratch 从头创建物体

如第一节所说,每个物体都是c4d.BaseObject的实例,为啥不直接创建这个类的实例呢? 很简单,构造函数需要一个type来决定实例化那个类

importc4d

op =c4d.BaseObject(c4d.Ocube)

现在就创建了一个物体。随后干啥呢。给document中添加物体有很多方法,可以使用当前文档或者其他物体来这么做。

import c4d

op =c4d.BaseObject(c4d.Ocube)

doc.InsertObject(op)

# .. or ..

op.InsertBefore(doc.GetFirstObject())

两种方法结果一样,但第一种更有优势,如果doc.GetFirstObject()返回none,如果document中没有object,那么调用就会在

op.InsertBefore(None)停下来,并引发一个异常。

2. Cloning an existing object 拷贝物体

如果不怕c4d崩溃,就测试下面的代码

op =doc.GetFirstObject()

op.InsertUnder(op)

很简单,op就是内部实例的的第一个物体,将其插入自己下面,会导致死循环。

MyUniqueCube

MyUniqueCube

MyUniqueCube

[and so on ... ]

永远不要插入一个已在别处存在的物体

创建物体的拷贝就能避免这个

op =doc.GetFirstObject()

op.InsertUnder(op.GetClone())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值