import c4d
import re
#Welcome to the world of Python
def AimAxis(pos_obj, aim_obj, aim_axis, up_obj, up_axis):
if isinstance(pos_obj, c4d.Vector): obj_pos = pos_obj
if isinstance(pos_obj, c4d.Matrix): obj_pos = pos_obj.off
if isinstance(pos_obj, c4d.BaseObject): obj_pos = pos_obj.GetMg().off
if isinstance(aim_obj, c4d.Vector): aim_obj_pos = aim_obj
if isinstance(aim_obj, c4d.Matrix): aim_obj_pos = aim_obj.off
if isinstance(aim_obj, c4d.BaseObject): aim_obj_pos = aim_obj.GetMg().off
if isinstance(up_obj, c4d.Vector): up_obj_pos = up_obj
if isinstance(up_obj, c4d.Matrix): up_obj_pos = up_obj.off
if isinstance(up_obj, c4d.BaseObject): up_obj_pos = up_obj.GetMg().off
axis = (aim_axis, up_axis)
axis_objs = (aim_obj_pos, up_obj_pos)
new_Mg = c4d.Matrix()
new_Mg.off = obj_pos
for i in axis:
if re.search(r"\A[-+]{,1}[xyz]\Z", i) == None:
print "String '{0}' wird nicht verstanden".format(i)
return None
if re.search(r"\A-[xyz]\Z", i) != None:
if i == axis[0]: aim_vec = -(aim_obj_pos - obj_pos)
if i == axis[1]: up_vec = -(obj_pos - up_obj_pos)
else:
if i == axis[0]: aim_vec = aim_obj_pos - obj_pos
if i == axis[1]: up_vec = obj_pos - up_obj_pos
aim_vec_norm = aim_vec.GetNormalized()
third_vec_norm = aim_vec.Cross(up_vec).GetNormalized()
up_vec_norm = aim_vec.Cross(third_vec_norm).GetNormalized()
for i in axis:
if i == axis[0]:
if re.search(r"\A[-+]{,1}[x]\Z",i) != None: new_Mg.v1 = aim_vec_norm
if re.search(r"\A[-+]{,1}[y]\Z",i) != None: new_Mg.v2 = aim_vec_norm
if re.search(r"\A[-+]{,1}[z]\Z",i) != None: new_Mg.v3 = aim_vec_norm
if i == axis[1]:
if re.search(r"\A[-+]{,1}[x]\Z",i) != None: new_Mg.v1 = up_vec_norm
if re.search(r"\A[-+]{,1}[y]\Z",i) != None: new_Mg.v2 = up_vec_norm
if re.search(r"\A[-+]{,1}[z]\Z",i) != None: new_Mg.v3 = up_vec_norm
new_str = ""
for i in range(len(str(axis))):
if re.search(r"[xyz]", str(axis)[i]) != None: new_str = new_str + str(axis)[i]
if new_str[0] == new_str[1]:
print "Benutze zwei unterschiedliche Achsen!"
return None
if new_str in ["zy","xz","yx"]:
if re.search(r"\A[^x]{1,2}\Z", new_str) != None: new_Mg.v1 = third_vec_norm
if re.search(r"\A[^y]{1,2}\Z", new_str) != None: new_Mg.v2 = third_vec_norm
if re.search(r"\A[^z]{1,2}\Z", new_str) != None: new_Mg.v3 = third_vec_norm
else:
if re.search(r"\A[^x]{1,2}\Z", new_str) != None: new_Mg.v1 = -third_vec_norm
if re.search(r"\A[^y]{1,2}\Z", new_str) != None: new_Mg.v2 = -third_vec_norm
if re.search(r"\A[^z]{1,2}\Z", new_str) != None: new_Mg.v3 = -third_vec_norm
return new_Mg
def main():
obj = op.GetObject()
aim_obj = doc.SearchObject("AIM")
up_obj = doc.SearchObject("UpV")
obj.SetMg(AimAxis(obj, aim_obj, "x", up_obj, "-z"))