New files from new booleans
[blender.git] / intern / boolop / intern / BOP_BBox.h
1 /**
2  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version. The Blender
8  * Foundation also sells licenses for use in proprietary software under
9  * the Blender License.  See http://www.blender.org/BL/ for information
10  * about this.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20  *
21  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL/BL DUAL LICENSE BLOCK *****
29  */
30
31 #ifndef BOP_BBOX_H
32 #define BOP_BBOX_H
33
34 #include "MT_Point3.h"
35 #include "BOP_MathUtils.h"
36
37 #define BOP_MAX(a, b) ((a > b) ? a : b)
38 #define BOP_MIN(a, b) ((a < b) ? a : b)
39 #define BOP_ABS(a) ((a < 0) ? -(a) : a)
40
41 class BOP_BBox
42 {
43 public:
44         MT_Scalar m_minX;
45         MT_Scalar m_minY;
46         MT_Scalar m_minZ;
47         MT_Scalar m_maxX;
48         MT_Scalar m_maxY;
49         MT_Scalar m_maxZ;
50         MT_Scalar m_centerX;
51         MT_Scalar m_centerY;
52         MT_Scalar m_centerZ;
53         MT_Scalar m_extentX;
54         MT_Scalar m_extentY;
55         MT_Scalar m_extentZ;
56         
57 public:
58         BOP_BBox();
59         BOP_BBox(const MT_Point3& p1,const MT_Point3& p2,const MT_Point3& p3);
60         inline void add(const MT_Point3& p)
61         {
62                 m_minX = BOP_MIN(m_minX,p[0]);
63                 m_minY = BOP_MIN(m_minY,p[1]);
64                 m_minZ = BOP_MIN(m_minZ,p[2]);
65                 m_maxX = BOP_MAX(m_maxX,p[0]);
66                 m_maxY = BOP_MAX(m_maxY,p[1]);
67                 m_maxZ = BOP_MAX(m_maxZ,p[2]);
68         };
69
70         inline const MT_Scalar getCenterX() const {return m_centerX;};
71         inline const MT_Scalar getCenterY() const {return m_centerY;};
72         inline const MT_Scalar getCenterZ() const {return m_centerZ;};
73
74         inline const MT_Scalar getExtentX() const {return m_extentX;};
75         inline const MT_Scalar getExtentY() const {return m_extentY;};
76         inline const MT_Scalar getExtentZ() const {return m_extentZ;};
77         
78         inline void compute() {
79                 m_extentX = (m_maxX-m_minX)/2.0f;
80                 m_extentY = (m_maxY-m_minY)/2.0f;
81                 m_extentZ = (m_maxZ-m_minZ)/2.0f;
82                 m_centerX = m_minX+m_extentX;
83                 m_centerY = m_minY+m_extentY;
84                 m_centerZ = m_minZ+m_extentZ;
85         };
86
87         inline const bool intersect(const BOP_BBox& b) const {
88           return (!((BOP_comp(m_maxX,b.m_minX)<0) || (BOP_comp(b.m_maxX,m_minX)<0) ||
89                     (BOP_comp(m_maxY,b.m_minY)<0) || (BOP_comp(b.m_maxY,m_minY)<0) ||
90                     (BOP_comp(m_maxZ,b.m_minZ)<0) || (BOP_comp(b.m_maxZ,m_minZ)<0)));
91         };
92         
93         
94 };
95
96 #endif