MAXScript FAQに関する質問と回答 > オブジェクトのプロパティへのアクセス > 複数のオブジェクトのプロパティを一度に変更する方法はありますか。 |
日常業務で最も頻繁に使用されている MAXScript のアプリケーションの 1 つに、オブジェクト プロパティの大量変更があります。これによって、クリック回数や作業時間を大幅に削減できます。
複数のオブジェクトのプロパティを変更するには、まず次のことが必要です。
想像できる最もシンプルな状況は、同じような複数のオブジェクト (たとえば、多数の球プリミティブなど) を選択することです。MAXScript を使用すれば、シーン内の現在の選択範囲に簡単にアクセスできます。さらに、オブジェクト プロパティの割り当てが「マップ可能」になります。つまり、 MAXScript によって、代入演算子「=」の右側にある値が選択範囲内のすべての単一オブジェクトに自動的に適用され、MAXScript で明示的にループ指定する必要がないということです(マップされた演算の詳細は、「MAXScript におけるマップされた演算とは何ですか。」を参照してください)。
半径と呼ばれるプロパティのない何らかのオブジェクト (ボックス プリミティブや編集可能オブジェクトなど) を選択した場合、上記のコードを入力するとエラーが発生します。
このような場合、割り当てを行う前に、選択範囲のオブジェクトをスクリプトによってフィルタ処理する必要があります。詳細は、「For ループ」を参照してください。次の方法が考えられます。
オブジェクトを手動で選択するのではなく、このようなプロパティを持つシーン内のオブジェクトの半径をすべて変更する場合は、MAXScript によってシーンをフィルタ処理することができます。この処理は、球、天球、円柱などに影響し、ボックスなど、「半径 (radius)」プロパティを持たないものはすべて無視します。
シーン内の天球体のみに影響させ、他のすべてのクラスを除外する場合は、オブジェクトのクラスを確認することになります。この場合、天球には「半径 (radius)」という名前のプロパティが存在するので、このプロパティについてチェックする必要はありません。classOf 関数によってオブジェクトのクラスが返されるので、これを影響を与えたいクラスと比較することができます。
MAXScript での正しいプロパティ名がわからない場合は、ヘルプ ファイルを参照するか、リスナーにある showProperties 調査関数を使用して公開されたすべてのオブジェクト プロパティのリストを印刷します。