Maya文件打不开或者打开文件非常慢怎么办?这里有小妙招(机智) 您所在的位置:网站首页 maya无响应怎么办怎么保存 Maya文件打不开或者打开文件非常慢怎么办?这里有小妙招(机智)

Maya文件打不开或者打开文件非常慢怎么办?这里有小妙招(机智)

2024-07-05 15:45| 来源: 网络整理| 查看: 265

# -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- # -*- coding=utf-8 -*- # ========================================== # author: Ruben # mail: [email protected] # time: 2019/5/10 # ========================================== import codecs # --*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--* def checkMayaAsciiFile(source_file, target_file, log_file): """ 1. 用于检查 Maya Ascii 文件打开崩溃 2. - - - - - - - - - - - - - -耗时 Args: source_file: ma 文件 target_file: 修改后的文件 log_file: logging Returns: none """ # # 记录打不开的ma文件是从哪一行崩溃的 # __startMel = '''python("logFile='%s';ff = open(logFile,'w');ff.write(' ');ff.close();");''' % log_file # __proc = '''python("ff = open(logFile,'a');ff.write('%s - {0}\\\\n'.format(comp_time));ff.close();");\n''' # __endMel = "" # 记录打开文件时的耗时信息 __startMel = '''python("from datetime import datetime;import time;line_time=datetime.now();time.sleep(0.002);threshold_time=datetime.now() - line_time;start_time=line_time;logging=list();logFile='%s'");''' % log_file __proc = '''python("comp_time = datetime.now() - line_time;logging.append('%s - '+ str(comp_time)) if comp_time > threshold_time else None;line_time = datetime.now();");\n''' __endMel = '''python("logging.append('\\\\n\\\\nStart Time - '+ str(start_time) + '\\\\nEnd Time - '+ str(line_time) + '\\\\nTotal Time - ' + str(line_time - start_time));ff = open(logFile,'w');[ff.write(line+'\\\\n') for line in logging];ff.close();");''' with codecs.open(source_file, "r", "gbk") as f: aLines = f.readlines() fileter = ("select", "connectAttr", "dataStructure", "createNode", "requires", "currentUnit") # other relationship fileInfo rule = 1 for num, line in enumerate(aLines): line_add = "".join([aLines[num - 1][:-1], __proc % str(num)]) if rule: # 文件开头的 file 每一行都加 mel if __startMel: # 文件开头结尾初始化命令 aLines[num] = __startMel + line if __endMel: aLines[num - 1] = __endMel + aLines[num - 1] __startMel = 0 continue if "file" in line: # 可能有的设置里会有file字符串,所以这里要独立规则 if ";\n" not in aLines[num - 1]: continue aLines[num - 1] = line_add if "requires" in line: # requires 之后改变规则 rule = 0 # 在 fileter 参数里的,对它的前一行添加 mel # setAttr 用的是 .attr 的方式,在它之后加 mel 会影响下一个 setAttr 所以这里添加这个过滤 for _ in fileter: if _ in line: if ";\n" in aLines[num - 1]: aLines[num - 1] = line_add with codecs.open(target_file, "w", "gbk") as ff: for lines in aLines: ff.write(lines) if __name__ == '__main__': srcFile = r"D:\Ruben\aaa.ma" srcFile = srcFile.replace("\\", "/") sourceFile = srcFile targetFile = srcFile[:-3] + "_v01.ma" logFile = srcFile[:-3] + "_v01.txt" # print(sourceFile, targetFile, logFile) checkMayaAsciiFile(sourceFile, targetFile, logFile)

使用方法:传入一份 Maya Ascii 文件,生成一个修改过的文件,从 Maya 里打开这个文件就可以看到 log 文件要是 Maya Binary 格式的话那就没招了

2021.10.25更新

终于有小伙伴评论啦,我还以为大家都看的懂,在此更新一下这个方法的原理,有疑问可以找我讨论!!!

这里提供的的方法只适用于TD排查错误,如果没有TD可以联系我远程协助(尽我所能) Maya打不开文件的原因有很多,以后我再出个整理吧

原理 这段代码的作用是在ma文件的代码后边添加一句额外的代码(记录当前代码位置) 从Maya中开文件就会执行这些代码,输出代码位置到log文件 打开log找到最后一行数字,这就是ma文件打不开执行中断的地方,如果没有中断,就是最后一行,那**此方法不适用**,请翻阅其他文章 从这里看一下上下文,再去找文件打不开的其他原因 ma 和 mb 文件的区别 ma可以用文本编辑器打开直接看到代码 mb是压缩之后的文件,无法直接看到内容 文本编辑器 Notpad++ 轻量化的文本编辑器,缺点是打不开大文件,超过300MB打开就有些困难 EmEditor 这个可以打开大文件,很方便


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有