学习用MaxScipt批处理Max文件
学习用MaxScipt批处理Max文件
需求
对几百个.max文件中的指定指定名称的骨骼进行重命名。
解决
考虑到是一次性需求,花了两个钟用maxscript实现了功能,基本逻辑把改名规则做成配置文本,然后一个个加载文件夹中的max档更加配置给节点改名。
为了方便以后使用,又用winform写了个带详细使用说明的界面,这个界面可以编辑配置文件,指定批处理文件夹,最后通过cmd来启动3dsmax执行这个脚本:
MaxScript:
-- by Tongyun Liu
-- 2017-4-27
----------------- define variables -------------------------------
logpath = @"D:\BoneRename.txt"
inipath = @"D:\RenameLog.ini"
batchpath = @"D:\batch_Directories.ini"
outputLogs = #()
inifile = openfile inipath
----------------- define functions -------------------------------
fn fn_RenameAllMax =
(
batchfile = openfile batchpath
while not eof inifile do
(
iniLine = #()
iniLine = filterString (readline inifile) "="
if(iniLine!= undefined) then
(
len = iniLine.count
if(len == 2) then
(
oldName = trimRight iniLine[1] "\t"
newName = trimLeft iniLine[2] "\t"
if(oldName !=undefined) and (oldName !=undefined)and(oldName !=undefined) then
(
bobj = execute("$'"+oldName+"'")
for o in objects
where (classof(o) == biped_object) or (classof(0) == BoneGeometry) do
(
if((bobj != undefined) and (o.name == bobj.name)) then
(
append outputLogs ("\t["+oldName+"]\t\tRenameTo:\t\t["+newName+"]")
bobj.name = newName
)
)
)
)
)
)
return 1
)
--------------------------------- batch rename -------------------------------------
while not eof batchfile do
(
maxpathline = readline batchfile
if(maxpathline != "")and((findstring maxpathline ".max") != undefined) then
(
loadmaxfile maxpathline
append outputLogs ("MaxFileName: "+maxpathline + "\t\t"+localtime)
func_rename = fn_RenameAllMax()
savemaxfile maxpathline clearNeedSaveFlag:true quiet:true
)
)
close inifile
close batchfile
---------------------- output logs --------------------------------------------
append outputLogs ("\n-------------------------------------------------------")
logfile = openfile logpath mode:"a+"
print outputLogs to: logfile
close logfile
shelllaunch "notepad.exe" logpath
quitmax #noPrompt
命令行启动和操作3dsmax
在winform中启动max并执行maxScript的方法:
private void RunCmd()
{
Process process = new Process();
string maxExePath = "3dsmax.exe所在的文件夹路径";
string maxScriptPath = "需要执行maxscript脚本的路径";
process.StartInfo.WorkingDirectory = maxExePath;
process.StartInfo.FileName = "3dsmax.exe"
process.StartInfo.Arguments = " -silent -mip -u MAXScript " + maxScriptPath;
process.Start();
process.WaitForExit();
if(process.HasExited)
{
process.Close();
}
}
学习用MaxScipt批处理Max文件的更多相关文章
- SVN批处理更新文件夹
SVN批处理更新文件夹 "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe" /command:update /path:&quo ...
- Java执行批处理.bat文件(有问题???求高手帮忙解答!!!)
Java执行批处理.bat文件(有问题???求高手帮忙解答!!!) 在项目开发中常常都会遇到需要在代码中调用批处理bat脚本,把自己在项目中遇到过的总结下 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(6):实际项目中常用命令使用记录
1.检测集群是否健康. curl -XGET 'localhost:9200/_cat/health?v' #后面加一个v表示让输出内容表格显示表头 绿色表示一切正常,黄色表示所有的数据可用但是部分副 ...
- Unity3D导入MAX文件的一些问题(zz)
1.轴向偏转 MAX模型导入Unity3D后,X轴会自动偏转-90度.是因为Unity3D采用的是左手坐标系,而3DMax采用的是右手坐标系.无奈啊,这是很多游戏引擎跟Max结合后都会产生的问题.兼容 ...
- Asp.Net Core 轻松学-一行代码搞定文件上传 JSONHelper
Asp.Net Core 轻松学-一行代码搞定文件上传 前言 在 Web 应用程序开发过程中,总是无法避免涉及到文件上传,这次我们来聊一聊怎么去实现一个简单方便可复用文件上传功能:通过创建 ...
- 学习用5W1H来管理自己的项目/工作
学习用5W1H来管理自己的项目/工作 最近开始需要系统化的思维模型,这只是一个开始,一下用脑图的形式来简介5W1H的具体内容: 先写xmind思维树的文本导出,后面附上图片.^ _ ^ 5W1H ...
- 将bat批处理命令文件固定到任务栏
将bat批处理命令文件固定到任务栏第一种方法:使用链接工具http://www.xstui.com/read/3451.在任务栏点击右键,移动到工具栏,勾选链接工具2.你会在通知栏左侧看到链接字样,将 ...
- 自导自演的面试现场,趣学MySQL的10种文件
导读 Hi,大家好!我是白日梦!本文是MySQL专题的第 24 篇. 今天我要跟你分享的MySQL话题是:"自导自演的数据库面试现场--谈谈MySQL的10种文件" 换一种写作风格 ...
- window批处理——bat文件的编写
BAT 批处理脚本 教程 第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命 ...
随机推荐
- tomcat解析
tomat是一个servlet容器,来处理http请求.在平时的使用中我们都会再浏览器中输入http地址来访问服务资源,比如格式http://host[":"port][abs_p ...
- 一点一点看JDK源码(四)java.util.ArrayList 中篇
一点一点看JDK源码(四)java.util.ArrayList 中篇 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 在前篇中 ...
- Knowledge Point 20180305 Java程序员详述编码Unicode
Unicode Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设 ...
- 关于spring配置文件的头部编写
//普通spring配置文件模板1 <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns: ...
- iOS之改变UIAlertViewController字体的颜色
NSString *message = @"请确认信息是否正确?"; NSString *title = @"提示"; UIAlertController *a ...
- js内部事件机制--单线程原理
原文地址:https://www.xingkongbj.com/blog/js/event-loop.html http://www.haorooms.com/post/js_xiancheng ht ...
- [].slice.call的理解
首先要说明[].slice.call()与Array.prototype.slice.call() 有什么区别? [].slice === Array.prototype.slice true []为 ...
- margin中的bug解决方法
margin bug问题 : 当做子元素中使用margin-top: 50px;父子元素都会跑出50px, 解决方法: 在父元素中使用下面三种任意一种都可以. 方法一:给父元素加边框 border: ...
- 30行代码实现js原生三级联动菜单
var oneArr=[['00','成都'],['01','绵阳'],['02','南充']] var towArr={ '00':[['000','武侯区'],['002','锦江区']], '0 ...
- 大数据学习--day05(嵌套循环、方法、递归)
嵌套循环.方法.递归 图形打印 public static void main(String[]arg) { /** * * * * * * */ // 3 2 1 0 // 1 3 5 for(in ...