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>.nonLocalizedName

3ds Max 2022 の新機能: クラスのローカライズされていない名前が含まれる、読み取り専用プロパティです。

<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
)
<maxclass>.isMSPluginClass Boolean, read-only

maxclass がスクリプト プラグインであるかどうかを指定します。スクリプト化されたカスタム アトリビュートは、スクリプト プラグインのサブカテゴリであり、同様に true を返します。

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

メソッド

copy <MAXWrapper_object>

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

例:

addModifier $foo $baz.bend

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

addModifier $foo (copy $baz.bend)

foobaz 上のベンド モディファイヤの別個のクローンを提供します。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: <boolean>

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

transferCAstrue の場合、リファレンスの転送が少なくとも 1 回発生すると、old_MAXWrapper のカスタム アトリビュートはすべて new_MAXWrapper に転送されます。

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

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

警告:

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

isValidObj <value>

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

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

引数が有効値の場合は true を返します。値が削除されている場合は false を返します。3ds Max 2017 以降で使用可能です。

これは、以下の isDeleted() と同じです。ただし、isDeleted() が false を返した場合は true を返し、true を返した場合は false を返します。

isDeleted <MAXWrapper>

指定した MAXWrapper が削除されている場合は、true を返します。削除されていない場合は、false を返します。

これは、上の isValidValue() と同じです。ただし、isValidValue() が false を返した場合は true を返し、true を返した場合は false を返します。

ほとんどの値タイプに対して、isDeleted() は常に false を返します。true を返すことがある値タイプは、次のとおりです。

getClassName <MAXWrapper> [localizedName:<bool>]

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

3ds Max 2022 の新機能: localizedName キーワード パラメータが true (既定値)の場合、UI に表示されるローカライズされた名前が返されます。それ以外の場合は、ローカライズされていない名前が返されます。

getObjectName <object> [localizedName:<bool>]

MAXWrapper の BaseObject の基本名を文字列として返します(BaseObject から取得された場合)。たとえば、ベンド モディファイヤにこのメソッドを実行すると、「ベンド」が返されます。

3ds Max 2022 の新機能: localizedName キーワード パラメータが true (既定値)の場合、UI に表示されるローカライズされた名前が返されます。それ以外の場合は、ローカライズされていない名前が返されます。

<boolean> isUsedInScene <MAXWrapper> skipCustAttributes:<false> includeXrefScenes:<false>

MAXWrapper がシーン マテリアル ライブラリではなく、シーンで使用されている場合、この関数は true を返します(シーン マテリアル ライブラリにはシーンで使用されていないマテリアルが含まれている可能性があります)。シーンには、マテリアル エディタ、レンダラー、レンダリング効果などが含まれます。カスタム アトリビュートで保持されている MAXWrapper をスキップする場合は、skipCustAttributes を true に指定します。いずれかの外部参照シーンも検索する場合は、includeXrefScenes を true に設定します。

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

mat = StandardMaterial()
--> Standardmaterial:Standard
isUsedInScene mat
--> false
s = sphere material:mat
-->$Sphere:Sphere001 @ [0.000000,0.000000,0.000000]
isUsedInScene mat
-->true
<MAXClass>getMAXClass <scid> #(<cid_a>, <cid_b>) create:<boolean>

指定したスーパークラス ID およびクラス ID に対応する MAXClass を返します。スーパークラス ID は、整数値として指定され、クラス IDは 2 要素の整数の配列として指定されます。create:true が指定されている場合、MAXClass が存在しなければ新規に作成されます。

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

従アトリビュート

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: <boolean> baseObjectOnly: <boolean>

指定された 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 値として返します。 3ds Max 2017 以降で使用可能です。

:

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> partID:<name> msg:<int> propogate: <boolean>

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

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

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

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 の値は、maxsdk\include\ref.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 機能拡張として提供されていた機能です。

警告:

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