Сохранение объекта, выделенного в 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, предложенная вами техника работает, но также мешает активному отбору, что не идеально. В идеале, ваше окно и то, что выбрано после того, как ваше окно открыто, должны быть отделены. Вы можете сделать это следующим образом:

  1. Создание 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 держатель.

  1. Кормление selectionConnection к вашему соответствующему outlinerEditor а также animCurveEditor, Это можно сделать, передав наши sel_conn_name к selectionConnection флаги обоих outlinerEditor а также animCurveEditor,

  2. РЕДАКТИРОВАТЬ: блокировка подключения выбора только для outlinerEditor, так что это не повлияет на изменения в активном списке. Вы делаете это, устанавливая lockMainConnection=True для этого. Проверьте документы. Затем вы кормите outlinerEditor'sselectionConnection, который 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()

Надеюсь, это было полезно.

Другие вопросы по тегам