You can use symbolic pathnames in the form $<name> anywhere a filename can be supplied to MAXScript.
This support was added in 3ds Max 4 and was largely enhanced in 3ds Max 9.
Any filename you provide to MAXScript can begin with a '$' followed by one of the symbolic directory names below.
The following symbolic names are recognized:
Index | Symbolic Name | Directory |
---|---|---|
1 | $max | Main 3ds Max executable directory |
2 | $maps | First directory in Maps directory config| |3|$scenes|3ds Max Scenes directory| |4|$fonts|Fonts directory| |5|$imports|File Imports directory| |6|$exports|File Exports directory| |7|$sounds|Sounds directory| |8|$matlibs|Material Libraries directory| |9|$scripts|Scripts directory| |10|$startupScripts|Auto-load startup scripts directory| |11|$plugins|First in the Plug-ins directory config |
12 | $plugcfg | Plugin configurations directory |
13 | $images | Images directory |
14 | $ui | User Interface files directory |
15 | $macroScripts | macroScripts in UI directory |
16 | $web | Web downloads directory |
17 | $temp | System temp directory |
18 | $renderPresets | Render presets directory |
19 | $help | Help files directory |
20 | $expressions | Expressions directory |
21 | $previews | Previews directory |
22 | $maxstart | Directory of MAXSTART.MAX |
23 | $vpost | Video post directory |
24 | $drivers | Drivers directory |
25 | $autoback | Auto-backup directory |
26 | $marketDefaults | Market Defaults directory |
27 | $icons | Icons directory |
28 | $maxSysIcons | System icons directory |
29 | $renderOutput | Render output directory |
30 | $animation | Animations directory |
31 | $archives | Archives directory |
32 | $photometrics | Photometric files directory |
33 | $renderAssets | Render Assets directory |
34 | $userScripts | User Scripts directory |
35 | $userMacros | User Macroscripts directory |
36 | $userStartupScripts | User Startup Scripts directory |
37 | $userIcons | User Icons directory |
38 | $maxData | Max Data (Root) directory |
39 | $downloads | Downloads directory |
40 | $proxies | Bitmap Proxies directory |
41 | $assemblies | Assemblies directory |
42 | $hardwareShadersCache | Hardware shaders directory |
43 | $plugcfg_ln | Plugcfg_ln directory |
44 | $ui_ln | UI_LN directory |
45 | $autodeskcloud | Autodesk cloud directory |
46 | $userStartupTemplates | Startup templates directory |
47 | $privateExchangeStoreInstallPath | Private Exchange Store install directory. Note: this is now an alias for $privatePluginPackageInstallPath, but is retained for backwards compatibility. |
48 | $publicExchangeStoreInstallPath | Public Exchange Store install directory. Note: this is now an alias for $publicPluginPackageInstallPath, but is retained for backwards compatibility. |
49 | $systemImage | System scene images directory |
50 | $systemPhotometric | Photometric light definition (.ies) file directory |
51 | $systemSound | System scene sound assets directory |
52 | $pageFile | Temporary page file directory (in 3ds Max 2018.4|Update and later). |
53 | $fluidSimulations | Fluid simulation file cache location (in 3ds Max 2020|Update and later). |
54 | $userSettings | User settings location (in 3ds Max 2020|Update and later). |
55 | $userTools | User settings for 3rd party tools (in 3ds Max 2020|Update and later). |
56 | $privatePluginPackageInstallPath | Install location for private plugin bundle packages (in 3ds Max 2020|Update and later). |
57 | $publicPluginPackageInstallPath | Install location for public plugin bundle packages (in 3ds Max 2020|Update and later). |
58 | $plugindata | Plug-in data location |
59 | $presets | Particle Flow presets location (in 3ds Max 2022 and later). |
Please note that these are similar to the 3ds Max System Directories filetype_names which start with a "#"and are used as arguments to the GetDir() and SetDir() methods.
The following example will open the file "foo.ms" in the current 3ds Max Scripts directory.
EXAMPLE
``` fileIn "$scripts\foo.ms"
```
In 3ds Max 9 and higher , the $maps and $plugins symbolic pathnames can also specify an index. In this case, the indexed directory will be used.
EXAMPLE
``` "$maps[2]\mybitmap.tga"
```
When no index is provided, the first map resp. plugins path will be used.
In 3ds Max 9 and higher, the SymbolicPaths struct provides methods to access existing and define new symbolic paths:
symbolicPaths.numPaths()
Returns the number of symbolic path names. This includes both system and user-defined path names
symbolicPaths.getPathName<index>
Returns the indexed symbolic path name.
EXAMPLE
``` for i =1 to symbolicPaths.numPaths() do format "% : %\n" i (symbolicPaths.getPathName i)
```
symbolicPaths.isPathName <string>
Returns true if the string corresponds to a symbolic path name, false otherwise.
EXAMPLE
``` symbolicPaths.isPathName "\(maps" true symbolicPaths.isPathName "\)map" false
```
symbolicPaths.getPathValue {<index> | <string>}
Returns the path associated with the specified symbolic path name (specified either by index or by name string).
EXAMPLE
``` symbolicPaths.getPathValue 2 "C:\Program Files\Autodesk\3ds Max 2012\maps" symbolicPaths.getPathValue"$maps" "C:\Program Files\Autodesk\3ds Max 2012\maps"
```
symbolicPaths.numUserPaths()
Returns the number of user-defined symbolic path names.
symbolicPaths.getUserPathName <index>
Returns the indexed user-defined symbolic path name.
symbolicPaths.isUserPathName <string>
Returns true if the string corresponds to a user-defined symbolic path name, false otherwise.
symbolicPaths.getUserPathValue {<index> | <string>}
Returns the path associated with the specified user-defined symbolic path name
symbolicPaths.setUserPathValue {<index> | <string>} <filepath>
Sets path associated with the specified user-defined symbolic path name
symbolicPaths.addUserPath <string> <filepath>
Adds user-defined symbolic path name and path
symbolicPaths.removeUserPath {<index> | <string>}
Removes user-defined symbolic path name
symbolicPaths.expandFileName <filename>
Returns expanded file nane
EXAMPLE
``` symbolicPaths.numUserPaths() --check foruser path- none by default 0 symbolicPaths.addUserPath "\(test" "c:\\test" --define new user path OK symbolicPaths.numUserPaths() --check foruser path- there is one! 1 symbolicPaths.isUserPathName "\)test" --is a user symbolic path? true --See if $temp is a user symbolic path. --NOTE that \(temp is aSYSTEMsymbolic path, --but not aUSERsymbolic path: symbolicPaths.isUserPathName "\)temp" false symbolicPaths.getUserPathName 1 --get the name of the first path "\(test" symbolicPaths.getUserPathValue 1 --get the first path "c:\test" symbolicPaths.getUserPathValue "\)test" --get the path by name "c:\test" symbolicPaths.setUserPathValue "\(test" "c:\\another\\path" --change OK symbolicPaths.getUserPathValue "\)test" --see if itchangeg? "c:\another\path" symbolicPaths.expandFileName "\(test\\somefile.txt" --expand a path "c:\another\path\somefile.txt" symbolicPaths.removeUserPath "\)test" --remove the user path OK symbolicPaths.numUserPaths() --there are no user paths left 0
```