Мне не хватает этого в 3dsMax, но, насколько я знаю, нет, для этого нет встроенных функций.
Большинство инструментов в Maya уже работают с выбором перед выполнением, поэтому инструментможно использовать cmds.ls(sl=True)
, чтобы зафиксировать выделение и выполнить предварительную проверку.
Что вы можете сделать, это имитировать средство выбора объектов с помощью обратного вызова выбора.Есть cmds.scriptJob
, но более эффективно использовать обратные вызовы OpenMaya
.Вот пример, который использует класс для хранения идентификатора обратного вызова и автоматически управляет им:
import maya.cmds as cmds
import maya.OpenMaya as OpenMaya
class ObjectPicker():
_id = None # Store callback's id here.
def __init__(self):
# When this class is created, add the callback.
OpenMaya.MGlobal.displayWarning("Please pick an object")
ObjectPicker.add_callback()
@staticmethod
def on_selection_changed(*args):
# This gets triggered from the callback when the user changes the selection.
# Auto-remove the callaback afterwards.
print "Selection:", cmds.ls(sl=True)
ObjectPicker.remove_callback()
@staticmethod
def add_callback():
# First remove any existing callback, then store the id in this class.
ObjectPicker.remove_callback()
ObjectPicker._id = OpenMaya.MEventMessage.addEventCallback("SelectionChanged", ObjectPicker.on_selection_changed)
@staticmethod
def remove_callback():
# Remove the callback so it stops triggering the function.
if ObjectPicker._id is not None:
OpenMaya.MEventMessage.removeCallback(ObjectPicker._id)
ObjectPicker._id = None
# After calling this, pick a new object then it will print it in the Script Editor.
picker = ObjectPicker()
После создания нового экземпляра класса с помощью picker = ObjectPicker()
для пользователя появится всплывающее предупреждение:выбрать объект.После изменения выбора он запускает обратный вызов, который печатает выборку в Редакторе сценариев, а затем удаляет его собственный обратный вызов.
Я думаю, что это может сработать, но Maya не 3dsMax, и в конце дня этоможет быть лучше не заставлять одно программное обеспечение работать как другое.Поэтому я хотел бы просто придерживаться того, к чему все уже привыкли, и работать с текущим выбором пользователя.
Редактировать: Извините, только что заметил тег c ++, но должна применяться та же концепция.