1
2 #include <iostream>
3 #include "moab/Interface.hpp"
4 #ifndef IS_BUILDING_MB
5 #define IS_BUILDING_MB
6 #endif
7 #include "TestUtil.hpp"
8 #include "Internals.hpp"
9 #include "moab/Core.hpp"
10 #include "MBTagConventions.hpp"
11 #include "moab/GeomTopoTool.hpp"
12 #include "InitCGMA.hpp"
13 #include "GeometryQueryTool.hpp"
14 #include "CGMConfig.h"
15
16 #define SENSE_FORWARD 1
17 #define SENSE_REVERSE -1
18 #define SENSE_UNKNOWN 0
19 using namespace moab;
20
21 #define CHKERR(A) do { if (MB_SUCCESS != (A)) { \
22 std::cerr << "Failure (error code " << (A) << ") at " __FILE__ ":" \
23 << __LINE__ << std::endl; \
24 return A; } } while(false)
25
26
27 #ifdef HAVE_OCC_STEP
28 std::string input_cylcube = TestDir + "/io/cylcube.stp";
29 #else
30 std::string input_cylcube = TestDir + "/io/cylcube.sat";
31 #endif
32
33 // Function used to load the test file
34 void read_file( Interface* moab, const char* input_file );
35
36 // Functions containing known sense data
37 ErrorCode load_sat_curve_sense_data( Interface* moab, EntityHandle curve, std::vector<int>& surf_ids_out, std::vector<int>& senses_out );
38 ErrorCode load_stp_curve_sense_data( Interface* moab, EntityHandle curve, std::vector<int>& surf_ids_out, std::vector<int>& senses_out );
39 ErrorCode load_precgm14_stp_curve_sense_data( Interface* moab, EntityHandle curve, std::vector<int>& surf_ids_out, std::vector<int>& senses_out );
40 ErrorCode load_sat_surf_sense_data( Interface* moab, EntityHandle surf, std::vector<int>& vol_ids_out, std::vector<int>& senses_out );
41 ErrorCode load_stp_surf_sense_data( Interface* moab, EntityHandle surf, std::vector<int>& vol_ids_out, std::vector<int>& senses_out );
42 ErrorCode load_precgm14_stp_surf_sense_data( Interface* moab, EntityHandle surf, std::vector<int>& vol_ids_out, std::vector<int>& senses_out );
43
44 // Functions used to compare sense information found in
45 // the model to reference information
46 void check_sense_data( Interface* moab, std::vector<EntityHandle> wrt_ents, std::vector<int> senses,
47 std::vector<int> known_wrt_ids, std::vector<int> known_senses );
48
49 //Function used to get id's from entity handles
50 int geom_id_by_handle( Interface* moab, const EntityHandle set );
51
52 // List of tests in this file
53 void read_cylcube_curve_senses_test();
54 void read_cylcube_surf_senses_test();
55 void delete_mesh_test();
56
57
main(int,char **)58 int main(int /* argc */, char** /* argv */)
59 {
60 int result = 0;
61
62 result += RUN_TEST(read_cylcube_surf_senses_test);
63 result += RUN_TEST(read_cylcube_curve_senses_test);
64
65 return result;
66 }
67
68
read_file(Interface * moab,const char * input_file)69 void read_file( Interface* moab, const char* input_file )
70 {
71 InitCGMA::initialize_cgma();
72 GeometryQueryTool::instance()->delete_geometry();
73
74 ErrorCode rval = moab->load_file( input_file );
75 CHECK_ERR(rval);
76 }
77
78 // Gets the sense data for each curve from a file
79 // containing a cube and a cylinder. It then checks
80 // that this sense data matches the reference
81 // sense data from prior file reads.
read_cylcube_curve_senses_test()82 void read_cylcube_curve_senses_test()
83 {
84 ErrorCode rval;
85 //Open the test file
86 Core moab;
87 Interface* mb = &moab;
88 read_file( mb, input_cylcube.c_str() );
89
90 //Get all curve handles
91 Tag geom_tag;
92 rval = mb->tag_get_handle( GEOM_DIMENSION_TAG_NAME, 1,
93 MB_TYPE_INTEGER, geom_tag, moab::MB_TAG_DENSE|moab::MB_TAG_CREAT );
94 CHECK_ERR(rval);
95
96 // Check that the proper number of curves exist
97 int dim = 1;
98 void *val[] = {&dim};
99 int number_of_curves;
100 rval = mb->get_number_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag,
101 val, 1, number_of_curves );
102 CHECK_ERR(rval);
103 //Step format adds a surface on the barrel of the cylinder.
104 //This created 4 extra surfaces in comparison to the .sat format from Cubit.
105 //(New surface breaks the barrel of the cylinder into two half-pipes)
106 #ifdef HAVE_OCC_STEP
107 CHECK_EQUAL( 18, number_of_curves );
108 #else
109 CHECK_EQUAL( 14, number_of_curves );
110 #endif
111
112 //Get curve handles
113 Range curves;
114 rval = mb->get_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag,
115 val, 1, curves );
116 CHECK_ERR(rval);
117
118 // Establish GeomTopoTool instance needed to get curve data
119 moab::GeomTopoTool gt( mb, false );
120 // Initialize vectors for sense checking
121 std::vector<EntityHandle> surfs;
122 std::vector<int> senses;
123 std::vector<int> known_surf_ids;
124 std::vector<int> known_senses;
125
126 for(unsigned int i = 0; i < curves.size() ; i++)
127 {
128
129 //Clean data from previous curve
130 surfs.clear();
131 senses.clear();
132 //Get sense info for the current curve
133 rval = gt.get_senses( curves[i], surfs, senses );
134 CHECK_ERR(rval);
135
136 //Clear reference data from previous curve
137 known_surf_ids.clear();
138 known_senses.clear();
139 //Load known curve-sense ID data
140 #ifdef HAVE_OCC_STEP
141 if (CGM_MAJOR_VERSION >= 14)
142 {
143 rval = load_stp_curve_sense_data( mb, curves[i], known_surf_ids, known_senses );
144 }
145 else
146 {
147 rval = load_precgm14_stp_curve_sense_data( mb, curves[i], known_surf_ids, known_senses );
148 }
149 CHECK_ERR(rval);
150 #else
151 rval = load_sat_curve_sense_data( mb, curves[i], known_surf_ids, known_senses );
152 CHECK_ERR(rval);
153 #endif
154
155 //Check that each surf and sense has a match in the references
156 check_sense_data( mb, surfs, senses, known_surf_ids, known_senses);
157 }
158 }
159
160
geom_id_by_handle(Interface * moab,const EntityHandle set)161 int geom_id_by_handle( Interface* moab, const EntityHandle set )
162 {
163
164 ErrorCode rval;
165 //Get the id_tag handle
166 Tag id_tag;
167 rval = moab->tag_get_handle( GLOBAL_ID_TAG_NAME, 1, MB_TYPE_INTEGER, id_tag, moab::MB_TAG_DENSE );
168 CHECK_ERR(rval);
169 //Load the ID for the EntHandle given to the function
170 int id;
171 rval = moab->tag_get_data( id_tag, &set, 1, &id );
172 CHECK_ERR(rval);
173 return id;
174 }
175
check_sense_data(Interface * moab,std::vector<EntityHandle> wrt_ents,std::vector<int> senses,std::vector<int> known_wrt_ids,std::vector<int> known_senses)176 void check_sense_data( Interface* moab, std::vector<EntityHandle> wrt_ents, std::vector<int> senses,
177 std::vector<int> known_wrt_ids, std::vector<int> known_senses )
178 {
179
180 //Get ID's of the wrt entities
181 std::vector<int> wrt_ent_ids;
182 for(unsigned int i=0 ; i<wrt_ents.size() ; i++)
183 {
184 wrt_ent_ids.push_back( geom_id_by_handle( moab, wrt_ents[i] ) );
185 }
186
187 for(unsigned int i=0; i< wrt_ent_ids.size() ; i++)
188 {
189 for(unsigned int j=0; j< known_wrt_ids.size(); j++)
190 {
191 if( wrt_ent_ids[i] == known_wrt_ids [j] )
192 {
193 // Make sure the senses of the matching wrt entities
194 // are correct
195 CHECK_EQUAL( senses[i], known_senses[j] );
196 //Once a wrt entity is matched with a known entity,
197 // remove it from the list
198 wrt_ent_ids.erase( wrt_ent_ids.begin()+i );
199 senses.erase( senses.begin()+i );
200 --i;
201 break;
202 }
203 }
204 }
205
206 // After both loops are complete, known_wrt_ents should be empty
207 int leftovers = wrt_ent_ids.size();
208 CHECK_EQUAL( leftovers, 0 );
209
210 }
211
212 //Loads two vectors with reference curve and curve_sense data
load_sat_curve_sense_data(Interface * moab,EntityHandle curve,std::vector<int> & surf_ids_out,std::vector<int> & senses_out)213 ErrorCode load_sat_curve_sense_data( Interface* moab, EntityHandle curve, std::vector<int>& surf_ids_out, std::vector<int>& senses_out )
214 {
215
216 int curve_id = geom_id_by_handle( moab, curve );
217 switch(curve_id)
218 {
219 case 1:
220 surf_ids_out.push_back(1); surf_ids_out.push_back(6);
221 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
222 break;
223
224 case 2:
225 surf_ids_out.push_back(1); surf_ids_out.push_back(5);
226 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
227 break;
228
229 case 3:
230 surf_ids_out.push_back(1); surf_ids_out.push_back(4);
231 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
232 break;
233
234 case 4:
235 surf_ids_out.push_back(1); surf_ids_out.push_back(3);
236 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
237 break;
238
239 case 5:
240 surf_ids_out.push_back(2); surf_ids_out.push_back(6);
241 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
242 break;
243
244 case 6:
245 surf_ids_out.push_back(2); surf_ids_out.push_back(3);
246 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
247 break;
248
249 case 7:
250 surf_ids_out.push_back(2); surf_ids_out.push_back(4);
251 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
252 break;
253
254 case 8:
255 surf_ids_out.push_back(2); surf_ids_out.push_back(5);
256 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
257 break;
258
259 case 9:
260 surf_ids_out.push_back(3); surf_ids_out.push_back(4);
261 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
262 break;
263
264 case 10:
265 surf_ids_out.push_back(3); surf_ids_out.push_back(6);
266 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
267 break;
268
269 case 11:
270 surf_ids_out.push_back(4); surf_ids_out.push_back(5);
271 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
272 break;
273
274 case 12:
275 surf_ids_out.push_back(5); surf_ids_out.push_back(6);
276 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
277 break;
278
279 case 13:
280 surf_ids_out.push_back(7); surf_ids_out.push_back(8);
281 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
282 break;
283
284 case 14:
285 surf_ids_out.push_back(7); surf_ids_out.push_back(9);
286 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
287 break;
288 default:
289 return MB_FAILURE;
290
291 }
292 return MB_SUCCESS;
293 }
294
295 //Loads two vectors with reference curve and curve_sense data
load_stp_curve_sense_data(Interface * moab,EntityHandle curve,std::vector<int> & surf_ids_out,std::vector<int> & senses_out)296 ErrorCode load_stp_curve_sense_data( Interface* moab, EntityHandle curve, std::vector<int>& surf_ids_out, std::vector<int>& senses_out )
297 {
298
299 int curve_id = geom_id_by_handle( moab, curve );
300 switch(curve_id)
301 {
302 case 1:
303 surf_ids_out.push_back(1); surf_ids_out.push_back(6);
304 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_FORWARD);
305 break;
306
307 case 2:
308 surf_ids_out.push_back(1); surf_ids_out.push_back(5);
309 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_FORWARD);
310 break;
311
312 case 3:
313 surf_ids_out.push_back(1); surf_ids_out.push_back(4);
314 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_FORWARD);
315 break;
316
317 case 4:
318 surf_ids_out.push_back(1); surf_ids_out.push_back(3);
319 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_FORWARD);
320 break;
321
322 case 5:
323 surf_ids_out.push_back(2); surf_ids_out.push_back(6);
324 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
325 break;
326
327 case 6:
328 surf_ids_out.push_back(2); surf_ids_out.push_back(5);
329 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
330 break;
331
332 case 7:
333 surf_ids_out.push_back(2); surf_ids_out.push_back(4);
334 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
335 break;
336
337 case 8:
338 surf_ids_out.push_back(2); surf_ids_out.push_back(3);
339 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
340 break;
341
342 case 9:
343 surf_ids_out.push_back(3); surf_ids_out.push_back(4);
344 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
345 break;
346
347 case 10:
348 surf_ids_out.push_back(3); surf_ids_out.push_back(6);
349 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
350 break;
351
352 case 11:
353 surf_ids_out.push_back(4); surf_ids_out.push_back(5);
354 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
355 break;
356
357 case 12:
358 surf_ids_out.push_back(5); surf_ids_out.push_back(6);
359 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
360 break;
361
362 case 13:
363 surf_ids_out.push_back(7); surf_ids_out.push_back(8);
364 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
365 break;
366
367 case 14:
368 surf_ids_out.push_back(7); surf_ids_out.push_back(9);
369 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
370 break;
371 case 15:
372 surf_ids_out.push_back(7); surf_ids_out.push_back(8);
373 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
374 break;
375 case 16:
376 surf_ids_out.push_back(7); surf_ids_out.push_back(10);
377 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
378 break;
379 case 17:
380 surf_ids_out.push_back(8); surf_ids_out.push_back(10);
381 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
382 break;
383 case 18:
384 surf_ids_out.push_back(8); surf_ids_out.push_back(9);
385 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
386 break;
387 default:
388 return MB_FAILURE;
389
390 }
391 return MB_SUCCESS;
392 }
393
load_precgm14_stp_curve_sense_data(Interface * moab,EntityHandle curve,std::vector<int> & surf_ids_out,std::vector<int> & senses_out)394 ErrorCode load_precgm14_stp_curve_sense_data( Interface* moab, EntityHandle curve, std::vector<int>& surf_ids_out, std::vector<int>& senses_out )
395 {
396
397 int curve_id = geom_id_by_handle( moab, curve );
398 switch(curve_id)
399 {
400 case 1:
401 surf_ids_out.push_back(1); surf_ids_out.push_back(6);
402 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
403 break;
404
405 case 2:
406 surf_ids_out.push_back(1); surf_ids_out.push_back(5);
407 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
408 break;
409
410 case 3:
411 surf_ids_out.push_back(1); surf_ids_out.push_back(4);
412 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
413 break;
414
415 case 4:
416 surf_ids_out.push_back(1); surf_ids_out.push_back(3);
417 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
418 break;
419
420 case 5:
421 surf_ids_out.push_back(2); surf_ids_out.push_back(6);
422 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
423 break;
424
425 case 6:
426 surf_ids_out.push_back(2); surf_ids_out.push_back(3);
427 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
428 break;
429
430 case 7:
431 surf_ids_out.push_back(2); surf_ids_out.push_back(4);
432 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
433 break;
434
435 case 8:
436 surf_ids_out.push_back(2); surf_ids_out.push_back(5);
437 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
438 break;
439
440 case 9:
441 surf_ids_out.push_back(3); surf_ids_out.push_back(4);
442 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
443 break;
444
445 case 10:
446 surf_ids_out.push_back(3); surf_ids_out.push_back(6);
447 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
448 break;
449
450 case 11:
451 surf_ids_out.push_back(4); surf_ids_out.push_back(5);
452 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
453 break;
454
455 case 12:
456 surf_ids_out.push_back(5); surf_ids_out.push_back(6);
457 senses_out.push_back(SENSE_FORWARD); senses_out.push_back(SENSE_REVERSE);
458 break;
459
460 case 13:
461 surf_ids_out.push_back(7); surf_ids_out.push_back(8);
462 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
463 break;
464
465 case 14:
466 surf_ids_out.push_back(7); surf_ids_out.push_back(9);
467 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
468 break;
469 case 15:
470 surf_ids_out.push_back(7); surf_ids_out.push_back(8);
471 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
472 break;
473 case 16:
474 surf_ids_out.push_back(7); surf_ids_out.push_back(10);
475 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
476 break;
477 case 17:
478 surf_ids_out.push_back(8); surf_ids_out.push_back(10);
479 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
480 break;
481 case 18:
482 surf_ids_out.push_back(8); surf_ids_out.push_back(9);
483 senses_out.push_back(SENSE_REVERSE); senses_out.push_back(SENSE_FORWARD);
484 break;
485 default:
486 return MB_FAILURE;
487
488 }
489 return MB_SUCCESS;
490 }
491
492 // SURFACE SENSE CHECKING
493 // Gets the sense data for each surface from a file
494 // containing a cube and a cylinder. It then checks
495 // that this sense data matches the reference
496 // sense data from prior file reads.
read_cylcube_surf_senses_test()497 void read_cylcube_surf_senses_test()
498 {
499 ErrorCode rval;
500 //Open the test file
501 Core moab;
502 Interface* mb = &moab;
503 read_file( mb, input_cylcube.c_str() );
504
505 //Get geometry tag for gathering surface information from the mesh
506 Tag geom_tag;
507 rval = mb->tag_get_handle( GEOM_DIMENSION_TAG_NAME, 1, MB_TYPE_INTEGER,
508 geom_tag, moab::MB_TAG_DENSE|moab::MB_TAG_CREAT );
509 CHECK_ERR(rval);
510
511 // Check that the proper number of surfaces exist
512 int dim = 2;
513 void *val[] = {&dim};
514 int number_of_surfs;
515 rval = mb->get_number_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag,
516 val, 1, number_of_surfs );
517 CHECK_ERR(rval);
518 //Step format adds a surface on barrel of the cylinder.
519 // (Breaks it into two half-pipes)
520 #ifdef HAVE_OCC_STEP
521 CHECK_EQUAL( 10, number_of_surfs );
522 #else
523 CHECK_EQUAL( 9, number_of_surfs );
524 #endif
525 // Get surface handles
526 Range surfs;
527 rval = mb->get_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag,
528 val, 1, surfs );
529 CHECK_ERR(rval);
530
531 // Establish GeomTopoTool instance needed to get surf data
532 moab::GeomTopoTool gt( mb, false );
533 std::vector<EntityHandle> vols;
534 std::vector<int> senses;
535 std::vector<int> known_vol_ids;
536 std::vector<int> known_senses;
537
538 for(unsigned int i = 0; i < surfs.size(); i++)
539 {
540 //Clean data from previous surface
541 vols.clear();
542 senses.clear();
543 // Get sense information for the current
544 // surface from the mesh
545 rval = gt.get_senses( surfs[i], vols, senses );
546 CHECK_ERR(rval);
547 //Clear previous reverence data
548 known_vol_ids.clear();
549 known_senses.clear();
550 // Load known surface-volume data
551 // for this surface and check that it's correct
552 #ifdef HAVE_OCC_STEP
553 if (CGM_MAJOR_VERSION >= 14)
554 {
555 rval = load_stp_surf_sense_data( mb, surfs[i], known_vol_ids, known_senses );
556 }
557 else
558 {
559 rval = load_precgm14_stp_surf_sense_data( mb, surfs[i], known_vol_ids, known_senses );
560 }
561 CHECK_ERR(rval);
562 #else
563 rval = load_sat_surf_sense_data( mb, surfs[i], known_vol_ids, known_senses );
564 CHECK_ERR(rval);
565 #endif
566 // Check sense information from the loaded mesh against
567 // reference sense information
568 check_sense_data( mb, vols, senses, known_vol_ids, known_senses );
569
570 }
571
572 }
573
574 //Loads reference surface to volume sense data into the reference vectors
load_sat_surf_sense_data(Interface * moab,EntityHandle surf,std::vector<int> & vol_ids_out,std::vector<int> & senses_out)575 ErrorCode load_sat_surf_sense_data( Interface* moab, EntityHandle surf, std::vector<int>& vol_ids_out, std::vector<int>& senses_out ){
576
577 int surf_id = geom_id_by_handle( moab, surf );
578 switch(surf_id)
579 {
580 case 1:
581 vol_ids_out.push_back(1);
582 senses_out.push_back(SENSE_FORWARD);
583 break;
584
585 case 2:
586 vol_ids_out.push_back(1);
587 senses_out.push_back(SENSE_FORWARD);
588 break;
589
590 case 3:
591 vol_ids_out.push_back(1);
592 senses_out.push_back(SENSE_FORWARD);
593 break;
594
595 case 4:
596 vol_ids_out.push_back(1);
597 senses_out.push_back(SENSE_FORWARD);
598 break;
599
600 case 5:
601 vol_ids_out.push_back(1);
602 senses_out.push_back(SENSE_FORWARD);
603 break;
604
605 case 6:
606 vol_ids_out.push_back(1);
607 senses_out.push_back(SENSE_FORWARD);
608 break;
609
610 case 7:
611 vol_ids_out.push_back(2);
612 senses_out.push_back(SENSE_FORWARD);
613 break;
614
615 case 8:
616 vol_ids_out.push_back(2);
617 senses_out.push_back(SENSE_FORWARD);
618 break;
619
620 case 9:
621 vol_ids_out.push_back(2);
622 senses_out.push_back(SENSE_FORWARD);
623 break;
624 default:
625 return MB_FAILURE;
626
627 }
628 return MB_SUCCESS;
629 }
630
631 //Loads reference surface to volume sense data into the reference vectors
load_stp_surf_sense_data(Interface * moab,EntityHandle surf,std::vector<int> & vol_ids_out,std::vector<int> & senses_out)632 ErrorCode load_stp_surf_sense_data( Interface* moab, EntityHandle surf, std::vector<int>& vol_ids_out, std::vector<int>& senses_out ){
633
634 int surf_id = geom_id_by_handle( moab, surf );
635 switch(surf_id)
636 {
637 case 1:
638 vol_ids_out.push_back(1);
639 senses_out.push_back(SENSE_FORWARD);
640 break;
641
642 case 2:
643 vol_ids_out.push_back(1);
644 senses_out.push_back(SENSE_REVERSE);
645 break;
646
647 case 3:
648 vol_ids_out.push_back(1);
649 senses_out.push_back(SENSE_REVERSE);
650 break;
651
652 case 4:
653 vol_ids_out.push_back(1);
654 senses_out.push_back(SENSE_REVERSE);
655 break;
656
657 case 5:
658 vol_ids_out.push_back(1);
659 senses_out.push_back(SENSE_REVERSE);
660 break;
661
662 case 6:
663 vol_ids_out.push_back(1);
664 senses_out.push_back(SENSE_REVERSE);
665 break;
666
667 case 7:
668 vol_ids_out.push_back(2);
669 senses_out.push_back(SENSE_FORWARD);
670 break;
671
672 case 8:
673 vol_ids_out.push_back(2);
674 senses_out.push_back(SENSE_FORWARD);
675 break;
676
677 case 9:
678 vol_ids_out.push_back(2);
679 senses_out.push_back(SENSE_FORWARD);
680 break;
681
682 case 10:
683 vol_ids_out.push_back(2);
684 senses_out.push_back(SENSE_FORWARD);
685 break;
686 default:
687 std::cout << "Failure to find surface sense reference data. Returning failure..." << std::endl;
688 return MB_FAILURE;
689 }
690 return MB_SUCCESS;
691 }
692
693 //Loads reference surface to volume sense data into the reference vectors
load_precgm14_stp_surf_sense_data(Interface * moab,EntityHandle surf,std::vector<int> & vol_ids_out,std::vector<int> & senses_out)694 ErrorCode load_precgm14_stp_surf_sense_data( Interface* moab, EntityHandle surf, std::vector<int>& vol_ids_out, std::vector<int>& senses_out ){
695
696 int surf_id = geom_id_by_handle( moab, surf );
697 switch(surf_id)
698 {
699 case 1:
700 case 2:
701 case 3:
702 case 4:
703 case 5:
704 case 6:
705 vol_ids_out.push_back(1);
706 senses_out.push_back(SENSE_FORWARD);
707 break;
708
709 case 7:
710 case 8:
711 case 9:
712 case 10:
713 vol_ids_out.push_back(2);
714 senses_out.push_back(SENSE_FORWARD);
715 break;
716
717 default:
718 std::cout << "Failure to find surface sense reference data. Returning failure..." << std::endl;
719 return MB_FAILURE;
720 }
721 return MB_SUCCESS;
722 }
723