Help us understand the problem. What is going on with this article?

Maya Typeノードへ、Pythonから日本語文字入力

More than 1 year has passed since last update.

Maya Advent Calendar 2018 に空きがございましたので
https://qiita.com/advent-calendar/2018/maya
参戦してみます


Maya Typeツールでも愛が生まれた
https://qiita.com/it_ks/items/7cfd0c3069b980be8d86

(▲)こちらの内容の続きのようなものを書いていきたいと思います。
「~~でも愛が生まれた」、懐かしいですね。


Maya 2016 Ext2らへんで登場したTypeツール(Typeノード)ですが、
Typeノードの textInput アトリビュートに set すればpythonからも文字入力できるのですが、
なんと
普通に文字をsetしても受け付けてくれません。
例えばこのような感じです

type001.png

set('a') とすれば「a」という文字が入ってくれてもよさそうなものですが、ダメです。
なにならいいのかというと、
先に挙げた記事でもやっているのですが、unicodeコードなら受け付けてくれます。

コード変換

「a」を入力したければ「a」のunicodeコード '61' を渡す必要があります。
これを得るには「ord」と「hex」を使います。

hex( ord(u'a') )

これで大丈夫かと思いきや、まだダメです

type002.png

アトリビュートエディタには「a」を入力できたのですが、
警告が出てTypeノード自体には反映されません。

接頭辞

よくみてみると、単に61が得られたのではなく、
16進数として扱うための接頭辞「0x」がついていることがわかります

type003.png

これで大丈夫

type004.png

…かと思いきや、まだダメです

複数文字対応

ordは一文字しか変換できず、複数文字あたえるとエラーになってしまいます

type005.png

もうちょっと気合みせてくれよ…

そんなわけで、forに渡して個別に処理します。
さらに、複数文字を textInput.set するときは、
文字ごとに 半角スペースで区切り ます。

これは実際に入力してみて確認しました。

type006.png

なるほどね。

できた

以上をまとめて、次のような関数にしてみました

import pymel.core as pm

def set_type_node_text( target_str ):
    # unicode型で来なかったら変換
    if not isinstance(target_str,unicode):
        target_str = unicode( target_str,'cp932' )

    # unicodeコードに変換、リストにためる
    input_str = []
    for c in target_str:
        input_str.append( hex(ord(c))[2:] )

    # 半角スペース区切りにして textInput.set
    pm.selected()[0].textInput.set( u' '.join(input_str) )

target_str = "かきくけこ"
set_type_node_text( target_str )

実行時には Type ノードを選択していることを期待しています。

type007.png

これで愛が生まれた系の文言(?)を与えても大丈夫(大変にシュール)


参考

タイプ ツール(Type Tool)オプション
https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2018/JPN/Maya-Modeling/files/GUID-92112B70-161B-4D89-A1E5-BC3D58274EFB-htm.html

ポリゴン テキストを作成する
http://help.autodesk.com/view/MAYAUL/2018/JPN/?guid=GUID-5715F385-F27A-49E0-A624-CB376B669EDC

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away