cg memo

備忘録をまとめるブログ

Version Icon

この記事はWindows10環境を前提にしております。

f:id:satyk:20190805000103p:plain

Houdiniは、マイナーバージョンを含め複数インストールしている方が多いと思います。
私は毎回スタートにピン留めしていますが、アイコンだけでは一目でバージョンが分かりにくく…

そこで、バージョン番号が書かれたアイコンを自動生成する仕組みを考えてみました。

バージョンアイコンの自動生成

手順としては、

  1. イコン画像を用意する
  2. Python SOP でバージョンを取得する
  3. COPでアイコン画像とバージョン番号を合成して出力する
  4. Hbatchでhipを実行する

です。

イコン画像を用意する

まずはベースとなるHoudiniのアイコン画像を用意します。
私は「Quick Any2Ico」というフリーソフトを利用して、exeからico(アイコンファイル)を抽出していますが、そのあたりはご自由にどうぞ。
f:id:satyk:20190805002616p:plain

Python SOP でバージョンを取得する

後の互換性のため、今回はなるべく低いバージョンのHoudiniでhipを作ると良いかもしれません。

f:id:satyk:20190805003227p:plain
まず Python SOP を作って、現在起動しているHoudiniのバージョンを取得します。

ver_tuple = hou.applicationVersion()
ver_string = ','.join(map(str,ver_tuple))
ver = ver_string.replace(',','.')

#check
print ver

applicationVersion() では、メジャーバージョン、マイナーバージョンなどがタプルで返ってくるので、ここでは全て文字列に変換してつなげています。
得られたバージョンはいったんDetailのアトリビュートに入れます。

geo.addAttrib(hou.attribType.Global, 'version',"",create_local_variable=False)
geo.setGlobalAttribValue('version', ver)

PythonではDetailのことを Global と書くのでよくハマりました。
また、文字列の場合は addAttribdefault_value が利用できないので、別途setしてやる必要があります。

f:id:satyk:20190805004641p:plain

COPでバージョン番号をアイコンに合成する

COP2 Network を作って、その中でアイコン画像を加工していきます。

File COP でベースになるアイコン画像を読み込み、
Font COP で、さきほどDetailに格納したバージョン番号を参照します。

`details("../../python1","version")`

文字列は detail ではなく details というようにsが必要なので、ここは expression のハマりポイントな気がします。

f:id:satyk:20190805013008p:plain

COPはあまり詳しくないですが、文字の色や位置を調整して、こんな感じ…?
最後に ROP File Output します。

f:id:satyk:20190805012929p:plain

出力するファイル名の末尾にもバージョン番号を入れると分かりやすいかもしれないですね。

$HIP/houdini_icon_`details("../../python1","version")`.png

ここで Render ボタンを押せばそのまま1枚出力されます。

次に、COPから出て再び Geometry階層に戻ります。
Python SOP をもう一つ作って、今度は ROP File Output の Render ボタンを押すノードを作ります。

n = hou.node('../cop2net1/rop_comp1')
n.parm("execute").pressButton()

このノードをクックすると、画像が出力されます。
 

Hbatchでhipを実行する

※これ以降はライセンスを使用します。

ここで最初のpythonノードの前に、何かしらのメッシュを繋いでおきます。
このメッシュは全く使わないのですが、ジオメトリに実体が何も存在しないと、次のステップの時にエラーが出てしまいました。

f:id:satyk:20190805015414p:plain

いったんhipを保存して、次はバッチファイルを作成します。
テキストエディタを起動します。

mread "C:/test/make_icon.hip"
opcook obj/geo1/python2
quit

mreadコマンドラインからhipファイルをロードし、opcookで指定ノードをクックします。
ファイル名やパス名は一例です。スラッシュの向きはWindowsと違うので注意が必要です。
このファイルは .cmd 形式で保存します。

このcmdファイルを、Houdiniパッケージに含まれている Command Line Tools で実行します。
Command Line Tools は、普通のコマンドプロンプトとは違い、Houdiniの各種スタンドアロンツールなどを、環境変数にパスを通したような状態で実行することができます。

f:id:satyk:20190807004851p:plain
Command Line Tools を起動したら、hbatch の次にさきほどのcmdファイルを指定してリターンします。

hbatch C:\test\icon_gen.cmd

hbatch はHoudiniをコマンドラインから実行するものです。(※ライセンスを使用します)
各バージョンに紐づいて実行されるので、バージョンごとの Command Line Tools で実行するたびに、それぞれのバージョンアイコンが生成されます。

f:id:satyk:20190805021340p:plain

これで各バージョンのアイコン画像ができましたので、前述の「Quick Any2Ico」などのツールを使って ico に変換します。
スタートメニューにピン留めされているショートカットの場所を開き、プロパティから新しいアイコンを指定したら完成です!

f:id:satyk:20190805131909p:plain

うわ~つぶれて見えない…!

…アイコンとしてはもう少し調整が必要そうです。
今ではPDGを使えばもっとスマートに色々できるかもですね。
ではまた。