Изменить атрибут всех камер - PullRequest
0 голосов
/ 06 ноября 2018

ребята. Я пытаюсь выполнить поиск по всем созданным пользователем камерам на сцене и одновременно изменить их атрибуты. Это то, что я получил до сих пор, и это изменяет только один атрибут камеры. Могу я получить совет? Думаю, мне нужно знать, как составить список этих определенных пользователем камер, чтобы я мог менять их все одновременно.

Заранее спасибо.

import maya.cmds as cmds

allCams = cmds.ls(type=('camera'), l=True)
dfCams = [camera for camera in cameras if     cmds.camera(cmds.listRelatives(camera, parent=True)[0],startupCamera=True, q=True)]
myCams = list(set(allCams) - set(dfCams))
cmds.setAttr((myCams[0] + '.nearClipPlane'), 0.01)
cmds.setAttr((myCams[0] + '.farClipPlane'), 1000000)

1 Ответ

0 голосов
/ 06 ноября 2018

простой цикл должен сработать, вот пример со словарем, но вы также можете заархивировать свои атрибуты / значения в список

import maya.cmds as cmds

allCams = cmds.ls(type='camera')
defCam = ['perspShape','topShape', 'sideShape', 'frontShape']
cams = list(set(allCams)-set(defCam))
attributes = {'nearClipPlane':0.01,
              'farClipPlane':1000000}
for c in cams:
    for attrName in attributes.keys():
        cmds.setAttr('{}.{}'.format(c, attrName), attributes[attrName])

Также обратите внимание, что в вашем коде:

allCams = cmds.ls (type = ('camera'), l = True)

выдаст длинные имена против вашего списка. Родственники:

cmds.listRelatives (камера, родитель = True)

, для которого требуется флаг -fullPath, чтобы вернуть длинный путь

В противном случае вы не сможете подрезать ваши сеты. Я бы порекомендовал сделать:

defaultcam = [i for i in allCams if cmds.camera(i, startupCamera=True, q=True)]
fullDefCam = cmds.ls(defaultcam, l=True)
...