MAXWrapper の共通プロパティ、演算子、メソッド

> MAXWrapper : 値 > MAXWrapper 派生値

次のプロパティとメソッドは、MAXWrapper から派生するすべての値に適用できます。

プロパティ

次の MAXWrapper 値とクラス プロパティによって、標準プリミティブ、拡張プリミティブ、またはパーティクル システムなどのプラグイン カテゴリにアクセスできます。

<MAXWrapperobject>.category Name, read-only 
<maxclass>.category Name, read-only 
<maxsuperclass>.categories Array, read-only 	 

category プロパティは、カテゴリを含めた Name 値を返します。このプロパティは、Line、Box、Fog などの 3ds Max オブジェクト クラス、またはすべての 3ds Max オブジェクト クラスのインスタンスに使用できます。シーン ノードでは、プロパティは通常、[作成](Create)パネルのドロップ ダウン リスト内の名前の 1 つに対応します。これらのカテゴリは、 #Standard_Primitives #Compound_Objects 、および #Particles_Only などです。

モディファイヤでは、カテゴリによってモディファイヤが[ボタン セットを設定](Configure Button Sets)/[モディファイヤ](Modifiers)リストのどの領域に表示されるかが決まります。これらのカテゴリは、 #MAX_STANDARD #MAX_EDIT 、および #MAX_SURFACE などです。

テクスチャでは、カテゴリによってテクスチャが[マテリアル](Material)/[マップ ブラウザ](Map Browser)リストのどの領域に表示されるかが決まります。これらのカテゴリは、 #2D (2D マップ)、 #3D (3D マップ)、および #COMP (コンポジタ)などです。

categories プロパティは、シェイプ、GeometryClass、ヘルパー、SpacewarpObject、TextureMap、またはモディファイヤなどの 3ds Max オブジェクト スーパークラスに使用して、そのスーパークラスに使用可能なカテゴリのリストを取得することができます。これは Name の配列として返されます。

例:

$line01.category --returns #Splines
Gengon.category --returns #Extended_Primitives
Shape.categories --returns #(#Shape, #Splines, #NURBS_Curves)

   

<maxsuperclass>.classes Array, read-only   

MAXSuperClass に属す MAXClass 値の配列を返します。この MAXClass 値を使用すると、クラスのインスタンスを作成できます。

例:

--create an instance of each light class:
for aLight in light.classes do aLight()

   

<MAXWrapperobject>.classID 
<maxclass>.classID 

classID プロパティは、MAXWrapper クラスとオブジェクトの内部 3ds Max クラス ID を検索します。

返される値は、3ds Max 内部クラス ID PartA と PartB の 2 つの数値を含む配列です。

MAXWrapper オブジェクトでは、返される値はそのオブジェクトがインスタンスであるクラスの Class ID です。

PartA と PartB の数値の組み合わせは、常に各クラスに固有になります。

例:

Box.classID --returns #(16, 0)
b=box()
b.classID --returns #(16, 0)

   

<MAXWrapperObject>.superClassID 
<maxclass>.superClassID 

MAXWrapper クラスとオブジェクトの 3ds Max スーパークラス ID を取得します。

   

<maxclass>.creatable Boolean, read-only

クラスが作成可能にフラグ設定されている場合、 true を返します。

このプロパティで true が返されても、クラスが本当に作成可能であるという保証はありません。

   

<maxclass>.ispb2based Boolean, read-only

元になるクラス定義が ClassDesc2 の場合は true を返し、ClassDesc の場合は false を返します。

ClassDesc2 クラスでは ParamBlock2 が使用され、ClassDesc クラスでは ParamBlock (3ds Max 3 より前のバージョンの場合)が使用されます。

   

<maxclass>.localizedName 

読み取り専用のプロパティであり、クラスのローカライズされた名前を返します。

   

<maxclass>.dllName String, read-only 

読み取り専用プロパティであり、クラスがプラグイン DLL で定義された場合、クラスを実装する DLL ファイル名を返し、それ以外の場合は undefined を返します。

3ds Max 2012 以降で使用可能です。

   

<maxclass>.dllIsLoaded Boolean, read-only

読み取り専用のブール演算プロパティであり、クラスを実装している DLL が既にロードされている場合は true、DLL が遅延している場合は false を返します。クラスがプラグイン DLL で定義されていない場合は undefined を返します。

3ds Max 2012 以降で使用可能です。

例:

for sc in superclasses do
(
format "%\n" sc
for c in sc.classes do
format "\t% : % : %\n" c c.dllName c.dllIsLoaded
)

   

メソッド

copy <MAXWrapper_object> 

copy() 関数は、MAXScript で使用できるすべて3ds Max オブジェクト(シーン オブジェクト、コントローラ、モディファイヤ、マテリアルなど)で実装されています。この関数はソース オブジェクトのクローンの作成に使用できます。たとえば、個々のコピーが必要な場合や、共有オブジェクトを固有にしたい場合などです。

例:

addModifier $foo $baz.bend

この場合、 foo baz 上のベンド モディファイヤを共有します。これに対して、以下の場合は

addModifier $foo (copy $baz.bend)

foo baz 上のベンド モディファイヤの別個のクローンを提供します。 foo に対するベンド モディファイヤへの変更は baz には影響せず、その逆の場合も同様です。

次の例では、単一の回転コントローラを共有するいくつかのオブジェクトをすべて設定します。

例:

c = bezier_rotation()
$foo.rotation.controller = c
$baz.rotation.controller = c
$bar.rotation.controller = c

コントローラの 1 つを後で固有にするには、次のようにします。

$baz.rotation.controller = copy $baz.rotation.controller

MAXWrapper オブジェクトがシーン ノードではない場合、コピーは MAXScript のメモリ内のみに作成されます。MAXWrapper オブジェクトがシーン ノードの場合、新規のシーン ノードが作成され、ユーザは 3ds Max ビューポートで確認し、アクセスできます。

   

exprForMAXObject <MAXWrapper_object> [explicitNames: <boolean>] 

プロパティ アクセスとインデックス(必要に応じて)を使用して指定した MAXWrapper オブジェクトに名前を指定する、MAXScript 式を含む文字列を返します。

例:

変数 m に「foo」という名前のシーン オブジェクトのベンド モディファイヤがある場合は、次のようになります。

exprForMAXObject m

これは、次の文字列を生成します。

"$foo.bend"

explicitNames: オプションを true に設定すると、明示的なノード名が返されます。false に設定すると、選択に関連する名前が返されます。指定しない場合、[カスタマイズ](Customize) > [基本設定](Preferences) > [MAXScript タブ](MAXScript tab) > [コードの生成](Code Generation)下の現在のマクロ レコーダ設定が使用されます。

このメソッドは、マクロ レコーダによって使用される内部メソッドを公開したものです。 explicitNames: オプションを指定しない場合、出力はマクロ レコーダ オプションによって変化します。

マクロ レコーダの例:

b=box()
-->$Box:Box002 @ [0.000000,0.000000,0.000000]
c=b.pos.controller
-->Controller:Bezier_Position
exprformaxobject c
-->"$Box002.pos.controller"
bm=bend()
-->Bend:Bend
addmodifier b bm
-->OK
exprformaxobject bm
-->"$Box002.modifiers[#Bend]"

マクロ レコーダ オプションを[明示的シーン オブジェクト名](Explicit scene object names)から[選択に関連するシーン オブジェクト名](Selection-relative scene object names)に変更すると、次のようになります。

exprformaxobject bm
-->"$.modifiers[#Bend]"
注:

場合により、マクロ レコーダーによって生成されたコードが予期に反する動作をする場合があります。その 1 つの例が ambientColorController です。この場合には、 exprForMaxObject() が無効な式を返しています。

exprForMaxObject ambientColorController
-->"Scene[#Environment].Ambient_Light.controller"

周囲光カラーにアクセスするための回避策は、次のようになります。

(getclassinstances scene)[1].Environment.Background_Color.controller 

(getclassinstances RenderEnvironment)[1].Background_Color.controller

   

createInstance <maxclass> [ keyarg1:v] [ keyarg2:v] ... 

このメソッドは、ノード(またはその他のオブジェクト)内に表示される「基本オブジェクト」を直接作成するために使用します。これは主に、一時的なジオメトリ基本オブジェクトを作成するために使用されます。作成されたオブジェクトから抽出されたメッシュは、スクリプト化されたジオメトリ プリミティブ プラグインのメッシュを作成する際に役立ちます。オプションの <keyargs> は、クラス コンストラクタに提供できるのと同じ基本オブジェクトのキーワード引数です。これらは一般に基本オブジェクトのパラメータです。

例:

b = createInstance Box length:10 height:40 width:20

ボックスのインスタンスを作成します。このボックスはノードではないため、3ds Max ビューポートには表示されません。また、ボックス オブジェクトに関連付けられたジオメトリのみを含みます。これらのインスタンス オブジェクトのメッシュ表示は mesh プロパティで取得でき、このプロパティは TriMesh 値を生成します。

   

replaceInstances <old_MAXWrapper> <new_MAXWrapper> transferCAs: <bool> 

古い MAXWrapper のすべてのインスタンスを新しい MAXWrapper に置き換えます。古い MAXWrapper と新しい MAXWrapper には、同じスーパークラスが必要です。

transferCAs true である場合は、参照を転送するオカレンスが 1 つ以上存在すれば、old_MAXWrapper のカスタム アトリビュートは new_MAXWrapper に転送されます。

参照は MAXWrapper 値に転送されません。

3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

警告:

最低限のエラー チェックをして、十分に注意して使用してください。

   

isValidObj <value> 

値が MAX オブジェクト(MAXWrapper)を示す場合は true を返します。MAX オブジェクトは削除されていません。

注:

場合によっては、Max オブジェクトはシーンから削除されることがありますが、オブジェクト自体は削除されません。この場合、このメソッドは true を返します。

   

isValidValue <value> 

3ds Max 2017 の 新機能 : 引数が有効値の場合は True を返します。値が削除されている場合は False を返します。

   

getClassName <MAXWrapper> 

MAXWrapper のクラス名を文字列として返します。

従アトリビュート

3ds Max の重要な内部機能で、3ds Max オブジェクト間の従属関係が定義されます。たとえば、マテリアルはさまざまなマップに、パス コントローラはパーセント コントローラに、シーン ノードは基本オブジェクトに従属します。

refs 構造体には、MaxWrapper オブジェクト参照にアクセスして管理するためのメソッドがあります。これらのメソッドの主な目的は、参照階層のデバッグおよび調査です。一般的なスクリプトおよびプラグインを開発する場合は、これらは不要です。「Get」メソッドは安全に使用できます。「Set/Replace」メソッドは安全性が極めて低く、操作内容について実際に把握しているユーザのみが使用してください。

以下のメソッドでは、指定した MAXWrapper オブジェクトに従属する MAXWrapper オブジェクトが返されます。

refs.dependents&<MAXWrapper_object>[ immediateOnly:&<boolean>] 

指定した MAXWrapper オブジェクトに従属する、3ds Max MAXWrapper オブジェクトの配列を返します。指定する MAXWrapper オブジェクトには、シーン ノード、コントローラ、マテリアル、モディファイヤなど、あらゆる MAXWrapper オブジェクトを使用できます。

オプション キーワード immediateOnly を true に指定すると、指定したオブジェクトの直接従属のみが返されます。

例:

refs.dependents $foo.material.diffuseMap

返される内容

#(Material_#3, Material_#2, Map_#2:Noise, Material_#1)

これは、 $foo の diffuseMap は、material #1、material #2、material #3、および noise TextureMap #2 で参照されていることを示します。

次の例では、いくつかのオブジェクトを作成し、他のオブジェクトに従属するこれらのオブジェクトにコントローラを設定します。

スクリプト:

theSphere=sphere ()-- create a sphere
theCone=cone radius1:0 radius2:20-- create a cone
theHelix=helix height:100 pos:[100,100,0]-- create a helix
theCone.target=theSphere-- assign theSphere as target of theCone
--  a look at controller is automatically
--  assigned to theCone
--  assign path controller to theSphere, path to follow is the helix
theSphere.position.controller=path path:theHelix
refs.dependents theSphere-- show dependents of the sphere
refs.dependents theCone-- show dependents of the cone
refs.dependents theHelix-- show dependents of the helix

出力:

$Sphere:Sphere002 @ [0.000000,0.000000,0.000000]-- result line 1
$Cone:Cone002 @ [0.000000,0.000000,0.000000]-- result line 2
$Helix:Helix002 @ [100.000000,100.000000,0.000000]-- result line 3
$Sphere:Sphere002 @ [0.000000,0.000000,0.000000]-- result line 4
Controller:Path_Constraint-- result line 8
#(Controller:Look_At, $Cone:Cone002 @ [0.000000,0.000000,0.000000])-- result line 9
#()-- result line 10
--  following is output of line 11
#(ReferenceTarget:ParamBlock2, Controller:Path_Constraint, Controller:Position_Rotation_Scale, $Sphere:Sphere002 @ [135.000000,100.000000,0.000000], Controller:Look_At, $Cone:Cone002 @ [0.000000,0.000000,0.000000])

   

refs.dependsOn <MAXWrapper_object> 

指定した MAXWrapper オブジェクトに直接従属する、3ds Max MAXWrapper オブジェクトの配列を返します。

指定する MAXWrapper オブジェクトには、シーン ノード、コントローラ、マテリアル、またはモディファイヤといった MAXWrapper オブジェクトを使用できます。

例:

b = box()
refs.dependsOn b

次のような値が返されます。

#(Controller::Position_Rotation_Scale, Box)

これは、ノードがその変換コントローラと基本オブジェクトに直接従属することを示します。このノードは、これらのオブジェクトが従属する MAXWrapper オブジェクト(位置、回転、変換コントローラのスケール コントローラ)にも、間接的に従属します。

refs.dependson も、オブジェクトのカスタム アトリビュートを返します。3ds Max 7 より前のバージョンでは、カスタム アトリビュートが技術的にオブジェクトに従属していないため、このメソッドはカスタム アトリビュートを考慮していませんでした。

   

refs.dependencyLoopTest <MAXWrapper_object> <MAXWrapper_object> 

2 つの MAXWrapper オブジェクトが従属ループを作成する場合は true、そうでない場合は false を返します。

例:

a = box pos:[-100,0,0]
--> $Box:Box001 @ [-100.000000,0.000000,0.000000]
b = box pos:[100,0,0]
--> $Box:Box002 @ [100.000000,0.000000,0.000000]
a.material = standardMaterial()
--> Standardmaterial:Standard
refs.dependencyLoopTest a b
--> false
refs.dependencyLoopTest a a.material
--> true

   

refs.dependentNodes <MAXObject> firstOnly: <bool> baseObjectOnly: <bool> 

指定された MAXObject に従属する 1 つまたは複数のノードを返します。

firstOnly: が true の場合は、指定された MAXObject に従属するノードが存在しない場合には undefined の値を返し、それ以外の場合は、1 つ目に検索された従属ノードに対応する MAXNode 値が返されます。

firstOnly: が false または指定されていない場合は、返り値は常に配列になります。

baseObjectOnly: が true の場合は、MAXObject が基本オブジェクトであるノードだけが返されます。

3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

   

refs.replaceReference  <max_obj> <int> {<max_obj> | undefined} 

インデックス <int> の付いた参照を、新しい参照で置き換えるか、または undefined で置き換えます(参照を効果的に削除します)。 : このメソッドは安全でありません。操作内容を把握していないユーザが実行すると、3ds Max がクラッシュします。

refs.setIndirectReference <MaxWrapper> <int> {<MaxWrapper | undefined} 

インデックス <int> の付いた間接参照を、新しい参照で置き換えるか、または undefined で置き換えます(参照を効果的に削除します)。 : このメソッドは安全でありません。操作内容を把握していないユーザが実行すると、3ds Max がクラッシュします。

refs.getReference <MaxWrapper> <int> 

オブジェクトの参照配列内の、インデックス <int> の付いた参照を取得します。

:

s = sphere()
-- $Sphere:Sphere001 @ [0.000000,0.000000,0.000000]
refs.GetReference s 1
-- Controller:Position_Rotation_Scale

refs.getIndirectReference <MaxWrapper> <int> 

オブジェクトの参照配列内の、インデックス <int> が付いた間接参照を取得します。

refs.getAddr <MaxWrapper>

MaxWrapper のアドレスを IntegerPtr 値として返します。

:

s = sphere()
-- $Sphere:Sphere001 @ [0.000000,0.000000,0.000000]
refs.getAddr s
-- 1530273376P

refs.getNumRefs <MaxWrapper> 

指定した MaxWrapper オブジェクトで保持される参照の数を返します。

:

s = sphere()
-- $Sphere:Sphere003 @ [0.000000,0.000000,0.000000]
refs.getNumRefs s
-- 16

refs.getNumIndirectRefs <MaxWrapper> 

指定した MaxWrapper オブジェクトで保持される間接参照の数を返します。MaxScript を使用して間接参照を作成することはできません。

:

n = NodeTransformMonitor()
-- ReferenceTarget:NodeTransformMonitor
refs.getNumIndirectRefs n
-- 1

notifyDependents <MAXObject> partIDmsg: <name>: <int> propogate: <bool> 

オブジェクトに従属するものに通知メッセージを送信します。

3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

有効な partID の値および SDK における同等のものは次のとおりです。

#topo

PART_TOPO

#geom

PART_GEOM

#texmap

PART_TEXMAP

#mtl

PART_MTL

#TM

PART_TM

#obj

PART_OBJ

#objectType

PART_OBJECT_TYPE

#select

PART_SELECT

#subSelType

PART_SUBSEL_TYPE

#display

PART_DISPLAY

#vertColor

PART_VERTCOLOR

#gfxData

PART_GFX_DATA

#dispApprox

PART_DISP_APPROX

#extension

PART_EXTENSION

#TMchannel

PART_TM_CHAN

#MTLChannel

PART_MTL_CHAN

#all

PART_ALL

#putInFG

PART_PUT_IN_FG

既定値の partID は #all です。

msg の値は、maxsd¥kincluderef.h で指定され、SDK ヘルプ トピック「List of Reference Messages and the their PartID parameters」にも記述されている REFMSG の値のいずれかに対応します。msg の既定値は、partID が #putInFG である場合を除いて 0x050(REFMSG_CHANGE)で、partID が #putInFG である場合は0x070(REFMSG_FLAGDEPENDENTS)です。

propogate: が true の場合(既定値)は、メッセージは従属の従属にも再帰的に伝播されます。

このメソッドは、コントローラ内で使用されている値が変更されているスクリプト化コントローラを通知する場合に便利です。

実行コードの例:

globalmySphereRadius = 10
s=sphere()
s.radius.controller = float_script()
s.radius.controller.script ="mySphereRadius"

実行結果:

mySphereRadius = 50

ビューポートを更新して変更が反映されることはありません。

実行結果:

notifydependents s.radius.controller

ビューポートが更新され、コントローラの従属(球基本オブジェクトおよびノード)にコントローラが変更されたことを通知したことが反映されます。

   

disableRefMsgs() 
enableRefMsgs() 

参照通知システムを有効/無効にします。組み合わせて使用する必要があります。

3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

警告:

使用時には細心の注意が必要です。

関連事項