コンテナ: ヘルパー

Container - superclass: helper; super-superclass:node - 10:0 - classID: #(1848947859, -473657791) 

> MAXWrapper > ノード > ヘルパー > コンテナ

 

   

ヘルパー - クイック ナビゲーション

3ds Max 2010 以降では、コンテナは、シーン内のヘルパー オブジェクトで、自己収容型の内容をグループ化して、その内容を管理、公開、継承するために使用されます。また、メモリからコンテンツ オブジェクトをロード解除することもできます。

詳細については、「コンテナ」および「インタフェース: コンテナ」を参照してください。

コンストラクタ:

Container ... ContainerHelper ... 

インタフェース: コンテナ」の「 Containers.CreateContainer() 」も参照してください。

ローカル内容(左)と継承済み内容(右) - クイック ナビゲーション

プロパティ:

[コンテナを管理](Manage Container)のプロパティ

<Container>.unloaded BooleanClass default: false -- boolean;   

コンテナのロード解除状態を取得/設定します。

true に設定すると、コンテナの内容をディスクに保存してシーンから削除することによってコンテナがロード解除されます。

false に設定すると、ディスクから内容をロードしシーン内に表示することにより、コンテナがロードされます。

UnloadContainer メソッドおよび LoadContainer メソッド」の関連メソッドも参照してください。

   

<Container>.autoUpdateClosed BooleanClass default: false -- boolean; AutoUpdate_when_Closed 

コンテナを閉じたときに内容を自動的に更新するかどうかを取得/設定します。

コンテナの UI の[終了時に自動更新](Auto Update when Closed)チェックボックスに対応しています。

   

<Container>.duplicateMatchingLayers     BooleanClass    default: true   --  boolean; Match_Layers_by_Parent

3ds Max 2016 の 新機能 : [親が一致するレイヤ](Match Layers by Parent)チェックボックスの状態を取得/設定します。

   

[ローカル内容](Local Content)のプロパティ

<Container>.localDefinitionFilenameString default: "" -- filename; Local_Definition_Filename 

「ローカル定義」のファイル名を取得/設定します。

定義ファイルのフォーマットは 3ds Max シーン ファイルと同じですが、ファイル拡張子はこれとは異なる .MAXC を使用します。拡張子が異なるため、ユーザはフォルダの参照時に通常の Max シーンファイルとコンテナ定義ファイルを見分けることができ、コンテナ定義が誤って編集されるのを防ぐことができます。コンテナ定義は名前を変更したり、.MAX ファイルとして開くことができます。

ローカル コンテナはローカル定義ファイルを使用します。

継承されたコンテナは、ソース定義ファイルを参照します。コンテナが継承されている場合には、名前は空になります。

[継承済み内容](Inherited Content)のプロパティ

<Container>.sourceDefinitionFilename String default: "" -- filename; Source_Definition_Filename 

「ソース定義」ファイル名を取得/設定します。コンテナがローカルの場合、名前は空になります。

定義ファイルのフォーマットは 3ds Max シーン ファイルと同じですが、ファイル拡張子はこれとは異なる .MAXC を使用します。拡張子が異なるため、ユーザはフォルダの参照時に通常の Max シーンファイルとコンテナ定義ファイルを見分けることができ、コンテナ定義が誤って編集されるのを防ぐことができます。コンテナ定義は名前を変更したり、.MAX ファイルとして開くことができます。

継承されたコンテナは、ソース定義ファイルを参照します。

ローカル コンテナはローカル定義ファイルを使用します。

[継承済み内容](Inherited Content)のプロパティ

<Container>.alternateDefinitionFilename ArrayParameter default: #() -- filename array; Alternate_Definition_Filename; SubAnim 

代替(プロキシ)定義ファイル名リストを取得/設定します。

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

   

<Container>.currentAlternateDefinition Integer default: 0 -- integer; Current_Alternate_Definition 

使用されている現在のプロキシ定義のインデックスをファイル リストから取得/設定します。

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

   

<Container>.proxyType Name default: #none -- enum 

プロキシの使用をコントロールするラジオ ボタンの状態を取得/設定します。

有効な値は次のとおりです。

#none- プロキシのファイルを使用しません。

#alternate- 前の 2 つのプロパティで指定されたプロキシ ファイルを使用します。

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

   

内容ルールのプロパティ

内容のルールは、MAXC アセット ファイルに格納されます。これらのルールは、コンテナによって継承された場合の内容の動作をコントロールします。

<Container>.allowInPlaceEditing BooleanClass default: false -- boolean; Allow_In_Place_Editing 

その場編集コンテナ ルールを取得/設定します。

コンテナの UI の[その場編集を許可](Allow In-Place Editing)チェック ボックスの状態に相当します。

false (既定)に設定すると、内容は継承できますが、その場編集はできません。

true に設定すると、内容は継承でき、その場編集もできます。これにより、オリジナルのアセット ファイルの内容が上書きされます。

   

<Container>.accessContent BooleanClass default: false -- boolean; Allow_Content_Access 

内容アクセス ルールの状態を取得/設定します。

このルールはユーザ インタフェースには公開されておらず、 .AllowInPlaceEditing false に設定されている場合にのみ考慮されます。その場編集が許可されている場合は、このルールに関係なく、閉じているコンテナの内容にアクセスできなくなります。

false (既定値)に設定した場合、継承されている場合には内容にはアクセス不可能です。MAXScript を使用して内容を選択、修正したり、内容にアクセスしたりすることはできません。

true に設定すると、継承されたときに内容にアクセスできるようになります。このような内容へのローカル変更は、ロード解除すると失われます

   

<Container>.accessPublishedContent BooleanClass default: false -- boolean; Allow_Published_Content_Access 

公開された内容へのアクセス ルールの状態を取得/設定します。

このルールはユーザ インタフェースには公開されていません。

ディスプレイ - コンテナのプロパティ

<Container>.displayLabel BooleanClass default: false -- boolean; Display_Label 

[名前](Name)チェックボックスの状態を取得/設定します。(3ds Max 2010では、[ラベル](Label)と呼ばれていました。)

true に設定すると、コンテナの横にそのコンテナの名前を示すテキスト ラベルが表示されます。

   

<Container>.displayStatus BooleanClass default: false -- boolean; Display_Status 

コンテナのステータスの表示を有効または無効にします。

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

   

<Container>.editingUser String default: "" -- string; Editing_User; 

コンテナを編集しているユーザの名前を取得/設定します。

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

   

<Container>.contentBoundingBox BooleanClass default: false -- boolean; Content_Bounding_Box 

[バウンディング ボックスを拡張](Expand Bounding Box)チェックボックスの状態を取得/設定します。

true に設定すると、コンテナのバウンディング ボックスが拡張され、内容が囲まれます。

   

<Container>.size Float default: 10.0 -- animatable; worldUnits 

コンテナのアイコンのサイズをコントロールする[サイズ](Size)の値を取得/設定します。

   

<Container>.updateNeeded BooleanClass default: false -- boolean; Update_Needed 

コンテナの更新が必要な場合 true になります。[更新](Update)ボタンの隣にあるアイコンの状態を反映します。

読み込み専用です。

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

   

ディスプレイ - 内容のプロパティ

<Container>.overrideNodeProperties BooleanClass default: false -- boolean; Override_Object_Properties 

[オブジェクト プロパティを上書き](Override Obj Properties)チェックボックスの状態を取得/設定します。

true に設定すると、ワイヤフレーム カラー、可視性設定などのコンテナのディスプレイ プロパティを使用して内容が表示されます。内容が、[レイヤ別](By Layer)プロパティを使用するよう設定されている場合、内容のレイヤの代わりにコンテナのレイヤが使用されます。

false に設定した場合、内容はその内容のディスプレイ プロパティを使用して表示されます。

コンテナ インタフェース:

Interface:IContainerObject 

プロパティ:

.proxyType: enum : Read|Write 
proxyType enums: {#none|#alternate} 

プロキシの使用をコントロールするラジオ ボタンの状態を取得/設定します。

有効な値は次のとおりです。

#none- プロキシのファイルを使用しません。

#alternate- 前の 2 つのプロパティで指定されたプロキシ ファイルを使用します。

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

   

メソッド:

コンテナ管理のメソッド

<bool><Container>.LoadContainer() 

コンテナの内容をその定義とローカル変更からロードします。ロード解除されている場合にのみ使用できます。

コンテナがロードされている状態で、コンテナの UI の[ロード解除](unloaded)ボタンを押す操作に相当します (この状態の問い合わせについては .unloaded プロパティを参照してください)。ボタンは[ロード解除](Unload)に変わります。

成功した場合は true を返し、成功しなかった場合は false を返します。

   

<bool><Container>.UnloadContainer() 

ローカル定義を保存し、シーンから内容を削除することにより、コンテナをロード解除します。

コンテナがロードされている状態で、コンテナの UI の[ロード解除](Unload)ボタンを押す操作に相当します(この状態の問い合わせについては .unloaded プロパティを参照してください)。ボタンが[ロード](Load)に変わります。

成功した場合は true を返し、成功しなかった場合は false を返します。

   

<bool><Container>.SetOpen <bool>open 

引数が true の場合、コンテナが開きます。コンテナの UI の[開く](Open)ボタンを押す操作に相当します。

引数が false の場合、コンテナが閉じられます。コンテナの UI の[閉じる](Close)ボタンを押す操作に相当します。

   

<bool><Container>.IsOpen() 

コンテナが開いている場合は true 、その他の場合は false を返します。開いている状態を制御する前述のメソッドを参照してください。

   

<bool><Container>.UpdateContainer() 

コンテナの内容を、ローカル変更を保持したまま更新します。コンテナの UI の[更新](Update)ボタンを押す操作に相当します。

成功した場合は true を返し、成功しなかった場合は false を返します。

   

<bool><Container>.MakeUnique() 

コンテナのソースを合成し、内容の中にネストされているコンテナをすべて再帰的に合成します。

コンテナの UI の[すべての内容を個別化する](Make All Content Unique)ボタンを押す操作に相当します。

   

<bool><Container>.IsUnique() 

内容が個別化されている場合は true 、それ以外の場合は false を返します。

コンテナ管理 - その場の編集のメソッド

<void>SetAccessType <enum>accessType 

   

accessType enums: {#noAccess|#onlyEditInPlace|#onlyAddNewObjects|#anythingUnlocked} 

指定した列挙値へのアクセス タイプを設定します。

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

   

<enum>GetAccessType() 

   

GetAccessType enums: {#noAccess|#onlyEditInPlace|#onlyAddNewObjects|#anythingUnlocked} 

アクセス タイプを列挙値として返します。

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

   

<enum>InheritedAccessType() 
InheritedAccessType enums: {#noAccess|#onlyEditInPlace|#onlyAddNewObjects|#anythingUnlocked} 

継承したアクセス タイプを列挙値として返します。

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

   

<void>SetLockedContents<enum>lockedType <bool>clear 

   

lockedType enums: {#lockAllMaterials|#lockAllModifiers|#lockAllAnimation|#lockAllObjects} 

1 番目の引数の enum で指定されたコンテンツ コンポーネントに対するロックを 2 番目の引数のブール値に設定します。

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

   

<bool>IsLockedContents <enum>lockedType 

   

lockedType enums: {#lockAllMaterials|#lockAllModifiers|#lockAllAnimation|#lockAllObjects} 

引数で指定されたコンテンツ コンポーネントがロックされている場合はtrue を返し、ロックが解除されている場合は false を返します。

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

例:

 
c = container()
--Check the Modifiers Lock:
$Container001.IsLockedContents #lockAllModifiers
--> false 
--Lock theModifiers:
$Container001.SetLockedContents #lockAllModifiers true
--> OK 
--Check the Modifiers Lock:
$Container001.IsLockedContents #lockAllModifiers
--> true 
--Unlock the materials:
$Container001.SetLockedContents #lockAllMaterials false
--> OK 

   

<void>ClearLockedContents() 

コンテナのロックされた内容をクリアします。

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

   

<string>GetStatusString() 

コンテナのステータス文字列を返します。 .displayStatus プロパティが true に設定されている場合、これはビューポート ラベルに表示される文字列と同じ文字列です。

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

例:

 
$Container001.GetStatusString()
--> "No Access"
$Container001.UnloadContainer()
--> true
$Container001.GetStatusString()
-->"Unloaded"
$Container001.MakeUnique()
--> true
$Container001.GetStatusString()
--> "Unsaved" 

コンテナ管理 - その場の編集のメソッド

[その場の編集](Edit in Place)チェックボタンは、その状態に応じて内部的に 2 つの操作を実行します。

  • チェックされている場合、内容をマージします。これは MergeSource()と同じです。

  • チェックされていない場合、内容をディスクに保存します。これは SaveContainer()と同じです。

   

<bool><Container>.CanEditInPlace() 

コンテナがその場で編集可能である場合は true 、それ以外の場合は false を返します。

継承した場合に、内容のその場編集を可能にするかどうかをコントロールするコンテナ ルールは、内容の継承元となるローカル コンテナの allowInPlaceEditing プロパティを使用して設定します。

内容を継承する他のコンテナにその場編集を許可するためには、このルールを true に設定して内容ファイルを保存しておく必要があります。

ローカル内容のメソッド

<bool><Container>.AddNodeToContent <node>node 

指定されたノードとその子/従属ノードをコンテナの内容に追加します。

コンテナ ノードが内容ノードの親になります。入力ノードとともに、以下のノードが自動的にローカル内容に追加されます。

  • ノードの子が追加されます。

  • ノードがシステム(Biped やボーンなど)の一部である場合には、システム内のすべてのノードが追加されます。

  • ノードにカメラ ターゲットなどのターゲットがある場合、そのターゲットが追加されます。

  • ノードがターゲットである場合、このノードをターゲットとしているノードも追加されます。

成功した場合は true を返し、成功しなかった場合は false を返します。

   

<bool><Container>.AddNodesToContent <&node array>nodes

nodes is In and Out parameter 

提供されたノードの配列とそのすべての子と従属をコンテナの内容に追加します。詳細は前のメソッドを参照してください。

成功した場合は true を返し、成功しなかった場合は false を返します。

例:

b = Box()
-->$Box:Box01 @ [0.000000,0.000000,0.000000]
s = Sphere pos:[100,0,0]
-->$Sphere:Sphere01 @ [100.000000,0.000000,0.000000] 
--Will be created at the origin unless position is provided.
--Compare to Containers.CreateContainer() which creates
--at the average position of all content nodes
c = Container()
-->$Container:Container01 @ [0.000000,0.000000,0.000000] 
c.addNodeToContent b--adding single node
-->true
c.addNodesToContent #(s)--adding an array of one or more nodes
-->true 
c.GetContentNodes false &theNodes
--> OK
theNodes
--> #($Box:Box01 @ [0.000000,0.000000,0.000000],$Sphere:Sphere01 @ [100.000000,0.000000,0.000000]) 

   

<void><Container>.GetContentNodes <bool>nestedContainerNodes<&node array>contentNodes 

contentNodes is Out parameter 

コンテナの内容ノードの配列を、2 番目の参照渡しパラメータに返します。

1 番目の引数に true が渡された場合、ネストされたコンテナも処理されます。

1 番目の引数に false が渡された場合、現在のコンテナの内容だけが返されます。

   

<bool>IsNodeInContent <node>node <bool>nestedContainerNodes 

指定されたノードが内容に存在する場合は true を返します。

2 番目の引数が true の場合、継承した内容の中のネストしたコンテナも検索されます。

false の場合、現在のコンテナだけが検索されます。

   

<bool><Container>.RemoveNodeFromContent <node>node <bool>detach 

1 番目の引数として指定されたノードをコンテナの内容から削除します。

2 番目の引数が true の場合、ノードがコンテナからリンク解除されます。 false の場合、ノードはコンテナの子のままとなりますが、コンテナの内容としては存在しなくなります。

   

<bool><Container>.SaveContainer <bool>newFileNamesaveAsVersion:<integer> 

saveAsVersion 既定値: 0

コンテナの内容とルールを新しい定義として保存します。

成功した場合は true、失敗した場合は false を返します。

newFileName 引数が true の場合、新しいファイル名を指定するためのファイル保存ダイアログ ボックスが表示されます。これは、UI の[名前を付けて保存](Save As)ボタンを押したときと同じ動作です。

newFileName 引数が false の場合、現在のファイル名が使用されます。ファイル名が定義されていない場合は、ファイル保存ダイアログ ボックスが表示されます。これは、UI の[保存](Save)ボタンを押したときと同じ動作です。

3ds Max 2011 以降では、 saveAsVersion: オプション キーワードの引数が提示されていて、それが 0 以外でかつサポートされているバージョン番号と等しい場合、MAXC ファイルはその形式で保存されます。引数が提示されないか 0 の場合、MAXC ファイルは現在の 3ds Max バージョンの形式で保存されます。

有効な値は、3ds Max 2011 では 2010、3ds Max 2012 では 2011 です。

   

<bool><Container>.ReloadContainer() 

コンテナを再ロードします。LoadContainer () と同じですが、.unloaded property プロパティの状態には依存しないため、常に使用できます。保存していない変更を破棄します。

コンテナの UI にある[再ロード](Reload)ボタンを押す操作に相当します。

成功した場合は true を返し、成功しなかった場合は false を返します。

   

継承済み内容のメソッド

<bool><Container>.MergeSource() 

継承されたコンテナを、未保存のローカル コンテナの内容に変換し、その内容をシーンに合成します。ネストされたコンテナの内容は合成されません。

コンテナの UI の[ソース定義を合成](Merge Source Definition)ボタンを押す操作に相当します。

成功した場合は true を返し、成功しなかった場合は false を返します。

   

例:

( -- start script
 
-------------------------Creating a Container:-----------------------
resetMaxFile #noprompt --reset the scene
cnt01 = container size:50 name:"LocalContent" --create a container
cnt01.displaylabel = true --display its label
cnt_filename = getDir #scene + "\\_Container01.maxc" --define file name
cnt01.localDefinitionFilename = cnt_filename --assign the file name
cnt01.accessContent =true --enable access to inherited content
cnt01.allowInPlaceEditing = false --disallow in-place editing 
--------------------------Creating some Content:------------------------
obj01 = Teapot wirecolor:blue --create a blue teapot
cnt01.AddNodeToContent obj01 --add to content
cnt01.SaveContainer false --save to the current file name 
-------------------------Display and Wait...:-----------------------
max modify mode --switch to modify panel
max views redraw --update the viewports
select cnt01 --select the container
sleep 2 --and wait for two seconds 

   

-------------------------Inherit the Content:-----------------------
cnt02 = containers.CreateInheritedContainer cnt_filename --inherit file
cnt02.name ="InheritedContent" --name the container
cnt02.pos = [0,60,0] --move it to the side
cnt02.size = 50 --set the size of the icon
cnt02.displayLabel = true --and display the label 
-------------------------Display and Wait...:-----------------------
max tool zoomextents all --zoom the viewports
select cnt02 --select the inherited container
max views redraw --update the viewports
sleep 2 --wait for two seconds 

   

 --------------------------Adding MoreContent:------------------------
obj02 = Sphere radius:15 pos:[50,0,15] wirecolor:green --green sphere
obj03 = Box pos:[100,0,0] wirecolor:blue --blue box
cnt01.AddNodesToContent #(obj02, obj03) --add nodes array to content
obj01.wirecolor = red --change the teapot to red
cnt01.SaveContainer false save to update the container definition 
-------------------------------Updating Inherited Content:-----------------------------
cnt02.updateContainer() --update the inherited container from disk
format "\nCurrently In The Scene: % objects\n" objects.count
print objects --print scene objects - inherited content is there! 
-->Currently In The Scene: 8 objects
-->$Container:LocalContent @ [0.000000,0.000000,0.000000]
-->$Teapot:Teapot01 @ [0.000000,0.000000,0.000000]
-->$Sphere:Sphere01 @ [50.000000,0.000000,15.000000]
-->$Box:Box01 @ [100.000000,0.000000,0.000000]
-->$Container:InheritedContent @ [0.000000,100.000000,0.000000]
-->$Teapot:Teapot01 @ [0.000000,100.000000,0.000000]
-->$Sphere:Sphere01 @ [50.000000,100.000000,15.000000]
-->$Box:Box01 @ [100.000000,100.000000,0.000000] 
max views redraw --update the viewports
sleep 2 --wait for two seconds 

   

 --------------------------Changing Access Rules:------------------------
cnt01.accessContent =false --disallow the access to inherited content
cnt01.SaveContainer false --resave to update the rules
cnt02.updateContainer() --update the inherited container from disk
format "\nCurrently In The Scene: % objects\n" objects.count
print objects--print scene objects - inherited content is not there! 
-->Currently In The Scene: 5 objects
-->$Container:LocalContent @ [0.000000,0.000000,0.000000]
-->$Teapot:Teapot01 @ [0.000000,0.000000,0.000000]
-->$Sphere:Sphere01 @ [50.000000,0.000000,15.000000]
-->$Box:Box01 @ [100.000000,0.000000,0.000000]
-->$Container:InheritedContent @ [0.000000,100.000000,0.000000]  
max views redraw --update the viewports
sleep 2 --wait for two seconds 

   

 ----------------------------------Unloading Inherited Container:--------------------------------
cnt02.UnloadContainer()
max views redraw --update the viewports
sleep 2 --wait for two seconds 

   

-------------------------------------Making Inherited Container Local:-----------------------------------
cnt02.MakeUnique() --make the content unique
format "\nCurrently In The Scene: % objects\n" objects.count
print objects --print scene objects - the content is now local!
-->Currently In The Scene: 8 objects
-->$Container:LocalContent @ [0.000000,0.000000,0.000000]
-->$Teapot:Teapot01 @ [0.000000,0.000000,0.000000]
-->$Sphere:Sphere01 @ [50.000000,0.000000,15.000000]
-->$Box:Box01 @ [100.000000,0.000000,0.000000]
-->$Container:InheritedContent @ [0.000000,100.000000,0.000000]
-->$Teapot:Teapot01 @ [0.000000,100.000000,0.000000]
-->$Sphere:Sphere01 @ [50.000000,100.000000,15.000000]
-->$Box:Box01 @ [100.000000,100.000000,0.000000] 
cnt02.localDefinitionFilename = cnt_filename --set the same file name
cnt02.name ="AlsoLocal"--rename the object, too 
for i = 1 to cnt02.children.count do --Stack the content vertically
  cnt02.children[i].pos = cnt02.pos + [0,0,(i-1)*50]
cnt02.SaveContainer false --and save, overwriting the original asset 
max views redraw --update the viewports
sleep 2 --wait for two seconds

   

-------------------------------------------------Reloading The New File In Original Container:-----------------------------------------------
cnt01.ReloadContainer() --reload the content from file
cnt01.SetOpen false --close the container
)--end script

関連事項