- 创建一个球体,初始绝对坐标设置为(10,20,30)
class First:
def __init__(self, object_id):
self.object_id = object_id
def create(self):
obj = c4d.BaseObject(self.object_id)
pos = obj.GetAbsPos() # 获取中心点绝对位置坐标, 有返回值,类型为Vector 默认(0,0,0)
pos_Vec = c4d.Vector(10,20,30) # 初始化一个Vector坐标
obj.SetAbsPos(pos_Vec) # 设置obj中心点绝对位置坐标,只能传入一个Vector类型值,无返回值。
doc.InsertObject(obj)
c4d.EventAdd()
ins = First(5160)
ins.create()
同理, 大小(X,Y,Z)和旋转(H,P,B)都类似的函数调用
BaseObject.GetAbsScale()
BaseObject.SetAbsScale()
BaseObject.GetAbsRot()
BaseObject.SetAbsRot()
得到obj矩阵信息 包括 物体、大小和旋转,函数:
BaseObject.GetMl() : Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (10, 20, 30))
- 将一个obj的矩阵,Copy to另外一个obj上
class First:
def __init__(self, object_id,x,y,z):
self.object_id = object_id
self.x = x
self.y = y
self.z = z
def create(self):
obj = c4d.BaseObject(self.object_id)
pos_Vec = c4d.Vector(self.x, self.y, self.z) # 初始化一个Vector坐标
obj.SetAbsPos(pos_Vec) # 设置obj中心点绝对位置坐标,只能传入一个Vector类型值,无返回值。
doc.InsertObject(obj)
c4d.EventAdd()
return obj
ins_1 = First(5160, 10, 20, 30)
ins_2 = First(5159, 0, 0, 0)
aa = ins_1.create()
bb = ins_2.create()
print('aa = ',aa.GetMl())
print('bb = ',bb.GetMl())
aa.CopyMatrixTo(bb) //==Copy the matrix to another object.==
print('bb_new = ',bb.GetMl())
-
结果:
- ('aa = ', Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (10, 20, 30)))
- ('bb = ', Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (0, 0, 0)))
- ('bb_new = ', Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (10, 20, 30)))