2008/11/19

MaxScript Toggle MEMO

Maxスクリプトで切り替えをやるときの記述。忘れないうちにメモ。


macroscript PV_PickPaintToggle category:"VertexPaint"

(
  global VPset

 if VPset == 1 then
 (
  (macros.run "VertexPaint" "VertexPaint_PaintMode")
  VPset = 0
 )
 else
 (
  (macros.run "VertexPaint" "VertexPaint_PickMode")
  VPset = 1
 )
)



この例文はVertexPaintでのピッカーとペイントの切り替えを行うスクリプト。
uid000012_20081118171231141928bf.gif
ショートカットに登録すれば楽にペイント、スポイトを切り替えれる。


こういう切り替え系のスクリプトはちょっとした作業のときにあると便利だったりする。
例えば、オブジェクトの表示非表示、フロントピュー、バックビューの切り替え...などなど。

基本的な構造は同じなのでコピペでいろいろ作れると思う。
今回妙なとこでつまずいたのでメモしとく。

まず、

macroscript PV_PickPaintToggle category:"VertexPaint"


で、スクリプトの名前、カテゴリを決定しておく。
これが無いと、Run Scripts...でしか実行できない。
ショートカット等に登録するにはこの記述は必要。

次に、変数指定。

global VPset


変数指定って聞くと何だそれ?と疑問に思っていましたが、結構重要。
ここで、VPsetは変数ですよって宣言しないと、どうやら初期起動などで認識しない。

はじめ、この変数指定をやっていなかったせいか、
Maxを起動後実行しても、結果がよろしくないということが起こりました。
MaxScript Editor上で一度実行すれば正常に動作するのですが、Maxを再起動すると駄目でした。


最後にif文。

if VPset == 1 then
(
 (macros.run "VertexPaint" "VertexPaint_PaintMode")
 VPset = 0
)
else
(
 (macros.run "VertexPaint" "VertexPaint_PickMode")
 VPset = 1
)


ここで条件分岐させ、
VPsetが1のときはAを実行し、VPsetに0を代入。
VPsetが0のときはBを実行し、VPsetに1を代入させます。
こうすることで実行するたびにAとBが交互に入れ替わるようになる。

また、Case of~文にすれば、3段階~の切り替えもできるようになります。


case VPset of
(
 1:print A
  VPset = 2
 2:print B
  VPset = 3
 3:print C
  VPset = 1
 default:print A
      VPset =2
)


というように、順繰りになるように変数に代入してやればいい。
defaultは初期起動時になにも代入されていない時に使います。

0 件のコメント:

コメントを投稿