Hi, all

Motivation:
I'm trying to do the automation test for my maya plugin by manipulating 
mouse to select a vertex.

System information:
Maya2016

Methods which failed:
1. 
import maya.api.OpenMaya as om2
import maya.api.OpenMayaUI as omui2
point2 = cmds.pointPosition('pPlane1.vtx[0]', world=True)
v2 = omui2.M3dView()
worldPt2 = om2.Mpoint(point2[0], point2[1], point2[2])
#print worldPt2
print v2.worldToView(worldPt2)  # It complains an error here: Error: 
RuntimeError: file <maya console> line 7: (kFailure): Object does not exist 
#

2. 
import maya.OpenMaya as om
import maya.OpenMayaUI as omui
point2 = cmds.pointPosition('pPlane1.vtx[0]', world=True)
#print point
v= omui.M3dView()
worldPt = om.Mpoint(point[0], point[1], point[2])
#print worldPt

xutil = om.MScriptUtil()
yutil = om.MScriptUtil()
xutil.createFromInt(0)
yutil.createFromInt(0)
xptr = xutil.asShortPtr()
yptr = yutil.asShortPtr()
print v.worldToView(worldPt, xptr, yptr)   # It complains an error here:  
Error: RuntimeError: file 
S:\Maya_2016_DI\build\Release\runTime\Python\Lib\site-packages\maya\OpenMayaUI.py
 
line 244:: (kFailure): Object does not exist #
x = xutil.getShort(xptr)
y = yutil.getShort(yptr)

BTW, 
S:\Maya_2016_DI\build\Release\runTime\Python\Lib\site-packages\maya\OpenMayaUI.py
 
does not exist on my machine.


3.
I tried to compute viewport position manually by using this code: 
https://forum.highend3d.com/t/3d-point-to-2d-screen-position/48599/2
import maya.OpenMaya as om   def pointWorldToCam(cameraName, point, res): 
sel = om.MSelectionList() dag = om.MDagPath()   sel.add(cameraName) 
sel.getDagPath(0,dag)   cam = om.MFnCamera(dag) floatMat = 
cam.projectionMatrix() projMat = om.MMatrix(floatMat.matrix) floatMat = 
cam.postProjectionMatrix() postProjMat = om.MMatrix(floatMat.matrix) 
transMat = dag.inclusiveMatrix()   #long form ensures compatibility with 
MPoint and any iterable point = om.MPoint(point[0],point[1],point[2])   
fullMat = transMat.inverse() * projMat * postProjMat nuPoint = point * 
fullMat return [(nuPoint[0]/nuPoint[3]/2+0.5)*res[0], (1-(nuPoint[1
]/nuPoint[3]/2+0.5))*res[1]]

#test 
point2 = cmds.pointPosition('pPlane1.vtx[0]', world=True)
height = cmds.control('modePanel4', q=True, height=True)
width= cmds.control('modePanel4', q=True, width=True)
*viewport_position = *pointWorldToCam('persp', (point2[0], point2[1], 
point2[2]), (width, height))


And I capture the real mouse position (screen_position) by using this code
#include <iostream> #include<windows.h> int main()
{ while(1){ POINT p; GetCursorPos(&p); std::cout << "screen_position: x:" 
<< p.x << ", y:" << p.y << ". " << std::endl; } return 0; }

It shows that *viewport_position does not equal with *screen_position


My questions:
1. What's wrong in Method1 and Method2?
2. Even Method1 and Method2 could output the result, I'm afraid that their 
results are viewport positions which cannot be used to manipulate the mouse 
to click the specified vertex.
So, how to get the screen position from viewport position? is it possible 
in Maya?

Cheers
Yao





-- 
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/85deefc4-9b72-4e9e-b141-42f028c2a2a6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to