diff options
Diffstat (limited to 'intern/moto/include/MT_Plane3.inl')
-rw-r--r-- | intern/moto/include/MT_Plane3.inl | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/intern/moto/include/MT_Plane3.inl b/intern/moto/include/MT_Plane3.inl new file mode 100644 index 00000000000..77db9b35e1d --- /dev/null +++ b/intern/moto/include/MT_Plane3.inl @@ -0,0 +1,128 @@ +#include "MT_Optimize.h" + + +GEN_INLINE +MT_Plane3:: +MT_Plane3( + const MT_Vector3 &a, + const MT_Vector3 &b, + const MT_Vector3 &c +){ + MT_Vector3 l1 = b-a; + MT_Vector3 l2 = c-b; + + MT_Vector3 n = l1.cross(l2); + n = n.safe_normalized(); + MT_Scalar d = n.dot(a); + + m_co[0] = n.x(); + m_co[1] = n.y(); + m_co[2] = n.z(); + m_co[3] = -d; +} + +/** + * Construction from vector and a point. + */ +GEN_INLINE +MT_Plane3:: +MT_Plane3( + const MT_Vector3 &n, + const MT_Vector3 &p +){ + + MT_Vector3 mn = n.safe_normalized(); + MT_Scalar md = mn.dot(p); + + m_co[0] = mn.x(); + m_co[1] = mn.y(); + m_co[2] = mn.z(); + m_co[3] = -md; +} + + +/** + * Default constructor + */ +GEN_INLINE +MT_Plane3:: +MT_Plane3( +): + MT_Tuple4() +{ + m_co[0] = MT_Scalar(1); + m_co[1] = MT_Scalar(0); + m_co[2] = MT_Scalar(0); + m_co[3] = MT_Scalar(0); +} + +/** + * Return plane normal + */ + +GEN_INLINE + MT_Vector3 +MT_Plane3:: +Normal( +) const { + return MT_Vector3(m_co[0],m_co[1],m_co[2]); +} + +/** + * Return plane scalar i.e the d from n.x + d = 0 + */ + +GEN_INLINE + MT_Scalar +MT_Plane3:: +Scalar( +) const { + return m_co[3]; +} + +GEN_INLINE + void +MT_Plane3:: +Invert( +) { + m_co[0] = -m_co[0]; + m_co[1] = -m_co[1]; + m_co[2] = -m_co[2]; + m_co[3] = -m_co[3]; +} + + +/** + * Assignment operator + */ + +GEN_INLINE + MT_Plane3 & +MT_Plane3:: +operator = ( + const MT_Plane3 & rhs +) { + m_co[0] = rhs.m_co[0]; + m_co[1] = rhs.m_co[1]; + m_co[2] = rhs.m_co[2]; + m_co[3] = rhs.m_co[3]; + return *this; +} + +/** + * Return the distance from a point to the plane + */ + +GEN_INLINE + MT_Scalar +MT_Plane3:: +signedDistance( + const MT_Vector3 &v +) const { + return Normal().dot(v) + m_co[3]; +} + + + + + |