Symbolic Pathnames
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 direcotory
|
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
|
48
|
$publicExchangeStoreInstallPath
|
Public Exchange Store install directory
|
54
|
$CFD
|
User CFD scene assets directory
|
54
|
$systemImage
|
System scene images directory
|
54
|
$systemPhotometric
|
Photometric light definition (.ies) file directory
|
54
|
$systemSound
|
System sene sound assets directory
|
54
|
$systemCFD
|
System CFD scene assets directory
|
54
|
$pageFile
|
Temporary page file directory (in
3ds Max 2018 Update 4 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.
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.
When no index is provided, the first map resp. plugins path will be used.
SymbolicPaths Struct
In
3ds Max 9 and higher, the SymbolicPaths struct provides methods to access existing and define new symbolic
paths:
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
|