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 スクリプトを実行できます。例えば

Z:\project\scene\B.ma

ただし、元のファイルを変換または変更せずにこれを行う方法を見つけようとしています....私がやろうとしていることを説明しようとします。

  • スクリプトを実行してファイルを開きます。
  • スクリプトは、Linux 形式の参照パスと、階層の下位にあるすべての子パスをチェックします。
  • すべてのパスを適切な Windows 形式のパスにマップします。
  • 別の保存スクリプトを実行せずに、アニメーターがファイルを通常どおり「保存」できるようにします。

Pythonスクリプトでこれを達成することは可能ですか? または、これを機能させるには、完全にコンパイルされたプラグインが必要ですか?

どんな提案でも大歓迎です。


編集:ご意見ありがとうございます。

もう少し明確にします。プロジェクトは遠隔地の会社によって設定されたものであり、要件の一部として、パスをそのままにしておく必要があります。それらは絶対パスとして来ており、その点で選択の余地はありません。

//linux/Fedora ワークステーションのマウントと一致し ます。同じドライブがZ:\Windows ワークステーションにマップされています。Linux 向けの Maya ライセンスは 2 つしかないため、これを実行しようとしています。

4

4 に答える 4

1

これが解決策です。最初のステップはdict、linux/windows 参照を追跡する を作成することです ( reregexp のモジュールをインポートすることを忘れないでください):

>>> 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

探しているのはdirmapmel コマンドです。LinuxパスからWindowsへのマッピング、およびその逆のマッピングを定義するだけなので、ファイルにまったく影響を与えません。Mayaは、ファイルを保存するときにパスを変更せずに、パスを解決するために内部的にマッピングを適用します。

dirmapを設定するには、mayaの起動時にそれぞれのコマンドを発行するMELスクリプトを実行する必要があります。UserSetup.melはそれを置くための1つの場所である可能性があります。

詳細については、公式ドキュメントを参照してください。この特定のリンクはmaya 2012を指していますが、コマンドはMaya 7.0以前でも使用できます:http: //download.autodesk.com/global/docs/maya2012/en_us/Commands/ dirmap.html

于 2011-04-30T15:17:42.720 に答える
0

多くの Windows アプリケーションは、先頭に「/」が 2 つあるパスを UNC パスとして解釈します。Maya がその 1 つであるかどうかはわかりませんが、試してみてください。Maya が「//servername/share/foo」のようなパスを理解できる場合は、「linux」という名前の SMB サーバーをセットアップするだけで、パスはそのまま機能します。パス「//linux」はLinuxのみの環境では意味がないため、これは実際にクライアントが行うことだと思います。

于 2011-02-03T11:58:01.667 に答える
0

これを行うには、環境変数を使用できます。Maya は、ファイル パスに存在する環境変数を展開します。Maya.env を使用して、プラットフォームごとに適切に設定できます。

于 2011-02-08T07:57:22.433 に答える