2007年01月11日

ExcelでWeightMapを編集(Windowsのみ) その1 modo 202

fig01さて、今回のお題はmodoとExcelを通信させてウェイトマップをExcelで編集しようという事だ。残念ながらMac環境が無いのでMacについては手が出せないので今回はWindowsのみが対象だ。
とりあえずのとっかかりとして、今回は現在選択されているウェイトマップ1つに対してのみ、Excelとやりとり出来るようになっている。ただちょっとセットアップ方法が複雑なので注意してね。

fig03セットアップは次の事をして欲しい。

  1. まず、自分のmodoのユーザーフォルダーを探して貰いたい。やり方はコマンドラインに query platformservice path.path ? user と入力すれば、コマンド履歴の結果タブにフルパスが表示される筈である。たぶんこんな感じ
    c:¥Documents and Settings¥USER¥Application Data¥Luxology
    異なるのはUSERの部分だけだと思う。
  2. 見つかったユーザーフォルダーにsample93.lzhにはいっているcomフォルダをそっくりコピーする
  3. ユーザーフォルダー内のConfigsフォルダーにexcelinterface.cfgをコピーする
  4. ユーザーフォルダー内のScriptsフォルダーにexcelinterface.pyをコピーする
  5. weighttable.xlsをエクセルで開いて、マクロを有効にして、A1のセルに書かれているユーザーフォルダーのパスを自分のユーザーフォルダーにあわせて変更する。例えばユーザー名がnobodyだったら、
    c:¥Documents and Settings¥nobody¥Application Data¥Luxology¥com
    とする。最後のcomは取らないようにね。
  6. これで準備は完了。modoを立ち上げてウェイトマップを仕込んだモデルを出して、頂点マップリストで編集したいマップを選択して、Excel側のフォームでUpdateListを押してリストが表示されたらOKだ。

最初に謝って置かなくちゃならないのは、たまにNumLockが外れるバグがあるって言う事だ(これについてはマイクロソフトのサイトに解消法が載っているからなんとかなるかも・・・)。

動作原理なんだけど、早い話がExcelからmodoへキーボードショートカットを送り込んでスクリプトを起動させて通信するようになっている。割り当てたキーは「SHIFT+ALT+CTRL+0」キーだ。これに他のものを割り当てている人はExcel側でプログラムをちょっと書き直すか、今割り当てている機能を他に移すかしなくちゃならない。この辺も自由に割り当てがきくようにしたいと思っているけど、今のバージョンでは固定だ。このキー割り当てはexcelinterface.cfgに記述されているだけなので、これを削除すれば元通りになるよ。
次に通信なんだけど、comフォルダ内の3つのファイルで行っている。data.txtが実際のデータのためのファイル。control.txtがexcelからmodoのスクリプトへ動作を伝えるためのファイル。ack.txtが同期を取るためのファイルだ。動作は次の手順

  1. Excelからさせたい動作のためのキーワードをcontrol.txtに書き込んで、必要ならdata.txtも書き込んで、modoへショートカットキーを送り込む。
  2. modoのスクリプトが起動して、control.txtを読み込んで動作を決定し、作業する。
  3. 必要なら結果をdata.txtに書き込み、ack.txtにokを書き込む。
  4. Excel側では1秒ごとにタイマーイベントが発生してack.txtを読み込み、内容がokになるのを待つ。10秒待ってダメなら終了
  5. ack.txtがokになったらack.txtにwaitを書き込んで、必要ならdata.txtからデータを読み込んで表を更新する。

とまあこんな感じだ。本当はもっとリアルタイム性を付けたいところなんだけど、Excelのタイマーは1秒より小さい単位はダメみたいなので諦めた。

使い方はフォームの3つのボタンを使って行う。フォームが消えちゃったらシート上のShowFormボタンを押せば出てくるよ。UpdateListはmainレイヤー上の全てのバーテクスについて、現在頂点マップリストで選択されているウェイトマップ値を全部Excelに取り込む。GetSelectionは選択されているバーテクスだけ取り込まれる。PutはExcelの表の値をmodoへ書き戻す。だからmodo側でバーテクスを選択してからExcel側でGetSelectionを押して取り込み、マップ値を変更しながらPutを押して、modo側のマップを更新するって感じかな。

fig02ちなみにバーテクスの番号はmodoのビューでも表示できるのでこの作業をする時は表示しておくといいよ。ビュー上にカーソルを入れて置いてoキーを押すと設定パネルが出るので、一般可視性のインデックス表示をONにするだけだ。これで選択されたバーテクスには番号が表示されるようになる。

まだ実験段階なので大した役には立たないかも知れないけど、表で一括処理したいようなものなら同じ原理でいろいろ出来そうだな。

それではまた次回。

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ



take_z_ultima at 12:30│Comments(0)TrackBack(0)modo | CG

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

Archives