The File Properties can be accessed in MAXScript using the methods described in this topic.
The File Properties are organized into three sets. These sets correspond to the three pages in the Main Menu > File > File Properties dialog:
#summary
This set contains the Title, Subject, Author, Keywords, Comments fields from the Summary page.
#contents
This set contains the Manager, Company, Category and an array of all headers from the Contents page like General, Mesh Totals etc. Note that the Contents page contents are only update when the file is saved. You can perform a max hold
to perform a scene hold, which causes the file to be saved and the Contents page contents to be updated.
#custom
This set contains all the fields from the Custom page.
The following methods are used to access the above sets. <set_name>
can be any of the values from above.
fileProperties.getNumProperties <set_name>
Returns the number of properties in the given set.
FOR EXAMPLE:
numProps=fileProperties.getNumProperties #summary
fileProperties.getPropertyName <set_name> <index>
Returns as a string the property name of the given index. The index is 1-based.
FOR EXAMPLE:
nameProp=fileProperties.getPropertyName #summary 1
fileProperties.getPropertyValue <set_name> <index>
Returns the property value of given index. The value type can be one of the following types of values currently supported by 3ds Max in the File Properties dialog. The values in bracket are the MAXScript equivalent value type.
Property Value Types:
Text [String]
Date [String] - contains the date eg:"03/23/99"
Number [Integer or Float based on actual value]
Yes or No [Boolean]
Headers [Array of strings]
Headers are items like General, Mesh Totals, etc. that appear in contents page.
FOR EXAMPLE:
an array of headers from contents page obtained using:
fileproperties.getPropertyValue #contents 1
will return
#("General", "Mesh Totals",...)
fileProperties.getItems <header_string>
Returns an array of strings containing all the items under the given header.
FOR EXAMPLE:
an array of headers from contents page obtained using:
fileProperties.getItems "Mesh Totals"
might return
#("Vertices: 488", "Faces: 968")
fileProperties.findProperty <set_name> <prop_name_string>
Given the set name and property name string, will return the index of the property if found, 0 if not found.
FOR EXAMPLE:
fileProperties.findProperty #custom "BoolVal"
fileProperties.addProperty <set_name> <prop_name_string> <prop_value> [#date]
Adds a new property with the property name and property value to the specified set.
The property values can be any of the types previously described except an Array as you cannot add anything to contents page.
If string containing a date is passed then the optional #date
argument has to be passed for it to be added as a date value.
Adding to an existing property name will replace the existing value and act as a setter function - this is why there is no fileProperties.setProperty()
method.
FOR EXAMPLE:
fileProperties.addProperty #custom "DateVal" "03/23/99" #date
will add a date property named
DateVal
to the custom page.
fileProperties.deleteProperty <set_name> <prop_name_string>
Delete the property indicated by <prop_name_string>
in the specified set.
Following is an example of printing all the File Properties in an hierarchical fashion for the current scene.
EXAMPLE:
-- Add some properties fileProperties.addProperty #summary "Title" "H2G2" fileProperties.addProperty #summary "Subject" "Earth" fileProperties.addProperty #summary "Author" "Ford Prefect" fileProperties.addProperty #contents "Manager" "Zarniwoop" fileProperties.addProperty #contents "Company" "Megadodo Publishing" fileProperties.addProperty #contents "Category" "Mostly Harmless" fileProperties.addProperty #custom "IntVal" 42 fileProperties.addProperty #custom "FloatVal" 1.234 fileProperties.addProperty #custom "BoolVal" true fileProperties.addProperty #custom "DateVal" "05/11/2001" #date -- -- Perform a scene hold to update the Contents set. max hold -- -- Get all properties pages = #( #summary, #contents, #custom) for pg in pages do ( format "--- % ---\n" (pg as string) for i=1 to (fileProperties.getNumProperties pg) do ( local pname = (fileProperties.getPropertyName pg i) local pval = (fileProperties.getPropertyValue pg i) format "\t% : " pname if (pname =="Headers") then ( format "\n" for hdr in pval do ( format "\t\t%\n" hdr local docs = fileProperties.getItems hdr if docs != undefined then for d in docs do format "\t\t\t%\n"d ) ) else format " %\n" pval ) )