ネストされたオブジェクトのプロパティ

3ds Max オブジェクトのプロパティには、値そのものが他のプロパティを含む複合的な値を持つものがいくつかあります。たとえば、 <node>.pos は Point3 を生成しますが、これ自体に x y および z プロパティが含まれます。

MAXScript は、このようにネスト状に重なっている MAXWrapper オブジェクトのプロパティを修正する場合に、3ds Max オブジェクトのネストされたプロパティへの割り当て内容の反映を適切に行えるようにするためのメカニズムを持っています。

このメカニズムは、ネストされたプロパティに対するアクセスが、一連の縦続型のプロパティ アクセスになっているかどうかに依存します。以下にその例を示します。

$foo.pos.x += 23-- move the node 23 units in x
$baz.rotation.angle *= 2-- double the rotation

最初に媒介となる変数に中間値を与え、その後で値のプロパティを設定した場合、変更内容は本来のオブジェクトに反映されません。これは、プロパティに対する単一の縦続するアクセスにおいてのみ、つながりが維持されるからです。

p = $foo.pos-- get foo's position as a 'detached' point3
p.x += 23-- set the x prop of that point, it doesn't know
-- about foo anymore, foo's pos isnotchanged

この場合、$foo に作用するためには、$foo の位置に自立するポイントをもう一度明示的に割り当てなければなりません。

$foo.pos = p-- set foo's new position

一般に、Point3 や Quaternion のように、それ自体が基礎となる複合的値である MAXWrapper オブジェクトのプロパティは、それが単純にアクセスされる場合に自立する値を生成し、縦続型のプロパティ割り当てによるオブジェクトの部分プロパティ割り当てをサポートします。