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 _FBSTRUCTS
28 : : #define _FBSTRUCTS
29 : : #include <vector>
30 : : #include <list>
31 : : #include "CubitDefines.h"
32 : : #include "FBDefines.hpp"
33 : :
34 : : class FSBoundingBox {
35 : : public:
36 : 0 : FSBoundingBox() { }
37 : 0 : FSBoundingBox(float xmi, float ymi, float zmi, float xma, float yma, float zma)
38 : : {
39 : 0 : xmin = xmi; xmax = xma; ymin = ymi; ymax = yma; zmin = zmi; zmax = zma;
40 : 0 : }
41 : 0 : ~FSBoundingBox() { }
42 : : float xmin, xmax, ymin, ymax, zmin, zmax;
43 : : };
44 : :
45 : : typedef std::vector<FSBoundingBox* > FSBOXVECTOR;
46 : :
47 : : class FB_Coord {
48 : :
49 : : public:
50 : 0 : FB_Coord(double x, double y, double z) {
51 : 0 : coord[0] = x; coord[1] = y; coord[2] = z;
52 : 0 : is_on_boundary = false;
53 : 0 : }
54 : 0 : ~FB_Coord() { }
55 : : double coord[3];
56 : : bool is_on_boundary;
57 : :
58 : : private:
59 : :
60 : : };
61 : :
62 : : class FB_Edge {
63 : :
64 : : public:
65 : 0 : FB_Edge(int vert0, int vert1, int vert0_type, int vert1_type, bool is_intersection) {
66 : 0 : v0 = vert0; v1 = vert1;
67 : 0 : v0_type = vert0_type; v1_type = vert1_type;
68 : 0 : mark = false;
69 : 0 : num_times = 0;
70 : 0 : slope = 0.0;
71 : 0 : quadrant = 0;
72 [ # # ]: 0 : if ( is_intersection == true )
73 : 0 : edge_type = INTERSECTION_EDGE;
74 : : else
75 : 0 : edge_type = UNKNOWN;
76 : 0 : is_intersection_edge = is_intersection;
77 : 0 : cubitedgeindex = 0;
78 : 0 : }
79 : : FB_Edge();
80 : 0 : ~FB_Edge() { }
81 : : int v0, v1;
82 : : int v0_type, v1_type;
83 : : int edge_type;
84 : : bool mark;
85 : : bool is_intersection_edge;
86 : : int num_times;
87 : : double slope;
88 : : unsigned int quadrant;
89 : : int cubitedgeindex;
90 : :
91 : :
92 : :
93 : :
94 : :
95 : : };
96 : :
97 : : class FB_Triangle {
98 : :
99 : : public:
100 : 0 : FB_Triangle(int vert0, int vert1, int vert2, int myparent, int csvalue,
101 [ # # ]: 0 : int c0value, int c1value, int c2value) {
102 : 0 : v0 = vert0; v1 = vert1; v2 = vert2;
103 : 0 : dudded = false;
104 : 0 : parent = myparent;
105 : 0 : cubitsurfaceindex = csvalue;
106 : 0 : cubitedge0index = c0value;
107 : 0 : cubitedge1index = c1value;
108 : 0 : cubitedge2index = c2value;
109 : 0 : }
110 : : FB_Triangle();
111 [ # # ]: 0 : ~FB_Triangle() {
112 [ # # ][ # # ]: 0 : for(size_t i = 0; i < edge_list.size(); i++)
113 : : {
114 [ # # ][ # # ]: 0 : delete edge_list[i];
[ # # ]
115 : : }
116 : :
117 : 0 : }
118 : : //! Util function to determine whether two verts are in a Triangle.
119 : : bool are_fb_coords_in_fb_triangle(int fb_vert_index_1,
120 : : int fb_vert_index_2)
121 : : {
122 : : if((fb_vert_index_1 == v0 || fb_vert_index_1 == v1 ||
123 : : fb_vert_index_1 == v2) && (fb_vert_index_2== v0 ||
124 : : fb_vert_index_2 == v1 || fb_vert_index_2 == v2)){
125 : : return true;
126 : : }
127 : : return false;
128 : : }
129 : :
130 : : int v0, v1, v2;
131 : : FSBoundingBox boundingbox;
132 : : double a, b, c, d; // plane coefficients
133 : : bool dudded;
134 : : std::vector<FB_Edge*> edge_list;
135 : : int parent;
136 : : int cubitsurfaceindex;
137 : : int cubitedge0index, cubitedge1index, cubitedge2index;
138 : : };
139 : :
140 : : class VertexStuff {
141 : :
142 : : public:
143 : 0 : VertexStuff(int vert, int vert_type, double p_coord, double s_coord)
144 : 0 : { v0 = vert;
145 : 0 : v0type = vert_type;
146 : 0 : p_dir_coord = p_coord;
147 : 0 : s_dir_coord = s_coord;
148 : 0 : }
149 : :
150 : 0 : ~VertexStuff() {
151 [ # # ]: 0 : edge_list.clear();
152 : 0 : }
153 : :
154 : : int v0;
155 : : int v0type;
156 : : double p_dir_coord, s_dir_coord;
157 : :
158 : : std::vector<FB_Edge*> edge_list;
159 : : };
160 : :
161 : : class vertstuffcompfn_less {
162 : :
163 : : public:
164 : 0 : bool operator()(const VertexStuff* vfirst, const VertexStuff* vsecond) const
165 : : {
166 [ # # ]: 0 : if ( vfirst->p_dir_coord < vsecond->p_dir_coord ) return true;
167 [ # # ]: 0 : else if ( vfirst->p_dir_coord > vsecond->p_dir_coord ) return false;
168 : : else {
169 [ # # ]: 0 : if ( vfirst->s_dir_coord < vsecond->s_dir_coord ) return true;
170 : 0 : else return false;
171 : : }
172 : : }
173 : : };
174 : :
175 : : class edgecompfn_less {
176 : :
177 : : public:
178 : 0 : bool operator()(const FB_Edge* efirst, const FB_Edge* esecond) const
179 : : {
180 [ # # ]: 0 : if ( efirst->quadrant < esecond->quadrant ) return true;
181 [ # # ]: 0 : if ( efirst->quadrant > esecond->quadrant ) return false;
182 : :
183 [ # # ]: 0 : if ( efirst->slope < esecond->slope ) return true;
184 : 0 : else return false;
185 : :
186 : : }
187 : : };
188 : :
189 : : class edgecompfn_more {
190 : :
191 : : public:
192 : : bool operator()(const FB_Edge* efirst, const FB_Edge* esecond) const
193 : : {
194 : : if ( efirst->quadrant > esecond->quadrant ) return true;
195 : : if ( efirst->quadrant < esecond->quadrant ) return false;
196 : : // if ( efirst->quadrant > esecond->quadrant ) return true;
197 : :
198 : : if ( efirst->slope < esecond->slope ) return false;
199 : : else return true;
200 : :
201 : : }
202 : : };
203 : :
204 : : #endif
|