Maxon's How to Use Matrices
C4D Python SDK Matrix Reference
Some PSR helper functions written by Maxon with additions for point manipulation by me
############## HIERARCHY HELPERS ###################### def GetGlobalPosition(obj): """ Returns the global position of obj """ return obj.GetMg().off def GetGlobalRotation(obj): """ Returns the global rotation of obj """ return utils.MatrixToHPB(obj.GetMg()) def GetGlobalScale(obj): """ Returns the global scale of obj """ m = obj.GetMg() return c4d.Vector( m.v1.GetLength(), m.v2.GetLength(), m.v3.GetLength()) def SetGlobalPosition(obj, pos): """ Sets the global position of obj to pos """ m = obj.GetMg() m.off = pos obj.SetMg(m) def SetGlobalRotation(obj, rot): """ Sets the global rotation of obj to rot Please remember, CINEMA 4D handles rotation in radians. Example for H=10, P=20, B=30: import c4d from c4d import utils #... hpb = c4d.Vector(utils.Rad(10), utils.Rad(20), utils.Rad(30)) SetGlobalRotation(obj, hpb) #object's rotation is 10, 20, 30 """ m = obj.GetMg() pos = m.off scale = c4d.Vector( m.v1.GetLength(), m.v2.GetLength(), m.v3.GetLength()) m = utils.HPBToMatrix(rot) m.off = pos m.v1 = m.v1.GetNormalized() * scale.x m.v2 = m.v2.GetNormalized() * scale.y m.v3 = m.v3.GetNormalized() * scale.z obj.SetMg(m) def SetGlobalScale(obj, scale): """ Sets the global scale of obj to scale """ m = obj.GetMg() m.v1 = m.v1.GetNormalized() * scale.x m.v2 = m.v2.GetNormalized() * scale.y m.v3 = m.v3.GetNormalized() * scale.z obj.SetMg(m) def LocalToGlobal(obj, local_pos): """ Returns a point in local coordinate in global space. """ obj_mg = obj.GetMg() return obj_mg * local_pos def GlobalToLocal(obj, global_pos): """ Returns a point in global coordinate in local space. """ obj_mg = obj.GetMg() return ~obj_mg * global_pos def SetPointGlobal(point_object, point_index, global_pos): """ Sets the global position of point_object's point to global_pos """ p_local_pos = GlobalToLocal(point_object, global_pos) #Set Point point_object.SetPoint(point_index, p_local_pos) #Tell C4D the spline has changed.
point_object.Message(c4d.MSG_UPDATE)
#Move this line to the end of your loop if you're call this command a lot.
def SetPointGlobalVirtual(point_object, parent, point_index, global_pos): """ Sets the global position of a virtual point_object's point to global_pos
Most useful when setting the points of a spline created in a Python Generator""" p_local_pos = GlobalToLocal(parent, global_pos) #Set Point point_object.SetPoint(point_index, p_local_pos)
#Tell C4D the spline has changed.point_object.Message(c4d.MSG_UPDATE) #Move this line to the end of your loop if you're call this command a lot.
def GetPointGlobal(point_object, point_index): """ Return the position of a point in Global Space """ ppos = point_object.GetPoint(point_index) #Get the point in local coords return LocalToGlobal(point_object, ppos) #Return the point in global space #######################################################
How Packers and Movers India can assist you with your long-distance relocation services provide packing moving services at the make you best local shifting services exoprt amazing only.
ReplyDeletePackers and Movers Pune
Packers and Movers Bangalore
Packers and Movers Chennai
Packers and Movers Hyderabad
Packers and Movers Mumbai
How did you can avail the give your dream a shape with the help of make your move Adword India's No 1 services.
ReplyDeletehttp://www.adword.co.in/