/****************************************************************************************************

		I3DExGenericData.h
		Copyright: (c) 2001 Eovia Corp. All rights reserved.

		Author:	Julien
		Date:	2/27/2002

****************************************************************************************************/

#ifndef __I3DExGenericData__
#define __I3DExGenericData__

#if CP_PRAGMA_ONCE
#pragma once
#endif

#include "MCCompObj.h"  // Otherwise it's included in #include "I3DShScene.h"
#include "MFTypes.h"
#include "InterfaceIDs.h"


struct I3DShScene;
class  TMCDynamicString;

// ****************************************************************
//				definition of the GUIDs
//
MCDEFINE_GUID2(IID_I3DExGenericData,	R_IID_I3DExGenericData);

// #define kGenericDatasFamilyID 'GenD'
const FourCharT kGenericDatasFamilyID = kRID_GenericDatasFamilyID;

/// \addtogroup ExternalInterface
/// \{

// ****************************************************************************
//								I3DExGenericData
// 
/// I3DExGenericData is an object that is used only to store data. It can be used
/// to add objects to the scene that have no geometry or transform but are visible
/// in the object hierarchy. The corresponding Shell interface is I3DShInvisibleTree object.
///
/// <P>This object is usually associated with an exporter (I3DExExportFilter) that is
/// able to read the data and store them into a file</P>
///
/// <P>The family associated with it is 'GenD'.</P>
///
/// \see I3DShInvisibleTree
///
struct I3DExGenericData : public IMCUnknown
{
	// ****************************************************************************
	//								Edit
	// 
	/// Edit a generic data. This is usually used to open a dialog so that the
	/// user can modify the date that are stored in the generic data.
	///
	/// \param scene A pointer to the current scene.
	///
	virtual int32				MCCOMAPI Edit( I3DShScene* scene )=0;

	// ****************************************************************************
	//								GetName
	// 
	/// Returns the name of the object
	///
	virtual TMCDynamicString&	MCCOMAPI GetName()=0;

	// ****************************************************************************
	//								Clone
	// 
	/// Creates a copy of the data.
	///
	virtual void				MCCOMAPI Clone(I3DExGenericData** clone)=0;
};

/// \}

#endif
