下面的代碼遞歸遍歷C4D中的shader砰粹。 首先遍歷doc中的所有material冠胯,因每個material都是一個shader網(wǎng)絡(luò),要先獲取其第一個shader平项,這是一個GeListNode實例危虱,也是個4D列表羊娃。剩下就是遍歷了。
import c4d, os
############################################################
# 遞歸函數(shù)埃跷,在其中操作shader
############################################################
def shadertree(shader):
# 遍歷 BaseList
while(shader):
# 操作shader蕊玷,這里簡單輸出其名字
print shader.GetName()
# 查看文件名
if shader.GetType() == c4d.Xbitmap:
filename = shader[c4d.BITMAPSHADER_FILENAME]
print filename
# 修改實例的文件名
filename = os.path.basename(filename)
shader[c4d.BITMAPSHADER_FILENAME] = filename
# 檢查是否有子類,遞歸處理
if shader.GetDown():
shadertree(shader.GetDown())
shader = shader.GetNext()
############################################################
# main function
############################################################
def main():
# 獲取第一個material
mat = doc.GetFirstMaterial()
# 遍歷 materials
while(mat):
# 拿第一個shader
# 這是個4D列表
shd = mat.GetFirstShader()
# 用上面的遞歸函數(shù)處理
shadertree(shd)
# 來捌蚊,下一個
mat = mat.GetNext()
if__name__=='__main__':
main()