对文件夹中的多个对象重复执行同一任务



我不知道如何编写maxscript如何逐个调用文件夹中的多个对象,将它们移动到指定的坐标,然后再次将它们保存到所需的文件夹中。如果你能告诉我怎么做,我将不胜感激。

每个.max文件都需要一个文件路径数组(列表(。您可以在脚本中手动键入,也可以使用maxscript函数生成此列表,如下所示。

手动键入如下列表:

theFile = #("c:filePathfilename1.max", "c:filePathfilename2.max", etc)

您可以使用此功能查找给定文件夹中的所有文件类型:

fn getFilesRecursive root pattern =
(
dir_array = GetDirectories (root+"/*")
for d in dir_array do
(
join dir_array (GetDirectories (d+"/*"))
)

append dir_array (root + "/")       
theFileList = #()
for f in dir_array do
(
join theFileList (getFiles (f + pattern))
)

theFileList 
)

getFilesRecursive函数接受两个变量作为输入;根和模式。它会搜索你给它的根文件夹中的所有子文件夹。所以在脚本的其他地方,你会运行这样的函数:

theFiles = getFilesRecursive @"c:pathtoyourFolder"  "*.max"

这会将.max文件的数组存储在变量files中。请确保包含@符号以使路径成为文字,否则反斜杠将导致问题。

现在您已经有了一个文件列表,您可以使用loadMaxFile和saveMaxFile函数以及用于在它们之间移动对象的代码来循环它们。

for f in theFiles do
(
loadMaxFile f useFileUnits:false quiet:true
-- move the objects to 0,0,0
for obj in objects where classof obj == geometryclass do (
obj.position = [0,0,0]
)
saveMaxFile f clearNeedSaveFlag:true quiet:true saveAsVersion:2020
)

查看函数的Maxscript帮助文档,loadMaxFile和saveMaxFile,了解选项。在我上面的代码中,我告诉Max忽略文件中的单位,这样它就不会在这个过程中切换我的系统单位。此外,它将"安静模式"设置为true,以便尝试抑制打开文件过程中可能弹出的任何对话框。如果您在混合版本环境中工作,saveAsVersion使您有机会保存回以前版本的Max。

最新更新