チュートリアル > 変換ロック スクリプトの開発 |
この単純なチュートリアルは、実際の現場の要請に基づいています。 ある 3ds Max ユーザは、[階層](Hierarchy)パネル > [リンク情報](Link Info) > [ロック](Locks)を選択して表示される 9 つのチェックボックスすべてにチェックマークを付けるボタンを作成したいと考えました。そのユーザは、残念ながら、MacroRecorder がこの操作に使用できるコードを何も出力しないことに気づきました。
以下に、このオンライン ヘルプのインデックスの検索も含めて、この状況を解決するために必要なステップを示します。
全体の流れ: |
メイン メニューから[MAXScript] > [新規スクリプト](New Script)に移動して、新規のスクリプト エディタを開きます。 |
オンライン ヘルプを検索し、変換ロックに影響するメソッドを探します。 |
ボタン、メニュー項目またはショートカットとしてスクリプトを使用できるように macroScript を作成します。 |
現在のシーンを選択するためのメソッドを呼び出します。 |
この macroScript は LockAllTransforms と名前を付ける予定です。このスクリプトを使用するには、メイン メニュー > [カスタマイズ](Customize) > [ユーザ インタフェースをカスタマイズ](Customize User Interface)に移動し、[HowTo]カテゴリを探してスクリプトをツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。
このメソッドのヘルプ定義は、このメソッドをマップ済みとしてリスト表示します。つまり、MAXScript の for ループを追加しなくても、このメソッドをオブジェクトの集合に直接適用することができます。この例では、現在のシーン選択を使います。 選択内の各オブジェクトに対してメソッドが呼び出されます。
スクリプトを評価します。スクリプトを使用する場合は、[カスタマイズ...](Customize...)を使用して、スクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。オブジェクトをいくつか選択し、スクリプトを起動します。[階層](Hierarchy)パネル > [リンク情報](Link Info) > [ロック](Locks)を選択して表示されるすべてのチェックボックスにチェックマークが付けられます。
既に説明したように、#all キーワードを #none キーワードに置き換えただけで、代わりにすべてのチェックボックスのチェックマークを消すようにこのスクリプトを変更することができます。この操作を行うために、2 番目の macroScript を自由に作成してみてください。
3ds Max 4 では、 setTransformLockFlags メソッドはマップ可能でないことに注意してください。このスクリプトを以前のバージョンと互換性があるようにしたい場合は、for ループを使用して各オブジェクトを個別に変更することができます。そのコードは、次のようになります。
実際に 3ds Max 5 でこのチュートリアルを実行したユーザの中には、もっと先まで進んで一般的な BitArray でロック フラグにアクセスしてみた方もいるかもしれません。ここでは、この場合の BitArrays の使用方法について説明します。
「一般的なノードのプロパティ」にある setTransformLockFlags メソッドについての説明によると、位置、回転、スケールのロックに対応して BitArray 内には 9 ビットが確保されています。
BitArray は、True または False に設定できるバイナリ値 (ビット) のリストです。BitArray は、# の後ろに True のビットのインデックスをカンマで区切って 内に格納したものを配置して定義します。たとえば、#{1,4,7} では 3つのカテゴリすべての X 軸のロックのみが True に設定されます。
複数のビットを True に設定する場合、最初と最後のインデックスの間に .. を入れて記述することができます。 たとえば、#9 であれば、すべて True に設定された 9 つの要素を持つ BitArray が定義されます。これは、setTransformLockFlags メソッドを使用した場合の #all フラグと同じ働きをするものです。#{} は、#none フラグと同等です。#{1..3} では最初の 3 つのロックのみがオンになり、残りの 6 つはオフになります。
BitArray の値を自由に試してみて、位置、回転、スケールのロックのみを設定するように macroScripts を詳細に定義してみてください。