2016-12-15 32 views
0

私はプレイブラストのためのスクリプトを作成します。私は、ユーザーとシーンの名前、fpsと現在のフレームのような私のビデオ上のいくつかのHUDデータが必要です...Maya HUDトラブル

最初に私は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ボタンのラベルを変更しようとしました。しかし、それはプレイブラストで働いていませんでした...

答えて

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') 

しかし、第二部上のテキストを変更するために彼を余儀なくされました。テキストサイズをピクセル単位で計算することはできません。正しい解決策は、どのフォントがHUDに使用されるかをMayaから取得することです。そして、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 

ので、使用するフォントは、ヘルベチカボールドで、サイズはあなたが入力するか、デフォルトを所有(する相対的れます値はcmds.optionVar(q="defaultFontSize")など)

+0

私はスタジオでwinとlinuxを使用します。私はlinux mayaで別のフォントを使用して勝利していると思う。(そして私はいつもViewPort 2.0を使う...私はマヤからフォントに関するデータを入手する方法を見つけようとしている。別のフォント... – MaxKu

+0

私は彼らが両方のプラットフォームでサポートされている選択肢のフォントタイプになると思う、私もそれを試して、私は普通の方法を意味するが、何も....彼らは100%現在のタイプとサイズ –

+0

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

1

アニメーションの再生中にcriptJobsは実行されません。再生中に実際にハドを更新する必要がある場合は、式の中から更新をトリガーすることができます。あなたは残念ながらそれをメルから呼び出さなければならないでしょう。できるだけ軽くしておくと、アニメーションを見ている人のインタラクティブな再生が遅くなります。

プレイブラストの前にダイナミックに式を作成し、その後すぐに削除して、アニメーターを悩ませることはありません。

また、適切な色に設定されたイメージプレーンを作成してHUDボタンを使用することもできます。