Branch data Line data Source code
1 : : /*
2 : : *
3 : : *
4 : : * Copyright (C) 2004 Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000
5 : : * with Sandia Corporation, the U.S. Government retains certain rights in this software.
6 : : *
7 : : * This file is part of facetbool--contact via [email protected]
8 : : *
9 : : * This library is free software; you can redistribute it and/or
10 : : * modify it under the terms of the GNU Lesser General Public
11 : : * License as published by the Free Software Foundation; either
12 : : * version 2.1 of the License, or (at your option) any later version.
13 : : *
14 : : * This library is distributed in the hope that it will be useful,
15 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 : : * Lesser General Public License for more details.
18 : : *
19 : : * You should have received a copy of the GNU Lesser General Public
20 : : * License along with this library; if not, write to the Free Software
21 : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 : : *
23 : : *
24 : : *
25 : : */
26 : :
27 : : #ifndef _KDTREE
28 : : #define _KDTREE
29 : : #include <vector>
30 : :
31 : : #include "FBStructs.hpp"
32 : :
33 : : class TreeStack {
34 : :
35 : : public:
36 : :
37 : 0 : TreeStack(int imin, int imax, int cut_dir, int iseq) {
38 : 0 : cuttingdir = cut_dir;
39 : 0 : min = imin;
40 : 0 : max = imax;
41 : 0 : sequence = iseq;
42 : 0 : }
43 : :
44 : 0 : ~TreeStack() { }
45 : :
46 : : int min, max, cuttingdir, sequence;
47 : : };
48 : :
49 : : class KDTree
50 : : {
51 : :
52 : : public:
53 : :
54 : : KDTree();
55 : : ~KDTree();
56 : : void box_kdtree_intersect(FSBoundingBox& bbox, int *count, int *indexlist) const;
57 : : int makeKDTree(int npoly, const FSBOXVECTOR& boxlist);
58 : :
59 : : private:
60 : :
61 : : double epsilonkd;
62 : : int numtris;
63 : : FSBoundingBox* *treebox;
64 : : int *nextbranch;
65 : : FSBOXVECTOR boxlistptr;
66 : : // std::vector<FSBoundingBox* > boxlist;
67 : : int *isequence;
68 : : FSBoundingBox* getbox(int min, int max);
69 : : void find_the_median(int k, int l, int r, double *array, int *ia);
70 : : int getcuttingdirection(FSBoundingBox* box);
71 : 0 : inline void SWAP(int &x, int &y)
72 : : {
73 : : int temp;
74 : 0 : temp = x;
75 : 0 : x = y;
76 : 0 : y = temp;
77 : 0 : }
78 : : double rayxstart, rayystart, rayzstart, dx, dy, dz;
79 : : bool rayintersectsbox(FSBoundingBox *box);
80 : 0 : inline double MAXX(double a, double b) {
81 [ # # ]: 0 : if ( a > b ) return a;
82 : 0 : else return b;
83 : : }
84 : 0 : inline double MINN(double a, double b) {
85 [ # # ]: 0 : if ( a < b ) return a;
86 : 0 : else return b;
87 : : }
88 : : };
89 : :
90 : : #endif
|