Сохранение объекта, выделенного в Outliner, после отмены выбора в 3D-виде
Я создал свой собственный редактор графиков и Outliner, моя проблема в том, что я хочу сохранить выбранный ранее объект, выбранный в Outliner, чтобы он продолжал отображаться в редакторе графиков, но я также могу выбирать атрибуты этого объекта и обновления редактора графиков.
Эффект, который я пытаюсь получить, это то, что вы получаете от Auto Load Selected Objects
функция в редакторе графиков Autodesk Maya.
Я попробовал несколько вещей с selectionConnections
, но я не совсем понял это. Я могу сохранить внешний редактор и редактор графиков, используя lock = 1
код, но редактор графиков больше не обновляется с атрибутами выбранного объекта.
Вот что у меня так далеко:
import maya.cmds as mc
mc.window( w = 500 )
mc.paneLayout( configuration = 'vertical2', swp = 1, ps = [ 2, 70, 0 ] )
mc.frameLayout( w = 150, h = 100, lv = 0 )
mc.outlinerEditor( mainListConnection = 'modelList',
selectionConnection = 'modelList',
showShapes = 1,
showReferenceNodes = 0,
showReferenceMembers = 0,
showAttributes = 1,
showSelected = 0,
highlightActive = 1,
showAnimCurvesOnly = 0,
autoExpand = 1,
showConnected = 1,
showDagOnly = 0,
ignoreDagHierarchy = 1,
expandConnections = 0,
showCompounds = 0,
showNumericAttrsOnly = 0,
autoSelectNewObjects = 0,
doNotSelectNewObjects = 1,
transmitFilters = 0,
showSetMembers = 1,
setFilter = 'defaultSetFilter',
lck = 1 )
mc.setParent( '..' )
mc.frameLayout( w = 1, h = 100, lv = 0 )
mc.animCurveEditor( mlc = 'modelList', dak = 1, di = 0, dat = 'off' )
mc.setParent( '..' )
mc.showWindow()
Проблема в том, что когда я отменяю выбор объекта, выделение Outliner отключает объект, и редактор графиков гаснет. Я хочу, чтобы это игнорировало новые выделения и оставляло текущий объект выбранным, но все же могло индивидуально выбирать атрибуты.
Я надеюсь это имеет смысл.
2 ответа
Обновить
Хорошо, я думаю, что у меня есть ответ на это:
import maya.cmds as mc
Xsl = (mc.ls (sl=1, sn=1))[0]
def toastFUNC (arg=0):
mc.animCurveEditor (curveEditor, e=1, lck=1)
mc.window(w=500)
mc.paneLayout( configuration='vertical2', swp=1, ps=[2, 70, 0] )
mc.frameLayout(w=150, h=100, lv=0)
mc.outlinerEditor(mlc='modelList', slc='modelList', showReferenceNodes=0, showReferenceMembers=0, showAttributes=1, showSelected=0, highlightActive=1, showAnimCurvesOnly=0, autoExpand=1,
showConnected=1, showDagOnly=0, ignoreDagHierarchy=1, expandConnections=0, showCompounds=0, showNumericAttrsOnly=0,
autoSelectNewObjects=0, doNotSelectNewObjects=1, transmitFilters=0, showSetMembers=1, setFilter='defaultSetFilter', lck=1, sec=toastFUNC)
mc.setParent('..')
mc.frameLayout(w=1, h=100, lv=0)
curveEditor = mc.animCurveEditor(mlc='modelList', slc='modelList', dak=1, di=0, dat='off', lck=1)
mc.setParent('..')
mc.showWindow()
Если у кого-нибудь есть какие-либо советы по использованию selectionConnection, я все равно хотел бы услышать некоторые:)
@Adam, предложенная вами техника работает, но также мешает активному отбору, что не идеально. В идеале, ваше окно и то, что выбрано после того, как ваше окно открыто, должны быть отделены. Вы можете сделать это следующим образом:
- Создание
selectionConnection
, Смотрите документы.
РЕДАКТИРОВАТЬ: Это подключение выбора не должны быть заблокированы. Сделать это:
sel_conn_name = "graphSelConn"
if cmds.selectionConnection(sel_conn_name, q=True, exists=True):
cmds.deleteUI(sel_conn_name)
cmds.selectionConnection(sel_conn_name, lock=False)
Примечание: selectionConnections
являются физическими объектами пользовательского интерфейса, имена которых должны быть уникальными, чтобы быть воссозданными, как окна. Следовательно, мы делаем проверку существования, как показано выше.
РЕДАКТИРОВАТЬ: Это будет соединение выбора, что ваш outlinerEditor
будет использовать.
Мы делаем еще одно соединение выбора, что animCurveEditor
будет использовать:
sel_conn_curves_name = "graphSelConnCurves"
if mc.selectionConnection(sel_conn_curves_name, q=True, exists=True):
mc.deleteUI(sel_conn_curves_name)
mc.selectionConnection(sel_conn_curves_name)
Почему мы используем 2 соединения выбора и каковы mainListConnection
флаги для?
mainListConnection
будет selectionConnection, который будет использоваться в качестве основного / начального источника для этого редактора. selectionConnection
флаг будет держать selectionConnection
объект, который будет получать / хранить объекты, выбранные в этом редакторе.
Так что в нашем случае outlinerEditor
будет иметь 'modelList' в качестве mainListConnection, потому что он должен начинаться с отображения объектов, которые были выбраны / активны. animCurveEditor
потребуются объекты, выбранные на outlinerEditor
в качестве основного источника, поэтому мы используем outlinerEditor
"s selectionConnection
держатель.
Кормление
selectionConnection
к вашему соответствующемуoutlinerEditor
а такжеanimCurveEditor
, Это можно сделать, передав нашиsel_conn_name
кselectionConnection
флаги обоихoutlinerEditor
а такжеanimCurveEditor
,РЕДАКТИРОВАТЬ: блокировка подключения выбора только для
outlinerEditor
, так что это не повлияет на изменения в активном списке. Вы делаете это, устанавливаяlockMainConnection=True
для этого. Проверьте документы. Затем вы кормитеoutlinerEditor's
selectionConnection
, которыйsel_conn_name
кmainListConnection
изanimCurveEditor
, Вы даетеanimCurveEditor
это собственныйselectionConnection
работать в этом случаеsel_conn_curves_name
, Важно разблокировать основное соединениеanimCurveEditor
как мы хотим, чтобы это отражало выбранные атрибуты. Мы делаем это, устанавливаяlockMainConnection=False
,
Вот модифицированный скрипт для вас:
import maya.cmds as mc
mc.window(w=500)
mc.paneLayout(configuration='vertical2', swp=1, ps=[2, 70, 0])
mc.frameLayout(w=150, h=100, lv=0)
sel_conn_name = "graphSelConn"
if mc.selectionConnection(sel_conn_name, q=True, exists=True):
mc.deleteUI(sel_conn_name)
mc.selectionConnection(sel_conn_name)
sel_conn_curves_name = "graphSelConnCurves"
if mc.selectionConnection(sel_conn_curves_name, q=True, exists=True):
mc.deleteUI(sel_conn_curves_name)
mc.selectionConnection(sel_conn_curves_name)
mc.outlinerEditor(mainListConnection='modelList',
selectionConnection=sel_conn_name,
lockMainConnection=True,
showShapes=1,
showReferenceNodes=0,
showReferenceMembers=0,
showAttributes=1,
showSelected=0,
highlightActive=1,
showAnimCurvesOnly=0,
autoExpand=1,
showConnected=1,
showDagOnly=0,
ignoreDagHierarchy=1,
expandConnections=0,
showCompounds=0,
showNumericAttrsOnly=0,
autoSelectNewObjects=0,
doNotSelectNewObjects=1,
transmitFilters=0,
showSetMembers=1,
setFilter='defaultSetFilter'
)
mc.setParent('..')
mc.frameLayout(w=1, h=100, lv=0)
mc.animCurveEditor(mlc=sel_conn_name,
slc=sel_conn_curves_name,
lockMainConnection=False,
dak=0,
di=0,
dat='off')
mc.setParent('..')
mc.showWindow()
Надеюсь, это было полезно.