// ***************************************************************************
//
//   Generated automatically by genwrapper.
//   Please DO NOT EDIT this file!
//
// ***************************************************************************

#include <osgIntrospection/ReflectionMacros>
#include <osgIntrospection/TypedMethodInfo>
#include <osgIntrospection/StaticMethodInfo>
#include <osgIntrospection/Attributes>

#include <osg/Matrixd>
#include <osg/Matrixf>
#include <osg/Quat>
#include <osg/Vec3d>
#include <osg/Vec3f>
#include <osg/Vec4d>
#include <osg/Vec4f>

// Must undefine IN and OUT macros defined in Windows headers
#ifdef IN
#undef IN
#endif
#ifdef OUT
#undef OUT
#endif

#include <osg/io_utils>
	
TYPE_NAME_ALIAS(double, osg::Quat::value_type)

BEGIN_VALUE_REFLECTOR(osg::Quat)
	I_ReaderWriter(osgIntrospection::StdReaderWriter<reflected_type>);	// user-defined
	I_Comparator(osgIntrospection::PartialOrderComparator<reflected_type>);	// user-defined
	I_DeclaringFile("osg/Quat");
	I_Constructor0(____Quat,
	               "",
	               "");
	I_Constructor4(IN, osg::Quat::value_type, x, IN, osg::Quat::value_type, y, IN, osg::Quat::value_type, z, IN, osg::Quat::value_type, w,
	               ____Quat__value_type__value_type__value_type__value_type,
	               "",
	               "");
	I_Constructor1(IN, const osg::Vec4f &, v,
	               Properties::NON_EXPLICIT,
	               ____Quat__C5_Vec4f_R1,
	               "",
	               "");
	I_Constructor1(IN, const osg::Vec4d &, v,
	               Properties::NON_EXPLICIT,
	               ____Quat__C5_Vec4d_R1,
	               "",
	               "");
	I_Constructor2(IN, osg::Quat::value_type, angle, IN, const osg::Vec3f &, axis,
	               ____Quat__value_type__C5_Vec3f_R1,
	               "",
	               "");
	I_Constructor2(IN, osg::Quat::value_type, angle, IN, const osg::Vec3d &, axis,
	               ____Quat__value_type__C5_Vec3d_R1,
	               "",
	               "");
	I_Constructor6(IN, osg::Quat::value_type, angle1, IN, const osg::Vec3f &, axis1, IN, osg::Quat::value_type, angle2, IN, const osg::Vec3f &, axis2, IN, osg::Quat::value_type, angle3, IN, const osg::Vec3f &, axis3,
	               ____Quat__value_type__C5_Vec3f_R1__value_type__C5_Vec3f_R1__value_type__C5_Vec3f_R1,
	               "",
	               "");
	I_Constructor6(IN, osg::Quat::value_type, angle1, IN, const osg::Vec3d &, axis1, IN, osg::Quat::value_type, angle2, IN, const osg::Vec3d &, axis2, IN, osg::Quat::value_type, angle3, IN, const osg::Vec3d &, axis3,
	               ____Quat__value_type__C5_Vec3d_R1__value_type__C5_Vec3d_R1__value_type__C5_Vec3d_R1,
	               "",
	               "");
	I_Method0(osg::Vec4d, asVec4,
	          Properties::NON_VIRTUAL,
	          __Vec4d__asVec4,
	          "",
	          "");
	I_Method0(osg::Vec3d, asVec3,
	          Properties::NON_VIRTUAL,
	          __Vec3d__asVec3,
	          "",
	          "");
	I_Method4(void, set, IN, osg::Quat::value_type, x, IN, osg::Quat::value_type, y, IN, osg::Quat::value_type, z, IN, osg::Quat::value_type, w,
	          Properties::NON_VIRTUAL,
	          __void__set__value_type__value_type__value_type__value_type,
	          "",
	          "");
	I_Method1(void, set, IN, const osg::Vec4f &, v,
	          Properties::NON_VIRTUAL,
	          __void__set__C5_osg_Vec4f_R1,
	          "",
	          "");
	I_Method1(void, set, IN, const osg::Vec4d &, v,
	          Properties::NON_VIRTUAL,
	          __void__set__C5_osg_Vec4d_R1,
	          "",
	          "");
	I_Method1(void, set, IN, const osg::Matrixf &, matrix,
	          Properties::NON_VIRTUAL,
	          __void__set__C5_Matrixf_R1,
	          "",
	          "");
	I_Method1(void, set, IN, const osg::Matrixd &, matrix,
	          Properties::NON_VIRTUAL,
	          __void__set__C5_Matrixd_R1,
	          "",
	          "");
	I_Method1(void, get, IN, osg::Matrixf &, matrix,
	          Properties::NON_VIRTUAL,
	          __void__get__Matrixf_R1,
	          "",
	          "");
	I_Method1(void, get, IN, osg::Matrixd &, matrix,
	          Properties::NON_VIRTUAL,
	          __void__get__Matrixd_R1,
	          "",
	          "");
	I_Method0(osg::Quat::value_type &, x,
	          Properties::NON_VIRTUAL,
	          __value_type_R1__x,
	          "",
	          "");
	I_Method0(osg::Quat::value_type &, y,
	          Properties::NON_VIRTUAL,
	          __value_type_R1__y,
	          "",
	          "");
	I_Method0(osg::Quat::value_type &, z,
	          Properties::NON_VIRTUAL,
	          __value_type_R1__z,
	          "",
	          "");
	I_Method0(osg::Quat::value_type &, w,
	          Properties::NON_VIRTUAL,
	          __value_type_R1__w,
	          "",
	          "");
	I_Method0(osg::Quat::value_type, x,
	          Properties::NON_VIRTUAL,
	          __value_type__x,
	          "",
	          "");
	I_Method0(osg::Quat::value_type, y,
	          Properties::NON_VIRTUAL,
	          __value_type__y,
	          "",
	          "");
	I_Method0(osg::Quat::value_type, z,
	          Properties::NON_VIRTUAL,
	          __value_type__z,
	          "",
	          "");
	I_Method0(osg::Quat::value_type, w,
	          Properties::NON_VIRTUAL,
	          __value_type__w,
	          "",
	          "");
	I_Method0(bool, zeroRotation,
	          Properties::NON_VIRTUAL,
	          __bool__zeroRotation,
	          "return true if the Quat represents a zero rotation, and therefore can be ignored in computations. ",
	          "");
	I_Method0(osg::Quat::value_type, length,
	          Properties::NON_VIRTUAL,
	          __value_type__length,
	          "Length of the quaternion = sqrt( vec . vec ). ",
	          "");
	I_Method0(osg::Quat::value_type, length2,
	          Properties::NON_VIRTUAL,
	          __value_type__length2,
	          "Length of the quaternion = vec . vec. ",
	          "");
	I_Method0(osg::Quat, conj,
	          Properties::NON_VIRTUAL,
	          __Quat__conj,
	          "Conjugate. ",
	          "");
	I_Method0(const osg::Quat, inverse,
	          Properties::NON_VIRTUAL,
	          __C5_Quat__inverse,
	          "Multiplicative inverse method: q^(-1) = q^*/(q.q^*). ",
	          "");
	I_Method4(void, makeRotate, IN, osg::Quat::value_type, angle, IN, osg::Quat::value_type, x, IN, osg::Quat::value_type, y, IN, osg::Quat::value_type, z,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate__value_type__value_type__value_type__value_type,
	          "",
	          "");
	I_Method2(void, makeRotate, IN, osg::Quat::value_type, angle, IN, const osg::Vec3f &, vec,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate__value_type__C5_Vec3f_R1,
	          "",
	          "");
	I_Method2(void, makeRotate, IN, osg::Quat::value_type, angle, IN, const osg::Vec3d &, vec,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate__value_type__C5_Vec3d_R1,
	          "",
	          "");
	I_Method6(void, makeRotate, IN, osg::Quat::value_type, angle1, IN, const osg::Vec3f &, axis1, IN, osg::Quat::value_type, angle2, IN, const osg::Vec3f &, axis2, IN, osg::Quat::value_type, angle3, IN, const osg::Vec3f &, axis3,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate__value_type__C5_Vec3f_R1__value_type__C5_Vec3f_R1__value_type__C5_Vec3f_R1,
	          "",
	          "");
	I_Method6(void, makeRotate, IN, osg::Quat::value_type, angle1, IN, const osg::Vec3d &, axis1, IN, osg::Quat::value_type, angle2, IN, const osg::Vec3d &, axis2, IN, osg::Quat::value_type, angle3, IN, const osg::Vec3d &, axis3,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate__value_type__C5_Vec3d_R1__value_type__C5_Vec3d_R1__value_type__C5_Vec3d_R1,
	          "",
	          "");
	I_Method2(void, makeRotate, IN, const osg::Vec3f &, vec1, IN, const osg::Vec3f &, vec2,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate__C5_Vec3f_R1__C5_Vec3f_R1,
	          "Make a rotation Quat which will rotate vec1 to vec2. ",
	          "Generally take a dot product to get the angle between these and then use a cross product to get the rotation axis Watch out for the two special cases when the vectors are co-incident or opposite in direction. ");
	I_Method2(void, makeRotate, IN, const osg::Vec3d &, vec1, IN, const osg::Vec3d &, vec2,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate__C5_Vec3d_R1__C5_Vec3d_R1,
	          "Make a rotation Quat which will rotate vec1 to vec2. ",
	          "Generally take a dot product to get the angle between these and then use a cross product to get the rotation axis Watch out for the two special cases of when the vectors are co-incident or opposite in direction. ");
	I_Method2(void, makeRotate_original, IN, const osg::Vec3d &, vec1, IN, const osg::Vec3d &, vec2,
	          Properties::NON_VIRTUAL,
	          __void__makeRotate_original__C5_Vec3d_R1__C5_Vec3d_R1,
	          "",
	          "");
	I_Method4(void, getRotate, IN, osg::Quat::value_type &, angle, IN, osg::Quat::value_type &, x, IN, osg::Quat::value_type &, y, IN, osg::Quat::value_type &, z,
	          Properties::NON_VIRTUAL,
	          __void__getRotate__value_type_R1__value_type_R1__value_type_R1__value_type_R1,
	          "Return the angle and vector components represented by the quaternion. ",
	          "");
	I_Method2(void, getRotate, IN, osg::Quat::value_type &, angle, IN, osg::Vec3f &, vec,
	          Properties::NON_VIRTUAL,
	          __void__getRotate__value_type_R1__Vec3f_R1,
	          "Return the angle and vector represented by the quaternion. ",
	          "");
	I_Method2(void, getRotate, IN, osg::Quat::value_type &, angle, IN, osg::Vec3d &, vec,
	          Properties::NON_VIRTUAL,
	          __void__getRotate__value_type_R1__Vec3d_R1,
	          "Return the angle and vector represented by the quaternion. ",
	          "");
	I_Method3(void, slerp, IN, osg::Quat::value_type, t, IN, const osg::Quat &, from, IN, const osg::Quat &, to,
	          Properties::NON_VIRTUAL,
	          __void__slerp__value_type__C5_Quat_R1__C5_Quat_R1,
	          "Spherical Linear Interpolation. ",
	          "As t goes from 0 to 1, the Quat object goes from \"from\" to \"to\". ");
END_REFLECTOR

