2016-12-15 178 views
0

我为playblast创建脚本。我需要一些HUD数据在我的视频像用户和场景名称,fps和当前帧...Maya HUD麻烦

首先我尝试HUD创建的headsUpDisplay()是好的,但没有背景...我改变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

我的问题的一部分,我决定。我没有找到如何直接更新按钮。我创建了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获取字体数据(名称,大小和装饰)?

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 

所以使用的字体是黑体加粗和大小relativ(你自己的输入或默认值如cmds.optionVar(q="defaultFontSize")

+0

我在工作室使用win和linux。我认为在Linux玛雅使用另一种字体,然后在赢(我使用ViewPort 2.0所有时间...我试图找到如何从maya直接获取有关字体的数据,我不知道,可能会在新版本的玛雅将另一种字体... – MaxKu

+0

我猜他们会选择在两种平台上支持的字体类型,我也试过,我的意思是一种常规的方式,但没有......他们会保持字体类型,100%,但你知道现在的类型和大小 –

+0

https://s28.postimg.org/hs8bl85fh/Capture.png – MaxKu

1

s当动画播放时,criptJobs不执行。如果您真的需要在播放过程中更新hud,您可以从表达式中触发更新。不幸的是,你必须从mel打电话。并尽可能保持轻量,这会减慢任何观看动画的人的交互式播放效果。

您可能希望在playblasts之前动态创建表达式,然后立即将其删除,因此您不要让它停留在周围来困扰您的动画师。

您也可以通过创建一个设置为合适颜色的图像平面来避免使用HUD按钮。