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.

Reply via email to