Hi, see if this works
Basically you need to compute the transformation matrix that represents the
rotation from a specific point ("vertex" in your case). That can be
generally done by matrix composition.... m1*m2-1*transform*m2. Where m1 is
the matrix of the object you want to move, m2-1 is the inverse matrix of
the object you want to use as reference (parent space), transform is your
rotation matrix, then you move it back to world by multiplying back m2.
A quick example in maya can look like this:
from maya.api import OpenMaya
from maya import cmds
cube = cmds.polyCube()[0]
vtx = cube+'.vtx[2]'
vtx_pos = cmds.xform(vtx, q=1,ws=1,t=1)
# vertex does not have orientation, so will keep world
# you can use vertex normals or custom...
# ill just extract the position
vtx_world_mmat = OpenMaya.MMatrix()
for i in xrange(3):
vtx_world_mmat.setElement(3,i, vtx_pos[i])
grp = cmds.createNode('transform')
cmds.xform(grp, t=(5,0,0))
obj = cmds.polyPrism()[0]
cmds.parent(obj,grp,r=1)
obj_world_mat = cmds.xform(obj, q=1,ws=1,m=1)
# compose the rotation matrix however you want, ill just make from euler
rotation
rot_eu = OpenMaya.MEulerRotation()
rot_eu.y=3.1415*.5 # 90 deg (ish)
rot_mmat = rot_eu.asMatrix()
obj_world_mmat = OpenMaya.MMatrix(obj_world_mat)
# transform
*resulting_mmat = obj_world_mmat * vtx_world_mmat.inverse() * rot_mmat *
vtx_world_mmat*
# rotate
cmds.xform(obj, ws=1, m=list(resulting_mmat))
If I understood you correctly this should be it.
Cheers.
--
You received this message because you are subscribed to the Google Groups
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/python_inside_maya/12ffcb0c-37f1-4f13-9e27-153ccbe4ee1c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.