File Notifications

#filePreOpen:(integer | undefined) 

Sent before a new file is opened.

Calling callbacks.notificationParam() returns an integer value of 2 if a render preset file is being opened, undefined otherwise.

#filePostOpen: (integer |undefined) 

Sent after a new file is opened successfully.

Calling callbacks.notificationParam() returns an integer value of 2 if a render preset file is being opened, undefined otherwise.

#filePreOpenProcess: #(integer, string) 

Sent before the file open process starts. This event is sent immediately after #filePreOpen, and it sends additional information not sent by #filePreOpen.

Calling callbacks.notificationParam() returns an array with two elements:

The first element is 1 if doing a normal file load, 2 if doing an Edit>Fetch .

The second element is the scene file name being loaded.

EXAMPLE:

   callbacks.removeScripts id:#testCallback
   callbacks.addScript #filePreOpenProcess "print (callbacks.notificationParam())" id:#testCallback

PERFORM A FETCH - THE CALLBACK WILL PRINT:

   2
   "C:\Documents and Settings\user\My Documents\3dsmax\autoback\maxhold.mx"
#fileOpenFailed: integer 

Sent after a file open fails.

Calling callbacks.notificationParam() returns an integer indicating the file type, where 0 is a 3ds Max file, and 1 is a material library.

#filePostOpenProcess: #(integer, string) 

Sent after the file open process has finished. This callback is sent immediately after #filePostOpen, and it sends additional information not sent by #filePostOpen.

Calling callbacks.notificationParam() returns a 2 element array:

#filePostOpenProcessFinalized: undefined 

Sent after #filePostOpenProcess is sent and all animatables created by the load process but no longer used are deleted. Available in 3ds Max 2018 and higher.

#filePreSave: string 

Sent before a file is saved.

Calling callbacks.notificationParam() returns a String containing the file name.

#filePostSave: string 

Sent after a file is saved.

Calling callbacks.notificationParam() returns a String containing the file name.

#filePreSaveProcess: #(integer, string) 

Sent before the save process has started.

Calling callbacks.notificationParam() returns a 2 element array:

Element 1 is

1 if doing a normal file save,

2 if doing an Edit>Hold

3 if doing an Autobackup

Element 2 is the scene file name being saved.

EXAMPLE:

Evaluate the following code:

   callbacks.removeScripts id:#testCallback
   callbacks.addScript #filePreSaveProcess "print (callbacks.notificationParam())" id:#testCallback

Save the file to "TestingCallback.max" - the callback will print:

   1
   "C:\Documents and Settings\user\My Documents\3dsmax\scenes\testingcallback.max"

Perform an Edit>Fetch at this point - the callback will print:

   2
   "C:\Documents and Settings\user\My Documents\3dsmax\autoback\maxhold.mx"

Wait fro the Autobackup to kick in - the callback will print:

   3
   "C:\Documents and Settings\user\My Documents\3dsmax\autoback\AutoBackup01.max"
#filePostSaveProcess: #(integer, string) 

Sent after the save process has finished.

Calling callbacks.notificationParam() returns the same 2-element array as #filePreSaveProcess - please see above for details.

#filePreSaveOld: undefined 

Sent before an old version file is saved.

#filePostSaveOld: undefined 

Sent after an old version file is saved.

#filePreMerge: integer 

Sent before a file is merged.

Calling callbacks.notificationParam() returns an integer value of 1 if object or scene Xref merged, undefined otherwise.

#filePostMerge: integer 

Sent after a file is merged successfully.

Calling callbacks.notificationParam() returns an integer value of 1 if object or scene Xref merged, undefined otherwise.

#filePostMerge2: #(integer, integer) 

Sent after a file is merged successfully, right after #filePostMerge.

Calling callbacks.notificationParam() returns an array with two elements, with the first element being the file save version, and the second element the file save as version.

For example, if loading a file saved from 3ds Max 2017, where a Save As Type was set to 3ds Max 2016, the values would be 19000 (MAX_RELEASE_R19) and 18000 (MAX_RELEASE_R189). See the plugapi.h file in the 3ds Max SDK for possible values.

#filePostMerge3: #(string, boolean, integer, integer, boolean) 

Sent after a file is merged successfully, right after #filePostMerge2. Available in 3ds Max 2020.1 Update and higher.

Calling callbacks.notificationParam() returns an array with five elements:

  1. The full path of the file being merged or XRefed
  2. A boolean indicating whether the merge was successful (true) or failed (false)
  3. An integer indicating file save version. See the plugapi.h file in the 3ds Max SDK for possible values.
  4. An integer indicating file save as version. See the plugapi.h file in the 3ds Max SDK for possible values.
  5. A boolean indicating whether the operation was an XRef (true) or merge (false)
Note: This callback notification contains all the information from #filePostMerge and #filePostMerge2, as well as additional information, and should be used as a replacement for those notifications.
#filePostMergeProcess: undefined 

Sent after the merge process has finished.

#filePostMergeProcessFinalized: undefined 

occurs after #filePostMerge2 is sent and all animatables created by merge process but no longer used are deleted. Available in 3ds Max 2018 and higher.

#preImport: undefined 

Sent before a file is imported.

#postImport: filename 

Sent after a file is imported successfully.

Calling callbacks.notificationParam() returns the name of the file being imported. Available in in 3ds Max 2017 and higher.

#importFailed: undefined 

Sent if import fails.

#preExport: undefined 

Sent before a file is exported.

#postExport: filename 

Sent after a file is exported successfully.

Calling callbacks.notificationParam() returns the name of the file being exported. Available in in 3ds Max 2017 and higher.

#exportFailed: undefined 

Sent if export fails.