Reverting change to decimation to fix compatibility with
[blender.git] / intern / decimation / intern / LOD_MeshBounds.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 #ifndef NAN_INCLUDED_MeshBounds_h
33 #define NAN_INCLUDED_MeshBounds_h
34
35 #include "MEM_SmartPtr.h"
36 #include "LOD_MeshPrimitives.h"
37 #include "LOD_ManMesh2.h"
38 #include "MT_assert.h"
39
40 // simple class to compute the mesh bounds of a manifold mesh,
41
42 class LOD_MeshBounds {
43
44 public :
45         static
46                 LOD_MeshBounds *
47         New(
48         ){
49
50                 MEM_SmartPtr<LOD_MeshBounds> output(new LOD_MeshBounds());              
51                 return output.Release();
52         }
53
54                 void
55         ComputeBounds(
56                 const LOD_ManMesh2 * mesh
57         ){
58                 MT_assert(mesh!=NULL);
59                 MT_assert(mesh->VertexSet().size() > 0);
60
61                 const std::vector<LOD_Vertex> &verts = mesh->VertexSet(); 
62                 
63                 m_min = verts[0].pos;
64                 m_max = verts[0].pos;
65
66                 // iterate through the verts
67
68                 int t;
69                 const int size = verts.size();
70
71                 for (t=1; t< size ; ++t) {
72
73                         UpdateBounds(verts[t].pos,m_min,m_max);
74                 }
75         }
76                                 
77                 MT_Vector3
78         Min(
79         ) const {
80                 return m_min;
81         }
82
83                 MT_Vector3
84         Max(
85         ) const {
86                 return m_max;
87         }
88
89 private :
90
91                 void
92         UpdateBounds(
93                 MT_Vector3 vertex,
94                 MT_Vector3& min,
95                 MT_Vector3& max
96         ) {
97                 if (vertex.x() < min.x()) {
98                         min.x() = vertex.x();
99                 } else
100                 if (vertex.x() > max.x()) {
101                         max.x()= vertex.x();
102                 }
103
104                 if (vertex.y() < min.y()) {
105                         min.y() = vertex.y();
106                 } else
107                 if (vertex.y() > max.y()) {
108                         max.y()= vertex.y();
109                 }
110
111                 if (vertex.z() < min.z()) {
112                         min.z() = vertex.z();
113                 } else
114                 if (vertex.z() > max.z()) {
115                         max.z()= vertex.z();
116                 }
117         }
118
119         LOD_MeshBounds(
120         ) :
121                 m_min(0,0,0),
122                 m_max(0,0,0)
123         {
124         };
125                         
126         MT_Vector3 m_min;
127         MT_Vector3 m_max;
128
129 };
130
131 #endif
132