posted by cimple 2019. 9. 2. 17:52

Maya API 에서 기본적으로 Mesh 를 다루는 class 는 MFnMesh 이다.

또한 Maya 는 polygon, edge, vertex 등 특별한 component 를 대상으로 iterator 를 제공한다. MItMeshPolygon, MItMeshEdge, MItMeshVertex.

만약 mesh vertex 를 에디팅하고 싶다면, 다음 두 가지 방식은 같은 일을 수행한다.

mesh_fn = om.MFnMesh(mesh_obj)
num_vtx = mesh_fn.numVertices
for ids in range(num_vtx):
	mesh_fn.setPoint(idx, om.MPoint([0., 0., 0.]))    
mesh_vtx_it = om.MItMeshVertex(mesh_obj)
mesh_vtx_it.reset()
while not mesh_vtx_it.isDone():
	mesh_vtx_it.setPosition(om.MPoint([0., 0., 0.]))
    mesh_vtx_it.next()

그래서 이 때, 왜 iterator 가 필요한지, 그리고 속도는 무엇이 더 빠른지에 대한 궁금함이 있을 수 있다.

결론적으로, Python API 에서는 for i in range(x) 형식의 loop 를 도는 것 보다. iterator 를 사용하는 것이 더 빠르다고 알려져 있다.

또한, 꼭 Maya API 의 iterator 뿐만 아니라, 기본적으로 iterator 를 사용하는 철학에 담긴 장점들이 곧 Maya API 의 iterator 를 사용하는 장점이라고 할 수 있다. 

iterator 는 컨테이너 안에 담긴 요소들에 대한 연산을 안정적이면서 효율적으로 수행하기 위한 여러 장점들을 가지고 있다. 가장 간단하게는 자료의 크기를 잘못 참조 (out of range) 할 염려가 없다는 것에서부터, 자료구조와 그 자료구조를 탐색하는 영역을 분리시킴으로써 보다 안전한 코드 작성이 가능하다는 등의 장점이 그것이다.