更改所有相机属性

Change all cameras attribute

伙计们。 我想做的是搜索场景中所有用户创建的相机并同时更改它们的属性。这是我到目前为止得到的,这只会改变一个相机的属性。我能得到一些建议吗?我想我需要知道如何列出这个定义的用户创建的相机,以便我可以同时更改所有这些相机。

提前致谢。

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)

一个简单的循环就可以解决问题,这里是一个字典示例,但您也可以将 attrs/values 压缩到列表中

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)

将根据您的 listRelatives 提供长名称:

cmds.listRelatives(camera, parent=True)

需要标志 -fullPath 到 return 长路径

否则您将无法减免您的布景。我建议这样做:

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