Wow this API stuff is really cool. As I'm picking it up it is like learning a language. I'm getting more fluent and understanding the power of it more and more. So I have written a few dependencyNodes now, so I thought I'd make a custom MPxCommand.
I built a command that searches the dependencyGraph for a given node type. You specify the node type to search for and the direction to search in. YOu then call it just as though it is another maya command. So rad as this can now be built into my code as if it were just part of maya.
So my command is: findConnectedNodeType. You call it like:
node = cmds.findConnectedNodeType('blendColors','up')
The return value is either False or the found node name. The command looks through the upstream dependencyGraph until the first instance of that node is found. It then stops the iteration and returns the node name.
Cool stuff I learnt.
To return from a MPxCommand you must use the public function of MPxCommand setResult.
self.setResult(return value goes here)
This comes at the end of the doIt() function.
Enumerators are also making a bit more sense now that I am using them more. For example I had to use MItDependencyGraph. You can specify the direction to search, up or down stream. The help docs show this for the direction.
MItDependencyGraph ( MObject & rootNode,
MPlug & rootPlug,
MIteratorType & infoObject,
Direction direction = kDownstream,
Traversal traversal = kDepthFirst,
Level level = kNodeLevel,
MStatus * ReturnStatus = NULL
)
and this:
enum
Direction
Direction within the DG relative to root Node or Plug.
A bit cryptic at first if you arent familiar with how to read this. So To insert this correctly into the MItDependencyGraph class call you need to do this.
OpenMaya.MItDependencyGraph(OpenMaya.MItDependencyGraph.kDownstream)
So because this enumerator is a child of the class MItDependencyGraph , it must be specified in context of this class hierarchy. (OpenMaya.MItDependencyGraph). You can then set any number of the enum options that the help displays, in this case
kDownstream or
kUpstream and the class call will know to look for that enum if you set it (you don't have to specify anything and maya will use the default)
Ok. Hope that is a bit clearer than mud. Till next time.
No comments:
Post a Comment