チュートリアル > ActiveX コントロールの使用 > シーン ブラウザの開発 - 第 1 部 |
このチュートリアルでは、TreeView ActiveX コントロール内にオブジェクト階層を表示するシーン ブラウザを作成する方法を示します。
ActiveX コントロールは、DotNet フレームワークとそのコントロールを考慮して、最新バージョンの Microsoft Windows オペレーティング システムで非推奨となりました。
MAXScript では引き続き ActiveX コントロールがサポートされますが、これらは MAXScript にアクセス可能なシステムにインストールおよび登録する必要があります。
ActiveX コントロールの代わりに、MAXScript では、3ds Max 9以降において DotNet コントロールがサポートされます。
「ActiveX TreeView コントロールの DotNet TreeView コントロールへの変換」を参照してください
MAXScript ロールアウト内の ActiveX コントロール
まず SceneTreeView という名前のシンプルな MacroScript を定義することから始めます。 これは、[HowTo]カテゴリに表示されます。シンプルな(旧式の) macroScripts には、 on execute do または on isEnabled のイベント ハンドラはありません。MacroScript 定義内のコードは、MacroScript を表す ActionItem (ボタン、メニュー項目、またはキーボード ショートカット) がアクティブになると、すぐに実行されます。
MacroScript が実行されると作成されるロールアウトです。[TreeView Scene Browser]を表示します。treeview_rollout という変数は macroScript に対してローカルであり、後でロールアウト定義からダイアログ ボックスを作成するときに使用されます。
作成する TreeView ActiveX コントロールの初期化を行う関数です。コントロールそのものは、引数として関数に渡されます。
.indentation プロパティでは値が twip で表される必要があり、子が親に対してインデントされる量を twip 単位で定義します。1 ピクセルは約 15 twip なので、この行は階層で 28 ピクセルのインデントを使用することを指示していることになります。
LineStyle プロパティは、階層内でノードをつなぐ線の外観をコントロールします。ルートにはプラス/マイナスのボックスを用意し、シーン ノード に接続します。
この関数は再帰的に呼び出され、3ds Max のシーン ノードの配列を含む theChildren 引数を使用して、引数として渡されるノードの子を作成します。tv 引数には、追加先の TreeView が含まれます。
配列 theChildren 内の 3ds Max シーン ノードのそれぞれについて、
指定されたノードに新しい子を追加します。 add() メソッドにパラメータを渡します。渡すのは、親のインデックス、関係フラグ(4)、キー(空の文字列)、新しい子のテキスト(シーン ノードの名前)、およびアイコンとして表示するイメージのインデックス(イメージがない場合は 0)です。
子が作成されると、関数は再帰的な呼び出しを行い、新しく作成されたノードと現在のシーン オブジェクトの子の配列をパラメータとして渡します。こうすると、TreeView で完全なシーン階層が再生成されます。
次に、シーン内のオブジェクトで親のないものをすべて収集します。これらは、「ワールドの子」になる最上位のノードです。
最後に再帰関数を呼び出し、TreeView とルート ノード、および最上位のシーン オブジェクトの配列を引数として渡します。
ロールアウト内に TreeView ActiveX コントロールを作成します。
このスピナーを使用すると、TreeView の .indentation プロパティを相互作用的にテストできます。編集ボックスの値を変更しただけで、階層全体のインデントがダイナミックに更新されます。
ユーザがノードをクリックした場合、その名前を 3ds Max のシーン ノードに戻し、シーン内で選択します。これは、TreeView のイベント ハンドラの使用方法を示しています。
ユーザがスピナーの値を変更した場合、.indentation がそれに相当する twip に設定されるようにします。
ロールアウトが開いている場合(CreateDialog 関数が呼び出される場合)、
初期化関数とデータ収集関数が呼び出され、スタイルを定義し、TreeView コントロールを 3ds Max のシーン オブジェクトの名前で読み込みます。
新しいダイアログ ボックスを作成する前に、前に開かれたダイアログ ボックスで同じ名前のものがあれば先に閉じるようにします。
このスクリプトはとても基本的なものです。さらに改善し、カスタマイズする方法については、このチュートリアルの第 2 部、「チュートリアル - TreeView ActiveX コントロールを使用したシーン ブラウザの開発 - 第 2 部」を参照してください。