一、获取当前max文件的路径
获取当前max文件的路径 : GetDir #目录里的文件夹名 + “/文件名字.文件格式”
举例:
preview_name = (getDir #preview)+"/quickpreview.avi"
定义预览AVI文件的输出路径。使用getDir函数,可以访问3ds Max ' Customize>Configure Paths '中指定的当前预览路径。我们将文件名添加到用斜杠分隔的路径中。(我们也可以使用双反斜杠“\\”作为目录分隔符)。结果路径将存储在名为preview_name的用户变量中。
举例:
iconBmp = bitmap 16 15 iconBmp.filename = getDir #image +"/_temp.bmp" --输出"C:\Users\hzgedanfeng\Documents\3dsMax\sceneassets\images/_temp.bmp"
save iconBmp close iconBmp display iconBmp --显示图片
max程序的路径:"C:\Program Files\Autodesk\3ds Max 2017\\3dsmax.exe"
GetFileSize (getDir #maxRoot + "\\3dsmax.exe")
------------------------------------------------------
二、创建文件 CreateFile
createFile <filename_string> [encoding:{ <#current> | <#English> | <#German> | <#French> | <#Japanese> | <#Korean> | <#Chinese> | <#utf8> | <#utf16LE> | <#utf16BE> | <int codepage> } ] \ [writeBOM:<bool>]
createFile
f = createFile "lock.tmp" format "%" hardwareLockID to:f close f encryptFile "lock.tmp" "lock.dat" 123 deleteFile "lock.tmp"
三、打开文件openFile
openFile
openFile <filename_string> [mode:<mode_string>] [encoding:{ <#current> | <#English> | <#German> | <#French> | <#Japanese> | <#Korean> | \ <#Chinese> | <#utf8> | <#utf16LE> | <#utf16BE> | <int codepage> } ] \ [writeBOM:<bool>]
openEncryptedFile
openEncryptedFile <filename> <key> [encoding:{ <#current> | <#English> | <#German> | <#French> | <#Japanese> | <#Korean> |\ <#Chinese> | <#utf8> | <#utf16LE> | <#utf16BE> | <int codepage> } ] \ [writeBOM:<bool>]
getOpenFileName
getOpenFileName [ caption:<title> ] \ [ filename:<seed_filename_string> ] \ [ types:<description1>|<pattern1>|<description2>|<pattern2>|...| ] \ [ historyCategory:<string> ] getSaveFileName [ caption:<title> ] \ [ filename:<seed_filename_string> ] \ [ types:<description1>|<pattern1>|<description2>|<pattern2>|...| ] \ [ historyCategory:<string> ]
两个函数都返回一个完全指定的文件路径名,如下图:

四、读取文件
readLine <filestream>读取下一行,作为字符串返回。
readChar <filestream>读取下一个字符,作为字符串返回。
s=stringstream "random 0. 1.;random red blue" readvalue s -- 读取并计算第一个值
readvalue s -- 读取并计算第二个值
seek s 0 -- 位于stringstream的开始位置
readexpr s -- 阅读并计算第一个表达式
readexpr s -- 阅读并计算第二个表达式
seek s 0 -- 位于stringstream的开始位置
execute s -- 计算所有表达式
输出显示:
StringStream: "random 0. 1.;random red blue" random() -- result line 2 (evaluated "random")
0.0 -- result line 3 (evaluated "0.")
OK -- result line 4
0.448042 -- result line 5 (evaluated "random 0. 1. ")
(color 86.476 0 163.24) -- result line 6 (evaluated "random red blue")
OK -- result line 7
(color 30.2417 0 143.636) -- result line 8 (evaluated all expressions,returns result of last expression)
display 图片文件
readValue
txt = "#([-2.93967e-07,0.977072,-0.212907], [-0.37391,0.902697,-0.212907], [-0.690895,0.690895,-0.212907])" a = "E://test.txt" f = (createFile a) format txt to:f --写入信息 --比如format "value pos:%\n" $.pos to:f
close f --这里很关键
if f != undefined then(o = openfile a) --先判断文件是否能正常打开
readValue o --value只能读一个值,也可以用readLine o 读取一行
五、关闭文件
close <filestream> 刷新内存缓冲区并关闭文件。
free <filestream>释放filestream值使用的内存,而无需等待垃圾收集。
六、删除文件
testfile = (GetDir #export + "\\test.txt") --输出"C:\Users\hzgedanfeng\Documents\3dsMax\export\test.txt"
aa = createfile testfile --输出<File:C:\Users\hzgedanfeng\Documents\3dsMax\export\test.txt>
close aa --输出OK
deletefile testfile --输出true
--------------------------------------------------------
七、存储数据
format
将值格式化为指定的文件流。
format <fmt_string> { <value> } to:<filestream>
append
<string>append <string1> <string2>
将string2追加到string1。在适当的位置对string1进行操作,并返回string1作为结果。
--由于此方法对string1进行操作,在运行以下代码段后,s1和s2将继续指向相同的字符串值:
s1 = "aa" s2 = s1 append s1 "bb" s1-- returns "aabb"
s2-- returns "aabb"and not "aa"
举例:创建一个空数组array,然后将需要的数值append进去
aa= #() --输出#()
bb= $.pos --输出[-83.4442,0,0]
append aa bb --输出#([-83.4442,0,0])
aa --输出#([-83.4442,0,0])
aa[1] --输出[-83.4442,0,0]
通过打开窗口打开文件并读取:
in_name = getOpenFileName() in_file = openFile in_name num_verts = readValue in_file