忍者ブログ

≪ 前の記事次の記事 ≫

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

▲TOP

3dsMax:スクリプトを書いてみよう! 入門編 第5回

さて、今回は前回の2番、
頂点2の頂点番号連結後の頂点座標を連結可能な頂点のうち、頂点1に最も近い頂点の番号と座標にする」について考えて見ます。

頂点2の番号が決まれば、その座標を取得するのは簡単です。 頂点2(実際には変数にします).pos で取得できます。 
→ .posではなく、.getvertex でした。記述は $.getvertex 頂点2の頂点番号(整数)
となります。




頂点2を決定するためには、
a.頂点1と連結可能な頂点のリストを作る。
b.その候補と頂点1との距離を算出して、最も値が少ないものを頂点2とします。

a.は連結可能な頂点のリストアップの仕方が、b.は距離の算出方法や最も小さい値が複数個ある場合の処理が難しいかなと思います。

どちらも今までのように一行ずつ実行していては手間、或いは実現不可能なケースになるので、これからは正式に(?)スクリプトとして作り、保存時、起動するやり方をとります。

その前に、今回はaの下準備ということで、「ターゲット連結の連結対象はどうなっているのか?」 と 「選択範囲の操作方法」についていろいろやってみようと思います。

まずターゲット連結の連結対象について。

まず、メタセコイヤはどうなっているか調べてみると、、連結対象は非常に分かりやすく「選択されている頂点意外」全てOKです。

ではMAXはというと、実は「編集可能メッシュ」の場合はメタセコと同じで「選択されている頂点以外全て」になるのですが、「編集可能ポリゴン」はリファレンスによると、

「注意: 最初の頂点に 1 つのエッジで接続している頂点だけがターゲット連結の対象となります。 」
という注意書きがあります。 実はこれは半分(?)正解で、条件によっては連結対象はもっとたくさん発生します。そうでないと困るケースも発生します。

注意書きの意味は、

4c4f4dbe.jpeg

この画像のように「穴」のないオブジェクトの場合で選択された頂点(画像上赤ドット)はエッジ一つはさんだ先の頂点(画面上青ドット)とだけ連結できます よ。 ということです。 一見出来そうな(出来て欲しい)黄色×の頂点には連結できません。今回マークしていない、その他の頂点も連結不可です。

では、ここで問題です。
赤ドットを選択した状態から、通常のコマンドを使って青ドット+赤ドットの頂点を選ぶ方法が2つほどあります。
どうやるといいでしょうか??

回答は、、、
1つ目が簡単ですが、「グロー選択」を押すと方法。
2つ目が右クリックメニューの中にある、「エッジに変換」を選んで(編集モードがエッジに自動的に移ります)、次に右クリックメニューの「頂点に変換」(編集モードが頂点に自動的に変わります。)

が考えられます。

今回は楽そうなグロー選択を使って見ようと思います。

流れは
1.頂点1を選ぶ(手動)
2.グロー選択を実行
3.頂点1を2の選択から取り除く。

そうすると、頂点2の候補の頂点のみになります。

頂点1を選択した状態から後の処理を自動で処理(スクリプト起動)すると想定すると、下記のようなコードが考えられます。スクリプトとして起動してみましょう。

まず、MaxScriptメニューから新規スクリプトを選びます。
そうすると、「タイトルなし -- MaxScript」という画面が表示されますので、下のコードをそのままコピー&ペーストします。

その画面の「ファイル」メニューから「保存」を選び、分かりやすい名前にして、デスクトップにでも保存します。
そして、頂点を一つ選んだ状態で、「MaxScript」→「スクリプトの起動」を選び、今保存したスクリプトを指定します。或いはその画面がアクティブな状態で「ファイル」→「全てを評価」(Ctrl+E)でもよいです。

そうすると、青ドットのところのみが選択されな押されると思います。
そのままCtrl+Eをもう一度押すと、変な広がりを見せるのが分かるかと思います。


b=$.EditablePoly.getSelection #Vertex--現在の選択された頂点番号リストの取得
$.EditablePoly.GrowSelection ()--グロー選択
a=$.EditablePoly.getSelection #Vertex --現在の選択された頂点番号リストの取得
a=a-b--現在の選択された頂点番号リストから、最初の頂点を除く
$.EditablePoly.SetSelection #Vertex a--結果を反映して頂点選択


一番最後の結果を反映した選択は今回必要ありません。
理解しやすくするために表示させただけです。

実際にはその一つ前のaが取得できれば良いのです。

前回説明した特殊な配列をBitArrayと言いますが、普通の配列と違うのが下から2番目の行のように簡単に番号の付け足しや除外が出来るメリットがあ ります。また、すでにリストにあるのに追加、逆に無いものを除外しようとしてもエラーにはなりません。 論理演算が出来るかどうかは、、、調べていませ ん。 必要に応じて調べてみます。

今日はここまでにしたいと思います。


PR

Comment (0) | Trackback () | ▲TOP

Comment

  • メールアドレスは入力しても管理画面でしか表示されません。
  • コメント投稿時にパスワードを設定していた場合のみ、名前をクリックすると編集出来ます。

Vodafone絵文字 i-mode絵文字 Ezweb絵文字

Trackback

Trackback URL: