Initializing MItMeshPolygon iterator with component (edge / vertex) in Python


I would like to iterate over the vertices of a mesh and test some conditions on the faces that are connected to it.

import maya.cmds as cmds
import maya.OpenMaya as om

cmds.polyPlane( w=1.0, h=1.0, sx=3, sy=3 )
selection_list = om.MSelectionList()
dag_path = om.MDagPath()
selection_list.getDagPath(0, dag_path)
mItVtx = om.MItMeshVertex( dag_path )
while not mItVtx.isDone():
	vtxId = mItVtx.index()
	point = mItVtx.position(om.MSpace.kWorld)
	mItPoly = om.MItMeshPolygon( dag_path, mItVtx.currentItem() ) # (kInvalidParameter): Object is incompatible with this method
	# do stuff with mItPoly

The MItMeshPolygon iterator can be restricted to the faces adjacent to a given component (for example, edge or vertex) by initializing the class to both a DAG path referring to the mesh and an MObject reference to certain components.

OpenMaya.MItMeshVertex.currentItem( ) -> MObject
Get the current vertex in the iteration as a component.

Can someone please show me how to set up MItMeshPolygon the correct way with components?
Thank you!

This workaround made the trick - although I’m still interested in the original method!

while not mItVtx.isDone():
    	vtxId = mItVtx.index()
    	point = mItVtx.position(om.MSpace.kWorld)
    	faceList = om.MIntArray()
    	mFnComp = om.MFnSingleIndexedComponent()
    	comp = mFnComp.create(om.MFn.kMeshPolygonComponent)
    	map(mFnComp.addElement, faceList)
    	mItPoly = om.MItMeshPolygon( dag_path, comp )
    	while not mItPoly.isDone():
    		# do stuff

If the Maya version is lower than 2020.3, then .next() without the required None argument will throw an error !

New in the Maya 2020.3 devkit :

"The call to has been changed to".

Notably, prior to this, Maya Python API documentation never indicated that () needed the required None argument.
So if you need to support Maya versions before and after 2020.3 in your code, be aware of these differences in syntax.