0

デフォルトの「パースペクティブ、トップ、フロント、サイド」カメラを除く、Maya シーン内のすべてのカメラを収集するにはどうすればよいですか?

ユーザーが作成したカメラのみを収集したい。

cameras = cmds.ls(type=('camera'), l=True) or []
print cameras

listRelatives何らかの理由で行う必要がありますか? 最終的には、各カメラのワールド マトリックスを印刷したいだけです。

4

5 に答える 5

3

デフォルトのカメラを除外するにstartupCameraは、cmds.camera. 説明するコード (コメント付き) を次に示します。

ピメル版

# Let's use Pymel for fun
import pymel.core as pm

# Get all cameras first
cameras = pm.ls(type=('camera'), l=True)

# Let's filter all startup / default cameras
startup_cameras = [camera for camera in cameras if pm.camera(camera.parent(0), startupCamera=True, q=True)]

# non-default cameras are easy to find now. Please note that these are all PyNodes
non_startup_cameras_pynodes = list(set(cameras) - set(startup_cameras))

# Let's get their respective transform names, just in-case
non_startup_cameras_transform_pynodes = map(lambda x: x.parent(0), non_startup_cameras_pynodes)

# Now we can have a non-PyNode, regular string names list of them
non_startup_cameras = map(str, non_startup_cameras_pynodes)
non_startup_cameras_transforms = map(str, non_startup_cameras_transform_pynodes)

cmds バージョン

import maya.cmds as cmds

# Get all cameras first
cameras = cmds.ls(type=('camera'), l=True)

# Let's filter all startup / default cameras
startup_cameras = [camera for camera in cameras if cmds.camera(cmds.listRelatives(camera, parent=True)[0], startupCamera=True, q=True)]

# non-default cameras are easy to find now.
non_startup_cameras = list(set(cameras) - set(startup_cameras))

# Let's get their respective transform names, just in-case
non_startup_cameras_transforms = map(lambda x: cmds.listRelatives(x, parent=True)[0], non_startup_cameras)

さらに読む: http://ewertb.soundlinker.com/mel/mel.082.php

于 2016-11-30T07:12:11.103 に答える
1

誰かがこれに出くわした場合に備えて、いくつかの追加のユースケースをカバーするいくつかの簡単な方法を次に示します。

  • グループ/ネストされたカメラ内のカメラが含まれます。
  • 選択範囲がシェイプかトランスフォームかに関係なく機能します
  • 形状の代わりに変換を返すためのオプションの kwarg。

import maya.cmds as cmds

def all_user_cameras(return_transforms=False):
    # Get all user created / non-startup cameras in the scene
    all_user_cameras = [c for c in cmds.ls(type='camera') if not cmds.camera(c, q=True, sc=True)]
    if return_transforms:
        return [cmds.listRelatives(c, p=True)[0] for c in all_user_cameras]
    return all_user_cameras

def all_selected_user_cameras(check_nested=True, return_transforms=False):
    # Get the user created / non-startup cameras from the selection, check_nested looks inside groups when set to True
    selected_cameras = cmds.ls(sl=True, type='camera')
    selected_camera_from_shapes = cmds.listRelatives(cmds.ls(sl=True), ad=check_nested, c=True, type='camera')
    if selected_camera_from_shapes:
        selected_cameras.extend(selected_camera_from_shapes)
    if return_transforms:
        return [cmds.listRelatives(c, p=True)[0] for c in selected_cameras]
    return selected_cameras
于 2019-04-17T02:17:00.497 に答える
0
cameras = cmds.ls(type='camera') or []
exclude = ['persp', 'top', 'front', 'side']

cameras = list(set(cameras)-set(exclude))
于 2016-11-29T23:44:46.787 に答える
0

シーン内のすべてのカメラを通過し、変換 ws マトリックスを出力します。

for cam in cmds.listRelatives(cmds.ls(type="camera"), p=True):
    if cmds.objectType(cam, isType='transform'): # True
       print cam, cmds.xform(cam, q=True, ws=True, matrix=True)

front [1.0, 0.0, 0.0, 0.0....
persp [0.707106781186547....
shot_cam [0.9999999999999997, 0.0, .....
side [2.220446049250313e-16, 0.0 .....
top [1.0, 0.0, 0.0, 0.0, 0.0......

相対接続なしで試してみましょう。

for cam in cmds.ls(type="camera"):
    print cmds.objectType(cam, isAType='transform')  # False
    print cam, cmds.xform(cam, q=True, ws=True, matrix=True)

RuntimeError :「xform」コマンドに有効なオブジェクトが指定されていません

于 2016-12-01T09:06:41.973 に答える