add a callback to MObjectHandle, then you can get every node that is
created regardless of what the command returns. Once you got your nodes,
remove the callback
import maya.OpenMaya as om
import maya.cmds as cmds
cmds.polyCube(n="testCube")
new_nodes = []
def cb_add_nodes(node, data):
new_nodes.append(om.MObjectHandle(node))
id = om.MDGMessage.addNodeAddedCallback(cb_add_nodes)
#setDrivenKeyframe command does not return the anim_curve node
cmds.setDrivenKeyframe("testCube", v=1, at="tx", cd="testCube.ty", dv=1,
ott = "spline", itt = "spline")
om.MDGMessage.removeCallback(id)
for n in new_nodes:
n_name = om.MFnDependencyNode(n.object()).name()
print n_name
I learned this from http://www.macaronikazoo.com/
On Thursday, October 18, 2012 12:04:07 PM UTC+8, Berg Jones wrote:
>
> Trying to get the name of a newly created node without having to use a
> certain workaround. Im adding a light shader with DL_createSurfaceShader.
> This creates uber_surfaceN depending on whats in the scene. Then Im doing
> more stuff in the same loop. How do I capture the name?
>
>
> import maya.cmds as cmds
> import maya.mel as mel
>
> def checkGeo():
> objNames = cmds.ls(sl=1)
> if objNames:
> geoShapes = cmds.ls(geometry=1)
> if geoShapes:
> geoTransforms = cmds.listRelatives(geoShapes, p=1)
> if 'lockedGeo1' in geoTransforms:
> for i in objNames:
> cmds.select(i)
> createSurfaceShader()
> cmds.select(clear=1)
>
> def createSurfaceShader():
> mel.eval('$selected_geo = `ls -sl`')
> mel.eval('$selected_geo_shape = `listRelatives -children -shapes
> $selected_geo[0]`')
> mel.eval('DL_setObjectAttrib(DL_createSurfaceShader("uber_surface",
> 0), "surface", $selected_geo_shape)')
>
--
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings:
http://groups.google.com/group/python_inside_maya/subscribe