Container - superclass: helper; super-superclass:node - 10:0 - classID: #(1848947859, -473657791)
3ds Max 2010 以降では、コンテナは、シーン内のヘルパー オブジェクトで、自己収容型の内容をグループ化して、その内容を管理、公開、継承するために使用されます。また、メモリからコンテンツ オブジェクトをロード解除することもできます。
詳細については、「コンテナ」および「インタフェース: Containers」を参照してください。
コンストラクタ:
Container ... ContainerHelper ...
「インタフェース: コンテナ」の「Containers.CreateContainer()
」も参照してください。
プロパティ:
<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
[親が一致するレイヤ](Match Layers by Parent)チェックボックスの状態を取得/設定します。
<Container>.localDefinitionFilenameString default: "" -- filename; Local_Definition_Filename
「ローカル定義」のファイル名を取得/設定します。
定義ファイルのフォーマットは 3ds Max シーン ファイルと同じですが、ファイル拡張子はこれとは異なる .MAXC を使用します。 拡張子が異なるため、ユーザはフォルダの参照時に通常の Max シーンファイルとコンテナ定義ファイルを見分けることができ、コンテナ定義が誤って編集されるのを防ぐことができます。コンテナ定義は名前を変更したり、.MAX ファイルとして開くことができます。
ローカル コンテナはローカル定義ファイルを使用します。
継承されたコンテナは、ソース定義ファイルを参照します。コンテナが継承されている場合には、名前は空になります。
<Container>.sourceDefinitionFilename String default: "" -- filename; Source_Definition_Filename
「ソース定義」ファイル名を取得/設定します。コンテナがローカルの場合、名前は空になります。
定義ファイルのフォーマットは 3ds Max シーン ファイルと同じですが、ファイル拡張子はこれとは異なる .MAXC を使用します。 拡張子が異なるため、ユーザはフォルダの参照時に通常の Max シーンファイルとコンテナ定義ファイルを見分けることができ、コンテナ定義が誤って編集されるのを防ぐことができます。コンテナ定義は名前を変更したり、.MAX ファイルとして開くことができます。
継承されたコンテナは、ソース定義ファイルを参照します。
ローカル コンテナはローカル定義ファイルを使用します。
<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 以降 で使用可能です。
メソッド:
<boolean><Container>.LoadContainer()
コンテナの内容をその定義とローカル変更からロードします。ロード解除されている場合にのみ使用できます。
コンテナがロードされている状態で、コンテナの UI のロード解除ボタンを押す操作に相当します (この状態の問い合わせについては .unloaded プロパティを参照してください)。ボタンはロード解除に変わります。
成功した場合は *true*
、成功しなかった場合は *false*
を返します。
<boolean><Container>.UnloadContainer()
ローカル定義を保存し、シーンから内容を削除することにより、コンテナをロード解除します。
コンテナがロードされている状態で、コンテナの UI のロード解除ボタンを押す操作に相当します(この状態の問い合わせについては .unloaded プロパティを参照してください)。ボタンが[ロード] (Load)に変わります。
成功した場合は *true*
、成功しなかった場合は *false*
を返します。
<boolean><Container>.SetOpen <boolean>open
引数が *true*
の場合、コンテナが開きます。コンテナの UI の[開く] (Open)ボタンを押す操作に相当します。
引数が *false*
の場合、コンテナが閉じられます。コンテナの UI の[閉じる] (Close)ボタンを押す操作に相当します。
<boolean><Container>.IsOpen()
コンテナが開いている場合は *true*
、その他の場合は *false*
を返します。開いている状態を制御する前述のメソッドを参照してください。
<boolean><Container>.UpdateContainer()
コンテナの内容を、ローカル変更を保持したまま更新します。コンテナの UI の[更新] (Update)ボタンを押す操作に相当します。
成功した場合は *true*
、成功しなかった場合は *false*
を返します。
<boolean><Container>.MakeUnique()
コンテナのソースを合成し、内容の中にネストされているコンテナをすべて再帰的に合成します。
コンテナの UI の[すべての内容を個別化する](Make All Content Unique)ボタンを押す操作に相当します。
<boolean><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 <boolean>clear
lockedType enums: {#lockAllMaterials|#lockAllModifiers|#lockAllAnimation|#lockAllObjects}
1 番目の引数の enum で指定されたコンテンツ コンポーネントに対するロックを 2 番目の引数のブール値に設定します。
3ds Max 2011 以降で使用可能です。
<boolean>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()と同じです。
<boolean><Container>.CanEditInPlace()
コンテナがその場で編集可能である場合は *true*
、それ以外の場合は *false*
を返します。
継承した場合に、内容のその場編集を可能にするかどうかを制御するコンテナ ルールは、内容の継承元となるローカル コンテナの allowInPlaceEditing プロパティを使用して設定します。
内容を継承する他のコンテナにその場編集を許可するためには、このルールを true に設定して内容ファイルを保存しておく必要があります。
<boolean><Container>.AddNodeToContent <node>node
指定されたノードとその子/従属ノードをコンテナの内容に追加します。
コンテナ ノードが内容ノードの親になります。入力ノードとともに、以下のノードが自動的にローカル内容に追加されます。
ノードの子が追加されます。
ノードがシステム(Biped やボーンなど)の一部である場合には、システム内のすべてのノードが追加されます。
ノードにカメラ ターゲットなどのターゲットがある場合、そのターゲットが追加されます。
ノードがターゲットである場合、このノードをターゲットとしているノードも追加されます。
成功した場合は *true*
、成功しなかった場合は *false*
を返します。
<boolean><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 <boolean>nestedContainerNodes<&node array>contentNodes
contentNodes is Out parameter
コンテナの内容ノードの配列を、2 番目の参照渡しパラメータに返します。
1 番目の引数に *true*
が渡された場合、ネストされたコンテナも処理されます。
1 番目の引数に *false*
が渡された場合、現在のコンテナの内容だけが返されます。
<boolean>IsNodeInContent <node>node <boolean>nestedContainerNodes
指定されたノードが内容に存在する場合は *true*
を返します。
2 番目の引数が *true*
の場合、継承した内容の中のネストしたコンテナも検索されます。
*false*
の場合、現在のコンテナだけが検索されます。
<boolean><Container>.RemoveNodeFromContent <node>node <boolean>detach
1 番目の引数として指定されたノードをコンテナの内容から削除します。
2 番目の引数が *true*
の場合、ノードがコンテナからリンク解除されます。*false*
の場合、ノードはコンテナの子のままとなりますが、コンテナの内容としては存在しなくなります。
<boolean><Container>.SaveContainer <boolean>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 です。
<boolean><Container>.ReloadContainer()
コンテナを再ロードします。LoadContainer () と同じですが、.unloaded property プロパティの状態には依存しないため、常に使用できます。保存していない変更を破棄します。
コンテナの UI にある[再ロード] (Reload)ボタンを押す操作に相当します。
成功した場合は *true*
、成功しなかった場合は *false*
を返します。
<boolean><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