目次
はじめに
HoudiniのVEXをVSCodeで弄りたくなったので,以下の記事で紹介されていたHoudiniと外部エディタを同期させるアドオンHoudini Expression Editorをインストールしてみた.
Houdini: VEXをカスタマイズしたVS Codeで書く02 - kick the base
https://www.kickbase.net/entry/vex-programming-with-vscode02
しかし,外部エディタにVSCodeを登録してHoudini Expression Editorをインストール後,
コメントに日本語が入ったVEXをEdit in External Editorすると怒られた.
右クリック> Expression> Edit in Extarnal Editor をクリックすると
Script Errorが発生する.なんでや.
環境 | |
---|---|
OS | Windows 10 Home x64 |
Houdini | 18.5.408 |
Houdini Expression Editor | 1.4.8 |
結論
SideFXLabs18.5/scripts/python\HoudiniExprEditor\ParmWatcher.pyの463行目を次のafterのように書き換える
1 | # data = str(selection.rawValue()) # before |
不具合の原因
Show Detailsは以下のとおり
1 | Traceback (most recent call last): |
このエラーを吐いているParmWatcher.pyはHoudini Expression Editorでインストールしたスクリプトファイルのことなので,該当箇所を見てみる.
1 | def add_watcher(selection, type_="parm"): |
rawValue関数については公式ヘルプ曰く
rawValue() → str
このパラメータのそのままのテキスト値を評価または展開せずに返します。 このパラメータにエクスプレッションが含まれていれば、そのエクスプレッションが返され、そうでない場合は、このパラメータのそのままのテキスト値が返されます。
メロスにはpythonがわからぬが,とりあえず同期用ファイル生成時にselection.rawValue()
がasciiの文字コードでエラーを吐いているっぽいことはわかった.
対処法
エラー文でググったらそれっぽいサイトが出てきた.
PythonのUnicodeEncodeErrorを知る
https://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html
要するにasciiをutf-8にキャストしてやればいいみたいなので,該当箇所を書き換えたのがこちら
1 | data = str(selection.rawValue().encode('utf_8')) # .encode('utf_8')を追加 |
ParmWatcher.pyを書き換えて保存してから再度Edit in External EditorするとちゃんとVSCodeが立ち上がった.
VSCode側でVEXを上書き保存するとHoudiniにも即時反映されるので便利.