关于Maya中Python字典的两个问题

时间:2018-01-24 22:23:03

标签: python dictionary scripting maya

感谢您花点时间阅读本文!所以,我的第一个问题是我试图创建一个函数" selectionData()",以获得一个对象的翻译,旋转和缩放值,然后将它们返回为一本字典,但发现自己有点挣扎。使用下面列出的代码,我不断得到的是对象的名称。如何修改它以使其翻译,旋转和缩放值作为字典返回?

我的第二个问题是我正在尝试创建一个函数," setData(data)",它将上述使用selectionData()构建的字典作为输入,并恢复数据。字典到选定的对象。我该怎么做?

如果这些问题中的任何一个都是愚蠢的,我表示歉意,但感谢您的时间,无论如何!干杯!

目前的代码如下:

int read(int v[100])
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&v[i]);
    }
    return n;
}

int main()
{
    int v[100];
    int n = read(v);
    print(n,v);
}

2 个答案:

答案 0 :(得分:0)

首先,要列出所有带变换的对象,可以使用以下命令:

cmds.ls(selection=True, transforms=True, dagObjects=True)

如果要读取/写入变换,则无需单独进行平移,旋转和缩放。您可以像这样读取复合变换矩阵:

xform_matrix = cmds.xform(source_object, query=True, matrix=True)

您将获得一个包含16个可以应用于其他对象的浮点数的列表:

cmds.xform(destination_object, matrix=xform_matrix)

我不确定您希望如何将变换从一组选定对象映射到另一组。如果您描述,我将能够发布完整的代码。

以下脚本将收集字典中所有选定对象的复合变换矩阵,并将长对象名称作为键:

selected_objects_matrix = {}
for current_object in cmds.ls(selection=True, transforms=True, dagObjects=True):
    selected_objects_matrix[cmds.ls(current_object, long=True)] = cmds.xform(
        current_object,
        query=True,
        matrix=True)

然后,如果您在Maya中移动/旋转/缩放对象,则可以像这样恢复:

for current_object in selected_objects_matrix:
    cmds.xform(
        current_object,
        matrix=selected_objects_matrix[current_object])

答案 1 :(得分:0)

你真的只想反过来做你所拥有的 设置q=1会将命令设置为query mode。 删除此标志会将命令默认为edit mode

getAttrsetAttr是他们各自的命令,但是您需要知道您正在设置的数据。即使你抓住上面的s属性,你只能获取x值,所以当你设置它时,你需要指定sx

cmds.xform ( m , ws = 1 , t = posValues)
cmds.xform( m , ws = 1 , rotation = rotValues )
cmds.setAttr ( m  + '.sx', scaleValue) # sx because you are only grabbing the X Value