使用3dsMax中,针对常见的贴图丢失的情况,我这里分享了基本的工具开发思路
-- 收集当前文件中丢失的贴图
LostTextures = for t in (getClassInstances BitmapTexture) where not (doesFileExist t.filename) collect t
-- 打印查看for t in LostTextures do print t.filename
这一步,主要是从贴图路径中,得到贴图文件名,用于后续的查找
-- 从路径获得名称的方法
fn GetTexFileName sFile=
(
-- 引用system.io.path静态类
dnPath = dotnetclass "system.io.path"
-- 获得不带后缀的名称
sNameNoExt = dnPath.GetFileNameWithoutExtension sFile
return sNameNoExt
)
-- 测试调用:
-- 单个文件路径
sTheFile = @"G:\mods\ . . . \Textures\LuxCrypts_SpawningPlatform_Spec.dds"sTexName = GetTexFileName sTheFile
这里分成两步
第一步,收集这个目录下所有的贴图文件
-- 收集一个目录下指定后缀的所有文件
-- 为了方便匹配,这里返回了一个DataPair类型的数组,
-- DataPair.v1为用于匹配的没有后缀的名称,v2为完整的路径
fn GetAllFilesInFolder sFolder sExt=
( local result = #()
local filePaths = getfiles (sFolder + @"\*" + sExt) for f in filePaths do
(
append result (DataPair (GetTexFileName f) (f))
) return result
)
第二步,在收集的DataPair数组里遍历,查找相同名称的
--
-- 在一个目录里,收集所有的贴图
foundedTexs = GetAllFilesInFolder @"E:\MyModels\MyTextures" ".tga"-- 遍历收集到的贴图进行查找for ft in foundedTexs do(
-- 这里的 sTexName是以上从丢失贴图中获得道的没有后缀的贴图文件名 if((tolower sTexName ) == tolower (ft.v1))then
(
-- 查找成功
-- . . .
)
)
需要用到以上的 GetTexFileName 和 GetAllFilesInFolder 两个函数
-- 在一个目录下查找丢失的贴图
fn FindLostTextureInFolder sResearchFolder sExt=
(
local LostTextures = for t in (getClassInstances BitmapTexture) where not (doesFileExist t.filename) collect t
if(LostTextures.count >0)then
(
-- 查找目录下所有的文件
local foundedTexs = GetAllFilesInFolder sResearchFolder sExt
-- 遍历进行比对
for t in LostTextures do
(
-- 只获得不带后缀的贴图名称
local sTexName = GetTexFileName t.filename
-- 遍历收集到的贴图进行查找
for ft in foundedTexs do
(
-- 如果匹配,设置新的路径到bitmapTexture中
if((tolower sTexName) == tolower (ft.v1))then
(
t.filename = ft.v2
)
)
)
)
)
调用例子
FindLostTextureInFolder @"e:\myModels\myTextures" ".tga"
作者:TAZORN
著作权归作者所有
【相关阅读】:
Maxscript_基础_回调函数:http://tk.v5cg.com/help/246.html
Maxscript_基础_材质处理:http://tk.v5cg.com/help/247.html
Maxscript_基础_修改器操作:http://tk.v5cg.com/help/248.html
Maxscript_基础_创建窗口:http://tk.v5cg.com/help/249.html
Maxscript_基础_遍历与递归:http://tk.v5cg.com/help/250.html
Maxscript_与DotNet交互:http://tk.v5cg.com/help/251.html
【上传发布插件】:
编写3DMAX插件到发布上线全流程:http://tk.v5cg.com/help/147.html
代码上传与工具发布:http://tk.v5cg.com/help/99.html
代码发布,部署实例参考:http://tk.v5cg.com/help/140.html
PS【动作库】代码部署指南:http://tk.v5cg.com/help/141.html
CG云盘 - 开发者使用说明:http://tk.v5cg.com/help/34.html