2013-11-24 32 views
1

我正在嘗試編寫一個腳本,以便在使用Python的Maya中爲模型導入多個緩存文件。到目前爲止,我有以下幾點:使用Python在Maya中導入多個緩存文件

import maya.cmds as cmds 
cache_files_path = 'D:/Project/sfin/work/data/ram/geo' 

latest_look_file = 'D:/Project/chars/ram/look/maya/ram_clean_look_v002_t005.mb' 

# open the latest look file 
cmds.file(latest_look_file, f = True, op = "v=0;", typ = 'mayaBinary', o = True) 

cmds.select(all = True) 

現在我要開始從「cache_files_path」於各物體的導入現有幾何緩存。 Maya2013具有mel腳本'doImportCacheFile.mel',它執行我猜測的任務。但我不能從這裏出發。

+0

該路徑是否包含多對象緩存文件? –

+0

@ hus787 yes在路徑中包含不同對象的文件夾,這些對象又包含緩存文件。 – zingy

回答

1

假設您打開的文件有一個名爲"foo_mesh"mesh,可以使用isinstance(pc.PyNode("foo_mesh"), pc.nt.Mesh進行檢查。並有一個緩存文件爲它命名"foo_mesh_cache.xml"(認爲這是高速緩存元數據)和"foo_mesh_data.mc"

向此高速緩存適用於網格類似於下面的東西應該工作:

import pymel.core as pc 

mesh = "foo_mesh" 
xml = "foo_mesh_cache.xml" 
data = "foo_mesh_data.mc" 

pc.mel.doImportCacheFile(xml, "", [mesh], list()) 

,並找出是否緩存文件已經應用到網格,列出它的歷史記錄,並查看它是否包含類型爲pc.nt.CacheFile的節點。

+0

你能解釋最後一行嗎?並可以使用瑪雅命令而不是pymel來完成?爲什麼使用list()?謝謝 – zingy

+0

使用cmds.cacheFile()怎麼樣? – zingy

+0

緩存文件可以包含多個對象的點緩存,並且該信息保存在通道名稱下(*讀取xml文件*)。因此,如果一個緩存包含多個通道,您必須告訴哪一個應用於哪個網格以防萬一出現多個通道。但是,既然你說過,在這個問題的評論中,緩存是每個對象的,因此這個列表是空的(把所有這些都放在一邊,並且讀取包含'whatI doImportCacheFile'命令的代碼文件)。看起來像你的pymel還沒有修復,故障回覆到'cmd.eval'並提供爲mel字符串。 –