/**********************************************************************
 *<
	FILE: MeshNormalSpec.h
	DESCRIPTION:  User-specifiable normals for Triangle Meshes
	CREATED BY: Steve Anderson
	HISTORY: created July 2002 during SIGGraph
 *>	Copyright (c) 2002 Autodesk, Inc., All Rights Reserved.
 **********************************************************************/
// Necessary prior inclusions...?
#ifndef __MESH_NORMALS_H_
#define __MESH_NORMALS_H_
#include "baseinterface.h"
#include "ipipelineclient.h"
#define MESH_NORMAL_SPEC_INTERFACE Interface_ID(0xa4e770b, 0x47aa3cf9)
/// 
/// class MeshNormalSpec
///
/// This class is available in release 6.0 and later only.
/// 
/// This class is used to store specified normal information for a
/// particular face in a Mesh. An array of these faces is used in
/// class MeshNormalSpec to match vertex normals to vertices.
///
/// Each MeshNormalFace contains a bit indicating whether each corner
/// is specified, and a Normal ID for each specified corner.
/// 
class MeshNormalFace {
	int mNormalID[3];
	UBYTE mSpecified;
public:
	/// Constructor - sets all corners to "unspecified" 
	MeshNormalFace () : mSpecified(0x0) { }
	/// Resets all corners to "unspecified". 
	DllExport void Clear();
	/// Accessor for normal in a particular corner of the face. 
	/// The (zero-based) index of the corner of the face 
	/// The index of the normal (in the owner MeshNormalSpec's normal array)
	// used in that corner, or -1 for error 
	int GetNormalID(int corner) { return ((corner>-1) && (corner<3)) ? mNormalID[corner] : -1; }
	/// Setter for the normal used in a particular corner of the face 
	/// The (zero-based) index of the corner of the face 
	/// The index of the normal (in the owner MeshNormalSpec's normal array).
	void SetNormalID (int corner, int norm) { if ((corner>-1) && (corner<3)) mNormalID[corner] = norm; }
	int *GetNormalIDArray () { return mNormalID; }
	bool GetSpecified (int corner) { return ((corner>-1) && (corner<3) && (mSpecified & (1<