首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maya HUD故障

Maya HUD故障
EN

Stack Overflow用户
提问于 2016-12-15 18:39:16
回答 3查看 2K关注 0票数 0

我为playblast创建脚本。我需要一些平显数据在我的视频,如用户名和场景名称,帧和当前帧…

首先我尝试用headsUpDisplay()创建的HUD很好,但没有背景...我改变了HUD标签的颜色,但有时它们在没有背景的情况下无法阅读。

代码语言:javascript
复制
cmds.headsUpDisplay('HUDObjectSceneName', label='label TEXT', 
                    section=2, block=0, blockSize='large', 
                    dfs='large', labelFontSize='large')

其次,我尝试使用由hudButton()创建的HUD按钮-它们有背景。但我的标签之一是当前时间。headsUpDisplay()有“命令”来刷新和更改标签文本。但是hudButton()没有这个功能。

代码语言:javascript
复制
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字体不是固定的,我不知道如何正确地计算标签的像素宽度。经过一些实验,我创建了这个函数来计算宽度。它看起来很粗糙,但至少是这样:

代码语言:javascript
复制
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一起工作。

EN

回答 3

Stack Overflow用户

发布于 2016-12-22 02:54:36

播放动画时不执行scriptJobs。如果您确实需要在回放期间更新hud,您可以从表达式内部触发您的更新。不幸的是,您必须从mel调用它。并且尽量保持轻便,这会减慢任何观看动画的人的交互式回放速度。

你可能希望在播放之前动态创建表达式,然后在播放后立即删除它,这样就不会让它到处乱放,打扰你的动画师。

您还可以通过创建一个设置为适当颜色的图像平面来停止使用HUD按钮。

票数 1
EN

Stack Overflow用户

发布于 2016-12-15 23:06:47

我的问题之一是我决定这样做。我不知道如何直接更新按钮。我创建了没有标签的headsUpDisplay() -他能够更新。我强迫他更改我hudButton()上的文本

代码语言:javascript
复制
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获取字体数据(名称、大小和装饰)呢?

票数 0
EN

Stack Overflow用户

发布于 2016-12-16 22:04:02

关于你的第二个问题:我能够找到所需的字体数据(只有名称,大小),但它并不是真的准确(更多的黑客攻击,不需要投票),如果你改变视口渲染器到ViewPort 2.0,然后改变字体的大小,你会得到错误(默认渲染器也不会):

代码语言:javascript
复制
 # 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")这样的默认值)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41162077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档