error in code, what is wrong

169 views
Skip to first unread message

justin hidair

unread,
Mar 10, 2017, 12:05:40 PM3/10/17
to Python Programming for Autodesk Maya
import maya.OpenMaya as om

selection=om.MSelectionList()
om.MGlobal.getActiveSelectionList(selection)

dagpath=om.MDagPath()
selection.getDagPath(0, dagpath)

faces=om.MItMeshPolygon(dagpath)
vertex=om.MItMeshVertex(dagpath)
meshfn=om.MFnMesh(dagpath)

normalvectors=om.MVectorArray()

previndex=om.MScriptUtil()
previndex.createFromInt(0)
previndexPtr=previndex.asIntPtr()

area=om.MScriptUtil()
area.createFromDouble(0.0)
areaPtr=area.asDoublePtr()

vertexperpoly = om.MIntArray()
vertexlist = om.MIntArray()

skipvertex = []

while not faces.isDone():
    vertexperpoly.append(faces.polygonVertexCount())
    faces.next()
meshfn.getVertices(vertexperpoly,vertexlist)
faces.reset()

for j in xrange(faces.count()):
    faces.setIndex(j, previndexPtr)
   
    n = om.MVector()
    faces.getNormal(n, om.MSpace.kWorld)

    for i in xrange(faces.polygonVertexCount()):
        facepoints=om.MPointArray()
        faces.getPoints(facepoints, om.MSpace.kWorld)
        v1 = None
        v2 = None
        if i == 0:
            v1=facepoints[i+1]-facepoints[i]
            v2=facepoints[i+2]-facepoints[i]
        else:
            v1=facepoints[i-1]-facepoints[i]
            v2=facepoints[i+2]-facepoints[i]
        angle = v1.angle(v2)
        currentvertex=faces.vertexIndex(i)
        if currentvertex in skipvertex:
            continue
        vertex.setIndex(currentvertex, previndexPtr)
       
        hoodfaces=om.MIntArray()
        vertex.getConnectedFaces(hoodfaces)
       
        for f in hoodfaces:
            if f == j:
                continue
            faces.setIndex(f, previndexPtr)
            currentnormal = om.MVector()
            faces.getArea(areaPtr, om.MSpace.kWorld)
            faces.getNormal(currentnormal, om.MSpace.kWorld)
           
            scalar = (area.getDouble(areaPtr)) * angle
            n += currentnormal * scalar
        n.normalize() #normalize vertex normal
        normalvectors.append(n) #append to normal vector array
        skipvertex.append(currentvertex)
meshfn.setVertexNormals(normalvectors,vertexlist,om.MSpace.kWorld)

I get this :
// Error: (kInvalidParameter): No element at given index

# Traceback (most recent call last):

# File "<maya console>", line 52, in <module>

# File "S:\Maya_2017_DI\build\Release\runTime\Python\Lib\site-packages\maya\OpenMaya.py", line 8714, in vertexIndex

# RuntimeError: (kInvalidParameter): No element at given index //


the MItMeshPolygon.vertexIndex fails , but it shouldn't :'(


my code is based on a trick with face relative index range (0 - (face vert count-1))


and this method would've allow me to get globel space index to set it for vertex iterator (MItMeshVertex) right after

justin hidair

unread,
Mar 10, 2017, 5:32:39 PM3/10/17
to Python Programming for Autodesk Maya
fixed it
Reply all
Reply to author
Forward
0 new messages