カスタムの条件に従って動作する条件コマンドのサンプル ~その1~
https://www.youtube.com/watch?v=sedtNfff0eo
Modoバージョン16.0で搭載された条件に従って動作する条件コマンドですが、このビデオではさらに細かな条件で動作を変えるサンプル例をご紹介します。条件コマンドの基礎については、日本語解説ビデオ「特定の条件に従って動作する条件コマンド」をご覧ください。
まずはダイレクトモデリングにおいて、頂点モードでは頂点ベベル、エッジモードではエッジ面取り、ポリゴンモードではポリゴンベベルツールを起動する条件コマンドを作ってみましょう。ビデオ「特定の条件に従って動作する条件コマンド」で行ったように、このビデオでもワークベンチを使って、条件コマンドを設定していきます。
フォーム編集からワークベンチの場所を特定し、(新規コントロール) > コマンドの追加からコマンドと引数として ?conditionalCommand DirectBevel と入力します。そうするとワークベンチにDirectBevelというラベルのボタンが出てきますので、このボタンをクリックすると、DirectBevelというキーを持つ条件コマンドの設定パネルが開くようになります。
ダイレクトモデリングにおける頂点ベベル・エッジ面取り・ポリゴンベベルの起動コマンドは以下のようになりますので、それをそれぞれ頂点:デフォルト、エッジ:デフォルト、ポリゴン:デフォルトへと設定します。起動コマンドを調べるにはF5キーでコマンド履歴パネルを出すと、わかりやすいでしょう:
ダイレクトモデリング版 頂点ベベル:tool.set vert.bevel on
ダイレクトモデリング版 エッジ面取り:tool.set edge.chamfer on
ダイレクトモデリング版 ポリゴンベベル:tool.set poly.bevel on
設定パネルを閉じたら、フォーム編集のコマンドのところに入力してある先頭の?を消去します。こうすることで、DirectBevelというキーの条件コマンドを設定するのではなく、実行するボタンに代わります。実際に編集モードを切り替えながら、指定したツールが起動することを確認してください。
では同様に、今度はプロシージャルモデリング版のベベルに対する条件コマンドを作ってみましょう。プロシージャルモデリング版の場合であっても、コマンド履歴を使うことで、起動コマンドをすぐに取得することができます。まずはワークベンチ > (新規コントロール) > コマンドの追加で今度は ?conditionalCommand MOPBevel と入力します。MOPBevelというラベルのボタンをクリックし、設定パネルが開いたら、先ほどと同様、頂点:デフォルト、エッジ:デフォルト、ポリゴン:デフォルトへそれぞれ以下の起動コマンドを入力します:
プロシージャルモデリング版 頂点ベベル:meshop.create vert.bevel.item
プロシージャルモデリング版 エッジ面取り:meshop.create edge.chamfer.item
プロシージャルモデリング版 ポリゴンベベル:meshop.create poly.bevel.item
フォーム編集のコマンドのところで先頭の ? を削除し、実行ボタンへと変更したら、実際に編集モードを切り替えながら、MOPBevel ボタンをクリックして、編集モードに対するそれぞれのツールが追加されるかを確認します。
これでダイレクトモデリング版、プロシージャルモデリング版とそれぞれに対するベベル用条件コマンドが出来上がりました。ここからさらにこの二つの条件コマンドを、編集しているメッシュがダイレクトモデリングのメッシュなのか、プロシージャルモデリングで編集しているメッシュなのかを判別して、自動で適した条件コマンドを実行するという条件コマンドを作っていきます。
この新たな条件コマンドを作るには、現在選択しているメッシュがプロシージャルモデリングで編集されているかどうかを判別するためのコマンドが必要です。このコマンドというのが、条件コマンド conditionalCommand に実装されています。コマンド履歴のパネルからコマンドのタブを開き、F ボタンをクリックしてコマンドを検索してみましょう。パターンに conditionalCommand と入力します。そうすると conditionalCommand 関連のコマンドが出てきます。
conditionalCommand には現在の編集モードを返す currentMode や、現在選択されているのがプロシージャルモデリングで作成されているメッシュかどうかを判別する procMesh、さらに現在の編集モードで選択されているエレメント数を返す selectedElementCount といったコマンドが用意されています。今回の用途には conditionalCommand.procMesh というコマンドでメッシュを調べればよさそうです。
では条件コマンドを新たにひとつ作成しましょう。フォーム編集 > ワークベンチ > (新規コントロール) をクリックし、?conditionalCommand MyBevel と入力します。MyBevelボタンをクリックし設定パネルを開きます。頂点やエッジ、ポリゴン、アイテムモードに対する設定の下に、カスタムキー、クエリーするコマンド、条件キー、条件アクションといった設定項目があります。これがコマンドをクエリー、つまり問い合わせて、その結果によって起こすアクションを設定するという項目になります。
今回、カスタムキーは任意のキーで構いませんので、Bevel と設定しておきましょう。クエリーコマンドは先ほど調べた conditionalCommand.procMesh です。この結果を表すのが条件キーですが、これが true であれば編集しているメッシュはプロシージャルモデリングのメッシュということになりますので、MOPBevel を実行するよう、条件キーに true、条件アクションに conditionalCommand MOPBevel を設定してOKボタンをクリックします。
同様に、もう一度MyBevelボタンをクリックし、設定パネルから先ほどと同じくカスタムキーに Bevel、クエリーするコマンドとして conditionalCommand.procMesh を設定したら、今度は条件キーに false と指定します。false とすると、プロシージャルモデリングのメッシュではない場合、つまりダイレクトモデリングのメッシュの場合ということになりますので、条件アクションにダイレクトモデリング用のベベルの条件コマンドである conditionalCommand DirectBevel を設定してOKボタンを押します。フォーム編集のコマンドからは先頭の ? を削除しておきます。
設定内容を確認するため、いったんこの時点で設定ファイルを出力してみましょう。ファイルメニュー > 設定の上書き保存を行い、システムメニュー > 設定フォルダを開くを実行し、MODO16.0.CFG フォルダの中にある ConditionalCommands.cfg を開いてみます。そうすると、条件キー毎に実行する条件コマンドが記載されているのが確認できます。実際に操作を試してみましょう。メッシュのタイプ、さらにその時点の編集モードに対応して、各ツールが起動もしくは追加されているのが確認できます。
このような条件コマンドを作成しキーボードショートカットに割り当てておけば、編集しているのがダイレクトメッシュなのかプロシージャルメッシュなのかを意識することなく、またその編集モードすら意識することなく、ベベルさせたいと思えば、それに適したツールを一発で適用することができ、大幅な効率化を図ることができるようになります。