我为playblast创建脚本。我的视频需要一些HUD数据,如用户和场景名称,fps和当前帧......
首先我尝试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
我需要HUD标签,背景和动态数据,如当前帧。但我找不到另一种创造方式呢?
PS。我尝试使用scriptJob()
在时间更改时更改HUD按钮标签。但它没有与playblast合作......
答案 0 :(得分:1)
scriptJobs不会执行。如果您确实需要在播放期间更新hud,则可以从表达式内部触发更新。不幸的是,你必须从梅尔调用它。并保持尽可能轻,它将减慢观看动画的任何人的交互式播放。
您可能希望在播放器之前动态创建表达式,然后立即将其删除,这样就不会让它四处乱晃,以免打扰您的动画师。
您还可以通过创建设置为适当颜色的图像平面来避免使用HUD按钮。
答案 1 :(得分:0)
我的问题的一部分我决定。我没有找到如何直接更新按钮。我创建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获取字体数据(名称,大小和装饰)?
答案 2 :(得分:0)
你的第二个问题: 我能够找到所需的字体数据(仅名称,大小),但如果您将视口渲染器更改为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")
)