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

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

		Author:	charles
		Date:	3/31/2005

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

#ifndef __I3DShPrimitiveInstance__
#define __I3DShPrimitiveInstance__

#if CP_PRAGMA_ONCE
#pragma once
#endif


struct I3DShInstance;

//****** Globally Unique Ids **************************************************
MCDEFINE_GUID_H(IID_I3DShPrimitiveInstance);

/// \addtogroup ShellInterface
/// \{

// ****************************************************************************
//								I3DShPrimitiveInstance
// 
//
/// I3DShPrimitiveInstance represents a copy of a primitive located at a certain
/// position in space, with a certain orientation and scaling and a given shader.
///
/// <P>Primitive instances always support the following interfaces : I3DShTreeElement,
/// I3DShShadableTree, ISelectableObject and I3DShInstance</P>
///
struct I3DShPrimitiveInstance: public IMCUnknown
{
	// ****************************************************************************
	//								GetDisplacedPrimitive
	// 
	/// Returns a pointer to the displacement primitive
	/// 
	//virtual I3DShPrimitive* MCCOMAPI GetDisplacedPrimitive() = 0;

	// ****************************************************************************
	//								SetDisplacedPrimitive
	// 
	// Sets the displaced primitive on a primitive instance.
	// 
	// \param primitive  
	// 
	//virtual void MCCOMAPI SetDisplacedPrimitive(I3DShPrimitive* primitive) = 0;

	///Returns the instance interface
	virtual I3DShInstance*	MCCOMAPI GetThisInstance()	= 0;
};


/// \}

#endif
