LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order)
{
	LLQuaternion xQ( xRot*DEG_TO_RAD, LLVector3(1.0f, 0.0f, 0.0f) );
	LLQuaternion yQ( yRot*DEG_TO_RAD, LLVector3(0.0f, 1.0f, 0.0f) );
	LLQuaternion zQ( zRot*DEG_TO_RAD, LLVector3(0.0f, 0.0f, 1.0f) );
	LLQuaternion ret;
	switch( order )
	{
	case LLQuaternion::XYZ:
		ret = xQ * yQ * zQ;
		break;
	case LLQuaternion::YZX:
		ret = yQ * zQ * xQ;
		break;
	case LLQuaternion::ZXY:
		ret = zQ * xQ * yQ;
		break;
	case LLQuaternion::XZY:
		ret = xQ * zQ * yQ;
		break;
	case LLQuaternion::YXZ:
		ret = yQ * xQ * zQ;
		break;
	case LLQuaternion::ZYX:
		ret = zQ * yQ * xQ;
		break;
	}
	return ret;
}
f00Quat& f00Quat::set( GLfloat x, GLfloat y, GLfloat z )
{
	f00Quat xQ( x, 1.0, 0.0, 0.0 );
	f00Quat yQ( y, 0.0, 1.0, 0.0 );
	f00Quat zQ( z, 0.0, 0.0, 1.0 );

	set( xQ );
	postMult( yQ );
	postMult( zQ );
	return *this;
}
//-----------------------------------------------------------------------
void OrthoCameraGizmo::attachToNode(Ogre::SceneNode* node)
{
	if (!node)
		return;

	// First remove the old node
	detachFromNode();

	// Recreate the nodes
	mOrthoCameraNodeBox = node->createChildSceneNode();
	mOrthoCameraNodeX = node->createChildSceneNode();
	mOrthoCameraNodeMinX = node->createChildSceneNode();
	mOrthoCameraNodeY = node->createChildSceneNode();
	mOrthoCameraNodeZ = node->createChildSceneNode();
	mOrthoCameraNodeMinZ = node->createChildSceneNode();

	mOrthoCameraNodeBox->setInheritScale(false);
	mOrthoCameraNodeX->setInheritScale(false);
	mOrthoCameraNodeMinX->setInheritScale(false);
	mOrthoCameraNodeY->setInheritScale(false);
	mOrthoCameraNodeZ->setInheritScale(false);
	mOrthoCameraNodeMinZ->setInheritScale(false);

	mOrthoCameraNodeBox->setInheritOrientation(false);
	mOrthoCameraNodeX->setInheritOrientation(false);
	mOrthoCameraNodeMinX->setInheritOrientation(false);
	mOrthoCameraNodeY->setInheritOrientation(false);
	mOrthoCameraNodeZ->setInheritOrientation(false);
	mOrthoCameraNodeMinZ->setInheritOrientation(false);

	mOrthoCameraNodeBox->attachObject(mOrthoCameraEntityBox);
	mOrthoCameraNodeX->attachObject(mOrthoCameraEntityX);
	mOrthoCameraNodeMinX->attachObject(mOrthoCameraEntityMinX);
	mOrthoCameraNodeY->attachObject(mOrthoCameraEntityY);
	mOrthoCameraNodeZ->attachObject(mOrthoCameraEntityZ);
	mOrthoCameraNodeMinZ->attachObject(mOrthoCameraEntityMinZ);

	// Set scale
	setScale(SCALE_NODE_ORTHO_CAMERA);
//	mOrthoCameraNodeBox->setScale(0.5, 0.5, 0.5); // TEST
//	mOrthoCameraNodeX->setScale(0.5, 0.5, 0.5);// TEST
//	mOrthoCameraNodeMinX->setScale(0.5, 0.5, 0.5);// TEST
//	mOrthoCameraNodeY->setScale(0.5, 0.5, 0.5);// TEST
//	mOrthoCameraNodeZ->setScale(0.5, 0.5, 0.5);// TEST
//	mOrthoCameraNodeMinZ->setScale(0.5, 0.5, 0.5);// TEST

	// Set orientation
	Ogre::Real sqrt0dot5 = sqrt(0.5);
	Ogre::Quaternion xQ(sqrt0dot5, 0, 0, sqrt0dot5);
	Ogre::Quaternion minXQ(-sqrt0dot5, 0, 0, sqrt0dot5);
	Ogre::Quaternion yQ(1, 0, 0, 0);
	Ogre::Quaternion zQ(-sqrt0dot5, sqrt0dot5, 0, 0);
	Ogre::Quaternion minZQ(sqrt0dot5, sqrt0dot5, 0, 0);
	mOrthoCameraNodeX->setOrientation(xQ);
	mOrthoCameraNodeMinX->setOrientation(minXQ);
	mOrthoCameraNodeY->setOrientation(yQ);
	mOrthoCameraNodeZ->setOrientation(zQ);
	mOrthoCameraNodeMinZ->setOrientation(minZQ);

	// Set visible
	setVisible(true);
}