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

Reply via email to