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())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,473评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • 睡前回想今天,上午做的事都是计划之内,下午浪费了一会儿时间,晚上都是意料之外。 上午顺利完成了为父亲验血,因为准备...
    绿竹水心阅读 1,085评论 0 1
  • 曾经的孩提时, 曾经的梦想。 在一个很遥远很遥远的地方, 蓝蓝的天空, 掠着几片白云, 偶尔,几声悦耳的虫鸣、鸟唱...
    伊凡轩阅读 1,189评论 0 0
  • 通常在代码中产生的bug,往往是源于概念不清晰。知己知彼百战不殆,对内存这块了如指掌,能极大优化代码的性能。 一、...
    谦谦君子修罗刀阅读 3,561评论 0 3

友情链接更多精彩内容