// List logic. This is a pretty simple example that // builds a list of mesh shapes to return. // MStatus viewObjectFilter::getList(MSelectionList &list) { bool debugFilterUsage = false; if (debugFilterUsage) { unsigned int viewCount = M3dView::numberOf3dViews(); if (viewCount) { for (unsigned int i=0; i<viewCount; i++) { M3dView view; if (MStatus::kSuccess == M3dView::get3dView( i, view )) { if (view.objectListFilterName() == name()) { printf("*** Update filter list %s. Exclusion=%d, Inverted=%d\n", name().asChar(), MObjectListFilter::kExclusionList == filterType(), mInvertedList); } } } } } // Clear out old list list.clear(); if (mInvertedList) { MStatus status; MItDag::TraversalType traversalType = MItDag::kDepthFirst; MItDag dagIterator( traversalType, MFn::kInvalid, &status); for ( ; !dagIterator.isDone(); dagIterator.next() ) { MDagPath dagPath; status = dagIterator.getPath(dagPath); if ( status != MStatus::kSuccess ) { status.perror("MItDag::getPath"); continue; } if (dagPath.hasFn( MFn::kMesh )) { dagIterator.prune(); continue; } if (dagPath.childCount() <= 1) { status = list.add( dagPath ); } } } else { // Get a list of all the meshes in the scene MItDag::TraversalType traversalType = MItDag::kDepthFirst; MFn::Type filter = MFn::kMesh; MStatus status; MItDag dagIterator( traversalType, filter, &status); for ( ; !dagIterator.isDone(); dagIterator.next() ) { MDagPath dagPath; status = dagIterator.getPath(dagPath); if ( status != MStatus::kSuccess ) { status.perror("MItDag::getPath"); continue; } status = list.add( dagPath ); if ( status != MStatus::kSuccess ) { status.perror("MSelectionList add"); } } } if (list.length()) { return MStatus::kSuccess; } return MStatus::kFailure; }