From a4fc0b26b07e739348555ef936257bc25352279b Mon Sep 17 00:00:00 2001
From: ruslantproductengine <ruslantproductengine@lindenlab.com>
Date: Mon, 18 Aug 2014 15:12:16 +0300
Subject: MAINT-3511 FIXED When one surface of mesh object is set transparent
 all object is invisible : compare rotation quaternions with predefined
 epsilon

---
 indra/llmath/llquaternion.h | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

(limited to 'indra/llmath')

diff --git a/indra/llmath/llquaternion.h b/indra/llmath/llquaternion.h
index e56929ed0f..aa0b1752f4 100755
--- a/indra/llmath/llquaternion.h
+++ b/indra/llmath/llquaternion.h
@@ -71,6 +71,9 @@ public:
 	void quantize8(F32 lower, F32 upper);							// changes the vector to reflect quatization
 	void loadIdentity();											// Loads the quaternion that represents the identity rotation
 
+	bool isEqualEps(const LLQuaternion &quat, F32 epsilon) const;
+	bool isNotEqualEps(const LLQuaternion &quat, F32 epsilon) const;
+
 	const LLQuaternion&	set(F32 x, F32 y, F32 z, F32 w);		// Sets Quaternion to normalize(x, y, z, w)
 	const LLQuaternion&	set(const LLQuaternion &quat);			// Copies Quaternion
 	const LLQuaternion&	set(const F32 *q);						// Sets Quaternion to normalize(quat[VX], quat[VY], quat[VZ], quat[VW])
@@ -239,6 +242,21 @@ inline void LLQuaternion::loadIdentity()
 	mQ[VW] = 1.0f;
 }
 
+inline bool LLQuaternion::isEqualEps(const LLQuaternion &quat, F32 epsilon) const
+{
+	return ( fabs(mQ[VX] - quat.mQ[VX]) < epsilon
+		&&	 fabs(mQ[VY] - quat.mQ[VY]) < epsilon
+		&&	 fabs(mQ[VZ] - quat.mQ[VZ]) < epsilon
+		&&	 fabs(mQ[VS] - quat.mQ[VS]) < epsilon );
+}
+
+inline bool LLQuaternion::isNotEqualEps(const LLQuaternion &quat, F32 epsilon) const
+{
+	return (  fabs(mQ[VX] - quat.mQ[VX]) > epsilon
+		||    fabs(mQ[VY] - quat.mQ[VY]) > epsilon
+		||	  fabs(mQ[VZ] - quat.mQ[VZ]) > epsilon
+		||    fabs(mQ[VS] - quat.mQ[VS]) > epsilon );
+}
 
 inline const LLQuaternion&	LLQuaternion::set(F32 x, F32 y, F32 z, F32 w)
 {
-- 
cgit v1.2.3