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 _FACETEDBOOLEANTILER
28 : : #define _FACETEDBOOLEANTILER
29 : : #include "CubitDefines.h"
30 : :
31 : : #include "FBDefines.hpp"
32 : : #include "FBStructs.hpp"
33 : :
34 : : class FBTilerChainVert {
35 : :
36 : : public:
37 : 0 : FBTilerChainVert(int v_0, int which_chain) {
38 : 0 : v0 = v_0;
39 : 0 : whichchain = which_chain;
40 : :
41 : 0 : }
42 : 0 : ~FBTilerChainVert() { };
43 : : int v0;
44 : : int whichchain;
45 : : };
46 : :
47 : : class FBTiler {
48 : :
49 : : public:
50 : :
51 : : FBTiler(std::vector<FB_Coord *>& my_verts, int pd, int sd, int sequence,
52 : : double a, double b, double c,
53 : : std::vector<int> *tri_list);
54 : : ~FBTiler();
55 : : CubitStatus Tile_Poly(std::vector<int> *coordlist);
56 : :
57 : : private:
58 : :
59 : : int p_dir;
60 : : int s_dir;
61 : : int parent;
62 : : double xnorm, ynorm, znorm;
63 : : std::vector<FB_Coord *> verts;
64 : : std::vector<int> *my_tri_list;
65 : : int add_triangle(int v1, int v2, int v3);
66 : : // bool reflex_angle(int v0, int v1, int v2, int v1chain);
67 : : bool reflex_angle(int v0, int v1, int v2, std::vector<int> *coordlist);
68 : : std::vector<FBTilerChainVert*> sortedchainlist;
69 : : CubitStatus retriangulate(std::vector<int> *coordlist);
70 : : void dud_from_coord_list(int val, std::vector<int> *ivec);
71 : 0 : inline void decrement_list_ptr(std::vector<int>::iterator& it,
72 : : std::vector<int>::iterator itbegin,
73 : : std::vector<int>::iterator itend)
74 : : {
75 [ # # ][ # # ]: 0 : if ( it == itbegin ) it = itend-1;
76 : 0 : else it--;
77 : 0 : }
78 : :
79 : 0 : inline void increment_list_ptr(std::vector<int>::iterator& it,
80 : : std::vector<int>::iterator itbegin,
81 : : std::vector<int>::iterator itend)
82 : : {
83 : 0 : it++;
84 [ # # ]: 0 : if ( it == itend ) it = itbegin;
85 : 0 : }
86 : :
87 : 0 : inline int get_adjacency(int top, int thisone)
88 : : {
89 : : // This code works because LEFT is defined as 1, RIGHT as 2, and BOTH as 3.
90 : : // Thus LEFT&LEFT = RIGHT&RIGHT = LEFT&BOTH = RIGHT&BOTH = 1;
91 : : // LEFT&RIGHT = 0.
92 : :
93 [ # # ]: 0 : if ( top & thisone ) return 2;
94 : 0 : return 1;
95 : : }
96 : :
97 : : };
98 : :
99 : : #endif
|