Yes—it stores the result in the object you pass as a parameter, since it is passed by reference. As per my example:
meshIter0 = OpenMaya.MItGeometry(dag1) points = OpenMaya.MPointArray() meshIter0.allPositions(points, ObjectSpace) # all the points are now stored in the points object normals = OpenMaya.MVectorArray() meshIter1.getNormals(normals, ObjectSpace) # all the normals are now stored in the normals object As per your original code: while not meshIter1.isDone(): p1 = meshIter1.position(ObjectSpace) normal=OpenMaya.MVector() meshIter1.getNormal(normal, ObjectSpace) # the normal is now stored in the normal object meshIter1.next() On Fri, Apr 9, 2010 at 9:04 AM, johnvdz <[email protected]> wrote: > Oh thanks Adam for that... > > i wouldn't have got that. > > so i also tried assigning the GetNormals() but that returns a status to so > i guess thats out to? > > i guess the only other option is MfnMesh.GetVertexNormal? > > or is that a status object to? > > his there a way in python api to get normals? i would like to maybe use > normal in a Deformer node at some point. > > john > > > > > Adam Mechtley wrote: > >> The problem is this line: >> >> vector = meshIter1.getNormal(normal, ObjectSpace) >> >> getNormal returns an MStatus object, which Python does not use, and which >> will cause Maya to crash unfortunately if you try to capture it in Python. >> >> Depending what you are wanting to do btw a better approach is: >> >> normals = OM.MVectorArray() >> >> meshIter1.getNormals(normals, OM.MSpace.kObject) >> >> Thus you get all the normals in a single API call instead of looping >> through >> the whole thing and can then do whatever with them in Python. The more API >> calls you have, the more translation happens across the SWIG layer, which >> will cause your code to execute slower. >> >> On Fri, Apr 9, 2010 at 8:27 AM, johnvdz <[email protected]> >> wrote: >> >> >> >>> Hi all, >>> >>> just trying the get the Normal direction of a vertex so i can offset a >>> point locally from its Normal. >>> >>> at the moment i cant get a value from the Normal at all? >>> >>> import maya.OpenMaya as OpenMaya >>> import maya.OpenMayaMPx as OpenMayaMPx >>> >>> selList = OpenMaya.MSelectionList() >>> OpenMaya.MGlobal.getActiveSelectionList(selList) >>> dag1= OpenMaya.MDagPath() >>> selList.getDagPath(0,dag1) >>> meshIter1 = OpenMaya.MItMeshVertex(dag1) >>> >>> ObjectSpace=OpenMaya.MSpace.kObject >>> >>> while not meshIter1.isDone(): >>> p1 = meshIter1.position(ObjectSpace) >>> print p1.x,p1.y,p1.z >>> normal=OpenMaya.MVector() >>> vector = meshIter1.getNormal(normal, ObjectSpace) >>> meshIter1.next() >>> >>> at the moment this crashes maya after it has finished the loop. i think >>> its >>> because i normal=OpenMaya.MVector() is inside the loop. >>> >>> i have tried this outside the loop but i get "None" as a Print result of >>> 'vector'. I'm pritty new to API so i could have done a few things wrong. >>> >>> anyway any answers would be appreciated >>> >>> john >>> >>> -- >>> http://groups.google.com/group/python_inside_maya >>> >>> To unsubscribe, reply using "remove me" as the subject. >>> >>> >>> >> >> >> > > -- > http://groups.google.com/group/python_inside_maya > -- http://groups.google.com/group/python_inside_maya
