玛雅哈德的麻烦

2024-06-26 14:23:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

首先我尝试一下由headsUpDisplay()创建的HUD很好,但是没有背景。。。我改变了HUD标签的颜色,但有时没有背景就看不清了。在

cmds.headsUpDisplay('HUDObjectSceneName', label='label TEXT', 
                    section=2, block=0, blockSize='large', 
                    dfs='large', labelFontSize='large')

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

^{pr2}$

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标签。但我找不到另一种方法如何创造它?在

当时间改变时,我尝试使用scriptJob()来更改HUD按钮标签。但它不适用于playblast。。。在


Tags: 宽度时间标签width按钮labelthinlarge
3条回答

问题的一部分我决定了。我不知道如何直接更新按钮。我创建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及以上 更改字体大小时,会出现错误(默认渲染器上也不会):

 # 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

所以使用的字体是helveticabold并且大小是相对的(您拥有输入或默认值,如cmds.optionVar(q="defaultFontSize")

播放动画时不执行脚本作业。如果您确实需要在回放期间更新hud,您可以从表达式内部触发更新。不幸的是,你得从梅尔那里打电话过来。并且尽可能的轻,这将减慢任何人观看动画的交互式播放速度。在

您可能希望在播放预览之前动态创建表达式,然后在播放预览之后立即将其删除,这样就不会让它到处乱放而影响动画制作者。在

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

相关问题 更多 >