diff --git a/include/assimp/vector3.inl b/include/assimp/vector3.inl index 2b132c1a5..dc2676a40 100644 --- a/include/assimp/vector3.inl +++ b/include/assimp/vector3.inl @@ -55,8 +55,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ------------------------------------------------------------------------------------------------ /** Transformation of a vector by a 3x3 matrix */ template -inline aiVector3t operator * (const aiMatrix3x3t& pMatrix, const aiVector3t& pVector) -{ +AI_FORCE_INLINE +aiVector3t operator * (const aiMatrix3x3t& pMatrix, const aiVector3t& pVector) { aiVector3t res; res.x = pMatrix.a1 * pVector.x + pMatrix.a2 * pVector.y + pMatrix.a3 * pVector.z; res.y = pMatrix.b1 * pVector.x + pMatrix.b2 * pVector.y + pMatrix.b3 * pVector.z; @@ -67,8 +67,8 @@ inline aiVector3t operator * (const aiMatrix3x3t& pMatrix, const a // ------------------------------------------------------------------------------------------------ /** Transformation of a vector by a 4x4 matrix */ template -inline aiVector3t operator * (const aiMatrix4x4t& pMatrix, const aiVector3t& pVector) -{ +AI_FORCE_INLINE +aiVector3t operator * (const aiMatrix4x4t& pMatrix, const aiVector3t& pVector) { aiVector3t res; res.x = pMatrix.a1 * pVector.x + pMatrix.a2 * pVector.y + pMatrix.a3 * pVector.z + pMatrix.a4; res.y = pMatrix.b1 * pVector.x + pMatrix.b2 * pVector.y + pMatrix.b3 * pVector.z + pMatrix.b4; @@ -83,65 +83,99 @@ aiVector3t::operator aiVector3t () const { } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE void aiVector3t::Set( TReal pX, TReal pY, TReal pZ) { - x = pX; y = pY; z = pZ; +AI_FORCE_INLINE +void aiVector3t::Set( TReal pX, TReal pY, TReal pZ) { + x = pX; + y = pY; + z = pZ; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE TReal aiVector3t::SquareLength() const { +AI_FORCE_INLINE +TReal aiVector3t::SquareLength() const { return x*x + y*y + z*z; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE TReal aiVector3t::Length() const { +AI_FORCE_INLINE +TReal aiVector3t::Length() const { return std::sqrt( SquareLength()); } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE aiVector3t& aiVector3t::Normalize() { - *this /= Length(); return *this; -} -// ------------------------------------------------------------------------------------------------ -template -AI_FORCE_INLINE aiVector3t& aiVector3t::NormalizeSafe() { - TReal len = Length(); - if (len > static_cast(0)) - *this /= len; +AI_FORCE_INLINE +aiVector3t& aiVector3t::Normalize() { + *this /= Length(); + return *this; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE const aiVector3t& aiVector3t::operator += (const aiVector3t& o) { - x += o.x; y += o.y; z += o.z; return *this; +AI_FORCE_INLINE +aiVector3t& aiVector3t::NormalizeSafe() { + TReal len = Length(); + if ( len > static_cast< TReal >( 0 ) ) { + *this /= len; + } + return *this; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE const aiVector3t& aiVector3t::operator -= (const aiVector3t& o) { - x -= o.x; y -= o.y; z -= o.z; return *this; +AI_FORCE_INLINE +const aiVector3t& aiVector3t::operator += (const aiVector3t& o) { + x += o.x; + y += o.y; + z += o.z; + + return *this; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE const aiVector3t& aiVector3t::operator *= (TReal f) { - x *= f; y *= f; z *= f; return *this; +AI_FORCE_INLINE +const aiVector3t& aiVector3t::operator -= (const aiVector3t& o) { + x -= o.x; + y -= o.y; + z -= o.z; + + return *this; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE const aiVector3t& aiVector3t::operator /= (TReal f) { - x /= f; y /= f; z /= f; return *this; +AI_FORCE_INLINE +const aiVector3t& aiVector3t::operator *= (TReal f) { + x *= f; + y *= f; + z *= f; + + return *this; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE aiVector3t& aiVector3t::operator *= (const aiMatrix3x3t& mat){ - return(*this = mat * (*this)); +AI_FORCE_INLINE +const aiVector3t& aiVector3t::operator /= (TReal f) { + const TReal invF = (TReal) 1.0 / f; + x *= invF; + y *= invF; + z *= invF; + + return *this; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE aiVector3t& aiVector3t::operator *= (const aiMatrix4x4t& mat){ - return(*this = mat * (*this)); +AI_FORCE_INLINE +aiVector3t& aiVector3t::operator *= (const aiMatrix3x3t& mat){ + return (*this = mat * (*this)); } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE TReal aiVector3t::operator[](unsigned int i) const { +AI_FORCE_INLINE +aiVector3t& aiVector3t::operator *= (const aiMatrix4x4t& mat){ + return (*this = mat * (*this)); +} +// ------------------------------------------------------------------------------------------------ +template +AI_FORCE_INLINE +TReal aiVector3t::operator[](unsigned int i) const { switch (i) { case 0: return x; @@ -156,7 +190,8 @@ AI_FORCE_INLINE TReal aiVector3t::operator[](unsigned int i) const { } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE TReal& aiVector3t::operator[](unsigned int i) { +AI_FORCE_INLINE +TReal& aiVector3t::operator[](unsigned int i) { // return *(&x + i); switch (i) { case 0: @@ -172,17 +207,20 @@ AI_FORCE_INLINE TReal& aiVector3t::operator[](unsigned int i) { } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE bool aiVector3t::operator== (const aiVector3t& other) const { +AI_FORCE_INLINE +bool aiVector3t::operator== (const aiVector3t& other) const { return x == other.x && y == other.y && z == other.z; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE bool aiVector3t::operator!= (const aiVector3t& other) const { +AI_FORCE_INLINE +bool aiVector3t::operator!= (const aiVector3t& other) const { return x != other.x || y != other.y || z != other.z; } // --------------------------------------------------------------------------- template -AI_FORCE_INLINE bool aiVector3t::Equal(const aiVector3t& other, TReal epsilon) const { +AI_FORCE_INLINE +bool aiVector3t::Equal(const aiVector3t& other, TReal epsilon) const { return std::abs(x - other.x) <= epsilon && std::abs(y - other.y) <= epsilon && @@ -190,66 +228,77 @@ AI_FORCE_INLINE bool aiVector3t::Equal(const aiVector3t& other, TR } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE bool aiVector3t::operator < (const aiVector3t& other) const { +AI_FORCE_INLINE +bool aiVector3t::operator < (const aiVector3t& other) const { return x != other.x ? x < other.x : y != other.y ? y < other.y : z < other.z; } // ------------------------------------------------------------------------------------------------ template -AI_FORCE_INLINE const aiVector3t aiVector3t::SymMul(const aiVector3t& o) { +AI_FORCE_INLINE +const aiVector3t aiVector3t::SymMul(const aiVector3t& o) { return aiVector3t(x*o.x,y*o.y,z*o.z); } // ------------------------------------------------------------------------------------------------ // symmetric addition template -AI_FORCE_INLINE aiVector3t operator + (const aiVector3t& v1, const aiVector3t& v2) { +AI_FORCE_INLINE +aiVector3t operator + (const aiVector3t& v1, const aiVector3t& v2) { return aiVector3t( v1.x + v2.x, v1.y + v2.y, v1.z + v2.z); } // ------------------------------------------------------------------------------------------------ // symmetric subtraction template -AI_FORCE_INLINE aiVector3t operator - (const aiVector3t& v1, const aiVector3t& v2) { +AI_FORCE_INLINE +aiVector3t operator - (const aiVector3t& v1, const aiVector3t& v2) { return aiVector3t( v1.x - v2.x, v1.y - v2.y, v1.z - v2.z); } // ------------------------------------------------------------------------------------------------ // scalar product template -AI_FORCE_INLINE TReal operator * (const aiVector3t& v1, const aiVector3t& v2) { +AI_FORCE_INLINE +TReal operator * (const aiVector3t& v1, const aiVector3t& v2) { return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z; } // ------------------------------------------------------------------------------------------------ // scalar multiplication template -AI_FORCE_INLINE aiVector3t operator * ( TReal f, const aiVector3t& v) { +AI_FORCE_INLINE +aiVector3t operator * ( TReal f, const aiVector3t& v) { return aiVector3t( f*v.x, f*v.y, f*v.z); } // ------------------------------------------------------------------------------------------------ // and the other way around template -AI_FORCE_INLINE aiVector3t operator * ( const aiVector3t& v, TReal f) { +AI_FORCE_INLINE +aiVector3t operator * ( const aiVector3t& v, TReal f) { return aiVector3t( f*v.x, f*v.y, f*v.z); } // ------------------------------------------------------------------------------------------------ // scalar division template -AI_FORCE_INLINE aiVector3t operator / ( const aiVector3t& v, TReal f) { +AI_FORCE_INLINE +aiVector3t operator / ( const aiVector3t& v, TReal f) { return v * (1/f); } // ------------------------------------------------------------------------------------------------ // vector division template -AI_FORCE_INLINE aiVector3t operator / ( const aiVector3t& v, const aiVector3t& v2) { +AI_FORCE_INLINE +aiVector3t operator / ( const aiVector3t& v, const aiVector3t& v2) { return aiVector3t(v.x / v2.x,v.y / v2.y,v.z / v2.z); } // ------------------------------------------------------------------------------------------------ // cross product -template -AI_FORCE_INLINE aiVector3t operator ^ ( const aiVector3t& v1, const aiVector3t& v2) { +template +AI_FORCE_INLINE +aiVector3t operator ^ ( const aiVector3t& v1, const aiVector3t& v2) { return aiVector3t( v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x); } // ------------------------------------------------------------------------------------------------ // vector negation -template -AI_FORCE_INLINE aiVector3t operator - ( const aiVector3t& v) { +template +AI_FORCE_INLINE +aiVector3t operator - ( const aiVector3t& v) { return aiVector3t( -v.x, -v.y, -v.z); }