Преобразование / сопоставление ссылочного пути Linux без изменения файла? - PullRequest
0 голосов
/ 03 февраля 2011

В настоящее время в проекте, к которому моему клиенту нужен путь к файлу ссылки остаться в формате 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? Или мне понадобится полностью скомпилированный плагин, чтобы заставить это работать?

Любое предложение приветствуется.


edit: Спасибо за ваш вклад.

Еще немного уточнений. Проекты были созданы для нас удаленной компанией, и одним из требований является то, что мы должны идти по пути, как есть. Они идут как абсолютный путь, и у нас нет выбора в этом вопросе.

Мы соответствуем креплению //linux/ на наших рабочих станциях Fedora. Этот же диск отображается на Z:\ на наших рабочих станциях с Windows. У нас есть только 2 лицензии Maya для Linux, поэтому я пытаюсь это сделать.

Ответы [ 4 ]

1 голос
/ 03 февраля 2011

Вот решение. Первый шаг - создать dict, который отслеживает ссылки linux / windows (не забудьте импортировать модуль re для регулярного выражения):

>>> 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
0 голосов
/ 30 апреля 2011

Вам нужна команда 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/dirmap.html

0 голосов
/ 08 февраля 2011

Вы можете использовать переменные окружения, чтобы сделать это. Maya расширит переменные среды, присутствующие в пути к файлу, вы можете использовать Maya.env для их правильной настройки для каждой платформы.

0 голосов
/ 03 февраля 2011

Многие приложения Windows будут интерпретировать пути с двумя ведущими "/" как UNC-пути.Я не знаю, майя ли это, но попробуй.Если Maya может понимать такие пути, как "// имя_сервера / share / foo", то все, что вам нужно сделать, это настроить SMB-сервер с именем "linux", и пути будут работать так, как они есть.Я предполагаю, что это именно то, что делает ваш клиент, так как путь "// linux" не имеет смысла в среде только для Linux.

...