Branch data Line data Source code
1 : : //
2 : : // File: CubitQuadFacetData.cpp
3 : : //
4 : : // Owner: sjowen
5 : : //
6 : :
7 : : #include "CubitQuadFacetData.hpp"
8 : : #include "CubitPoint.hpp"
9 : : #include "CubitFacetEdge.hpp"
10 : : #include "CubitFacetEdgeData.hpp"
11 : : #include "CubitFacet.hpp"
12 : : #include "CubitFacetData.hpp"
13 : :
14 : : //===========================================================================
15 : : // Function: CubitQuadFacetData
16 : : // Purpose: constructor
17 : : // Notes: defines a quad facet given two existing triangle facets.
18 : : // The points on the facet are also passed in so the quad
19 : : // can be oriented with respect to its triangles
20 : : // Date: 4/11/01
21 : : // Author: sjowen
22 : : //===========================================================================
23 : 0 : CubitQuadFacetData::CubitQuadFacetData(
24 : : CubitFacet *tri_facets[2],
25 : 0 : CubitPoint *points[4] )
26 : : {
27 : 0 : myTriangleFacets[0] = tri_facets[0];
28 : 0 : myTriangleFacets[1] = tri_facets[1];
29 : :
30 : 0 : CubitBoolean found = CUBIT_FALSE;
31 : : CubitPoint *pt;
32 : : int ii, jj, kk;
33 : :
34 [ # # ]: 0 : for (jj=0; jj<2; jj++)
35 : : {
36 [ # # ]: 0 : for (kk=0; kk<3; kk++)
37 : : {
38 [ # # ]: 0 : pt = myTriangleFacets[jj]->point(kk);
39 : 0 : found = CUBIT_FALSE;
40 [ # # ][ # # ]: 0 : for (ii=0; ii<4 && !found; ii++)
41 : : {
42 [ # # ]: 0 : if (points[ii] == pt)
43 : : {
44 : 0 : triToQuadIndex[jj][kk] = ii;
45 : 0 : found = CUBIT_TRUE;
46 : : }
47 : : }
48 : :
49 : : // If assertion occurs, the that points passed to the constructor do
50 : : // not match the points on the triangle facets
51 : :
52 [ # # ]: 0 : assert(found == CUBIT_TRUE);
53 : : }
54 : : }
55 : 0 : }
56 : :
57 : : //===========================================================================
58 : : // Function: CubitQuadFacetData
59 : : // Purpose: constructor
60 : : // Notes: defines a quad facet given its ordered point array.
61 : : // Two triangle facets are created
62 : : // Date: 4/11/01
63 : : // Author: sjowen
64 : : //===========================================================================
65 : 0 : CubitQuadFacetData::CubitQuadFacetData(
66 : : CubitPoint *point0, CubitPoint *point1,
67 : 0 : CubitPoint *point2, CubitPoint *point3 )
68 : : {
69 : :
70 : : // The orientation of the triangles in the quad is arbitrary.
71 : : // We may want to split based on some other criteria (ie. angles)
72 : :
73 [ # # ][ # # ]: 0 : myTriangleFacets[0] = new CubitFacetData( point0, point1, point2 );
74 [ # # ][ # # ]: 0 : myTriangleFacets[1] = new CubitFacetData( point2, point3, point0 );
75 : :
76 : 0 : triToQuadIndex[0][0] = 0;
77 : 0 : triToQuadIndex[0][1] = 1;
78 : 0 : triToQuadIndex[0][2] = 2;
79 : 0 : triToQuadIndex[1][0] = 2;
80 : 0 : triToQuadIndex[1][1] = 3;
81 : 0 : triToQuadIndex[1][2] = 0;
82 : 0 : }
83 : :
84 : : //===========================================================================
85 : : // Function: CubitQuadFacetData
86 : : // Purpose: constructor
87 : : // Notes: defines a quad facet given its ordered edge array.
88 : : // Two triangle facets are created
89 : : // Date: 4/11/01
90 : : // Author: sjowen
91 : : //===========================================================================
92 : 0 : CubitQuadFacetData::CubitQuadFacetData(
93 : : CubitFacetEdge *e0, CubitFacetEdge *e1,
94 : 0 : CubitFacetEdge *e2, CubitFacetEdge *e3 )
95 : : {
96 : : // create the diagonal edge
97 : :
98 [ # # ]: 0 : CubitPoint *p0 = e3->shared_point(e0);
99 [ # # ]: 0 : CubitPoint *p2 = e1->shared_point(e2);
100 [ # # ][ # # ]: 0 : assert(p0 != NULL && p2 != NULL);
101 : :
102 [ # # ][ # # ]: 0 : CubitFacetEdge *e4 = (CubitFacetEdge *) new CubitFacetEdgeData( p0, p2 );
103 : :
104 : : // create the triangles
105 : :
106 [ # # ][ # # ]: 0 : myTriangleFacets[0] = new CubitFacetData( e1, e4, e0 );
107 [ # # ][ # # ]: 0 : myTriangleFacets[1] = new CubitFacetData( e3, e4, e2 );
108 : :
109 : 0 : triToQuadIndex[0][0] = 0;
110 : 0 : triToQuadIndex[0][1] = 1;
111 : 0 : triToQuadIndex[0][2] = 2;
112 : 0 : triToQuadIndex[1][0] = 2;
113 : 0 : triToQuadIndex[1][1] = 3;
114 : 0 : triToQuadIndex[1][2] = 0;
115 : 0 : }
116 : :
117 : : //===========================================================================
118 : : // Function: CubitQuadFacetData
119 : : // Purpose: constructor
120 : : // Notes: defines a quad facet given its ordered point array.
121 : : // Two triangle facets are created
122 : : // Date: 4/11/01
123 : : // Author: sjowen
124 : : //===========================================================================
125 : 0 : CubitQuadFacetData::CubitQuadFacetData(
126 : 0 : CubitPoint *points[4] )
127 : : {
128 : :
129 : : // The orientation of the triangles in the quad is arbitrary.
130 : : // We may want to split based on some other criteria (ie. angles)
131 : :
132 [ # # ][ # # ]: 0 : myTriangleFacets[0] = new CubitFacetData( points[0], points[1], points[2] );
133 [ # # ][ # # ]: 0 : myTriangleFacets[1] = new CubitFacetData( points[2], points[3], points[0] );
134 : :
135 : 0 : triToQuadIndex[0][0] = 0;
136 : 0 : triToQuadIndex[0][1] = 1;
137 : 0 : triToQuadIndex[0][2] = 2;
138 : 0 : triToQuadIndex[1][0] = 2;
139 : 0 : triToQuadIndex[1][1] = 3;
140 : 0 : triToQuadIndex[1][2] = 0;
141 : 0 : }
142 : :
143 : : //===========================================================================
144 : : // Function: ~CubitQuadFacetData
145 : : // Purpose: destructor
146 : : // Date: 4/11/01
147 : : // Author: sjowen
148 : : //===========================================================================
149 [ # # ]: 0 : CubitQuadFacetData::~CubitQuadFacetData()
150 : : {
151 [ # # ][ # # ]: 0 : if (myTriangleFacets[0] == NULL && myTriangleFacets[1] == NULL)
152 : 0 : return;
153 : :
154 [ # # ][ # # ]: 0 : assert(myTriangleFacets[0] && myTriangleFacets[1]);
155 : :
156 : : // determine the dialogonal edge
157 [ # # ]: 0 : CubitPoint *p0 = this->point(0);
158 [ # # ]: 0 : CubitPoint *p2 = this->point(2);
159 : 0 : CubitFacetEdge *dedge = NULL;
160 [ # # ][ # # ]: 0 : if (p0 != NULL && p2 != NULL)
161 : : {
162 [ # # ]: 0 : dedge = p0->shared_edge(p2);
163 : : }
164 : :
165 : : // delete both triangles
166 [ # # ][ # # ]: 0 : delete myTriangleFacets[0];
167 [ # # ][ # # ]: 0 : delete myTriangleFacets[1];
168 : :
169 : : // delete the dialgonal edge
170 [ # # ]: 0 : if (dedge != NULL)
171 : : {
172 [ # # ][ # # ]: 0 : delete dedge;
173 : : }
174 [ # # ]: 0 : }
175 : :
176 : : //===========================================================================
177 : : // Function: ~CubitQuadFacetData
178 : : // Purpose: destructor
179 : : // Date: 4/11/01
180 : : // Author: sjowen
181 : : //===========================================================================
182 : 0 : void CubitQuadFacetData::remove_tri_facets( )
183 : : {
184 : 0 : myTriangleFacets[0] = NULL;
185 : 0 : myTriangleFacets[1] = NULL;
186 : 0 : }
187 : :
188 : : //===========================================================================
189 : : // Function: points
190 : : // Purpose: get the points from the facet
191 : : // Date: 4/11/01
192 : : // Author: sjowen
193 : : //===========================================================================
194 : 0 : void CubitQuadFacetData::points(
195 : : CubitPoint *thepoints[4] )
196 : : {
197 : :
198 : 0 : thepoints[triToQuadIndex[0][0]] = myTriangleFacets[0]->point(0);
199 : 0 : thepoints[triToQuadIndex[0][1]] = myTriangleFacets[0]->point(1);
200 : 0 : thepoints[triToQuadIndex[0][2]] = myTriangleFacets[0]->point(2);
201 : 0 : thepoints[triToQuadIndex[1][0]] = myTriangleFacets[1]->point(0);
202 : 0 : thepoints[triToQuadIndex[1][1]] = myTriangleFacets[1]->point(1);
203 : 0 : thepoints[triToQuadIndex[1][2]] = myTriangleFacets[1]->point(2);
204 : 0 : }
205 : :
206 : : //===========================================================================
207 : : // Function: point
208 : : // Purpose: get the point from the facet
209 : : // Date: 11/28/2002
210 : : // Author: sjowen
211 : : //===========================================================================
212 : 0 : CubitPoint *CubitQuadFacetData::point( int index )
213 : : {
214 : : int ii, jj;
215 [ # # ]: 0 : for (ii=0; ii<2; ii++)
216 : : {
217 [ # # ]: 0 : for (jj=0; jj<3; jj++)
218 : : {
219 [ # # ]: 0 : if (triToQuadIndex[ii][jj] == index)
220 : : {
221 : 0 : return myTriangleFacets[ii]->point(jj);
222 : : }
223 : : }
224 : : }
225 : 0 : assert(0); // index is probably out of range
226 : : return NULL;
227 : : }
228 : :
229 : : //===========================================================================
230 : : // Function: edge
231 : : // Purpose: get the edge from the facet
232 : : // Date: 11/28/2002
233 : : // Author: sjowen
234 : : //===========================================================================
235 : 0 : CubitFacetEdge *CubitQuadFacetData::edge( int index )
236 : : {
237 : : int ii, jj;
238 : 0 : CubitPoint *p0 = NULL;
239 : 0 : CubitPoint *p1 = NULL;
240 : 0 : int index1 = (index + 1) % 4;
241 [ # # ]: 0 : for (ii=0; ii<2; ii++)
242 : : {
243 [ # # ]: 0 : for (jj=0; jj<3; jj++)
244 : : {
245 [ # # ]: 0 : if (triToQuadIndex[ii][jj] == index)
246 : : {
247 : 0 : p0 = myTriangleFacets[ii]->point(jj);
248 : : }
249 [ # # ]: 0 : else if ( triToQuadIndex[ii][jj] == index1 )
250 : : {
251 : 0 : p1 = myTriangleFacets[ii]->point(jj);
252 : : }
253 : : }
254 : : }
255 [ # # ][ # # ]: 0 : assert(p0 != NULL && p1 != NULL); // index is probably out of range
256 : :
257 : 0 : return p0->shared_edge( p1 );
258 : : }
259 : :
260 : :
261 : : //===========================================================================
262 : : // Function: get_tri_facet
263 : : // Purpose: return the underlying triangle of which the point_ptr is a vertex
264 : : // Date: 11/28/2002
265 : : // Author: sjowen
266 : : //===========================================================================
267 : 0 : CubitFacet *CubitQuadFacetData::get_tri_facet_at_point( CubitPoint *point_ptr )
268 : : {
269 : : int ii, jj;
270 [ # # ]: 0 : for (ii=0; ii<2; ii++)
271 : : {
272 [ # # ]: 0 : for (jj=0; jj<3; jj++)
273 : : {
274 [ # # ]: 0 : if (myTriangleFacets[ii]->point(jj) == point_ptr)
275 : : {
276 : 0 : return myTriangleFacets[ii];
277 : : }
278 : : }
279 : : }
280 : 0 : assert(0); // point isn't on facet
281 : : return NULL;
282 : : }
283 : :
|