[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
3dsMax:スクリプトを書いてみよう! 入門編 第4回
2009.05.23 Saturday 01:41 | 3ds Max
さて、今回は前回出てきた .weldverts を潰しが利くようにする、すなわち汎用性をもたせるようにする方法を考えて見ます。
おさらいですが、選択されている編集可能ポリゴンで頂点を連結するには、
$.editablepoly.weldverts 頂点1の頂点番号(整数) 頂点2の頂点番号(整数) 連結後の頂点座標
と書くと良さそうです。
「ターゲット連結」は最初にクリック(或いはドラッグ開始)した頂点の番号を上のコマンドの頂点1の頂点番号、次にクリック(或いはマウスボタンを離す)した頂点の番号を頂点2の頂点番号、そして連結後の頂点座標に頂点2の座標をそれぞれ与えて実行しています。
これを手入力すれば「ターゲット連結」を使わないで頂点の連結が出来ますが、時間は相当かかります。
なぜなら毎回頂点番号や頂点座標を調べなくてはならないからです。
ではどうすればいいでしょうか?
方法はいろいろあるのでしょうが、Metasequoiaのような動きをさせたいのですから、
1.頂点1の頂点番号を現在選択されている頂点の番号にする。
2.頂点2の頂点番号と連結後の頂点座標を連結可能な頂点のうち、頂点1に最も近い頂点の番号と座標にする。
こうすると良さそうです。
1は比較的簡単です。2は壁が2つ3つあり、ちょっと敷居が高いです。なので、まずは1から解決しましょう。
準備として、
・セグメントが12くらいの適当なサイズの球を作って、編集可能ポリゴンにします。
・リスナーを開き、マクロレコーダーを有効にします。
・サブオブジェクトレベルを頂点にして、適当な頂点を一つクリックして選択します。
そうすると、ピンク画面に、
$.EditablePoly.SetSelection #Vertex #{6}
というコマンドが出るかと思います。 6は選んだ頂点で異なります。
これは「頂点番号が6の頂点を選択しなさい」というコマンドです。
次に、追加で頂点を選択してみてください。2つ、3つと増やしていくと、
$.EditablePoly.SetSelection #Vertex #{6}
$.EditablePoly.SetSelection #Vertex #{6..7}
$.EditablePoly.SetSelection #Vertex #{6..8}
$.EditablePoly.SetSelection #Vertex #{6..8, 20}
$.EditablePoly.SetSelection #Vertex #{6..8, 18, 20}
$.EditablePoly.SetSelection #Vertex #{6..8, 18, 20, 31}
こんな感じで増えていきます。ここの値は1から始る整数で、どんな選び方をしても若番から並べ替える使用になっています。ここの6..8というのは6~8という意味です。そのため全ての頂点を選択すると #Vertex #{1..頂点数} と表記されます。
とりあえずは細かい事は気にせず今は「そんな風になっている」くらいに思っていてください。
次に選択を解除し、再度適当な頂点を一つだけ選択してください。
$.EditablePoly.SetSelection #Vertex #{19}
といった感じの文字列がピンク画面に出るかと思います。
これの一部を下記のように書き換えます。
$.EditablePoly.GetSelection #Vertex#{19}
これは「今選んでいる頂点(の番号のリスト)を教えて」というコマンド、、だと思ってください。
実行すると リスナーの白画面に #{19} と表示されます。
これが現在選択されている頂点番号のリストを得る方法です。
じゃあ、頂点1の頂点番号のところに $.EditablePoly.GetSelection #Vertex と指定すれば解決かと思われるかもしれませんが、実はだめなのです。
この #{19} は 特殊なリストです。
今は一つしか選択していないのですが、リストなので、いつも一つとは限りません。
そして頂点1の頂点番号は整数でなおかつ一つでなくてはなりませんので、後ちょっとだけ工夫が必要です。
本来はリストに何個リストアップされているかを確認して、一つの場合のみちょっとした処理をして整数に変換して、頂点1の頂点番号として指定するのが確実な方法なのですが、、これまた説明がかなり長くなるので、今回は必ず一つだけ頂点を選んでから実行するという約束のもと、「ちょっとした処理」をそのままやります。
ピンク画面に次のように入力して実行してください。(頂点を1つ選んだ状態で実行します)
V_list =$.EditablePoly.GetSelection #Vertex as Array
いつものごとく、変数V_listに頂点のリストを代入したのですが、特殊なままのリストではなく、汎用のリスト(配列といいます。)タイプにして代入しました。as Arrayというのが「普通の配列型ですよ」と型を指定しています。
確認のため、V_list と入力してenterをおすと、
#(19)と出るかと思います。選択頂点が複数だった場合は #(5,6,7,19)と出たりします。
違いは{ }が( )に変わっていますし、5,6,7 となっています。 {}の時は 5..7 となるはずです。
次に V_list[1] と入力してEnterを押すと、、、 19 とだけでます。
これは、「配列の1つ目の値」が表示されたものです。
こうなると頂点1の頂点番号として使えます。
特殊なリストは頂点、エッジ、面(ポリゴン)専用のリストで、選択範囲を足したり引いたりするのが楽に出来るようになっています。次回はこれを利用します。また、普通の配列型とどう違うのかも折を見て説明します。
次回は頂点2の頂点番号と連結後の頂点座標を攻略するために連結可能な頂点のリストアップ方法、、しいては選択範囲のコントロールを紹介したいと思います。
おさらいですが、選択されている編集可能ポリゴンで頂点を連結するには、
$.editablepoly.weldverts 頂点1の頂点番号(整数) 頂点2の頂点番号(整数) 連結後の頂点座標
と書くと良さそうです。
「ターゲット連結」は最初にクリック(或いはドラッグ開始)した頂点の番号を上のコマンドの頂点1の頂点番号、次にクリック(或いはマウスボタンを離す)した頂点の番号を頂点2の頂点番号、そして連結後の頂点座標に頂点2の座標をそれぞれ与えて実行しています。
これを手入力すれば「ターゲット連結」を使わないで頂点の連結が出来ますが、時間は相当かかります。
なぜなら毎回頂点番号や頂点座標を調べなくてはならないからです。
ではどうすればいいでしょうか?
方法はいろいろあるのでしょうが、Metasequoiaのような動きをさせたいのですから、
1.頂点1の頂点番号を現在選択されている頂点の番号にする。
2.頂点2の頂点番号と連結後の頂点座標を連結可能な頂点のうち、頂点1に最も近い頂点の番号と座標にする。
こうすると良さそうです。
1は比較的簡単です。2は壁が2つ3つあり、ちょっと敷居が高いです。なので、まずは1から解決しましょう。
準備として、
・セグメントが12くらいの適当なサイズの球を作って、編集可能ポリゴンにします。
・リスナーを開き、マクロレコーダーを有効にします。
・サブオブジェクトレベルを頂点にして、適当な頂点を一つクリックして選択します。
そうすると、ピンク画面に、
$.EditablePoly.SetSelection #Vertex #{6}
というコマンドが出るかと思います。 6は選んだ頂点で異なります。
これは「頂点番号が6の頂点を選択しなさい」というコマンドです。
次に、追加で頂点を選択してみてください。2つ、3つと増やしていくと、
$.EditablePoly.SetSelection #Vertex #{6}
$.EditablePoly.SetSelection #Vertex #{6..7}
$.EditablePoly.SetSelection #Vertex #{6..8}
$.EditablePoly.SetSelection #Vertex #{6..8, 20}
$.EditablePoly.SetSelection #Vertex #{6..8, 18, 20}
$.EditablePoly.SetSelection #Vertex #{6..8, 18, 20, 31}
こんな感じで増えていきます。ここの値は1から始る整数で、どんな選び方をしても若番から並べ替える使用になっています。ここの6..8というのは6~8という意味です。そのため全ての頂点を選択すると #Vertex #{1..頂点数} と表記されます。
とりあえずは細かい事は気にせず今は「そんな風になっている」くらいに思っていてください。
次に選択を解除し、再度適当な頂点を一つだけ選択してください。
$.EditablePoly.SetSelection #Vertex #{19}
といった感じの文字列がピンク画面に出るかと思います。
これの一部を下記のように書き換えます。
$.EditablePoly.GetSelection #Vertex
これは「今選んでいる頂点(の番号のリスト)を教えて」というコマンド、、だと思ってください。
実行すると リスナーの白画面に #{19} と表示されます。
これが現在選択されている頂点番号のリストを得る方法です。
じゃあ、頂点1の頂点番号のところに $.EditablePoly.GetSelection #Vertex と指定すれば解決かと思われるかもしれませんが、実はだめなのです。
この #{19} は 特殊なリストです。
今は一つしか選択していないのですが、リストなので、いつも一つとは限りません。
そして頂点1の頂点番号は整数でなおかつ一つでなくてはなりませんので、後ちょっとだけ工夫が必要です。
本来はリストに何個リストアップされているかを確認して、一つの場合のみちょっとした処理をして整数に変換して、頂点1の頂点番号として指定するのが確実な方法なのですが、、これまた説明がかなり長くなるので、今回は必ず一つだけ頂点を選んでから実行するという約束のもと、「ちょっとした処理」をそのままやります。
ピンク画面に次のように入力して実行してください。(頂点を1つ選んだ状態で実行します)
V_list =$.EditablePoly.GetSelection #Vertex as Array
いつものごとく、変数V_listに頂点のリストを代入したのですが、特殊なままのリストではなく、汎用のリスト(配列といいます。)タイプにして代入しました。as Arrayというのが「普通の配列型ですよ」と型を指定しています。
確認のため、V_list と入力してenterをおすと、
#(19)と出るかと思います。選択頂点が複数だった場合は #(5,6,7,19)と出たりします。
違いは{ }が( )に変わっていますし、5,6,7 となっています。 {}の時は 5..7 となるはずです。
次に V_list[1] と入力してEnterを押すと、、、 19 とだけでます。
これは、「配列の1つ目の値」が表示されたものです。
こうなると頂点1の頂点番号として使えます。
特殊なリストは頂点、エッジ、面(ポリゴン)専用のリストで、選択範囲を足したり引いたりするのが楽に出来るようになっています。次回はこれを利用します。また、普通の配列型とどう違うのかも折を見て説明します。
次回は頂点2の頂点番号と連結後の頂点座標を攻略するために連結可能な頂点のリストアップ方法、、しいては選択範囲のコントロールを紹介したいと思います。
PR
Trackback
Trackback URL:
Comment