我应该如何让图像平面的形状节点连接到Maya中的相机


def connectedImgPlanes(self,dagNode):
print "dagNode ",dagNode ,type(dagNode)
sourceConnections = cmds.listConnections(dagNode, source = True) or []
if len(sourceConnections) != 0:
lc = sourceConnections[0].split("->")[1]
atribVal=cmds.getAttr(lc+".imageName")
return atribVal
else:
return ""

上面的函数工作并从图像平面的形状节点的 imageName 属性返回带有文件名的路径,但如果顶部相机设置了图像平面,那么上述函数不起作用,在这种情况下我收到错误说 # 错误:第 1 行:索引错误:文件 第 1 行:列出索引超出范围 #由于

newStr=str(sourceConnections[0]).split("->")[1]

然后我尝试了不同的方法来获取图像平面的形状节点并从中返回一个属性,

lc=""
try:
lc=cmds.listRelatives(cmds.listRelatives(dagNode)[0])[0]
except TypeError:
return ""
print lc
atribVal=cmds.getAttr(lc+".imageName")
return atribVal

这个也可以工作,直到我们添加顶部摄像头并且代码开始给出不同类型的错误,说多个对象与名称匹配:imagePlane1 #

请有人帮我获取每个相机的形状节点,如果相机没有设置图像平面,则返回空字符串......

由于imagePlanes(dependNode)不能附加任何shape节点,因此我假设它是您想要的imagePlaneimageName

下面的函数,如果传递了一个camera,将返回附加到它的任何imagePlaneimageName属性。如果传递了transform,将查找与它的任何camera连接,然后返回附加到找到的相机的任何imagePlanesimageName属性。

import maya.cmds as cmds 
def connectedImgPlanes(dagNode):
# if we have camera transform then go to camera shape 
if cmds.nodeType(dagNode) == 'transform':
dagNode = cmds.listRelatives(dagNode, s=True, c=True)[0]
if cmds.nodeType(dagNode) != 'camera': 
cmds.error("%s is not a camera node" %dagNode)
# get all the imageplane nodes connected to image plane
sourceConnections = cmds.listConnections(dagNode + '.imagePlane', source = True, type = 'imagePlane') or []
# collect all the 'imageName(s)' into a list and return it
imageNames = []
for lc in sourceConnections:
atribVal=cmds.getAttr(lc+".imageName")
imageNames.append(atribVal)
return imageNames

最新更新