在3D视图取消之后保持在大纲视图中选择的对象(Keeping object selected in

2019-10-21 07:44发布

我已经创建了自己的图形编辑器和大纲,我的问题是,我希望能够保持我的大纲选择之前选择的对象,以便它继续显示在图形编辑器,但我也仍然能够选择该对象和属性具有图形编辑器更新。

我想要得到的效果是,你从一开始什么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()

问题是,当我取消选择对象的大纲亮点关闭对象和图形编辑器变成空白。 我想这忽略新的选择,并保持当前选择的对象,但仍然能够单独选择属性。

我希望这是有道理的。

Answer 1:

@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是物理UI对象,他们的名字必须是唯一的,以重新创建,就像Windows。 因此,我们做如上所见的存在检查。

编辑:这将是你选择连接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作为它的主要来源,所以我们使用outlinerEditorselectionConnection持有人。

  1. 饲喂selectionConnection给你们各自outlinerEditoranimCurveEditor 。 这可以通过传递来完成sel_conn_nameselectionConnection双方的标志outlinerEditoranimCurveEditor

  2. 编辑:锁定为选择连接outlinerEditor ,所以它不会被更改活动列表的影响。 通过设置这样做lockMainConnection=True它。 检查文档 。 然后,您喂outlinerEditor's selectionConnection ,这是sel_conn_namemainListConnectionanimCurveEditor 。 你给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()

希望这是有益的。



Answer 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任何提示我还是很乐意听到一些:)



文章来源: Keeping object selected in the Outliner after deselecting it in 3D View
标签: python maya