Question

I've been trying to get this to work for so long now, I've read the docs here, but I can't seem to understand how to implement the GeometryConstraint.

Normally, the derivative version of this would be:

geometryConstraintNode = pm.geometryConstraint(target, object)

However, in Pymel, It looks a little nicer when setting attributes, which is why I want to use it, because it's much more readable.

I've tried this:

geometryConstraintNode = nt.GeometryConstraint(target, object).setName('geoConstraint')

But no luck, can someone take a look?

Shannon

Was it helpful?

Solution

this doesn't work for you?

import pymel.core as pm

const = pm.geometryConstraint('pSphere1', 'locator1', n='geoConstraint')
print const
const.rename('fred')
print const

output would be

geoConstraint
fred

and a constraint object named 'fred'.

The pymel node is the return value that comes back from the command defined in pm.animation.geometryConstraint. What it returns is a class wrapper for the actual in-scene constraint, which is defined in pm.nodetypes.GeometryConstraint. It's the class version where you get to do all the attribute setting, etc; the command version is a match for the same thing in maya.cmds with sometimes a little syntactic sugar added.

In this case, the pymel node is like any other pymel node, so things like renamimg use the same '.rename' functionality inherited from DagNode. You could also use functions inherited from Transform, like 'getChildren()' or 'setParent()' The docs make this clear in a round-about way by including the inheritance tree at the top of the nodetype's page. Basically all pynode returns will share at least DagNode (stuff like naming) and usually Transform (things like move, rotate, parent) or Shape (query components, etc)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top