MObjectArray getOutConnectedSG( const MDagPath &shapeDPath ) { MStatus status; // Array of connected Shaging Engines MObjectArray connSG; // Iterator through the dependency graph to find if there are // shading engines connected MObject obj(shapeDPath.node()); // non const MObject MItDependencyGraph itDG( obj, MFn::kShadingEngine, MItDependencyGraph::kDownstream, MItDependencyGraph::kBreadthFirst, MItDependencyGraph::kNodeLevel, &status ); if( status == MS::kFailure ) return connSG; // we want to prune the iteration if the node is not a shading engine itDG.enablePruningOnFilter(); // iterate through the output connected shading engines for( ; itDG.isDone()!= true; itDG.next() ) connSG.append( itDG.thisNode() ); return connSG; }
void exportShadingInputs() { MObject proceduralNode = m_dagPath.node(); MPlug nullPlug; MIteratorType filter; MIntArray filterTypes; filterTypes.append( MFn::kShadingEngine ); filterTypes.append( MFn::kDisplacementShader ); filter.setFilterList( filterTypes ); MItDependencyGraph itDG( proceduralNode, nullPlug, filter, MItDependencyGraph::kUpstream ); while( !itDG.isDone() ) { MObject node = itDG.currentItem(); MFnDependencyNode fnNode( node ); MPlug plug; if( fnNode.typeName() == "displacementShader" ) { plug = fnNode.findPlug( "displacement" ); } else { plug = fnNode.findPlug( "dsm" ); } ExportNode( plug ); itDG.next(); } }