MaxScript:一键导出3ds Max模型多维度信息至CSV文件
要用MaxScript编写一个脚本,将3ds Max中的模型信息(如名称、尺寸、位置等)导出为CSV文件格式,可以按照以下步骤进行。这个脚本会遍历场景中的所有对象,并收集所需的信息。 ```maxscript -- 定义一个函数来获取对象的边界框信息 getBoundingBoxInfo (obj) = local box = obj.boundingBox return #(width: box.width, height: box.height, depth: box.depth) -- 定义一个函数来计算对象的体积 calcVolume (boxInfo) = return boxInfo.width * boxInfo.height * boxInfo.depth -- 定义一个函数来获取对象的位置和旋转角度 getPositionAndRotation (obj) = local pos = obj.pos local rot = obj.rot return #(posX: pos.x, posY: pos.y, posZ: pos.z, rotX: rot.x, rotY: rot.y, rotZ: rot.z) -- 定义一个函数来获取对象的面数和面积 getMeshStats (obj) = if classof obj == #mesh then local stats = obj.stats return #(faceCount: stats.faceCount, area: stats.area) else return #(faceCount: 0, area: 0) -- 定义一个函数来获取对象的材质和贴图信息 getMaterialInfo (obj) = local mats = [] if classof obj == #mesh then for mat in obj.materials do mats = append mats #(name: mat.name, mapName: mat.map.fileName) end end return mats -- 主函数:导出CSV文件 exportToCSV () = -- 创建一个表头 local header = "ModelName,GroupName,Length,Width,Height,Volume,Faces,Area,PosX,PosY,PosZ,RotX,RotY,RotZ,MaterialName,MapName\n" -- 打开文件用于写入 local fileName = browseForFile("Save", "Save CSV file", "", "CSV File (*.csv)|*.csv||") if fileName <> "" then local file = open fileName for write as text writeLine file header -- 遍历所有对象 for obj in #($root) do local boxInfo = getBoundingBoxInfo obj local meshStats = getMeshStats obj local posRot = getPositionAndRotation obj local materialInfo = getMaterialInfo obj -- 构建CSV行 local csvRow = obj.name & "," & (if obj.parent.name <> "root" then obj.parent.name else "") & "," & boxInfo.width & "," & boxInfo.height & "," & boxInfo.depth & "," & calcVolume(boxInfo) & "," & meshStats.faceCount & "," & meshStats.area & "," & posRot.posX & "," & posRot.posY & "," & posRot.posZ & "," & posRot.rotX & "," & posRot.rotY & "," & posRot.rotZ & "," for i = 1 to length(materialInfo) do local mat = materialInfo[i] csvRow = csvRow & mat.name & "," & mat.mapName & (if i < length(materialInfo) then "," else "") end -- 写入CSV行 writeLine file csvRow & "\n" end close file infoBox ("Export Complete", "The CSV file has been exported successfully.") end -- 调用主函数 exportToCSV() ``` 说明: 1. getBoundingBoxInfo 函数用于获取对象的边界框信息。 2. calcVolume 函数用于计算对象的体积。 3. getPositionAndRotation 函数用于获取对象的位置和旋转角度。 4. getMeshStats 函数用于获取对象的面数和面积。 5. getMaterialInfo 函数用于获取对象的材质和贴图信息。 6. exportToCSV 函数是主函数,负责导出CSV文件。 这个脚本将会遍历场景中的所有对象,并将相关信息以CSV格式保存到指定的文件中。注意,如果场景中有非网格对象(如灯光或相机),它们的相关信息可能无法完全获取。 ######[AI写代码神器 | 935点数解答 | 2024-10-07 21:35:07]
- 批处理文件:依据参数表.xlsx精准修改文件.txt中p、t、s值(GPT | 811点数解答 | 2024-12-05 12:58:37)412
- 用批处理和Python实现“参数表.xlsx”与“文件.txt”数据匹配及修改(讯飞星火 | 531点数解答 | 2024-12-05 13:20:42)387
- 批处理文件:依据参数表.xlsx精准修改文件.txt特定参数值(阿里通义 | 495点数解答 | 2024-12-05 13:22:26)364
- Python:两种方法读取比赛得分数据,筛选85分以上同学(阿里通义 | 563点数解答 | 2024-12-12 18:07:35)263
- Python 读取 scores.csv 文件:输出数据并筛选 85 分以上同学,代码完善与注意事项揭秘(字节豆包 | 298点数解答 | 2024-12-12 18:15:17)269
- Python 读取 scores.csv 文件:输出全量数据并揪出 85 分以上同学(阿里通义 | 340点数解答 | 2024-12-13 12:36:14)226
- Python:读取班级比赛得分 CSV 文件,筛选 85 分以上同学全攻略 (阿里通义 | 319点数解答 | 2024-12-13 12:54:42)313
- 计算机表格数据结构全解析:从基础概念到 CSV 文件编程排序实现 (字节豆包 | 257点数解答 | 2025-12-08 17:31:17)58
- 代码填空挑战:完成正态分布、随机数生成及数据处理代码(阿里通义 | 506点数解答 | 2025-03-23 14:32:14)343
- 挑战!完成代码填空解锁数据处理奥秘(字节豆包 | 116点数解答 | 2025-03-26 22:22:15)358
- 挑战填空!完成这段 NumPy 代码实现数据生成与保存(DeepSeek | 178点数解答 | 2025-03-26 22:26:30)419
- C++代码详解:输入7数算三式,找出最大并输出(字节豆包 | 819点数解答 | 2025-11-16 19:12:58)95