我已经创建了自己的Graph Editor和Outliner,我的问题是我希望能够在我的大纲视图中保留先前选择的对象,以便它继续在Graph Editor上显示,但我&#39 ; m还可以选择该对象的属性并更新图表编辑器。
我试图获得的效果是您从Autodesk Maya的图表编辑器中的Auto Load Selected Objects
功能获得的效果。
我已经尝试了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()
问题在于,当我取消选择对象时,“大纲视图”高亮显示将关闭对象,“曲线图编辑器”将变为空白。我希望这会忽略新的选择并保持当前对象的选择,但仍然可以单独选择属性。
我希望这是有道理的。
答案 0 :(得分:1)
@Adam,你提出的技术有效但干扰了主动选择,这并不理想。理想情况下,您的窗口以及窗口打开后选择的内容必须是分离的。你可以这样做的方式是:
selectionConnection
。 See the docs。编辑:无需锁定此选择连接。 要做到这一点:
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
上选择的对象作为主要来源,因此我们使用outlinerEditor
selectionConnection
持有者。
将selectionConnection
提供给相应的outlinerEditor
和animCurveEditor
。这可以通过将sel_conn_name
传递到selectionConnection
和outlinerEditor
的{{1}}标记来完成。
编辑:锁定animCurveEditor
的选择连接仅,因此不会受到活动列表更改的影响。您可以通过为outlinerEditor
设置它来执行此操作。 Check the docs。然后,您将lockMainConnection=True
outlinerEditor's
,selectionConnection
提供给sel_conn_name
的{{1}}。您可以使用mainListConnection
自己的animCurveEditor
来处理,在这种情况下animCurveEditor
。解锁selectionConnection
的主要连接非常重要,因为我们希望它反映所选属性。我们通过设置sel_conn_curves_name
。
以下是修改过的脚本:
animCurveEditor
希望这很有用。
答案 1 :(得分:-1)
好的,我想我已经得到了答案:
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的提示,我仍然希望听到一些:)