常用代码
打印 print
import c4ddef main(): print("你好") #R23版本需要加括号if __name__ == "__main__": main()
刷新界面 c4d.EventAdd()
import c4ddef main(): obj1 = c4d.BaseObject(5160) #创建球体 doc.InsertObject(obj1) #导入到文档 c4d.EventAdd() #刷新界面if __name__=='__main__': main()
对象
获取选中对象 op
import c4ddef main(): print(op) #当前选中对象if __name__=='__main__': main()

判断是不是对象 is None
import c4ddef main(): if op is None: print("op不是对象") return True print("op是对象")if __name__=='__main__': main()
可拖拽的对象参数
import c4dfrom c4d import guidef main(): duixiang = op # 给op取一个名字,可以自定义 print duixiang[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X] # 打印 位置参数 X duixiang[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X]=500 # 修改位置参数 X print duixiang[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X] # 打印位置参数 X duixiang[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y]=100 # 修改位置参数 Yif __name__=='__main__': main() c4d.EventAdd() # 刷新界面
返回所选对象集合 GetActiveObjects
(int) ,整数,满足多个条件用 | 连接flags
| 0 |
GETACTIVEOBJECTFLAGS_NONE |
如果子集选中,结果只显示父级对象 |
| 1 |
GETACTIVEOBJECTFLAGS_CHILDREN |
包括子集选中对象 |
| 2 |
GETACTIVEOBJECTFLAGS_SELECTIONORDER |
根据所选顺序排序,默认顺序自上而下 |
**
import c4dfrom c4d import guidef main(): so = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_SELECTIONORDER | c4d.GETACTIVEOBJECTFLAGS_CHILDREN) for o in so: #遍历所选对象 print o[c4d.ID_BASELIST_NAME] #显示对象名称if __name__=='__main__': main()
创建对象 BaseObject
import c4ddef main(): obj1 = c4d.BaseObject(5160) #创建球体 doc.InsertObject(obj1) #导入到文档if __name__=='__main__': main() c4d.EventAdd()
获取对象名称 GetName
import c4ddef main(): if op is None: return True print(op.GetName()) #对象名称if __name__=='__main__': main() c4d.EventAdd()
修改对象名称 GetName
import c4ddef main(): if op is None: return True print(op.SetName()) #修改对象名称if __name__=='__main__': main() c4d.EventAdd()
返回对象类型 GetTypeName
import c4ddef main(): if op is None: return True print(op.GetTypeName()) #对象类型if __name__=='__main__': main() c4d.EventAdd()
————————————————
对象的父级 GetUp
import c4ddef main(): parent = op.GetUp() print(parent) #对象的父级if __name__=='__main__': main()
返回所有子对象集 GetChildren
第一个子对象 GetDown
import c4ddef main(): parent = op.GetDown() print(parent) #对象的第一个子集if __name__=='__main__': main()
最后一个子对象 GetDownLast
上一个同级对象 GetPred
import c4ddef main(): parent = op.GetDown() print(parent) #上一个同级对象if __name__=='__main__': main()
下一个同级对象 GetNext
import c4ddef main(): parent = op.GetNext() print(parent) #下一个同级对象if __name__=='__main__': main()
复合用法 op.GetUp().GetNext()
import c4ddef main(): obj = op.GetUp().GetNext() print(obj) #父级对象的下一个同级对象if __name__=='__main__': main()
InsertAfter
InsertUnder
InsertUnderLast
InsertBefore
顶点
获取点总数 GetPointCount
import c4ddef main(): print(op.GetTagDataCount(c4d.Tpoint)) #方法一:点总数 print(op.GetPointCount()) #方法二:总数if __name__=='__main__': main() c4d.EventAdd()
获取面总数 GetTagDataCount
import c4ddef main(): print(op.GetTagDataCount(c4d.Tpolygon)) #面总数if __name__=='__main__': main() c4d.EventAdd()
所有点的位置 GetAllPoints
import c4ddef main(): print(op.GetAllPoints()) #所有点的位置if __name__=='__main__': main() c4d.EventAdd()
第几个点的位置 GetPoint
import c4ddef main(): print(op.GetPoint(1)) #第几个点的位置if __name__=='__main__': main() c4d.EventAdd()
取消选择的顶点 .DeselectAll
import c4ddef main(): select_points = op.GetPointS() #返回所选顶点 select_points.DeselectAll() #所选顶点取消选择if __name__ == "__main__": main() #入口函数 c4d.EventAdd() #刷新视图
标签
获取所有标签 GetTags
import c4ddef main(): if op is None: return True print "所有标签", op.GetTags() #所有标签if __name__=='__main__': main() c4d.EventAdd()
创建常用标签 MakeTag
import c4ddef main(): if op is None: return True op.MakeTag(5612) #平滑标签 op.MakeTag(5637) #合成标签 op.MakeTag(5629) #保护标签 op.MakeTag(5676) #目标标签 op.MakeTag(1019364) #约束标签 op.MakeTag(1019561) #IK标签 op.MakeTag(1001149) #XPresso标签if __name__=='__main__': main() c4d.EventAdd()
删除标签 KillTag
import c4ddef main(): if op is None: return True op.KillTag(5612) #删除标签if __name__=='__main__': main() c4d.EventAdd()
第一个标签 GetFirstTag
import c4ddef main(): if op is None: return True print("第一个标签", op.GetFirstTag()) #第一个标签if __name__=='__main__': main() c4d.EventAdd()
最后一个标签 GetLastTag
import c4ddef main(): if op is None: return True print("最后一个标签", op.GetLastTag()) #最后一个标签if __name__=='__main__': main() c4d.EventAdd()
文档
返回当前文档 GetActiveDocument
import c4ddef main(): doc = c4d.documents.GetActiveDocument() #当前打开文档 print(doc)if __name__=='__main__': main() c4d.EventAdd()
获取当前文档名称 GetDocumentName
import c4ddef main(): doc = c4d.documents.GetActiveDocument() print(doc.GetDocumentName()) #当前文档名称if __name__=='__main__': main() c4d.EventAdd()
当前文档路径 GetDocumentPath
import c4ddef main(): print(doc.GetDocumentPath()) #当前文档路径if __name__=='__main__': main() c4d.EventAdd()
图层对象
获取对象所属图层
import c4ddef main(): doc = c4d.documents.GetActiveDocument() Layer = op.GetLayerObject(doc) #获取对象所属图层 print Layer.GetName()if __name__ == "__main__": main() c4d.EventAdd()
获取图层参数
import c4ddef main(): doc = c4d.documents.GetActiveDocument() print op.GetLayerData(doc) #获取对象图层参数if __name__ == "__main__": main() c4d.EventAdd()
用户数据
添加用户数据
import c4ddef main(): if op is None: return True userdata = c4d.GetCustomDatatypeDefault(c4d.DTYPE_BASELISTLINK) userdata[c4d.DESC_NAME] = "我是数据" linkobject = op.AddUserData(userdata)if __name__=='__main__': main() c4d.EventAdd()
位置矩阵
常用位置矩阵
import c4ddef main(): print "GetAbsPos:", op.GetAbsPos() print "GetMgn:", op.GetMgn() print "GetMg:", op.GetMg() print "GetMp:", op.GetMp() print "GetMln:", op.GetMln() print "GetMl:", op.GetMl() print "GetUpMg:", op.GetUpMg() print "GetRelMl:", op.GetRelMl() print "GetRelMln:", op.GetRelMln()if __name__=='__main__': main() c4d.EventAdd()

op.GetMg()
import c4ddef main(): mat = op.GetMg() print mat.v1 print mat.v2 print mat.v3 print mat.off #偏移位置 X,Y,Zif __name__=='__main__': main()

off: 三个参数为 x y z
http://cgrebel.com/index.html 国外经典的教程
op.GetModelingAxis(self, doc)

根据名称修改物体颜色
import c4d#根据名称修改图层颜色def main(): doc = c4d.documents.GetActiveDocument() slist = c4d.documents.GetActiveDocument().GetActiveObjects(1); for ob in slist: oname = ob.GetName() #print oname if oname.find("ik") <> -1: ob[c4d.ID_BASEOBJECT_USECOLOR]=2 #显示颜色 ob[c4d.ID_BASEOBJECT_COLOR] = c4d.Vector(255,0,0) elif oname.find("fk")<> -1: ob[c4d.ID_BASEOBJECT_USECOLOR]=2 #显示颜色 ob[c4d.ID_BASEOBJECT_COLOR] = c4d.Vector(0,255,0) elif oname.find("con")<> -1: ob[c4d.ID_BASEOBJECT_USECOLOR]=2 #显示颜色 ob[c4d.ID_BASEOBJECT_COLOR] = c4d.Vector(0,0,255)if __name__=='__main__': main() c4d.EventAdd()
获取轴心
tagXpression = spline_1.MakeTag(1001149) #添加XPresso标签null_1 = c4d.BaseObject(c4d.Onull) #创建空白对象null_1.SetName(str(i)) #修改名称poPos = spline_1.GetPoint(i) #顶点坐标str(i)null_1.SetRelPos(poPos) #修改坐标
null_1[c4d.NULLOBJECT_DISPLAY]=2 #对象显示为圆环 5是三角形
GvNode.AddPort 添加端口
GetRelPos 对象相对位置
import c4dfrom c4d import guidef SetToolData(doc, toolID, paramID, data): plug = c4d.plugins.FindPlugin(toolID, c4d.PLUGINTYPE_TOOL) if plug is None: return##添加用户数据def AddLongDataType(obj): if obj is None: return bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_LONG) #定义数据类型 bc[c4d.DESC_NAME] = "数据名称" #定义名称 bc2 = c4d.GetCustomDataTypeDefault(c4d.DTYPE_STRING) #定义数据类型 bc2[c4d.DESC_NAME] = "文本" #定义名称 bc3 = c4d.GetCustomDataTypeDefault(c4d.DTYPE_TIME) #定义数据类型 bc3[c4d.DESC_NAME] = "DTYPE_TIME" #定义名称 obj.AddUserData(bc2) obj.AddUserData(bc3) element = obj.AddUserData(bc) # 添加到对象 obj[element] = 30 # 修改数值 c4d.EventAdd() # 刷新界面def main(): obj1 = op mat = c4d.Matrix() # => Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (0, 0, 0)) mat = c4d.Matrix() mat.off = c4d.Vector(100,0,0) v1 = c4d.Vector(3) v2 = c4d.Vector(12,4,9.3) v3 = c4d.Vector(9,80,3) off = c4d.Vector(v1+v2) mat = c4d.Matrix(off,v1,v2,v3) op.SetModelingAxis(mat) print "唯一ID", op.GetGUID() return AddLongDataType(op) #添加用户数据 return print "编辑可见", op.GetEditorMode() #2=默认 绿=0 红=1 从上刷到下是编辑器的小点 print "渲染可见", op.GetRenderMode() #2=默认 绿=0 红=1 从下刷到上是渲染器 return print "绝对位置", op.GetAbsPos() print "绝对比例", op.GetAbsScale() print "绝对旋转", op.GetAbsRot() print "冻结位置", op.GetFrozenPos() print "冻结比例", op.GetFrozenScale() print "冻结比例", op.GetFrozenRot() print "相对位置", op.GetRelPos() print "相对比例", op.GetRelScale() print "相对旋转", op.GetRelRot() print "常规矩阵", op.GetMl() #对象位置、缩放和旋转的局部矩阵 print "冻结矩阵", op.GetFrozenMln() print "GetRelMln", op.GetRelMln() print "GetRelMl", op.GetRelMl() print "GetMg", op.GetMg() print "GetMln", op.GetMln() print "GetMgn", op.GetMgn() print "GetUpMg", op.GetUpMg() print "GetMp", op.GetMp() print "GetRad", op.GetRad()if __name__=='__main__': main()
其他
import c4dimport collectionsdef main(): d = collections.OrderedDict([('a',1),('c',3),('b',2)]) ''' 或者把上面的那一行改成: d = collections.OrderedDict() d['a'] = 1 d['b'] = 2 d['c'] = 3 ''' for k,v in d.items(): print(k,v) return Tester = { "name":"shawxie", "phone":"135xxxx", "Address":"深圳市南山区", "job":"软件测试", "hobby":"爬山" } y=list(Tester.keys()) print(y.index("name")) #找出name的索引值是多少 print(y[0]) #通过索引值找到name #print(y[y.index("name")]) 也可以这样写,一步到位 return dict = {'a': 1, 'b': 2, 'b': '3'} print dict.keys() #返回一个字典所有的键 print dict.values() #返回一个字典所有的键。 doc = c4d.documents.GetActiveDocument() #点 print "隐藏点的集合:", op.GetPointH() #隐藏点的集合 print "所选点的集合:", op.GetPointS() #所选点的集合 print "更改后点的数量:", op.ResizeObject(5) #更改对象点的数量if __name__=='__main__': main() c4d.EventAdd()#刷新界面
常用控件颜色
https://developers.maxon.net/docs/Cinema4DPythonSDK/html/consts/COLOR.html
C4D官方
顶点对象
选择对象 c4d.BaseSelect
| BaseSelect.init(self) |
初始化新的基本选择。 |
| BaseSelect.GetCount(self) |
获取所选元素的数量。 |
| BaseSelect.GetSegments(self) |
获取包含元素的段数。 |
| BaseSelect.IsSelected(self, num) |
获取元素的选择状态。 |
| BaseSelect.Select(self, num) |
选择一个元素。 |
| BaseSelect.SelectAll(self, max[, min, …]) |
选择给定范围内的所有元素。 |
| BaseSelect.Deselect(self, num) |
取消选择元素。 |
| BaseSelect.DeselectAll(self) |
取消选择所有元素。 |
| BaseSelect.Toggle(self, num) |
切换元素的选择状态。 |
| BaseSelect.ToggleAll(self, min, max) |
切换给定范围内所有元素的选择状态。 |
| BaseSelect.GetRange(self, seg, max) |
返回段中包含的选定元素。 |
| BaseSelect.Merge(self, src) |
选择在src 中选择的所有元素。 |
| BaseSelect.DeselectFrom(self, src) |
取消选择在src中选择的所有元素。 |
| BaseSelect.Cross(self, src) |
将src 中的所有元素相交。 |
| BaseSelect.GetClone(self) |
使用其元素复制此选择对象。 |
| BaseSelect.GetDirty(self) |
返回所选内容的脏计数器。 |
| BaseSelect.CopyTo(self, dest) |
将此选择对象中的选择元素复制到另一个基本选择。 |
| BaseSelect.SetAll(self, states) |
从列表中设置所有选定的元素。 |
| BaseSelect.GetAll(self, max) |
返回列表中的所有选定元素。 |
| BaseSelect.HostAlive(self) |
如果主机对象仍处于活动状态,则返回。 |
| BaseSelect.Write(self, hf) |
将所选内容保存到文件中。 |
| BaseSelect.Read(self, hf) |
从文件读取所选内容。 |
| BaseSelect.FindSegment(self, num) |
返回包含元素num 的段。 |
| BaseSelect.GetLastElement(self) |
返回最后一个元素。 |
剪贴板
命令处理程序
常见内容
废弃
许可证
状态栏
网络
对象内容
设置
状态栏
纹理
更新
版本信息
未分类
| c4d.PrefsLib_OpenDialog(page) |
用于在特定页面上打开影院 4D 的首选项对话框。 |
| c4d.RestartMe([param, exitcode]) |
重新启动影院 4D。 |
| c4d.GeGetSystemInfo() |
检索系统信息标志。 |
| c4d.CallButton(op, id) |
模拟按钮的单击。 |
| c4d.GetCustomDataTypeDefault(type) |
检索数据类型的默认设置。 |
| c4d.CheckIsRunning(type) |
检查任务是否正在运行。 |
| c4d.GetMachineFeatures([type]) |
检索计算机的功能 |
| c4d.StartEditorRender(active_only, raybrush, …) |
启动编辑器渲染器。 |
| c4d.Cast(type, obj) |
将obj强制转换到给定类型。 |
| c4d.CallFunction(op, function, arg1, …) |
调用在脚本表达式中定义的函数。 |
| c4d.AllocListHead() |
分配列表头。 |
| c4d.CopyData(op1, descid1, op2, …) |
将参数数据复制到另一个参数数据。 |
| c4d.WriteConsole(str) |
将str写入 Python 控制台。 |
| c4d.IsUVToolMode(document) |
检查当前上下文是否为 UV,如果选择了 UV 模式或 UV 纹理编辑器是最后一个使用。 |
还不会的代码
c4d.documents.MergeDocument( c4d.documents.GetActiveDocument(),os.path.join(os.path.dirname(__file__), '[DISTANCE]Super Cam.c4d'),c4d.SCENEFILTER_OBJECTS)c4d.documents.MergeDocument()os.path.dirname(__file__)c4d.SCENEFILTER_OBJECTS
os.path.join(“path1”,”path2”) 拼接路径