0

目前在我的客户需要参考文件路径以保持 linux 格式的项目中。例如

A.ma , referencing objects from --> //linux/project/scene/B.ma
B.ma , referencing objects from --> //linux/project/scene/C.ma

然而,我们这里的大部分 Maya 许可证都在 Windows 上。我可以运行一个 Python 脚本来转换所有路径 windows 路径并保存文件。例如

Z:\project\scene\B.ma

但是,我正在尝试找出一种方法来做到这一点,而无需转换或更改原始文件......我将尝试解释我正在尝试做的事情。

  • 运行脚本以打开文件。
  • 该脚本检查 linux 格式的参考路径,以及层次结构中的所有子路径。
  • 将所有路径映射到相应的 Windows 格式路径。
  • 使动画师能够正常“保存”文件,而无需运行单独的保存脚本。

这可以用 Python 脚本实现吗?还是我需要一个完全编译的插件才能让它工作?

非常感谢任何建议。


编辑:感谢您的输入。

再澄清一点。这些项目是由一家远程公司为我们设置的,部分要求是我们必须保持原样。它们是绝对路径,我们在这件事上别无选择。

我们匹配 //linux/Fedora 工作站上的支架。相同的驱动器映射到Z:\我们的 Windows 工作站上。我们只有 2 个适用于 Linux 的 Maya 许可证,这就是我尝试这样做的原因。

4

4 回答 4

1

这是一个解决方案。第一步是创建一个dict跟踪 linux/windows 引用的文件(不要忘记re为 regexp 导入模块):

>>> def windows_path(path):
    return path.replace('//linux', 'Z:').replace('/', '\\')

>>> reg = re.compile('(\w+\.ma) , referencing objects from --> (.*)')
>>> d = {}
>>> for line in open('D:\\temp\\Toto.txt'):
    match = reg.match(line)
    if match:
        file_name = match.groups()[0]
        linux_path = match.groups()[1]
        d[file_name] = (linux_path, windows_path(linux_path))


>>> d
{'B.ma': ('//linux/project/scene/C.ma', 'Z:\\project\\scene\\C.ma'),
 'A.ma': ('//linux/project/scene/B.ma', 'Z:\\project\\scene\\B.ma')}

然后你只需要循环这个dict来请求文件保存:

>>> for file_name in d.keys():
    s = raw_input('do you want to save file %s ? ' % file_name)
    if s.lower() in ('y', 'yes'):
        # TODO: save your file thanks to d[file][0] for linux path, 
        # d[file][1] for windows path
        print '-> file %s was saved' % file_name
    else:
        print '-> file %s was not saved' % file_name


do you want to save file B.ma ? n
-> file B.ma was not saved
do you want to save file A.ma ? yes
-> file A.ma was saved
于 2011-02-03T10:40:27.283 回答
0

Many Windows applications will interpret paths with two leading "/"s as UNC paths. I don't know if Maya is one of those, but try it out. If Maya can understand paths like "//servername/share/foo", then all you need to do is set up a SMB server named "linux", and the paths will work as they are. I would guess that this is actually what your client does, since the path "//linux" would not make sense in a Linux-only environment.

于 2011-02-03T11:58:01.667 回答
0

您正在寻找的是dirmap mel 命令。它对您的文件完全没有干扰,因为您只需定义从 linux 路径到 windows 的映射和/或反之亦然。Maya 将在内部应用映射来解析路径,而不在保存文件时更改它们。

要设置 dirmap,您需要运行 MEL 脚本,该脚本会在 Maya 启动时发出相应的命令。UserSetup.mel 可能是放置它的一个地方。

有关更多详细信息,请参阅官方文档 - 此特定链接指向 Maya 2012,该命令在 Maya 7.0 及更早版本中也可用:http: //download.autodesk.com/global/docs/maya2012/en_us/Commands/目录映射.html

于 2011-04-30T15:17:42.720 回答
0

您可以使用环境变量来执行此操作。Maya 将扩展文件路径中存在的环境变量,您可以使用 Maya.env 为每个平台正确设置它们。

于 2011-02-08T07:57:22.433 回答