0
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 属性からファイル名のパスを返しますが、上部のカメラにイメージプレーンが設定されている場合、上記の関数は機能しません。その場合、# Error: line 1: IndexError:というエラーが発生します。ファイル行 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 #

各カメラの形状ノードを取得し、カメラにイメージプレーンが設定されていない場合は空の文字列を返すのを手伝ってください...

4

1 に答える 1

0

( dependNode imagePlanes) にはノードを関連付けることができないため、必要なの属性shapeであると想定しています。imageNameimagePlane

次の関数は、 が渡された場合、それにアタッチされている属性をcamera返します。aが渡されると、それへの接続が検索され、見つかったカメラに接続されている属性が返されます。imageNameimagePlanetransformcameraimageNameimagePlanes

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
于 2012-10-21T21:19:08.710 に答える