我为playblast创建脚本。我需要一些平显数据在我的视频,如用户名和场景名称,帧和当前帧…
首先我尝试用headsUpDisplay()创建的HUD很好,但没有背景...我改变了HUD标签的颜色,但有时它们在没有背景的情况下无法阅读。
cmds.headsUpDisplay('HUDObjectSceneName', label='label TEXT',
section=2, block=0, blockSize='large',
dfs='large', labelFontSize='large')其次,我尝试使用由hudButton()创建的HUD按钮-它们有背景。但我的标签之一是当前时间。headsUpDisplay()有“命令”来刷新和更改标签文本。但是hudButton()没有这个功能。
label = 'FPS: 25 FRAME:'
cmds.hudButton('HUDHelloButton3', s=9, b=0, vis=1, l=label,
bw=blockLen(label), lfs='large')
cmds.headsUpDisplay('HUDCurentFrame', label=label,
section=9, block=0, blockSize='large', dfs='large',
labelFontSize='large', atr=True,
command=lambda: cmds.currentTime(query=True))hudButton()有第二个问题-按钮的宽度是手动设置的。当我想要长标签时,我需要计算标签宽度。但是HUD字体不是固定的,我不知道如何正确地计算标签的像素宽度。经过一些实验,我创建了这个函数来计算宽度。它看起来很粗糙,但至少是这样:
def blockLen(label):
FONT_WIDTH = 8
THIN_WIDTH = 6
BLOCK_ADD = 10
thin_symbol = ' :,.!i[];:\'"|-'
sum = BLOCK_ADD
for x in label:
sum += THIN_WIDTH if x in thin_symbol else FONT_WIDTH
return sum我需要平显标签的背景和动态数据,如当前的框架。但是我找不到另一种方法如何创建它?
ps。当时间改变时,我尝试使用scriptJob()来更改平显按钮标签。但是它不能和playblast一起工作。
发布于 2016-12-22 02:54:36
播放动画时不执行scriptJobs。如果您确实需要在回放期间更新hud,您可以从表达式内部触发您的更新。不幸的是,您必须从mel调用它。并且尽量保持轻便,这会减慢任何观看动画的人的交互式回放速度。
你可能希望在播放之前动态创建表达式,然后在播放后立即删除它,这样就不会让它到处乱放,打扰你的动画师。
您还可以通过创建一个设置为适当颜色的图像平面来停止使用HUD按钮。
发布于 2016-12-15 23:06:47
我的问题之一是我决定这样做。我不知道如何直接更新按钮。我创建了没有标签的headsUpDisplay() -他能够更新。我强迫他更改我hudButton()上的文本
def frame_label():
label = 'FPS: 24 FRAME: %s' % cmds.currentTime(query=True)
cmds.hudButton('HUDCurentFrame', e=True, l=label)
# bottom-right: FPS and current frame info
cmds.headsUpDisplay('HUDCurentFrameInvisible', label='',
section=9, block=1, blockSize='large', dfs='large',
labelFontSize='large', command=frame_label, atr=True)
cmds.hudButton('HUDCurentFrame', s=9, b=0, vis=1, l='', bw=200, lfs='large')但是我的问题的第二部分没有解决。我无法计算以像素为单位的文本大小。正确的解决方案是从Maya获取用于HUD的字体。然后我可以使用wx库来计算字体名称的文本宽度…
但是如何从Maya获取字体数据(名称、大小和装饰)呢?
发布于 2016-12-16 22:04:02
关于你的第二个问题:我能够找到所需的字体数据(只有名称,大小),但它并不是真的准确(更多的黑客攻击,不需要投票),如果你改变视口渲染器到ViewPort 2.0,然后改变字体的大小,你会得到错误(默认渲染器也不会):
# small display ui font size and display ui size
cmds.displayPref(sfs=9, dfs=10) #font size
cmds.savePref()
Failed trying to load font: -*-helvetica-bold-normal-*-9-*-*-*-*-*-iso8859-1所以使用的字体是helvetica粗体,大小是相对的(你自己的输入或者像cmds.optionVar(q="defaultFontSize")这样的默认值)
https://stackoverflow.com/questions/41162077
复制相似问题