Initial revision
[blender.git] / intern / moto / include / MT_Plane3.inl
1 #include "MT_Optimize.h"
2
3
4 GEN_INLINE
5 MT_Plane3::
6 MT_Plane3(
7         const MT_Vector3 &a,
8         const MT_Vector3 &b,
9         const MT_Vector3 &c
10 ){
11         MT_Vector3 l1 = b-a;
12         MT_Vector3 l2 = c-b;
13
14         MT_Vector3 n = l1.cross(l2);
15         n = n.safe_normalized();
16         MT_Scalar d = n.dot(a); 
17
18         m_co[0] = n.x();
19         m_co[1] = n.y();
20         m_co[2] = n.z();
21         m_co[3] = -d;
22 }
23
24 /**
25  * Construction from vector and a point.
26  */
27 GEN_INLINE
28 MT_Plane3::
29 MT_Plane3(
30         const MT_Vector3 &n,
31         const MT_Vector3 &p
32 ){
33         
34         MT_Vector3 mn = n.safe_normalized();
35         MT_Scalar md = mn.dot(p); 
36
37         m_co[0] = mn.x();
38         m_co[1] = mn.y();
39         m_co[2] = mn.z();
40         m_co[3] = -md;
41 }
42
43
44 /**
45  * Default constructor
46  */
47 GEN_INLINE
48 MT_Plane3::
49 MT_Plane3(
50 ):
51         MT_Tuple4()
52 {
53         m_co[0] = MT_Scalar(1);
54         m_co[1] = MT_Scalar(0);
55         m_co[2] = MT_Scalar(0);
56         m_co[3] = MT_Scalar(0);
57 }
58
59 /**
60  * Return plane normal
61  */
62
63 GEN_INLINE
64         MT_Vector3
65 MT_Plane3::
66 Normal(
67 ) const {
68         return MT_Vector3(m_co[0],m_co[1],m_co[2]);
69 }
70
71 /**
72  * Return plane scalar i.e the d from n.x + d = 0
73  */
74
75 GEN_INLINE
76         MT_Scalar
77 MT_Plane3::
78 Scalar(
79 ) const {
80         return m_co[3];
81 }
82
83 GEN_INLINE
84         void
85 MT_Plane3::
86 Invert(
87 ) {
88         m_co[0] = -m_co[0];
89         m_co[1] = -m_co[1];
90         m_co[2] = -m_co[2];
91         m_co[3] = -m_co[3];
92 }
93
94
95 /**
96  * Assignment operator
97  */
98
99 GEN_INLINE
100         MT_Plane3 &
101 MT_Plane3::
102 operator = (
103         const MT_Plane3 & rhs
104 ) {
105         m_co[0] = rhs.m_co[0];
106         m_co[1] = rhs.m_co[1];
107         m_co[2] = rhs.m_co[2];
108         m_co[3] = rhs.m_co[3];
109         return *this;
110 }
111
112 /**
113  * Return the distance from a point to the plane
114  */
115
116 GEN_INLINE
117         MT_Scalar
118 MT_Plane3::
119 signedDistance(
120         const MT_Vector3 &v
121 ) const {
122         return Normal().dot(v) + m_co[3];
123 }
124
125
126
127
128