I’m wondering if it’s possible to select a vertex or UV just by knowing it’s position?
Lets say pSphere1.vtx[123] is positioned at wordspace position 21.31 4.22 4.66, is it then possible to select that vertex without knowing the name of the vertex?
The reason why I’m asking, is that I want to create a ‘Mirror Cluster’ script. So if the object is symetrical and positioned in the center of the scene, I should be able to get the position (vertexes) on the other side.
I could always select the other side manually, and then loop through and compare each vertex’s position, but that takes time :(:
If you’re willing to delve into the API a bit, there’s a MFnMesh::getClosestPoint() method that should suit your purposes (if you’re scared, i could probably whip up a python example for you)
[QUOTE=dbsmith;8221]If you’re willing to delve into the API a bit, there’s a MFnMesh::getClosestPoint() method that should suit your purposes (if you’re scared, i could probably whip up a python example for you)[/QUOTE]
I have to admit that the API scares me a little, I guess I should take a stab at it some day :lookdown:
You probably want to read up about some simple maya API stuff, you only need to know a little to get some great functionality in your python scripts. Learn about MObjects and MDagPaths etc…
Find the docs for MFnMesh, browse down to closestPoint. Have a read.
I had a quick test of this code and it ran ok, see if it works for you
import maya, maya.OpenMaya
# Name of object
name = '|pCube1|pCubeShape1'
# Pointer to object in maya's memory...sort of
nodeDagPath = maya.OpenMaya.MObject()
try:
selectionList = maya.OpenMaya.MSelectionList()
selectionList.add(name)
nodeDagPath = maya.OpenMaya.MDagPath()
selectionList.getDagPath(0, nodeDagPath)
except:
raise RuntimeError('NameToNode() failed on %s' % name)
# A function set to wrap around the object, indicating you can perform mesh operations on it
mfnMesh = maya.OpenMaya.MFnMesh(nodeDagPath)
pointA = maya.OpenMaya.MPoint(0,0,0)
pointB = maya.OpenMaya.MPoint()
space = maya.OpenMaya.MSpace.kWorld
# Maya's way of dealing with pointers
util = maya.OpenMaya.MScriptUtil()
util.createFromInt(0)
idPointer = util.asIntPtr()
mfnMesh.getClosestPoint(pointA, pointB, space, idPointer)
print maya.OpenMaya.MScriptUtil(idPointer).asInt()
[QUOTE=dbsmith;8233]I’m assuming you’re in python here…
You probably want to read up about some simple maya API stuff, you only need to know a little to get some great functionality in your python scripts. Learn about MObjects and MDagPaths etc…
Find the docs for MFnMesh, browse down to closestPoint. Have a read.
I had a quick test of this code and it ran ok, see if it works for you
[/QUOTE]
Thanks for your reply :)
I'm actually in MEL, that's the reason why I haven't dived into the API yet :lookdown:
I didn't get your example to work though, if I select a vertex of a pCube and run it, it just outputs 0. If I try with a pSphere it outputs 177. I tried to make sense of your code, but I wasn't able to figure out how it's supposed to work :|:
I’m actually in MEL, that’s the reason why I haven’t dived into the API yet
I didn’t get your example to work though, if I select a vertex of a pCube and run it, it just outputs 0. If I try with a pSphere it outputs 177. I tried to make sense of your code, but I wasn’t able to figure out how it’s supposed to work
Thats the index of the closest face/polygon, and the point
that that command gives is just on the surface of the mesh, not on any vertex.
You can loop trough the face thats found and compare each vertex in it which is the closest to your point if you really want the closest vertex.
poly = PyNode(‘pSphere1’)
pos = [0,0,0]
count = 0
for point in poly.getPoints(‘world’):
if dt.Vector(point) == dt.Vector(pos):
select(poly.vtx[count])
count +=1
In the bonus tools there is the pointOnMeshInfo and pointOnMesh which should give you the access you need to do those conversions (i.e. get a point in world space coordinates based off a UV space input).
[QUOTE=shcmack;8214]I’m wondering if it’s possible to select a vertex or UV just by knowing it’s position?
Lets say pSphere1.vtx[123] is positioned at wordspace position 21.31 4.22 4.66, is it then possible to select that vertex without knowing the name of the vertex?
The reason why I’m asking, is that I want to create a ‘Mirror Cluster’ script. So if the object is symetrical and positioned in the center of the scene, I should be able to get the position (vertexes) on the other side.
I could always select the other side manually, and then loop through and compare each vertex’s position, but that takes time :(:[/QUOTE]
I use polySelectConstraint in my mirroring scripts to do this very thing.
If you want to dissect the script just do a control f (find) fer polySelectConstraint.