В отличие от pymel
, cmds
не использует оболочку для работы с узлами.Вместо этого он использует строки, которые могут быть проблематичными, поскольку они не обновляются динамически.Например, если вы создаете новый узел my_cube = cmds.polyCube(n='cube')[0]
, а затем переименовываете его, переменная my_cube
будет по-прежнему указывать старое имя объекта.
Это также может быть проблемой, если в сцене несколько объектовкоторые имеют одинаковое повторяющееся имя.Maya обычно автоматически переименовывает дубликаты имен, чтобы избежать конфликтов, но допустимо иметь дубликаты имен в разных иерархиях.В этом случае вам нужно будет получить к нему доступ, используя длинное имя узла.Например, объект с именем "cube"
, который связан с другим объектом с именем "root"
, будет иметь длинное имя "|root|cube"
.
При всем этом, да, есть проблема с этим кодом.Он создает 2 куба с одинаковыми именами и помещает их в другую иерархию.Таким образом, будет 2 узла с именем "cube"
.Когда вызывается команда select
, она буквально вызывает cmds.select("cube")
, но поскольку существует более одного "cube"
, Майя не знает, как это интерпретировать, а затем выдает ошибку.
Что может нужно сделать, чтобы захватить новое длинное имя объекта, выполнив это после того, как его родители: self.cube = cmds.ls(sl=True, long=True)[0]
Теперь он может выбрать первый куб, как и ожидалось.