2006年11月

2006年11月30日

3DViewの視点の保存と復帰 modo 202

さて、今回のお題は前回書いた通り3DViewの視点の保存と復帰だ。何故だかわからないけど、3DViewについては現在の視点情報を取得する事は出来るのに、設定する方のコマンドが見当たらない。自分の探し方が悪いのかも知れないが、見当たらないんだよ。なもんで、スクリプトを使って現在の視点のパラメータを取得したとしても、その視点に戻す事が出来ない。以前にカメラの保存と復帰のスクリプトを書いたのは、今回のスクリプトの代用品として苦肉の策だったわけだ。で、何で今回それが出来たかと言うと、視点を制御する他の方法が見つかったからだ。ただし、かなりあてずっぽうな方法なので、設定が違えばちゃんと動作しないかも知れない(と言っても保存した画面より多少視点が前後する程度だけど)。ちょっと調べ切れなかったんだけど、パースビューのパースのかかり具合ってどっかのパラメータで弄れたっけ?その辺が今回のスクリプトには入っていないので、自分のmodoとパースのかかり方が違うと多少視点が前後するかも。まあそうじゃなくても視点に関しては良さそうなパラメータを使ってるだけなので、視線方向だけはガッチリ合うと思って使って貰えるとありがたい。まあパースビューがちょっと前後してもそれほど問題は無いと思うけど。それから今回のスクリプトではワークプレーンを動かしているんだけど、使っている時にワークプレーンがリセット位置以外になっていると、ワークプレーンのメッシュ間隔が変化する事がある。ワークプレーンの位置も角度も保存されるんだけど、メッシュ間隔とかはパラメーターが無いからどうにもならないっす。ま、その辺はご愛嬌という事で。実用上は全く問題ないと思う。

前置きが長くなったが、使い方は至ってシンプル。「@getview.py 番号」で視点を保存して、「@setview.py 番号」で保存した視点を現在の3Dビューに設定する。番号は保存した視点の識別のためのもので、何番でもいいよ。その番号でsetviewを呼び出せば、その番号の視点が復帰する。

番号は任意だからいくつでも行けるよ。実は番号じゃ無くても連続した文字列であれば何でもOK。一応modoを終了した時点で記録は消えるようになっている。

使い勝手を向上させるために適当なショートカットに割り当てるか、フォーム編集でボタンを作って使ってくれ。

それから、質問に丁寧に答えてくれたMarsさんありがとうございます。お蔭でワークプレーンのクエリーが出来ました(質問はViewport.3dViewのアートリビュートだったけど)。

それではまた次回。

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

take_z_ultima at 12:02|この記事のURLComments(0)TrackBack(0)modo | CG

2006年11月29日

vertxやedgeを範囲を限定して順番に選択 modo 202

いやぁ、やれば出来るもんだな。3DViewの視点を保存して復活させるスクリプトの実験はほぼ成功したよ。これでパッパッパと画面を切り替えながら作業できる(マルチ画面でやれば済む話だという意見もあるけどね)。でも公開は次回という事で、今回はヴァーテクスやエッジを1つずつ順番に選択するスクリプトだ。何に使うかと言うと、情報パネルを表示しながらヴァーテクスやエッジを回って、それぞれのエレメントのウェイトマップの状態とかを微調整したりしようという発想だ。ホントはリストで一覧して出来るのが一番なんだけど、今のところスクリプトでリストウィジェットを作るのが不可能もしくは方法が不明なので、まあ無いよりはマシかって感じで作ってみた。ちょうど「Ctrl+→」と「Ctrl+←」のカーソルキーのショートカットは未割り当てなので、自分はここに割り当てて使ってみている。

select sequenceさて使い方だが、ポリゴン選択モードでまず巡回させる範囲を選択する。まあしない場合は全体になるけど、目的のところまで回ってくるのに結構かかるよ(笑)。次にVertexかEdgeの選択モードに切り替えてスクリプトを起動すれば、選択したポリゴン内のエレメントが1つずつ順番に選択されて行く。コマンドパラメータに「−」を付けると巡回の順番が逆になる。何度も言うようだけど自分はCtrl+←キーに「@selectsequemce.py − 」を、Ctrl+→キーに「@selectsequemce.py 」を割り当てて使うと分かりやすくていいと思うよ。

それではまた次回。

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



take_z_ultima at 12:14|この記事のURLComments(0)TrackBack(0)modo | CG

2006年11月28日

3DViewPortの表示設定をワンタッチで切り替え その2 modo 202

今のところPythonで作る方法がわからなかったので、Perlで現在の3DViewPortの状態を取得して保存するスクリプトを追加した。これでお手軽に設定を保存して戻す事ができるようになるよ。使い方はAltキーを押しながらviewpropフォームまたはselect slotフォームの番号ボタンをクリックしてくれ。Altを押すと「cap番号」っていうラベルに切り替わるので確認できるよ。従来どおりShift押しながら番号のボタンをクリックすればフォームで設定した状態を保存も出来る。だからALT+ボタンで現在の状態をキャプチャしておいて、切り替えたくない部分はnochangeに設定し直してShift+ボタンで登録するといいんじゃないかと思う。ボタンは5つしか作らなかったけどスクリプトの引数で切り替えているだけなので幾らでも増やせるよ。今でもパースやfrontとかシェーディングの切り替えなんかはテンキーに割り当てられているからそこに割付けるといいかもね。「@getviewprop.py 番号」が呼び出し用、「@setviewprop.py 番号」がフォームを使って状態を保存する用、「@setviewprop.pl 番号」が現在の3DViewPortの状態を保存する用のスクリプトだ。

ところでviewprop.cfgを上書きしたのに設定が変わらないなんて人がいるかも知れない。そんな場合はフォーム編集で一度viewpropを削除してから設定し直すといいと思う。ただし外部から読み込んだフォームはそのままでは削除できない。まずフォームの元になっているcfgファイルをconfigフォルダから取り除き、modoを起動し直す必要がある。これさえすれば、あとはフォーム編集でviewpropを見つけて選択し、Delキーを押せば削除出来る。もちろんmodo201.cfgを直接書き換えてもいいけどね。削除出来たらmodoを終了させて、新しいviewprop.cfgをconfigフォルダにコピーしてmodoを起動すれば、ちゃんと置き換わっている筈だよ。ま、これはあくまで上手く切り替わらなかった人用の方法だ。ただ、読み込んだフォームの消し方は知っておいて損は無いと思うよ。

それからViewportの設定自体は「myviewprop.set番号」という名前でユーザー変数としてmodo201.cfgに登録されるので、このスクリプトを完全に綺麗に消したい場合はこの名前でcfgファイルの中を検索して該当箇所を削除してくれ。

    <hash type="Definition" key="myviewprop.view">
      <atom type="Type">integer</atom>
      <atom type="StringList">nochange;top;bo;bck;fnt;rgt;lft;psp;cam;lgt</atom>
    </hash>

みたいな記述になっているよ。

それではまた次回。

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



take_z_ultima at 11:01|この記事のURLComments(0)TrackBack(0)modo | CG

Pythonのクエリー modo 202

新しい発見があった。クエリー可能な複数のパラメータを持つコマンドをPythonからクエリー出来ないと書いたけど、Perlからは可能だった。なんだよぉ。何か方法があるのかも知れないけど、今のところ不明。だから現在の3DViewPortの状態を取得して保存するスクリプトはPerlであっさり書けた。あーあ。

それから今までばかばかしいくらいにマヌケな事をひとつやっていた事に気付いた。Pythonではmodoに対してクエリーを発行する時にlx.eval()という関数を使うんだけど、選択ポリゴンを取得なんて時はポリゴンを選択していないとNoneが戻り、1つだとポリゴンIDが戻り、複数だとポリゴンIDのタプルが戻ってくる。だから受け取った値が3種類のデータ構造を持つのでいちいち調べてはタプルじゃなかったらリストにして・・・みたいな事を繰り返していた。でもそんな事しなくてもlx.evalN()とlx.eval1()を使えば、戻る値の形式をタプルにするか、データ1個だけにするかを指定出来たんだな。その関数の存在は知っていたけど、lx.eval()で全部出来ちゃうからすっかりその存在を忘れてた。あーあほらしい。今まで書いたスクリプトの中に無数に恥ずかしい記述があるけど、今更直すのもめんどくさいのでそのままにして置くけど、自分のコードを元にスクリプトを書こうと言う人は自分の轍を踏まないようにな。明日は訂正版をアップするよ。

今日はパースビューの制御の方法を思いついた。うまくすればパースビューの記録と復帰が出来るかも。まだ実験もしていないのでどうなるか分からないけど、前に作ったカメラ位置の記録と復帰よりパースビューの方が切り替えたいよな。

ところでこのサイトがバーテクスモンキーにリンクされてた。Unknown Japanese script Writerとか紹介されてた(笑)。自分は英語があんまり得意じゃないけど、外国の人は日本語なんかさらに馴染みが無いだろうから、まったくちんぷんかんぷんだろうな。あっちのサイトにはお世話になっているだけに、お返しはしたいところだけど、難しいなぁ。英語のコメントなんかきた日にゃあ、居留守使うかも(笑)。



take_z_ultima at 03:07|この記事のURLComments(0)TrackBack(0)modo | CG

2006年11月27日

3DViewPortの表示設定をワンタッチで切り替え modo 202

さて、今日のお題は3DViewPortの表示設定をワンタッチで切り替えることだ。カメラとかライトとかグリッドとか、つけたり消したりする時、oキーを押せば設定がすぐ出るからそんなに不自由じゃないやって人にはいらないスクリプトかも。しかも残念ながら何故だかスクリプトから3dViewの設定がクエリー出来ない。パネル上でクエリーすると出来るんだけど、スクリプトでやろうとするとエラーが出て、取得できるのは投影方向とシェーディングタイプだけなんだよ。だから本来ならビューを選択して、「この状態を記録しとけ!」とかやっといて、「さっきの設定に戻して」みたいな事が出来るはずだったんだが、それはスクリプトからクエリー出来るようになるまでお預けとなってしまった。言い訳はこの辺にして、スクリプトの説明だ。

設定パネルまずは設定パネルの方がこのフォームだ。フォームエディタを開くとviewpropと言う名前になっているのでポップオーバーなどに適当に割り当ててくれ。見てわかる通りビューポートの設定項目が並んでいる。nochangeは現在の設定から変更しないという意味で、プルダウンするとその他の設定が出てくる。これらの項目を適当に組み合わせて必要な画面設定を作ったら、下の1〜5のボタンのどれかにその設定を割り当てる。割り当て方は、SHIFTキーを押しながら割り当てたいボタンをクリックするだけだ。SHIFTを押さないでクリックするとその番号に割り当てられた設定が呼び出されるよ。その際、現在選択されているビューポートの設定も変更される。選択しているビューポートが3Dビューじゃない時はエラーが出るけどご愛嬌と言うことで・・・。ちなみに設定を登録する時は「@setviewprop.py 番号」、呼び出す時は「@getviewprop.py 番号」でやっているだけなので番号を変えれば幾らでも登録可能だよ。キーボードショートカットに「@getviewprop.py 1」などと登録すればキー1発で切り替えも可能だよ。

切り替えパネルでもそれが面倒って人のためにviewpropの中に「select slot」っていう名前のフォームが入っているからそれのみインスタンスでも作ってポップオーバーにしておけばちょっとコンパクトなフォームで切り替えできるよ。

それではまた次回。

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



take_z_ultima at 11:39|この記事のURLComments(0)TrackBack(0)modo | CG
Archives