void ParameterisedHolderManipContext::processNode( MObject &node )
{
	MStatus stat;
	MFnDependencyNode nodeFn( node, &stat );
	if( !stat )
	{
		return;
	}

	ParameterisedHolderInterface *pHolder = dynamic_cast<ParameterisedHolderInterface *>( nodeFn.userNode() );
	if( !pHolder )
	{
		return;
	}

	if( m_mode == Targeted )
	{
		MStatus stat;
		MPlug targetPlug = nodeFn.findPlug( m_targetPlugPath, &stat );
		if( stat )
		{
			createAndConnectManip( pHolder->plugParameter( targetPlug ), nodeFn );
		}
	}
	else
	{
		ParameterisedInterface *parameterisedInterface = pHolder->getParameterisedInterface();
		if( parameterisedInterface )
		{
			createManipulatorWalk( parameterisedInterface->parameters(), nodeFn );
		}
	}
}
void V3Manipulator::readParameterOptions( MFnDagNode &nodeFn )
{
	ParameterisedHolderInterface *pHolder = dynamic_cast<ParameterisedHolderInterface *>( nodeFn.userNode() );		
	if( !pHolder ) 
	{
		return;
	}
	
	ParameterPtr parameter = pHolder->plugParameter( m_plug );
	CompoundObjectPtr userData = parameter->userData();
	
	if( CompoundObjectPtr uiData = userData->member<CompoundObject>( "UI" ) )
	{
		// World space parameter values
		if( StringDataPtr wsData = uiData->member<StringData>( "manipSpace" ) )
		{
			if( wsData->readable() == "world" )
			{
				m_worldSpace = true;
			}
			else if( wsData->readable() == "object" )
			{
				m_worldSpace = false;			
			}
			else
			{
				MGlobal::displayWarning( "V3Manipulator: Ignoring invalid v3ManipSpace '"
										 + MString( wsData->readable().c_str() )
										 + "' for parameter '" 
										 + MString( parameter->name().c_str() )
										 + "', using 'object'." );
			}
		}				
	}
}