五月关于Python字典的两个问题

2024-09-28 01:31:43 发布

您现在位置:Python中文网/ 问答频道 /正文

谢谢你花点时间来读这篇文章!所以,我的第一个问题是,我试图创建一个函数“selectionData()”,以获取对象的translate、rotate和scale值,然后将它们作为字典返回,但我发现自己有点困难。使用下面列出的代码,我只得到对象的名称。我可以把它的值转换成旋转的,怎样才能得到它的值呢?在

我的第二个问题是,我试图创建一个函数“setData(data)”,它将前面提到的用selectionData()构建的字典作为输入,并将字典中的数据还原为选定的对象。我该怎么做?在

如果这两个问题中有一个是愚蠢的,我很抱歉,但是谢谢你抽出时间,不管怎样!干杯!在

当前代码如下:

from maya import cmds

sel = cmds.ls(sl = 1)
meshes =[]
for s in sel :
    shape = cmds.listRelatives(s , shapes = 1 ) 
    if shape :
        if cmds.nodeType(shape[0]) == "mesh" :
            meshes.append(s )

meshData = {}            
for m in meshes :
    pos = cmds.xform ( m , q =1 , ws = 1 , t = 1)
    rot = cmds.xform( m , q =1  , ws = 1 , rotation =  1 )
    scl = cmds.getAttr ( m  + '.s' )[0]

    currentDict = {
                    "pos" : pos ,
                    "rot" : rot ,
                    "scl" : scl ,

                    }

    meshData[m] = currentDict

def selectionData( selectionDict):


    for k in selectionDict :
        print k

selectionData(meshData)

Tags: 对象函数代码inposfor字典时间
2条回答

你真的只想反过来做你所拥有的 设置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

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

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

如果要读/写变换,则不需要分别获取平移、旋转和缩放。可以这样读取复合变换矩阵:

^{pr2}$

您将得到一个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])

相关问题 更多 >

    热门问题