我已经创建了自己的图形编辑器和大纲,我的问题是,我希望能够保持我的大纲选择之前选择的对象,以便它继续显示在图形编辑器,但我也仍然能够选择该对象和属性具有图形编辑器更新。
我想要得到的效果是,你从一开始什么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()
问题是,当我取消选择对象的大纲亮点关闭对象和图形编辑器变成空白。 我想这忽略新的选择,并保持当前选择的对象,但仍然能够单独选择属性。
我希望这是有道理的。
@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
是物理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
和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()
希望这是有益的。
更新
好吧,我想我已经得到了这个答案:
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任何提示我还是很乐意听到一些:)