//Copyright © 2008 Autodesk, Inc.
//All Rights Reserved.
//
//The coded instructions, statements, computer programs, and/or related material (collectively "Data")
//in these files contain unpublished information proprietary to Autodesk, Inc., ("Autodesk") which is
//protected by Canada and United States of America federal copyright law and by international treaties.
//
//The Data may not be disclosed or distributed to third parties, in whole or in part, without the prior
//written consent of Autodesk.
//
//THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY. ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED.
//AUTODESK MAKES NO WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING BY CUSTOM
//OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
//FITNESS FOR A PARTICULAR PURPOSE OR USE. WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT
//THE OPERATION OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE.
//
//IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS OR SUPPLIERS ("AUTODESK GROUP")
//BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR
//MULTIPLE DAMAGES OR OTHER SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE OR
//DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND), HOWEVER CAUSED, AND REGARDLESS OF
//THE THEORY OF LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE),
//OR OTHERWISE, ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE, WHETHER OR NOT
//AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.

#ifndef __MAYAHIK_UTILS__
#define __MAYAHIK_UTILS__

#include <string.h>

#include <maya/MStatus.h>
#include <maya/MGlobal.h>
#include <maya/MAngle.h>
#include <maya/MSelectionList.h>
#include <maya/MEulerRotation.h>
#include <maya/MQuaternion.h>
#include <maya/MAngle.h>

#ifdef _WIN32
#define _ALIGN16_ __declspec(align(16))
#else
#define _ALIGN16_ 
#endif

namespace MayaHIK
{
	struct HIKLocalNodeState
	{
		float _ALIGN16_ mT[4];
		float _ALIGN16_ mQ[4];
		float _ALIGN16_ mS[4];
	};

	inline void GetRotationInDeg(MEulerRotation& pOut, const double3& pIn)
	{
		MAngle::Unit lUnit = MAngle::uiUnit();
		if(lUnit == MAngle::kDegrees)
		{
			pOut.setValue(pIn[0],pIn[1],pIn[2]);
		}
		else if(lUnit == MAngle::kRadians)
		{
			pOut.setValue(pIn[0] * 57.3,pIn[1]*57.3,pIn[2]*57.3);
		}
	}

inline MObject GetObjectByName(const MString& pObjectName)
{
	MSelectionList lList;
	MGlobal::getSelectionListByName(pObjectName, lList);

  
	MObject depNode;
	lList.getDependNode(0, depNode);
	return depNode;		
}

#ifdef _WIN32
#define _STRICMP_ _stricmp
#else
#define _STRICMP_ strcmp
#endif

inline bool FileHasExtension(const char *fileName, const char *extension)
{
	size_t	filelen(::strlen(fileName));
	size_t	extlen(::strlen(extension));

	return ( (filelen > extlen + 1) && (::_STRICMP_(fileName + filelen - extlen, extension) == 0) && (fileName[filelen - extlen - 1] == '.') );
}
}//namespace MayaHIK

#endif

