使用基于setattr的当前选择更改“example”(“example”.outmesh)

时间:2017-12-04 16:35:10

标签: python maya

我告诉自己永远不要问common sensenovice问题,我是否可以在网上查找,并求助于人们作为最后的手段。这可能是一个基本问题,但请赐教我!

我的代码:

obj = pm.ls (selection=True,sn=True,o=True)       # get selection = obj 
shapes = pm.listRelatives(obj)                    # get obj shapeNode name
cpmNode = pm.createNode('closestPointOnMesh')     # create 
closestPointOnMesh Node
pm.setAttr(shapes+".outMesh",cpmNode + ".inMesh") # setattr selection 
shapeNode to cpmNode inMesh

错误:

# Can only concatenate list (not "str") to list

我不明白pm.setAttr(shapes+".outMesh",cpmNode + ".inMesh")如何列入清单。现在不是带字符串的命令吗?

shapes放入pm.setAttr(shapes+".outMesh",cpmNode + ".inMesh")会给我一些.outmesh是字符串的错误吗?

那么pm.setAttr(shapes+".outMesh",cpmNode + ".inMesh")是一个列表吗?

如果给出示例(如下),我应如何使当前选择shapeNode更改为pCubeShape1

pm.setAttr("pCubeShape1.outMesh",cpmNode + ".inMesh")

1 个答案:

答案 0 :(得分:0)

如您所料,cmds.listRelatives返回一个列表,而不是字符串。这是因为变换可以包含多个形状。

此外,您无法使用setAttr将形状的outMesh连接到实用程序的inMesh。相反,您需要使用connectAttr

试试这个:

import pymel.core as pm

obj = pm.ls (selection=True,sn=True,o=True)
shapes = pm.listRelatives(obj, shapes=True, ni=True, type="mesh") # Use flags to narrow down the proper shape.
cpmNode = pm.createNode('closestPointOnMesh')
pm.connectAttr(shapes[0]+".outMesh",cpmNode + ".inMesh") # Use the first item in the shapes list.