3ds Max ファイルのロードと保存

次のメソッドは、3ds Max シーンのロード、保存、合成、読み込み、書き込みに使用します。

トピック ナビゲーション  

シーン ファイルのパスおよび名前

MAX ファイルのロード

MAX ファイルの合成

3ds Max の[ロード](Load)および[保存](Save)ダイアログ

MAX ファイル オブジェクト名

MAX ファイルの保存

一時保存と一時保存を呼び戻し

MAX ファイルの確認

ファイルの読み込み

ファイルの書き出し

ノードの保存

保存の確認

システム グローバル:

シーン ファイルのパスおよび名前

maxFileName 

現在開いているシーンのファイル名を定義する文字列値が含まれています。

この変数は読み取り専用です。

これは、後述の loadMaxFile() メソッドと saveMaxFile() メソッドを使用してシーンをロードおよび保存するときに自動的に設定されます。

質問と回答の「現在のシーンのファイル名を取得する方法」も参照してください。

   

maxFilePath 

現在開いているシーンのディレクトリ パスを定義する文字列値が含まれています。

この変数は読み取り専用です。

これは、後述の loadMaxFile() メソッドと saveMaxFile() メソッドを使用してシーンをロードおよび保存するときに自動的に設定されます。

質問と回答の「現在のシーンのファイル名を取得する方法」も参照してください。

   

メソッド:

次のメソッドは、3ds Max シーンのロード、保存、合成、読み込み、書き込みに使用します。

MAX ファイルのロード

<boolean>loadMaxFile <filename_string> [useFileUnits:<bool>] [quiet:<bool>] 

ファイルが見つかり正常にロードされた場合は true を返し、それ以外の場合には false を返します。

useFileUnits:false の場合、ファイル オブジェクトは現在のシステム単位スケールに再スケールされます。

true の場合、システム単位スケールはファイル単位スケールに変わります。

このオプションは、[システム単位設定](System Units Setup)ダイアログ ボックスの[ファイル内のシステム単位を重視](Respect System Units in Files)オプションの設定に関係なく適用されます。

useFileUnits:true を使用してファイルをロードすると、3dsmax.ini ファイルのシステム単位設定は変更されません。

useFileUnits の既定値は、3ds Max では false Autodesk VIZ では true です。

quiet: オプションの詳細は、「抑制モード」を参照してください。

警告

loadMaxFile() は、警告表示なしに、現在のシーン コンテンツをファイル コンテンツに置き換えます。

このメソッドを使用すると、「シーンが修正されています。変更を保存しますか?」というメッセージは、 quiet:false を指定した場合でも表示されません

保存が必要な場合にシーンの現在の内容が失われないようにする方法については、このページの CheckForSave() および saveMaxFile() を参照してください。

MAX ファイルの合成

<boolean>mergeMAXFile <filename_string> [<name_array>] [#prompt] \ 
[ [ #select ] #noRedraw ] \ 
[ #deleteOldDups | #mergeDups | #skipDups | #promptDups | #autoRenameDups ] \
[ #promptMtlDups | #useMergedMtlDups | #useSceneMtlDups | #renameMtlDups ]\
[ #promptReparent | #alwaysReparent | #neverReparent ] \
[ quiet:<bool> ] \ 
[ missingExtFilesAction: <actions> ] [ missingExtFilesList: <&variable> ] \ 
[ missingXRefsAction: <actions> ] [ missingXRefsList: <&variable> ] \
[ mergedNodes: <&variable>

引数は、先頭のファイル名以外はすべてオプションです。フラグ引数は、どんな順序で指定してもかまいません。

引数については、以下を参照してください。

<name_array> 

オプションの名前または文字列の配列は、合成するソース シーン ファイルのオブジェクトを識別します。指定しなければ、すべてのオブジェクトが合成されます。

#prompt 

指定すると、標準の[合成](Merge)ダイアログ ボックスが開きます。

#select 

指定すると、合成するときに新規に合成されるオブジェクトが選択されます。

#noRedraw 

mergeMAXFile() を何度も呼び出し、最後のファイル合成が終了するまで再描画を遅らせたい場合に指定すると、スクリーンの再描画を遅らせることができます。

#deleteOldDups 

入ってくるオブジェクトと同じ名前を持つ既存のシーン オブジェクトを削除します。これは、置き換えと同等です。

#mergeDups 

名前の競合を無視します。合成する場合に名前が重複する場合があります。

#skipDups 

重複した名前のオブジェクトは合成しません。

#promptDups 

重複した解像度ダイアログ ボックスを放棄します。

#AutoRenameDups 

現在のシーン中に既に存在する名前を持つ取り込みオブジェクトの名前を自動的に変更します。ダイアログはポップアップされません。3ds Max 2011 以降で使用可能です。

#promptMtlDups 

既定値で、重複したマテリアルが見つかるとユーザに確認画面を表示します。

#useMergedMtlDups 

受け取ったマテリアルを使用して合成します。

#useSceneMtlDups 

シーン マテリアルを使用して合成します。

#renameMtlDups 

受け取ったマテリアルで重複したものを合成し、名前を変更します。

#promptReparent 

既定値で、ユーザに確認画面を表示します。

#alwaysReparent 

ユーザへの確認は行わず、常にバインドします。

#neverReparent 

ユーザへの確認は行わず、まったくバインドしません。

quiet: オプションの詳細は、「抑制モード」を参照してください。

ファイルが見つかり正常にロードされた場合、 mergeMAXFile true を返します。引数に拡張子が .DRF のファイルが指定されている場合は、 false を返します。

完全なパス名を指定しない場合、3ds Max シーン ディレクトリでファイルを検索し、次に 3ds Max 実行ディレクトリ、PATH 環境ディレクトリを検索します。

mergedNodes <&variable>

合成に成功した場合は、指定した変数に合成されたノードの配列が格納されます。

   

<nodes array>getLastMergedNodes()

3ds Max 2017 の 新機能 : 前回の合成操作で合成されたノードの配列を返します。

現在のシーンで合成操作が実行されていない場合は、空の配列 #()を返します。

resetMaxFile #noPrompt --reset the scene
--> OK

getLastMergedNodes() --get the last merged nodes - returns an empty array, because nothing has been merged yet
--> #()

t = teapot() --create a teapot
--> $Teapot:Teapot001 @ [0.000000,0.000000,0.000000]

s = sphere pos:[100,0,0] --create a sphere to the right of the teapot
--> $Sphere:Sphere001 @ [100.000000,0.000000,0.000000]

b = box pos:[-50,0,0] --create a box to the left of the teapot
--> $Box:Box001 @ [-50.000000,0.000000,0.000000]

theFile = (GetDir #temp + @"\teapotAndSphere.max") --define a temp file to save
--> "C:\Users\YOURNAME\AppData\Local\Autodesk\3dsMax\2017 - 64bit\ENU\temp\teapotAndSphere.max"

saveNodes #(t,s,b) theFile --save the three objects to the file
--> OK

resetMaxFile #noPrompt --reset the scene again
--> OK

mergeMAXFile theFile #("Teapot001") --attempt to merge two teapots
--> true
m1 = getLastMergedNodes() --check to see what was merged - only one teapot actually exists in the file
--> #($Teapot:Teapot001 @ [0.000000,0.000000,0.000000])

mergeMAXFile theFile #mergeDups #autoRenameDups --merge all objects, allowing duplicates to be renamed
--> true
m2 = getLastMergedNodes() --see what got merged...
--> #($Teapot:Teapot002 @ [0.000000,0.000000,0.000000], $Sphere:Sphere001 @ [100.000000,0.000000,0.000000], $Box:Box001 @ [-50.000000,0.000000,0.000000])

move m2 [0,100,0] --move the objects merged in the second attempt 100 units along Y
--> OK
select m1 --and select the object from the first merge
--> OK

   

3ds Max の[ロード](Load)および[保存](Save)ダイアログ

getMAXSaveFileName [filename:<seed_filename_string>] 

標準の 3ds Max ファイルの保存ダイアログ ボックスを表示して、ユーザが選択したファイル名を返します。ユーザがキャンセルした場合は undefined を返します。

オプションの filename: 文字列引数を指定し、この引数にファイル名のパターンのみが含まれている場合、パターンに一致するファイルのみが表示されます。 ファイル パスも含まれている場合は、パターンに一致するディレクトリのコンテンツも表示されます。

実際のファイル保存は実行されず、選択したファイルの名前だけが返されます。保存を実行する場合は、この関数の結果('undefined' でないこと)を、引数としてこのページで説明する saveMaxFile() に渡します。

--Open the dialog at the current path (can be found or set via sysinfo.currentdir):
theName = getMAXSaveFileName() 

--Open the dialog at "c:\temp\" and filter by pattern "test*.max"
--The user must click a specific file if the pattern contains wildcards
theName = getMAXSaveFileName filename:"c:\\temp\\test*.max"

--Open the dialog at "c:\temp\" and set the file name to "test.max"
--The user can click the Open button to get the specified file name if it exists,
--otherwise a prompt will show up saying the file does not exist...
theName = getMAXSaveFileName filename:"c:\\temp\\test.max"
--If the result is not undefined, we can actually save the file:
if theName != undefined do saveMaxFile theName

   

getMAXOpenFileName [filename:<seed_filename_string>] [dir:<seed_directory_string>] 

標準の 3ds Max ファイルを開くダイアログ ボックスを表示して、ユーザが選択したファイル名を返します。ユーザがキャンセルした場合は undefined を返します。

オプションの filename: 文字列引数を指定し、この引数にファイル名のパターンのみが含まれている場合、パターンに一致するファイルのみが表示されます。 ファイル パスも含まれている場合は、パターンに一致するディレクトリのコンテンツも表示されます。

オプションの dir: 文字列を指定すると、ダイアログは指定されたパスで開き、ファイル名フィールドは現在のシーン ファイル名( maxFileName グローバル変数にあります)に設定されます。シーンが[タイトルなし(Untitled)]の場合、フィールドは空になります。

例:

--Open the dialog at the current path (sysinfo.currentdir):
theName = getMAXOpenFileName() 

--Open the dialog at c:\temp and use current file name
theName = getMAXOpenFileName dir:"c:\\temp" 

--Open the dialog at "c:\temp\" and filter by pattern "test*.max"
--The user must click a specific file if the pattern contains wildcards
theName = getMAXOpenFileName filename:"c:\\temp\\test*.max"

--Open the dialog at "c:\temp\" and set the file name to "test.max"
--The user can click the Open button to get the specified file name if it exists.
theName = getMAXOpenFileName filename:"c:\\temp\\test.max"

   

MAX ファイル オブジェクト名

getMAXFileObjectNames <max_filename_string> [quiet:<bool>] 

文字列の配列を返します。 1 つは与えられた 3ds Max ファイルの各オブジェクト名です。

これによって、他のシーン ファイルのオブジェクトのプレビュー リスト(名前順)を取得する方法を提供します。 mergeMAXFile() 関数を使用して、スクリプト コントロールで合成するオブジェクトのユーザ選択を設定できます。

例:

p=[1000,1000,1000]
for i = 1 to 5 do box pos:(random p -p) -- create some boxes
savemaxfile "mergetest.max" -- save to file
for obj in objects do obj.name = "_"+obj.name -- rename the boxes
objects.pos += [0,-1000,0] -- move them off to the side
fobj_names = getmaxfileobjectnames "mergetest.max" -- get the object names from the file
deleteitem fobj_names 3 -- delete the third name from the array
mergemaxfile "mergetest.max" fobj_names #select -- merge in the objects and select them
selection.count -- should be 4
objects.count -- should be 9

getMAXFileObjectNames は、引数に拡張子が .DRF のファイルが指定されている場合、空の配列を返します。

quiet: オプションの詳細は、「抑制モード」を参照してください。

getMAXFileObjectNames 3ds Max 7 以降では、3ds Max の前バージョンのような名前値の配列ではなく、文字列値の配列を返します。 mergeMaxFile で使用されるオブジェクト名では大文字と小文字が区別されますが、名前値ではラップされる文字列の大文字/小文字が必ずしも保持されません。

MAX ファイルの保存

<bool>saveMaxFile <filename_string> [saveAsVersion:<integer>] [clearNeedSaveFlag:<bool>] [useNewFile:<bool>] [quiet:<bool>] 

提供されたファイル名に明示的なディレクトリ パスがない場合、現在の 3ds Max シーン ディレクトリにシーンを保存します。ファイル名の拡張子が指定されていない場合は、「.max」が自動的にファイル名に追加されます。

警告:

saveMaxFile() では、警告表示なしに同じ名前の既存のファイルを上書きします。

このページの CheckForSave() doesFileExist() を参照してください。

オプションのキーワードの既定値は true であり、3ds Max 6 よりも前の既存の動作に一致します。ただし、3ds Max 2011 以降で以前のバージョンとして保存する場合、 useNewFile: false と仮定され、以前のバージョンのファイルが最新のファイルになるのを防ぎます。

3ds Max 2011 以降では、 saveAsPrevious: を使用して有効な以前のバージョンが指定された場合、シーンは指定された以前のバージョンのファイル形式で保存されます。3ds Max 2011 では、有効な値は 2010 です。3ds Max 2012 では、有効な値は 2010 および 2011 です。その他の値によって、現在のバージョンの形式を使用して保存されることはありません。

clearNeedSaveFlag false に設定した場合、ファイルは保存されますが、保存が必要であることを示すフラグはクリアされないため、3ds Max は、シーンが変更されて保存が必要であると認識したままです。

useNewFile false の場合、保存されたファイルが現在のシーン ファイルとして設定されないので、[最近使用したファイルを開く](Most Recently Used)リストに表示されません。これによって、シーンのバックアップファイルは別の名前で保存され、その名前は現在の名前にはならず最新のファイルのリストにも表示されません。

3ds Max 8 においてこのメソッドに追加された quiet: オプションの詳細については、「抑制モード」を参照してください。

3ds Max 8 以降 では、このメソッドは、正常に終了した場合に true、保存がエラーになった場合(既存の読み取り専用ファイルを上書きしようとした場合など)に false を返します。

一時保存と一時保存を呼び戻し

holdMaxFile() 

3ds Max の[編集](Edit) > [一時保存](Hold)の操作に相当します。

   

fetchMaxFile [quiet:<boolean>] 

3ds Max の[編集](Edit) > [一時保存を呼び出し](Fetch)の操作に相当します。 quiet: オプションの詳細は、「抑制モード」を参照してください。

   

MAX ファイルの確認

<bool>isMaxFile <filename_string> 

指定されたファイルが MAX ファイルである場合は、true を返します。

このメソッドは、指定されたファイルの内部構造をテストして、MAX ファイルと互換性があるかどうかを調べます。

MAX ファイルでない場合、または指定したファイルが存在しない場合は、false を返します。

例:

isMaxFile "$scenes/ca_test1.max" --returns true if file exists
isMaxFile "$max/autoback/maxhold.mx" --returns true if file exists
isMaxFile "$matlibs/Nature.mat" --returns true if file exists
isMaxFile (maxFilePath + maxFileName) --returns true unless the scene is Untitled

ファイルの読み込み

importFile <filename_string> [#noPrompt] [using:<maxclass>] 

有効な読み込みプラグインを使用してファイルを読み込むことができます。読み込まれるファイル タイプは、 .dxf には DXF、 .3ds には 3DS DOS というようにファイル名の拡張子によって決まります。

#noPrompt フラグは、既定値の設定を使用する場合に、設定 ダイアログ ボックスまたはコントロール ダイアログ ボックスが表示されないようにします。

オプションのキーワード引数 using: を指定した場合は、それぞれの I/O クラスが使用されて読み込みが実行されます。複数のプラグインで同じファイル フォーマット拡張子がサポートされている場合に便利です。3ds Max 8 以降 で使用可能です。

使用可能なすべての読み込みプラグイン クラスを確認するには、 importerPlugin の値の .classes プロパティにアクセスできます。このプロパティでは、インストールされているすべての読み込みプラグインが返されます。

例:

print importerPlugin.classes

結果:

3D_Studio
3D_Studio_Shape
Adobe_Illustrator_Shape
AutoCADImport
FBXIMP
STL_Import
FileLinkAsDwgImporter
mental_ray_Import
IGES_Import
Wavefront_Object
VrmlImp
ImportTRC
Lightscape_Importer
XMLImp2
ImportHTR
InventorImport
LandXML___DEM_Model_Import
Wavefront_Material

読み込みプラグインと書き出しプラグインの設定への MAXScript アクセスについては、「フィルタのインポート、エクスポート」も参照してください。

ファイルの書き出し

exportFile <filename_string> [#noPrompt] [selectedOnly:<boolean>] [using:<maxclass>] 

有効な書き出しプラグインを使用して、ファイルを書き出すことができます。

書き出されるファイル タイプは、 .dxf には DFX、 .3ds には 3DS DOS というようにファイル名の拡張子によって決まります。

#noPrompt フラグは、既定値の設定を使用する場合に、設定 ダイアログ ボックスまたはコントロール ダイアログ ボックスが表示されないようにします。

selectedOnly キーワード パラメータが true に設定されている場合は、選択したノードだけが書き出されます。既定値は false です。

オプションのキーワード引数 using: を指定した場合は、それぞれの I/O クラスが使用されて書き出しが実行されます。複数のプラグインで同じファイル フォーマット拡張子がサポートされている場合に便利です。3ds Max 8 以降 で使用可能です。

使用可能なすべての書き出しプラグイン クラスの配列を取得するには、 exporterPlugin の値の .classes プロパティにアクセスできます。

例:

theClasses =exporterPlugin.classes
exportFile (GetDir #scene + "/exportTest" ) using:theClasses[1]

上の例では、配列内で最初に見つかったプラグインがエクスポートに使用されます。

読み込みプラグインと書き出しプラグインの設定への MAXScript アクセスについては、「フィルタのインポート、エクスポート」も参照してください。

ノードの保存

<bool>saveNodes <node_collection> <filename_string> [saveAsVersion: <integer>] [quiet:<bool>] 

指定された名前で新規の .max シーン ファイルを作成し、このファイルにノード コレクションを保存します。

<node_collection> 引数は、単一のノードまたは集めたノードの配列、ワイルドカード パス名、 selection lights 、または <node>.children 配列などのビルトイン オブジェクト セットのいずれかです。

ファイル名の拡張子が指定されていない場合は、「.max」が自動的にファイル名に追加されます。

3ds Max 2011 の新機能 : saveAsVersion: の値が 2010 の場合、得られるファイルは指定したバージョンのファイル形式で保存されます。3ds Max 2010 より前のバージョンはサポートされていません。その他の値が指定されている場合、または何も指定されていない場合は、現在のバージョンのファイル形式が使用されます。

3ds Max 8 においてこのメソッドに追加された quiet: オプションの詳細については、「抑制モード」を参照してください。

3ds Max 8 以降 では、このメソッドは、正常に終了した場合に true、保存がエラーになった場合(既存の読み取り専用ファイルを上書きしようとした場合など)に false を返します。

警告:

saveNodes() では、警告表示なしに同じ名前の既存のファイルを上書きします。

解決方法については、後述の CheckForSave() および doesFileExist() を参照してください。

保存の確認

checkForSave() 

以前にファイルを保存し、それ以降にファイルが変更されている場合、この関数を呼び出すとメッセージ ボックスが開き、ユーザにシーンが変更されていることを通知し、シーンを保存するかどうかを尋ねるプロンプトが表示されます。

この関数は、ユーザが保存をキャンセルした場合は false を返し、そうでない場合は true を返します。関数自体が保存を実行するのではありません。この関数は、シーンが変更されていて、かつその後のアクションに関するユーザの決断が返された場合にプロンプトを表示するだけです。実際の保存やファイルの存在の確認は、MAXScript コードによって実行する必要があります。

3ds Max の終了およびリセット」 も参照してください。

警告:

saveNodes() および saveMaxFile() では、警告表示なしに同じ名前の既存のファイルを上書きします。

b = box()
saveNodes b "foo.max"
saveNodes b "foo.max"
saveMaxFile "foo.max"
--All these calls will overwrite the file "foo.max"
--without notice.

常に doesFileExist() を使用して、ターゲット ファイルが存在していないことを確認するためのプロンプトを表示します。

この場合の doesFileExist() の使用方法を示す 2 つの例をあげます。

スクリプト:

b = box()
-- if filename exists, ask user if ok to overwrite
-- function returns true if file was saved, false otherwise
fn maybe_saveNodes nodeArray filename =
(
if getFilenamePath filename == "" do
filename = getdir #scene + "\\" + filename
if (not (doesfileexist filename)) or
querybox ("filename: "+filename + "\nexists. Overwrite?") then
(
saveNodes nodeArray filename
true
)
else
false
)

スクリプト:

fn maybe_saveMaxFile filename =
(
if getFilenamePath filename == "" do
filename = getdir #scene + "\\" + filename
if (not (doesfileexist filename)) or
querybox ("filename: "+filename + "\nexists. Overwrite?") then
(
saveMaxFile filename
true
)
else
false
)

上記の関数の使用法:

maybe_saveNodes b "foo.max"
maybe_saveNodes b "foo.max"
maybe_saveMaxFile "foo.max"

関連事項