ToNukeGeometryConverterPtr ToNukeGeometryConverter::create( ConstObjectPtr object )
{
	const TypesToFnsMap *m = typesToFns();
	TypesToFnsMap::const_iterator it = m->find( Types( object->typeId() ) );
	if( it!=m->end() )
	{
		return it->second( object );
	}
	return 0;
}
ToMayaObjectConverterPtr ToMayaObjectConverter::create( ConstObjectPtr object, MFn::Type resultType )
{
	const TypesToFnsMap *m = typesToFns();
	TypesToFnsMap::const_iterator it = m->find( Types( object->typeId(), resultType ) );
	if( it!=m->end() )
	{
		return it->second( object );
	}
	return 0;
}
ToHoudiniGeometryConverterPtr ToHoudiniGeometryConverter::create( const VisibleRenderable *renderable )
{
	const TypesToFnsMap *m = typesToFns();
	TypesToFnsMap::const_iterator it = m->find( Types( renderable->typeId() ) );
	if( it!=m->end() )
	{
		return it->second( renderable );
	}
	
	return 0;
}
ToHoudiniGeometryConverterPtr ToHoudiniGeometryConverter::create( const Object *object )
{
	const TypesToFnsMap *m = typesToFns();
	TypesToFnsMap::const_iterator it = m->find( Types( object->typeId() ) );
	if( it!=m->end() )
	{
		return it->second( object );
	}
	
	// no exact match, so check for base class matches
	const std::vector<IECore::TypeId> &bases = RunTimeTyped::baseTypeIds( object->typeId() );
	for ( std::vector<IECore::TypeId>::const_iterator it = bases.begin(); it != bases.end(); ++it )
	{
		TypesToFnsMap::const_iterator cIt = m->find( Types( *it ) );
		if ( cIt != m->end() )
		{
			return cIt->second( object );
		}
	}
	
	return 0;
}