Branch data Line data Source code
1 : : #include "iGeom.h"
2 : : #include "iMesh.h"
3 : : #include "iRel.h"
4 : :
5 : : #include "stdio.h"
6 : : #include "stdlib.h"
7 : : #include "string.h"
8 : :
9 : : // clang-format off
10 : :
11 : : #define STRINGIFY_( X ) #X
12 : : #define STRINGIFY( X ) STRINGIFY_( X )
13 : : #ifdef MESHDIR
14 : : #ifdef HAVE_OCC
15 : : #define DEFAULT_GEOM STRINGIFY( MESHDIR/irel/brick.stp )
16 : : #define DEFAULT_MESH STRINGIFY( MESHDIR/irel/brick.h5m )
17 : : #else
18 : : #define DEFAULT_GEOM STRINGIFY( MESHDIR/irel/brick.facet )
19 : : #define DEFAULT_MESH STRINGIFY( MESHDIR/irel/brick.h5m )
20 : : #endif
21 : : #else
22 : : #error Specify MESHDIR to compile test
23 : : #endif
24 : :
25 : : #define CHECK_SIZE_C( type, array, allocated_size, size ) \
26 : : if( NULL == *array || *allocated_size == 0 ) \
27 : : { \
28 : : *array = (type*)malloc( sizeof( type ) * size ); \
29 : : *allocated_size = size; \
30 : : } \
31 : : else if( *allocated_size < size ) \
32 : : { \
33 : : printf( " Array passed in is non-zero but too short.\n" ); \
34 : : }
35 : :
36 : : // clang-format on
37 : :
38 : : typedef void* iRel_EntityHandle;
39 : :
40 : : /*!
41 : : prints out a result string based on the value of error_code
42 : : */
43 : 4 : void handle_error_code( const int result, int* number_failed, int* /*number_not_implemented*/, int* number_successful )
44 : : {
45 [ + - ]: 4 : if( result )
46 : : {
47 : 4 : printf( "Success" );
48 : 4 : ( *number_successful )++;
49 : : }
50 : : else
51 : : {
52 : 0 : printf( "Failure" );
53 : 0 : ( *number_failed )++;
54 : : }
55 : 4 : }
56 : :
57 : 0 : int print_geom_info( iGeom_Instance geom, iBase_EntityHandle gent )
58 : : {
59 : : /* print information about this entity */
60 : : int ent_type;
61 : : int result;
62 : 0 : const char* type_names[] = { "Vertex", "Edge", "Face", "Region" };
63 : :
64 [ # # ]: 0 : iGeom_getEntType( geom, gent, &ent_type, &result );
65 : :
66 [ # # ]: 0 : if( iBase_SUCCESS != result )
67 : : {
68 [ # # ]: 0 : printf( "Trouble getting entity adjacencies or types." );
69 : 0 : return 0;
70 : : }
71 : :
72 [ # # ]: 0 : printf( "%s 0x%lx\n", type_names[ent_type], (unsigned long)gent );
73 : :
74 : 0 : return 1;
75 : : }
76 : :
77 : 0 : int print_mesh_info( iMesh_Instance mesh, iBase_EntityHandle ment )
78 : : {
79 : : /* print information about this entity */
80 : :
81 : : /* get adjacencies first; assume not more than 50 */
82 : 0 : iBase_EntityHandle adj_ents[50], *adj_ents_ptr = adj_ents;
83 : 0 : int ent_types[50], *ent_types_ptr = ent_types;
84 : 0 : int adj_ents_alloc = 50, adj_ents_size, ent_types_size, ent_types_allocated = 50;
85 : : int result;
86 : :
87 : 0 : iBase_TagHandle* ment_tags = NULL;
88 : : int ment_tags_size, ment_tags_alloc;
89 : :
90 : : char** tag_names;
91 : : int i;
92 : :
93 : 0 : const char* type_names[] = { "Vertex", "Edge", "Face", "Region" };
94 : :
95 [ # # ]: 0 : iMesh_getEntAdj( mesh, ment, iBase_ALL_TYPES, &adj_ents_ptr, &adj_ents_alloc, &adj_ents_size, &result );
96 : :
97 [ # # ]: 0 : if( iBase_SUCCESS != result ) return 0;
98 : :
99 : : /* put this ent on the end, then get types */
100 : 0 : adj_ents[adj_ents_size] = ment;
101 : : iMesh_getEntArrType( mesh, adj_ents, adj_ents_size + 1, &ent_types_ptr, &ent_types_allocated, &ent_types_size,
102 [ # # ]: 0 : &result );
103 [ # # ]: 0 : if( iBase_SUCCESS != result )
104 : : {
105 [ # # ]: 0 : printf( "Trouble getting entity adjacencies or types." );
106 : 0 : return 0;
107 : : }
108 : :
109 : : /* get tags on ment */
110 [ # # ]: 0 : iMesh_getAllTags( mesh, ment, &ment_tags, &ment_tags_alloc, &ment_tags_size, &result );
111 : :
112 [ # # ]: 0 : printf( "Trouble getting tags on an entity or their names." );
113 : :
114 : : /* while we're at it, get all the tag names */
115 : :
116 : 0 : tag_names = (char**)malloc( ment_tags_size * sizeof( char* ) );
117 : :
118 [ # # ]: 0 : for( i = 0; i < ment_tags_size; i++ )
119 : : {
120 : 0 : tag_names[i] = (char*)malloc( 120 * sizeof( char ) );
121 [ # # ]: 0 : iMesh_getTagName( mesh, ment_tags[i], tag_names[i], &result, 120 );
122 : : }
123 : :
124 : : /* now print the information */
125 [ # # ]: 0 : printf( "%s %ld:\n", type_names[ent_types[ent_types_size - 1]], (long)ment );
126 [ # # ]: 0 : printf( "Adjacencies:" );
127 [ # # ]: 0 : for( i = 0; i < adj_ents_size; i++ )
128 : : {
129 [ # # ][ # # ]: 0 : if( i > 0 ) printf( ", " );
130 [ # # ]: 0 : printf( "%s %ld", type_names[ent_types[i]], (long)adj_ents[i] );
131 : : }
132 [ # # ]: 0 : printf( "\nTags: \n" );
133 [ # # ]: 0 : for( i = 0; i < ment_tags_size; i++ )
134 : : {
135 : : int tag_type;
136 : :
137 [ # # ]: 0 : printf( "%s ", tag_names[i] );
138 [ # # ]: 0 : iMesh_getTagType( mesh, ment_tags[i], &tag_type, &result );
139 [ # # ]: 0 : if( iBase_SUCCESS != result )
140 [ # # ]: 0 : printf( "(trouble getting type...)\n" );
141 : : else
142 : : {
143 : 0 : char* dum_handle = NULL;
144 : 0 : int dum_handle_alloc = 0, dum_handle_size = 0;
145 : : int int_data;
146 : : double dbl_data;
147 : : iBase_EntityHandle eh_data;
148 : :
149 [ # # # # : 0 : switch( tag_type )
# ]
150 : : {
151 : : case iBase_INTEGER:
152 [ # # ]: 0 : iMesh_getIntData( mesh, ment, ment_tags[i], &int_data, &result );
153 [ # # ]: 0 : printf( "(Int value=%d)", int_data );
154 : 0 : break;
155 : : case iBase_DOUBLE:
156 [ # # ]: 0 : iMesh_getDblData( mesh, ment, ment_tags[i], &dbl_data, &result );
157 [ # # ]: 0 : printf( "(Dbl value=%f)", dbl_data );
158 : 0 : break;
159 : : case iBase_ENTITY_HANDLE:
160 [ # # ]: 0 : iMesh_getEHData( mesh, ment, ment_tags[i], &eh_data, &result );
161 [ # # ]: 0 : printf( "(EH value=%ld)", (long)eh_data );
162 : 0 : break;
163 : : case iBase_BYTES:
164 : 0 : iMesh_getData( mesh, ment, ment_tags[i], (void**)&dum_handle, &dum_handle_alloc, &dum_handle_size,
165 [ # # ]: 0 : &result );
166 [ # # ][ # # ]: 0 : if( NULL != dum_handle && dum_handle_size > 0 ) printf( "(Opaque value=%c)", dum_handle[0] );
[ # # ]
167 : 0 : break;
168 : : }
169 : : }
170 : :
171 [ # # ]: 0 : printf( "\n" );
172 : : }
173 [ # # ]: 0 : printf( "(end tags)\n\n" );
174 : 0 : free( ment_tags );
175 : :
176 : 0 : return 1;
177 : : }
178 : :
179 : : /*!
180 : : @test
181 : : Load Mesh
182 : : @li Load a geom and a mesh file
183 : : */
184 : 1 : int load_geom_mesh_test( const char* geom_filename, const char* mesh_filename, iGeom_Instance geom,
185 : : iMesh_Instance mesh )
186 : : {
187 : : /* load a geom */
188 : : int result;
189 [ + - ]: 1 : iGeom_load( geom, geom_filename, 0, &result, strlen( geom_filename ), 0 );
190 [ - + ]: 1 : if( iBase_SUCCESS != result )
191 : : {
192 [ # # ]: 0 : printf( "ERROR : can not load a geometry\n" );
193 : 0 : return 0;
194 : : }
195 : :
196 : : /* load a mesh */
197 [ + - ]: 1 : iMesh_load( mesh, 0, mesh_filename, 0, &result, strlen( mesh_filename ), 0 );
198 [ - + ]: 1 : if( iBase_SUCCESS != result )
199 : : {
200 [ # # ]: 0 : printf( "ERROR : can not load a mesh\n" );
201 : 0 : return 0;
202 : : }
203 : :
204 : 1 : return 1;
205 : : }
206 : :
207 : : /*!
208 : : @test
209 : : TSTTLasso create relation Test
210 : : @li Create relation between geom and mesh
211 : : */
212 : 1 : int create_relation_test( iRel_Instance assoc, iGeom_Instance geom, iMesh_Instance mesh, iRel_PairHandle* pair )
213 : : {
214 : : int result;
215 : : iBase_Instance iface1, iface2;
216 : : int type1, type2;
217 : : int ent_or_set1, ent_or_set2;
218 : : int status1, status2;
219 : :
220 : : iRel_PairHandle tmp_pair;
221 : 1 : iRel_PairHandle* pair_ptr = &tmp_pair;
222 : 1 : int pairs_alloc = 1, pairs_size;
223 : :
224 : : /* create an relation, entity to set */
225 : : iRel_createPair( assoc, geom, iRel_ENTITY, iRel_IGEOM_IFACE, iRel_ACTIVE, mesh, iRel_SET, iRel_IMESH_IFACE,
226 [ + - ]: 1 : iRel_ACTIVE, pair, &result );
227 [ - + ]: 1 : if( iBase_SUCCESS != result )
228 : : {
229 [ # # ]: 0 : printf( "Couldn't create a new relation.\n" );
230 : 0 : return 0;
231 : : }
232 : :
233 : : iRel_getPairInfo( assoc, *pair, &iface1, &ent_or_set1, &type1, &status1, &iface2, &ent_or_set2, &type2, &status2,
234 [ + - ]: 1 : &result );
235 [ - + ]: 1 : if( iBase_SUCCESS != result )
236 : : {
237 [ # # ]: 0 : printf( "Couldn't retrieve relation info.\n" );
238 : 0 : return 0;
239 : : }
240 [ + - ][ + - ]: 1 : if( iface1 != geom || ent_or_set1 != iRel_ENTITY || type1 != iRel_IGEOM_IFACE || iface2 != mesh ||
[ + - ][ + - ]
[ + - ]
241 [ - + ]: 1 : ent_or_set2 != iRel_SET || type2 != iRel_IMESH_IFACE )
242 : : {
243 [ # # ]: 0 : printf( "Unexpected relation info returned.\n" );
244 : 0 : return 0;
245 : : }
246 : :
247 [ + - ]: 1 : iRel_findPairs( assoc, geom, &pair_ptr, &pairs_alloc, &pairs_size, &result );
248 [ - + ]: 1 : if( iBase_SUCCESS != result )
249 : : {
250 [ # # ]: 0 : printf( "Couldn't find relation pair when querying geom.\n" );
251 : 0 : return 0;
252 : : }
253 [ + - ][ - + ]: 1 : if( pairs_size != 1 || tmp_pair != *pair )
254 : : {
255 [ # # ]: 0 : printf( "Unexpected relation pairs returned when querying geom.\n" );
256 : 0 : return 0;
257 : : }
258 : :
259 [ + - ]: 1 : iRel_findPairs( assoc, mesh, &pair_ptr, &pairs_alloc, &pairs_size, &result );
260 [ - + ]: 1 : if( iBase_SUCCESS != result )
261 : : {
262 [ # # ]: 0 : printf( "Couldn't find relation pair when querying mesh.\n" );
263 : 0 : return 0;
264 : : }
265 [ + - ][ - + ]: 1 : if( pairs_size != 1 || tmp_pair != *pair )
266 : : {
267 [ # # ]: 0 : printf( "Unexpected relation pairs returned when querying mesh.\n" );
268 : 0 : return 0;
269 : : }
270 : :
271 : 1 : return 1;
272 : : }
273 : :
274 : : /*!
275 : : @test
276 : : TSTTLasso relate geom and mesh Test
277 : : @li Check relation between geom and mesh
278 : : */
279 : 1 : int relate_geom_mesh_test( iRel_Instance assoc, iGeom_Instance geom, iMesh_Instance mesh, iRel_PairHandle pair )
280 : : {
281 : : int result;
282 : :
283 : 1 : iBase_EntityHandle* gentities = NULL;
284 : 1 : int gentities_size = 0, gentities_alloc = 0;
285 : :
286 : 1 : iBase_EntitySetHandle* mentity_handles = NULL;
287 : 1 : int mentity_handles_size = 0, mentity_handles_alloc = 0;
288 : :
289 : 1 : const char* dim_tag_name = "GEOM_DIMENSION";
290 : : iBase_TagHandle dim_tag_mesh;
291 : :
292 : : iBase_EntitySetHandle* mentities_vec;
293 : 1 : int mentities_vec_size = 0;
294 : : int i;
295 : :
296 : 1 : iBase_EntitySetHandle* out_mentities = NULL;
297 : 1 : int out_mentities_size = 0, out_mentities_alloc = 0;
298 : :
299 : 1 : iBase_EntitySetHandle* out_mentities2 = NULL;
300 : 1 : int out_mentities2_size = 0, out_mentities2_alloc = 0;
301 : :
302 : 1 : iBase_EntityHandle* out_gentities = NULL;
303 : 1 : int out_gentities_size = 0, out_gentities_alloc = 0;
304 : :
305 : : /* relate geometry entities with coresponding mesh entity sets */
306 [ + - ]: 1 : iGeom_getEntities( geom, NULL, iBase_VERTEX, &gentities, &gentities_alloc, &gentities_size, &result );
307 [ - + ]: 1 : if( iBase_SUCCESS != result )
308 : : {
309 [ # # ]: 0 : printf( "Failed to get gentities by type in relate_geom_mesh_test.\n" );
310 : 0 : return 0;
311 : : }
312 : :
313 [ + - ]: 1 : iRel_inferEntArrRelations( assoc, pair, gentities, gentities_size, 0, &result );
314 [ - + ]: 1 : if( iBase_SUCCESS != result )
315 : : {
316 [ # # ]: 0 : printf( "Failed to relate geom entities in relate_geom_mesh_test.\n" );
317 : 0 : return 0;
318 : : }
319 : :
320 : : /* relate coresponding mesh entity sets for geometry entities */
321 : : /* get 1-dimensional mesh entitysets */
322 [ + - ]: 1 : iMesh_getEntSets( mesh, NULL, 1, &mentity_handles, &mentity_handles_alloc, &mentity_handles_size, &result );
323 [ - + ]: 1 : if( iBase_SUCCESS != result )
324 : : {
325 [ # # ]: 0 : printf( "Problem to get all entity sets.\n" );
326 : 0 : return 0;
327 : : }
328 : :
329 : : /* get geom dimension tags for mesh entitysets */
330 [ + - ]: 1 : iMesh_createTag( mesh, dim_tag_name, 1, iBase_INTEGER, &dim_tag_mesh, &result, 15 );
331 [ + - ][ - + ]: 1 : if( iBase_SUCCESS != result && result != iBase_TAG_ALREADY_EXISTS )
332 : : {
333 [ # # ]: 0 : printf( "Couldn't create geom dim tag for mesh entities.\n" );
334 : 0 : return 0;
335 : : }
336 : :
337 : : /* get 1-dimensional mesh entitysets */
338 : 1 : mentities_vec = (iBase_EntitySetHandle*)malloc( mentity_handles_size * sizeof( iBase_EntitySetHandle ) );
339 [ + + ]: 28 : for( i = 0; i < mentity_handles_size; i++ )
340 : : { /* test */
341 : : int dim;
342 [ + - ]: 27 : iMesh_getEntSetIntData( mesh, mentity_handles[i], dim_tag_mesh, &dim, &result );
343 [ - + ]: 27 : if( iBase_SUCCESS != result ) continue;
344 : :
345 [ + + ]: 27 : if( dim == 1 ) mentities_vec[mentities_vec_size++] = mentity_handles[i];
346 : : }
347 : :
348 [ + - ]: 1 : iRel_inferSetArrRelations( assoc, pair, mentities_vec, mentities_vec_size, 1, &result );
349 [ - + ]: 1 : if( iBase_SUCCESS != result )
350 : : {
351 [ # # ]: 0 : printf( "Failed to relate mesh entities in relate_geom_mesh_test.\n" );
352 : 0 : return 0;
353 : : }
354 : :
355 : : /* relate all geometry and mesh entities */
356 [ + - ]: 1 : iRel_inferAllRelations( assoc, pair, &result );
357 [ - + ]: 1 : if( iBase_SUCCESS != result )
358 : : {
359 [ # # ]: 0 : printf( "Failed to relate all geom and mesh entities in relate_geom_mesh_test.\n" );
360 : 0 : return 0;
361 : : }
362 : :
363 : : /* reset geom entities list and get all geom entities (prev
364 : : only vertices) */
365 : 1 : free( gentities );
366 : 1 : gentities = NULL;
367 : 1 : gentities_alloc = 0;
368 [ + - ]: 1 : iGeom_getEntities( geom, NULL, iBase_ALL_TYPES, &gentities, &gentities_alloc, &gentities_size, &result );
369 [ - + ]: 1 : if( iBase_SUCCESS != result )
370 : : {
371 [ # # ]: 0 : printf( "Failed to get gentities by type in relate_geom_mesh_test.\n" );
372 : 0 : return 0;
373 : : }
374 : :
375 : : /* get related mesh entity sets for geometry entities */
376 : : iRel_getEntArrSetArrRelation( assoc, pair, gentities, gentities_size, 0, &out_mentities, &out_mentities_alloc,
377 [ + - ]: 1 : &out_mentities_size, &result );
378 [ - + ]: 1 : if( iBase_SUCCESS != result )
379 : : {
380 [ # # ]: 0 : printf( "Failed to get geom entities in relate_geom_mesh_test.\n" );
381 : 0 : return 0;
382 : : }
383 : :
384 [ - + ]: 1 : if( out_mentities_size != gentities_size )
385 : : {
386 [ # # ]: 0 : printf( "Number of input geom entities and output mesh entity sets should be same\n" );
387 : 0 : return 0;
388 : : }
389 : :
390 : : /* now try deleting this relation */
391 [ + - ]: 1 : iRel_rmvEntArrRelation( assoc, pair, gentities, gentities_size, 0, &result );
392 [ - + ]: 1 : if( iBase_SUCCESS != result )
393 : : {
394 [ # # ]: 0 : printf( "Failed to remove relation in relate_geom_mesh_test.\n" );
395 : 0 : return 0;
396 : : }
397 : :
398 : : iRel_getEntArrSetArrRelation( assoc, pair, gentities, gentities_size, 0, &out_mentities2, &out_mentities2_alloc,
399 [ + - ]: 1 : &out_mentities2_size, &result );
400 [ - + ]: 1 : if( iBase_SUCCESS == result )
401 : : {
402 [ # # ]: 0 : printf( "Shouldn't have gotten mesh sets in relate_geom_mesh_test.\n" );
403 : 0 : return 0;
404 : : }
405 : :
406 : : /* restore the relation, since we need it later */
407 [ + - ]: 1 : iRel_setEntArrSetArrRelation( assoc, pair, gentities, gentities_size, out_mentities, out_mentities_size, &result );
408 [ - + ]: 1 : if( iBase_SUCCESS != result )
409 : : {
410 [ # # ]: 0 : printf( "Failed to restore relation in relate_geom_mesh_test.\n" );
411 : 0 : return 0;
412 : : }
413 : :
414 : : /* get related geometry entities for mesh entity sets */
415 : : iRel_getSetArrEntArrRelation( assoc, pair, out_mentities, out_mentities_size, 1, &out_gentities,
416 [ + - ]: 1 : &out_gentities_alloc, &out_gentities_size, &result );
417 [ - + ]: 1 : if( iBase_SUCCESS != result )
418 : : {
419 [ # # ]: 0 : printf( "Failed to get mesh entities in relate_geom_mesh_test.\n" );
420 : 0 : return 0;
421 : : }
422 : :
423 [ - + ]: 1 : if( out_mentities_size != out_gentities_size )
424 : : {
425 [ # # ]: 0 : printf( "Number of input mesh entity sets and output geom entities should be same\n" );
426 : 0 : return 0;
427 : : }
428 : 1 : free( mentity_handles );
429 : 1 : mentity_handles = NULL;
430 : 1 : free( gentities );
431 : 1 : gentities = NULL;
432 : 1 : free( mentity_handles );
433 : 1 : mentity_handles = NULL;
434 : 1 : free( out_mentities );
435 : 1 : out_mentities = NULL;
436 : 1 : free( mentities_vec );
437 : 1 : mentities_vec = NULL;
438 : 1 : free( out_gentities );
439 : 1 : out_gentities = NULL;
440 : 1 : return 1;
441 : : }
442 : :
443 : : /*!
444 : : @test
445 : : TSTTAssoc move to test
446 : : @li Move meshes onto the given geometry
447 : : */
448 : 1 : int query_relations_test( iRel_Instance assoc, iGeom_Instance geom, iMesh_Instance mesh, iRel_PairHandle pair )
449 : : {
450 : : int result;
451 : : int i;
452 : :
453 : 1 : iBase_EntityHandle* gentities = NULL;
454 : 1 : int gentities_size = 0, gentities_alloc = 0;
455 : :
456 : 1 : iBase_EntitySetHandle* out_mentities = NULL;
457 : 1 : int out_mentities_size, out_mentities_alloc = 0;
458 : :
459 : 1 : iBase_EntityHandle* out_gentities = NULL;
460 : 1 : int out_gentities_size, out_gentities_alloc = 0;
461 : :
462 : : /* get all the geom entities, and find relation to some mesh entity */
463 [ + - ]: 1 : iGeom_getEntities( geom, NULL, iBase_ALL_TYPES, &gentities, &gentities_alloc, &gentities_size, &result );
464 [ - + ]: 1 : if( iBase_SUCCESS != result )
465 : : {
466 [ # # ]: 0 : printf( "Problem getting all geom entities.\n" );
467 : 0 : return 0;
468 : : }
469 : :
470 : : iRel_getEntArrSetArrRelation( assoc, pair, gentities, gentities_size, 0, &out_mentities, &out_mentities_alloc,
471 [ + - ]: 1 : &out_mentities_size, &result );
472 : : /* might not all be */
473 [ - + ]: 1 : if( iBase_SUCCESS != result )
474 : : {
475 : : char descr[120];
476 : :
477 [ # # ]: 0 : printf( "Failed to get mesh entities related to geom entities in query_relations_test.\n" );
478 : :
479 [ # # ]: 0 : iRel_getDescription( assoc, descr, sizeof( descr ) - 1 );
480 [ # # ]: 0 : printf( "Entities missing relations: %s\n", descr );
481 : :
482 [ # # ]: 0 : for( i = 0; i < gentities_size; i++ )
483 : : {
484 [ # # ]: 0 : print_geom_info( geom, gentities[i] );
485 : : }
486 : :
487 : 0 : return 0;
488 : : }
489 : :
490 : : /* check that they're all non-null */
491 [ - + ]: 1 : if( out_mentities_size != gentities_size )
492 : : {
493 [ # # ]: 0 : printf( "Number of mesh & related geom entities don't match.\n" );
494 : 0 : return 0;
495 : : }
496 : :
497 : : /* check to make sure they're mesh sets; how to do that? */
498 [ + + ]: 28 : for( i = 0; i < out_mentities_size; i++ )
499 : : {
500 : : int is_list;
501 [ + - ]: 27 : iMesh_isList( mesh, (iBase_EntitySetHandle)out_mentities[i], &is_list, &result );
502 [ - + ]: 27 : if( iBase_SUCCESS != result )
503 : : {
504 [ # # ]: 0 : printf( "Entity set returned from classification wasn't valid.\n" );
505 : 0 : return 0;
506 : : }
507 : : }
508 : :
509 : : /* now turn around and check classification of those mesh entities */
510 : : iRel_getSetArrEntArrRelation( assoc, pair, out_mentities, out_mentities_size, 1, &out_gentities,
511 [ + - ]: 1 : &out_gentities_alloc, &out_gentities_size, &result );
512 [ - + ]: 1 : if( iBase_SUCCESS != result )
513 : : {
514 [ # # ]: 0 : printf( "Failed to get geom entities related to mesh entities in query_relations_test.\n" );
515 : 0 : return 0;
516 : : }
517 : :
518 : : /* check that they're all non-null */
519 [ - + ]: 1 : if( out_mentities_size != out_gentities_size )
520 : : {
521 [ # # ]: 0 : printf( "Number of geom & related mesh entities don't match.\n" );
522 : 0 : return 0;
523 : : }
524 : :
525 : 1 : free( gentities );
526 : 1 : gentities = NULL;
527 : 1 : free( out_mentities );
528 : 1 : out_mentities = NULL;
529 : 1 : free( out_gentities );
530 : 1 : out_gentities = NULL;
531 : : /* ok, we're done */
532 : 1 : return 1;
533 : : }
534 : :
535 : 1 : int main( int argc, char* argv[] )
536 : : {
537 : : /* Check command line arg */
538 : 1 : const char* geom_filename = DEFAULT_GEOM;
539 : 1 : const char* mesh_filename = DEFAULT_MESH;
540 : :
541 : : int result;
542 : 1 : int number_tests = 0;
543 : 1 : int number_tests_successful = 0;
544 : 1 : int number_tests_not_implemented = 0;
545 : 1 : int number_tests_failed = 0;
546 : :
547 : : iGeom_Instance geom;
548 : : iMesh_Instance mesh;
549 : : iRel_Instance assoc;
550 : : iRel_PairHandle pair;
551 : :
552 [ + - ]: 1 : printf( "Usage: %s %s\n", geom_filename, mesh_filename );
553 : :
554 [ - + ][ # # ]: 1 : if( argc == 2 && !strcmp( argv[1], "-h" ) )
555 : : {
556 [ # # ]: 0 : printf( "Usage: %s <geom_filename> <mesh_filename>\n", argv[0] );
557 : 0 : return 1;
558 : : }
559 [ - + ]: 1 : else if( argc == 2 )
560 : : {
561 : 0 : geom_filename = argv[1];
562 : 0 : mesh_filename = argv[1];
563 : : }
564 [ - + ]: 1 : else if( argc == 3 )
565 : : {
566 : 0 : geom_filename = argv[1];
567 : 0 : mesh_filename = argv[2];
568 : : }
569 : :
570 : : /* initialize the Geometry */
571 [ + - ]: 1 : iGeom_newGeom( 0, &geom, &result, 0 );
572 : :
573 : : /* initialize the Mesh */
574 [ + - ]: 1 : iMesh_newMesh( 0, &mesh, &result, 0 );
575 : :
576 : : /* initialize the Associate */
577 [ + - ]: 1 : iRel_create( 0, &assoc, &result, 0 );
578 : :
579 : : /* Print out Header information */
580 [ + - ]: 1 : printf( "\n\niRel TEST PROGRAM:\n\n" );
581 : :
582 : : /* load_geom_mesh test */
583 [ + - ]: 1 : printf( " load_geom_mesh: " );
584 [ + - ]: 1 : result = load_geom_mesh_test( geom_filename, mesh_filename, geom, mesh );
585 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
586 : 1 : number_tests++;
587 [ + - ]: 1 : printf( "\n" );
588 : :
589 : : /* create_relation test */
590 [ + - ]: 1 : printf( " create_relation: " );
591 [ + - ]: 1 : result = create_relation_test( assoc, geom, mesh, &pair );
592 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
593 : 1 : number_tests++;
594 [ + - ]: 1 : printf( "\n" );
595 : :
596 : : /* relate_geom_mesh test */
597 [ + - ]: 1 : printf( " relate_geom_mesh: " );
598 [ + - ]: 1 : result = relate_geom_mesh_test( assoc, geom, mesh, pair );
599 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
600 : 1 : number_tests++;
601 [ + - ]: 1 : printf( "\n" );
602 : :
603 : : /* query_relations test */
604 [ + - ]: 1 : printf( " query_relations: " );
605 [ + - ]: 1 : result = query_relations_test( assoc, geom, mesh, pair );
606 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
607 : 1 : number_tests++;
608 [ + - ]: 1 : printf( "\n" );
609 : :
610 : : /* summary */
611 : :
612 [ + - ]: 1 : printf( "\niRel TEST SUMMARY: \n" );
613 [ + - ]: 1 : printf( " Number Tests: %d\n", number_tests );
614 [ + - ]: 1 : printf( " Number Successful: %d\n", number_tests_successful );
615 [ + - ]: 1 : printf( " Number Not Implemented: %d\n", number_tests_not_implemented );
616 [ + - ]: 1 : printf( " Number Failed: %d\n", number_tests_failed );
617 [ + - ]: 1 : printf( "\n\n" );
618 : :
619 [ + - ]: 1 : iRel_destroy( assoc, &result );
620 [ + - ]: 1 : iMesh_dtor( mesh, &result );
621 [ + - ]: 1 : iGeom_dtor( geom, &result );
622 : :
623 : 1 : return number_tests_failed != 0;
624 : : }
|