Поскольку мой комментарий действительно помог вам, я постараюсь дать более подробное объяснение.
Ваш первый цикл (с $i
) повторяется для каждого объекта в вашем выборе. Это хорошо.
Ваш второй цикл (с $k
) перебирает количество ребер для текущего объекта в цикле. Все идет нормально. Хотя мне интересно, будет ли правильнее цикл числа лиц ...
Теперь вы запрашиваете массив всех нормалей лица лица по индексу $k
у объекта $i
, с string $polyInfo[] = `polyInfo -fn ($newSel[$i] + ".f[" + $k + "]")`;
.
Если вы попытаетесь напечатать размер и значения в $polyInfo
, вы поймете, что у вас есть массив с одним элементом, который является нормалью лица конкретной грани, которую вы запрашивали перед этим. Следовательно, это всегда будет элемент 0, а не $i
, который будет увеличиваться с каждой итерацией.
Я сделал версию скрипта на Python / PyMEL, которая может быть вам приятна.
import pymel.core as pm
import maya.mel as mel
def reduceEdge():
mel.eval('polySelectEdgesEveryN "edgeRing" 2;')
mel.eval('polySelectEdgesEveryN "edgeLoop" 1;')
pm.polyDelEdge(cv=True)
def reducePoly():
selection = pm.ls(sl=True)
for obj in selection:
for i, face in enumerate(obj.f):
normal = face.getNormal()
if (normal.x == 0.0 and normal.y == 0.0 and normal.z == 1.0):
pm.select(obj + '.e[' + str(i) + ']')
reduceEdge()
reducePoly()