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

次のシステム グローバルおよびメソッドは、ファイル名およびパスへのアクセス、および3ds Max シーンのロード、保存、合成、読み込み、書き込みに使用します。

システム グローバル:

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

maxFileName 

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

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

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

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

maxFilePath 

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

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

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

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

メソッド:

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

MAX ファイルのロード

<boolean>loadMaxFile <filename_string> [useFileUnits:<boolean>] [quiet:<boolean>] [allowPrompts:<boolean>]
    [missingExtFilesAction: (#logmsg|#logToFile|#abort|<int>)] [missingExtFilesList:<&var array of strings>]
    [missingDLLsAction: (#logmsg|#logToFile|#abort|<int>)] [missingDLLsList:<&var array of strings>]
    [missingXRefsAction:(#logmsg|#logToFile|#abort|<int>)] [missingXRefsList:<&var array of strings>]
    [skipXRefs:<boolean>]

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

useFileUnits パラメータは、ファイルの単位スケールを採用するのか(true の場合)、それとも現在のシステムの単位スケールを採用するのか(false の場合、既定)を指定します。このオプションは、[システム単位設定](System Units Setup)ダイアログ ボックスの[ファイル内のシステム単位を重視](Respect System Units in Files)オプションの設定に関係なく適用されます。useFileUnits:true を使用してファイルをロードすると、3dsmax.ini ファイルのシステム単位設定は変更されません。

quiet: および missing* パラメータの詳細については、「自動モード」を参照してください。

allowPrompts パラメータは、ファイルのロード処理中にダイアログ ボックスを表示するかどうかを指定します。既定は false です。

3ds Max 2023.1 Update の新機能: オプションのパラメータ skipXRefs を使用すると、シーンのロード時にシーンおよびオブジェクトの外部参照を無効にして、ファイルのロード速度を上げることができます。外部参照は、後で参照を選択して更新することでロードできます。

警告:

loadMaxFile() は警告を表示せずに、現在のシーンの内容をファイルの内容に置き換えます。「シーンは修正されました。変更を保存しますか?」というメッセージは、quiet:false を指定した場合でも表示されません。保存が必要な場合にシーンの現在の内容が失われないようにする方法については、このページの checkForSave() および saveMaxFile() を参照してください。

シーン ファイル パスの解決

3ds Max は filename_string で指定されたファイルを次の場所で検索します。

MAX ファイルの合成

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

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

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

<filename_string>

合成するシーン ファイルです。指定した <filename_string> が 3ds Max によって検索される場所の詳細については、上記の「シーン ファイル パスの解決」を参照してください。

<name_array> 

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

#prompt 

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

#select 

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

#noRedraw 

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

#deleteOldDups 

取り込むオブジェクトと同じ名前を持つ既存のシーン オブジェクトを削除します。

#mergeDups 

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

#skipDups 

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

#promptDups 

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

#AutoRenameDups 

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

#promptMtlDups 

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

#useMergedMtlDups 

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

#useSceneMtlDups 

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

#renameMtlDups 

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

#promptReparent 

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

#alwaysReparent 

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

#neverReparent 

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

quiet: および missing* パラメータの詳細については、「自動モード」を参照してください。

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

mergedNodes <&variable>

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

includeFullGroup: <boolean>

true に設定すると、読み込まれたノードがグループに属している場合、そのグループ内のノードもすべて読み込まれます。既定値は false です。

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

<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 の標準の[ファイル保存] (File Save)ダイアログ ボックスを表示して、ユーザが選択したファイル名を返します。ユーザがキャンセルした場合は「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 の標準の[ファイルを開く](File Open)ダイアログ ボックスを表示して、ユーザが選択したファイル名を返します。ユーザがキャンセルした場合は「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:<boolean>] \
  [missingDLLsAction: (#logmsg|#logToFile|#abort|<int>)] [missingDLLsList:<&var array of strings>]

文字列の配列を返します。与えられた 3ds Max ファイルのオブジェクトの名前ごとに 1 つずつです。指定した <filename_string> が 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: および missing* パラメータの詳細については、「自動モード」を参照してください。

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

MAX ファイルの保存

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

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

警告:

saveMaxFile() は、既存のファイルを警告なしに同じ名前で上書きします。後述の CheckForSave() および doesFileExist() も参照してください。

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

3ds Max 2011 以降では、saveAsVersion: を使用して有効な以前のバージョンが指定された場合、シーンは指定された以前のバージョンのファイル形式で保存されます。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 を返します。

MAX ファイルのアーカイブ

<boolean> archiveMAXFile <filename_string> [quiet:<boolean>] [saveAsVersion: <integer>] 
    [missingExtFilesAction: (#logmsg|#logToFile|#abort|<int>)] [missingExtFilesList:<&var array of strings>]

現在のシーン ファイルおよび関連するすべてのテクスチャ マップを ZIP にアーカイブして、指定した文字列をファイル名として付けます3ds Max 2019.1 Update 以降で使用可能です。

quiet が true の場合は、アセットが見つからないときに[アセット ファイルが見つかりません](Missing Asset Files)ダイアログが表示されません。

saveAsVersion パラメータは、保存したアーカイブに対して互換性のある 3ds Max のバージョンを指定します。指定しない場合は、現在の 3ds Max のバージョンが使用されます。

アセットが見つからない場合の動作は、missingExtFilesAction および missingExtFilesList パラメータによって決まります。quiet および missing* パラメータの詳細については、「自動モード」を参照してください。

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

holdMaxFile() 

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

fetchMaxFile [quiet:<boolean>] 
    [missingDLLsAction: (#logmsg|#logToFile|#abort|<int>)] [missingDLLsList:<&var array of strings>]
    [missingXRefsAction:(#logmsg|#logToFile|#abort|<int>)] [missingXRefsList:<&var array of strings>]

3ds Max の[編集] (Edit) > [一時保存を呼び出し] (Fetch)の操作に相当します。quiet および missing* パラメータの詳細については、「自動モード」を参照してください。

MAX ファイルの確認

<boolean>isMaxFile <filename_string> 

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

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

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

指定した <filename_string> が 3ds Max によって検索される場所の詳細については、上記の「シーン ファイル パスの解決」を参照してください。

例:

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 というようにファイル名の拡張子によって決まります。

3ds Max では、シーン ファイルをロードする場合と同じ方法で、指定した <filename_string> を検索します。詳細については、上記の「シーン ファイル パスの解決」を参照してください。

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

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

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

例:

print importerPlugin.classes

結果:

3D_Studio
3D_Studio_Shape
Adobe_Illustrator_Shape
AutoCADImport
FBXIMP
DAEIMP
STL_Import
ATF_Solidworks_importer
Revit_importer
FileLinkAsDwgImporter
ObjImp
Alembic_Import
VrmlImp
ImportTRC
XMLImp2
FltImport
ATF_ProE_importer
ImportHTR
InventorImport
LandXML___DEM_Model_Import
sketchUp
ATF_STEP_importer
SATImport
ATF_IGES_importer
ATF_Alias_importer
ATF_CATIA_V4_importer
ATF_CATIA_V5_importer
ATF_UG_NX_importer
ATF_JT_importer

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

ファイルの書き出し

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

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

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

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

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

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

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

例:

theClasses =exporterPlugin.classes
-->#(3D_StudioExporterPlugin, Adobe_Illustrator, DWG_ExportExporterPlugin, DWG_Export, STL_Export, 
--  Alembic_Export, ACIS_SAT, PhysX_and_APEX_Exporter, FBXEXP, DAEEXP, IGES_Export, OpenFltExport, 
--  ArnoldSceneSourceExport, ObjExp, ExportHTR, AsciiExp, SvfExporter, VRBL_Export, DWF_Exporter)

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

上の例では、配列内で最初に見つかったプラグイン(既定では 3D_StudioExporterPlugin)が書き出しに使用されます。

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

ノードの保存

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

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

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

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

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

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

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

警告:

saveNodes() は、既存のファイルを警告なしに同じ名前で上書きします。後述の CheckForSave() および doesFileExist() を参照してください。

保存の確認

checkForSave() 

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

ユーザが[キャンセル] (Cancel)を選択した場合、この関数は false を返します。ユーザが保存するように選択してシーンが正常に保存された場合、ユーザが[保存しない](Don't Save)を選択した場合、またはシーンを保存する必要がない場合は、true を返します。3ds Max が自動モードで実行されている場合も、true を返します。ユーザが[保存] (Save)を選択した場合は、ファイルが保存されます。

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

警告:

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"