工具方案_Max文件丢失贴图查找
  • 使用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

著作权归作者所有




【相关阅读】:


【上传发布插件】: