getClassInstances

getClassInstances メソッド(3ds Max 7 以降で使用可能)は、シーン内に存在する、指定したクラスの全インスタンスの配列を返します。

これは、従来、Avguard DLX サード パーティ製の MAXScript 拡張機能で使用されていたものです。

3ds Max 2011 まで、この関数はアニメート可能なツリーを列挙してクラス インスタンスを検索していました。オブジェクトのサブアニメーションが、オブジェクトによって保持される参照のサブセットである場合が多く、シーン内で提示されるインスタンスが欠落してしまっていました。

3ds Max 2011 以降では、 getClassInstances() は引数に応じてさまざま方法でクラス インスタンスを検索できるようになりました。これらの引数には、 processAllAnimatables: および processChildren: の 2 つの新しい引数が含まれます。

構文は次のようになります。

getClassInstances <MAXClass> processAllAnimatables:<bool> target:<MAXObject> asTrackViewPick:<bool> processChildren:<bool>

<MAXClass> は、検索されているインスタンスを持つクラスを指定します。

processAllAnimatables:

3ds Max 2011 以降 processAllAnimatables:true を指定すると、シーンに存在しないオブジェクトを含めたすべての既存オブジェクトが、指定したクラスのインスタンスかどうかテストされます。 これらのオブジェクトには、例えば Maxscript の値によって保持されるオブジェクトが含まれます。

processAllAnimatables:true が指定されている場合、他のキーワードのパラメータは適用されず、無視されます。

このパラメータの既定値は false です。

ターゲット

target : が指定されていると、その対象の階層のみが検索されます。

target : が指定されていないと、シーンのルート以下の全体のシーンが検索されます。この場合のシーンには、ノードの階層だけではなく、[マテリアル エディタ](Material Editor)、[トラック ビュー](Track)などが含まれます。

asTrackViewPick:

asTrackViewPick:true を指定すると、クラス インスタンスが TrackViewPick 値として使用後その都度返されます。

asTrackViewPick:true が指定されていると、検索される階層はターゲット以下のアニメート可能なツリーになります。オブジェクトのサブアニメーションが、オブジェクトによって保持される参照のサブセットである場合が多く、シーン内で提示されるインスタンスが欠落してしまうことがあります。 アニメート可能なツリーはトラックビューに表示されるツリーです。

asTrackViewPick:false が指定されるか提示されないと、各クラス インスタンスが返され、検索される階層はターゲット以下の参照ツリーになります。

このパラメータの既定値は false です。

processChildren:

3ds Max 2011 以降 processChildren:true を指定すると、子のシーン ノードもアニメート可能または参照階層の一部として検索されます。

このパラメータの既定値は false です。ただし、ターゲットが指定されていないか、シーン ルート ノード(rootNode)またはシーン ルート(rootScene)が指定されている場合は true です。

--Create two spheres, and an instance of one of the spheres:
resetMaxFile #noPrompt
s1 = sphere()
s2 = sphere pos:[100,0,0]
s3 = instance s1
s3.pos = [-100,0,0]

出力:

OK 
$Sphere:Sphere01 @ [0.000000,0.000000,0.000000] 
$Sphere:Sphere02 @ [100.000000,0.000000,0.000000] 
$Sphere:Sphere03 @ [0.000000,0.000000,0.000000] [-100,0,0] 

実行:

tvps=getClassInstances sphere asTrackViewPick:true
for tvp in tvps do
(
print tvp.anim
print tvp.client
print tvp.subNum
print tvp.name
print tvp.client[tvp.subNum]
)

出力:

#(TrackViewPick:"Object (Sphere)", TrackViewPick:"Object (Sphere)", TrackViewPick:"Object (Sphere)")
Sphere
$Sphere:Sphere001 @ [0.000000,0.000000,0.000000]
4
"Object (Sphere)"
SubAnim:Object__Sphere
Sphere
$Sphere:Sphere002 @ [100.000000,0.000000,0.000000]
4
"Object (Sphere)"
SubAnim:Object__Sphere
Sphere
$Sphere:Sphere003 @ [-100.000000,0.000000,0.000000]
4
"Object (Sphere)"
SubAnim:Object__Sphere
OK

実行中

objs=getClassInstances sphere
for obj in objs do print (refs.dependents obj) #nomap

出力:

#(Sphere, Sphere)
#($Sphere:Sphere003 @ [-100.000000,0.000000,0.000000], $Sphere:Sphere001 @ [0.000000,0.000000,0.000000], ReferenceTarget:NodeRefMgr)
#($Sphere:Sphere002 @ [100.000000,0.000000,0.000000])
OK

結果

球の 1 つがインスタンス化されているため、TrackViewPick 値は 3 つ返されますが、クラス インスタンスは 2 つしか返されません。

引数の組み合わせを検索:

t1 = bitmaptex filename:"t1.bmp" name:#Sphere_DiffuseMap
t2 = bitmaptex filename:"t2.bmp" name:#Teapot_DiffuseMap
t3 = bitmaptex filename:"t3.bmp" name:#Displace
t4 = bitmaptex filename:"t4.bmp" name:#VolSelect
t5 = bitmaptex filename:"t5.bmp" name:#HairDens
t6 = bitmaptex filename:"t6.bmp" name:#NoWhere
t7 = bitmaptex filename:"t7.bmp" name:#MEdit
t8 = bitmaptex filename:"t8.bmp" name:#NodeCustAttrib
t9 = bitmaptex filename:"t9.bmp" name:#ObjCustAttrib
s = sphere material:(standard showInViewport:true)
t = teapot material:(standard showInViewport:true) pos:[0,50,0] parent:s
s.material.diffusemap = t1
s.material.specularmap = t1
t.material.diffusemap = mix mask:t2
addModifier s (displace map:t3 strength:10)
addModifier t (volumeSelect texture:t4)
addModifier s (HairMod())
s.modifiers[1].maps[1] = t5
s.modifiers[1].mapEnables[1] = true
meditmaterials[1] = t7
g=geosphere()
testCADef = attributes testCA
(
parameters main
(
map type:#texturemap
)
)
CustAttributes.add g testCADef BaseObject:false
CustAttributes.add g testCADef BaseObject:true
g.testCA.map = t8
g.baseobject.testCA.map = t9

出力:

Sphere_DiffuseMap:Bitmap
Teapot_DiffuseMap:Bitmap
Displace:Bitmap
VolSelect:Bitmap
HairDens:Bitmap
NoWhere:Bitmap
medit:Bitmap
NodeCustAttrib:Bitmap
ObjCustAttrib:Bitmap
$Sphere:Sphere001 @ [0.000000,0.000000,0.000000]
$Teapot:Teapot001 @ [0.000000,50.000000,0.000000]
Sphere_DiffuseMap:Bitmap
Sphere_DiffuseMap:Bitmap
Mix:Mix
OK
OK
OK
HairDens:Bitmap
true
medit:Bitmap
$GeoSphere:GeoSphere001 @ [0.000000,0.000000,0.000000]
<AttributeDef:testCA>
true
true
NodeCustAttrib:Bitmap
ObjCustAttrib:Bitmap

テスト 1:

for b in getClassInstances bitmaptex do
format "Name : %, Texture name : %, Affected Nodes : %\n" b.name b.filename (refs.dependentNodes b)

テスト 1 出力

Name : medit, Texture --> Name : t7.bmp , Affected Nodes : #()
Name : Sphere_DiffuseMap, Texture --> Name : t1.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Teapot_DiffuseMap, Texture --> Name : t2.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : VolSelect, Texture --> Name : t4.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : Displace , Texture --> Name : t3.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : HairDens, Texture --> Name : t5.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : ObjCustAttrib, Texture name : t9.bmp, Affected Nodes : #()
Name : NodeCustAttrib, Texture name : t8.bmp, Affected Nodes : #($GeoSphere:GeoSphere001 @ [0.000000,0.000000,0.000000])

テスト 2

for b in getClassInstances bitmaptex target:rootnode do
format "Name : %, Texture name : %, Affected Nodes : %\n" b.name b.filename (refs.dependentNodes b)

テスト 2 出力

Name : VolSelect, Texture --> Name : t4.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : Teapot_DiffuseMap, Texture --> Name : t2.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : Displace, Texture --> Name : t3.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : HairDens, Texture --> Name : t5.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture --> Name : t1.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : ObjCustAttrib, Texture name : t9.bmp, Affected Nodes : #()
Name : NodeCustAttrib, Texture name : t8.bmp, Affected Nodes : #($GeoSphere:GeoSphere001 @ [0.000000,0.000000,0.000000])

テスト 3

for b in getClassInstances bitmaptex target:s do
format "Name : %, Texture name : %, Affected Nodes : %\n" b.name b.filename (refs.dependentNodes b)

テスト 3 出力

Name : Displace, Texture --> Name : t3.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : HairDens, Texture --> Name : t5.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture --> Name : t1.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])

テスト 4

for b in getClassInstances bitmaptex target:s processChildren:true do
format "Name : %, Texture name : %, Affected Nodes : %\n" b.name b.filename (refs.dependentNodes b)

テスト 4 出力

Name : VolSelect, Texture --> Name : t4.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : Teapot_DiffuseMap, Texture --> Name : t2.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : Displace, Texture --> Name : t3.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : HairDens, Texture --> Name : t5.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture --> Name : t1.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])

テスト 5

for b in getClassInstances bitmaptex target:g do
format "Name : %, Texture name : %, Affected Nodes : %\n" b.name b.filename (refs.dependentNodes b)

テスト 5 出力

Name : ObjCustAttrib, Texture name : t9.bmp, Affected Nodes : #()
Name : NodeCustAttrib, Texture name : t8.bmp, Affected Nodes : #($GeoSphere:GeoSphere001 @ [0.000000,0.000000,0.000000])

テスト 6

for b in getClassInstances bitmaptex processAllAnimatables:true do
format "Name : %, Texture name : %, Affected Nodes : %\n" b.name b.filename (refs.dependentNodes b)

テスト 6 出力

Name : Sphere_DiffuseMap, Texture --> Name : t1.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Teapot_DiffuseMap, Texture --> Name : t2.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : Displace, Texture --> Name : t3.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : VolSelect, Texture --> Name : t4.bmp, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : HairDens, Texture --> Name : t5.bmp, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : NoWhere, Texture --> Name : t6.bmp, Affected Nodes : #()
Name : medit, Texture --> Name : t7.bmp, Affected Nodes : #()
Name : ObjCustAttrib, Texture name : t9.bmp, Affected Nodes : #()
Name : NodeCustAttrib, Texture name : t8.bmp, Affected Nodes : #($GeoSphere:GeoSphere001 @ [0.000000,0.000000,0.000000])

テスト 7

for b in getClassInstances bitmaptex asTrackViewPick:true do
format "Name : %, Texture name : %, Client: %, subAnim: %, Affected Nodes : %" b.anim.name b.anim.filename b.client b.subnum (refs.dependentNodes b.anim)

テスト 7 出力

Name : Sphere_DiffuseMap, Texture name : t1.bmp, Client: ReferenceTarget:ReferenceTarget, subAnim: 4 , Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture name : t1.bmp, Client: ReferenceTarget:ReferenceTarget, subAnim: 6 , Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Teapot_DiffuseMap, Texture name : t2.bmp, Client: Mix:Mix, subAnim: 4, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])
Name : medit, Texture name : t7.bmp, Client: #meditMaterials(), subAnim: 1, Affected Nodes : #()
Name : Displace, Texture name : t3.bmp, Client: Displace:Displace, subAnim: 3, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])

テスト 8

for b in getClassInstances bitmaptex target:s asTrackViewPick:true do
format "Name : %, Texture name : %, Client: %, subAnim: %, Affected Nodes : %\n" b.anim.name b.anim.filename b.client b.subnum (refs.dependentNodes b.anim)

テスト 8 出力

Name : Displace, Texture name : t3.bmp, Client: Displace:Displace, subAnim: 3 , Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture name : t1.bmp, Client: ReferenceTarget:ReferenceTarget, subAnim: 4 , Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture name : t1.bmp, Client: ReferenceTarget:ReferenceTarget, subAnim: 6 , Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])

テスト 9

for b in getClassInstances bitmaptex target:s processChildren:true asTrackViewPick:true do
format "Name : %, Texture name : %, Client: %, subAnim: %, Affected Nodes : %\n" b.anim.name b.anim.filename b.client b.subnum (refs.dependentNodes b.anim)

テスト 9 出力

Name : Displace, Texture name : t3.bmp, Client: Displace:Displace, subAnim: 3, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture name : t1.bmp, Client: ReferenceTarget:ReferenceTarget, subAnim: 4, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Sphere_DiffuseMap, Texture name : t1.bmp, Client: ReferenceTarget:ReferenceTarget, subAnim: 6, Affected Nodes : #($Object:Sphere001 @ [0.000000,0.000000,0.000000])
Name : Teapot_DiffuseMap, Texture name : t2.bmp, Client: Mix:Mix, subAnim: 4, Affected Nodes : #($Editable_Mesh:Teapot001 @ [0.000000,50.000000,0.000000])

関連事項