スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
【--/--/-- --:--】 | スポンサー広告 | page top↑
スクリプトおもしれー
XSIのポップアップメニュープラグインxpop
こいつは入れるのは簡単だけど
それをカスタマイズするにはScriptを組まなくてはいけないらしく
敷居が高いなぁと思っていたんだけど
XSIのIRCで叱咤激励をうけ重い腰を上げてみました

インストールとカスタマイズはjunkiさんのサイトに詳しく書いてあるので割愛
とりあえず入れ込むスクリプトを書いてみた

やりたいことはよく使うカーブをメッシュにするのと部分カーブを抽出この2コマンドを追加してみたい

とりあえずオペレーションをするとスクリプトエディタに
つらつらーとコマンドが出てくるので
そいつをコピペすれば組み込めるぞと!

ここで問題が・・・
当然オペレーションした場合オブジェクト名が引数に入るため
そのままコピペだと汎用性がない・・・

ApplyGenOp("CurveListToMesh", "", HogeHoge, 3, siPersistentOperation, siKeepGenOpInputs, null);

赤文字のHogeHogeが固有のオブジェクト名
こいつを選択しているものに変更したい

そこでIRCできいてみるとSelection(0)という呪文を教えてもらった
括弧内の数字が選択オブジェクトの順番を表し
0が第1オブジェクトで1、2と続いていくらしい
まぁとりあえず何も考えずに0としておこう(複数いっぺんにメッシュ化するには細工が必要らいい)

んじゃ入れてみよ

ApplyGenOp("CurveListToMesh", "", Selection(0), 3, siPersistentOperation, siKeepGenOpInputs, null);
ほい! 動きました

優秀!優秀!
これでメッシュ化はOK!

続いて部分カーブの抽出
こいつはいーつも面倒でイラレで作ったEPSをばらして立ち上げたいときとか
マウスで部分カーブ選んでカーブ->部分カーブから抽出(ここで出来上がったカーブが選択されるので)->元のオブジェクト選択->Selectionを部分カーブに変更(アー面倒・・・)->部分カーブ選択
とマウスをあっちゃらこっちゃらやっていたんでこれを自動化したい

これを実現するにはただスクリプトを羅列ではうまくいかんぞとのことで
まず問題点
新規カーブが作成された段階で新しくできたカーブトが選択されてしまうため元に戻さなくてはいけない
これの回避策として元のオブジェクト名を変数に入れて後で呼び出せば解決ってと
でさっきのSelection(0)を使い

var SelCurve = Selection(0);

変数SelCurveに入れっと
そんでカーブの抽出でまた問題コマンドでカーブの名前の部分にSelection(0)いれてもエラーが出る
SDK見て調べてみるとCollectionItemってのを発見!
こいつを使いまた新しい変数に入れておこう

var SelSubCurve = Selection(0).CollectionItem;

よっしゃこいつで抽出コマンド書き書き!

ExtractFromComponents("ExtractSubCrvOp", SelSubCurve, "crvlist_extracted", null, siPersistentOperation, siKeepGenOpInputs, null);

あとは最初の変数SelCurveこいつを使って選択しなおし

SelectObj(SelCurve, null, true);

ぽんっと!
Selectionを部分カーブ変更っと

SetSelFilter("SubCurve");

完璧!

ここでうれしい誤算
CollectionItemを使って変数に入れたんだけど
2つのカーブを選択していた時にただの変数だと思ったのがちゃんと2たつ入っていて
しっかり2本のカーブが1オブジェクトとして抽出できた
原理はわからないがうまくいったのでよし!

結果こんな感じのスクリプトになった

var SelSubCurve = Selection(0).CollectionItem;
var SelCurve = Selection(0);
ExtractFromComponents("ExtractSubCrvOp", SelSubCurve, "crvlist_extracted", null, siPersistentOperation, siKeepGenOpInputs, null);
SelectObj(SelCurve, null, true);
SetSelFilter("SubCurve");

なんか美しくない気がするけど動いたからいいやぁ
使ってるスクリプト言語はJScriptってのだったんだけど
初めて使ってコリャとっつきやすいなと感じた
あて感でやった部分もあったけどうまくいってよかったわー

ま! IRCのおかげだけどね!!

スクリプト楽しぃー
スポンサーサイト
【2008/12/05 08:20】 | XSI | トラックバック(0) | コメント(0) | page top↑
<<あぁぁ 疲れた・・・ | ホーム | 3Decemberを覗いてきた>>
コメント
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://macwatanabe.blog64.fc2.com/tb.php/18-0c43dfc3
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。