#ifndef __ISKINWRAPPATCH__H
#define __ISKINWRAPPATCH__H

#define PATCHDEFORMPW_CLASS_ID	Class_ID(0x22b7bd09, 0x673ac5be)
#define PATCHDEFORMPW_INTERFACE Interface_ID(0xDE21A34f, 0x8A43E3E3)

class IPatchDeformPWMod : public FPMixinInterface
{

public:

	enum 
	{ 
		patchdeformpw_params /// This is the parameter rollup fields
	};

	enum 
	{ 
		pb_patch,		/// this is the patch that is doing the deformation
		pb_autoupdate,	/// Not used anymore
		pb_samplerate,	/// this is how far down the system will sample to find hits on the patch
						/// the higher the value the more accurate it will be
		pb_patchlist	/// to be used later
	};

	FPInterfaceDesc* GetDesc(); 

	/// Resample()
	/// This forces the modifier to resample itself. This will force the system to resample the patch
	virtual void Resample()=0;

	/// int GetNumberOfPoints(INode *node)
	/// This returns the number of points that are deformed
	virtual int GetNumberOfPoints(INode *node)=0;

	/// int Point3 GetPointUVW(INode *node, int index)
	/// This returns the closest UVW point on the patch to this point
	///		INode *node this is the node that owns the modifier so we can get the right local data
	///		int index this is the index of the point you want to lookup
	virtual Point3 GetPointUVW(INode *node, int index)=0;

	/// int Point3 GetPointUVW(INode *node, int index)
	/// This returns the local space point of the deforming point before deformation
	///		INode *node this is the node that owns the modifier so we can get the right local data
	///		int index this is the index of the point you want to lookup
	virtual Point3 GetPointLocalSpace(INode *node, int index)=0;

	/// int Point3 GetPointPatchSpace(INode *node, int index)
	/// This returns the point in the space of the patch of the deforming point before deformation
	///		INode *node this is the node that owns the modifier so we can get the right local data
	///		int index this is the index of the point you want to lookup
	virtual Point3 GetPointPatchSpace(INode *node, int index)=0;

	/// int int GetPointPatchIndex(INode *node, int index)
	/// This returns closest patch to this point
	///		INode *node this is the node that owns the modifier so we can get the right local data
	///		int index this is the index of the point you want to lookup
	virtual int GetPointPatchIndex(INode *node, int index)=0;

};

#endif