如何收集Maya场景中的所有摄像机,不包括默认视角,顶部,正面,侧面'摄像机?
我只想收集用户创建的相机。
Ethernet.begin(mac);
我是否因任何原因需要cameras = cmds.ls(type=('camera'), l=True) or []
print cameras
?我最终只想打印每个相机的世界矩阵。
答案 0 :(得分: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)
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)
答案 1 :(得分:0)
您可能需要依赖listCamera命令,您只能列出persp camera或其他命令。例如:
perspCameras = cmds.listCameras(p = True)
答案 2 :(得分:0)
cameras = cmds.ls(type='camera') or []
exclude = ['persp', 'top', 'front', 'side']
cameras = list(set(cameras)-set(exclude))
答案 3 :(得分: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'命令提供有效对象
答案 4 :(得分:0)
In case anyone stumbles upon this, here are some easy methods that cover a few extra use cases:
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