MOAB: Mesh Oriented datABase  (version 5.5.0)
normals.cpp File Reference
#include "iGeom.h"
#include "iMesh.h"
#include "iRel.h"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "MBiMesh.hpp"
#include "moab/Core.hpp"
+ Include dependency graph for normals.cpp:

Go to the source code of this file.

Macros

#define STRINGIFY_(X)   #X
 
#define STRINGIFY(X)   STRINGIFY_( X )
 
#define CHECK_SIZE_C(type, array, allocated_size, size)
 

Typedefs

typedef void * iRel_EntityHandle
 

Functions

int print_geom_info (iGeom_Instance geom, iBase_EntityHandle gent)
 
int print_mesh_info (iMesh_Instance mesh, iBase_EntityHandle ment)
 
int load_geom_mesh (const char *geom_filename, const char *mesh_filename, iGeom_Instance geom, iMesh_Instance mesh)
 
int create_relation (iRel_Instance assoc, iGeom_Instance geom, iMesh_Instance mesh, iRel_PairHandle *pair)
 
int relate_geom_mesh (iRel_Instance assoc, iGeom_Instance geom, iMesh_Instance mesh, iRel_PairHandle pair)
 
int compute_normals (iRel_Instance assoc, iGeom_Instance geom, iMesh_Instance mesh, iRel_PairHandle pair)
 
int main (int argc, char *argv[])
 

Macro Definition Documentation

◆ CHECK_SIZE_C

#define CHECK_SIZE_C (   type,
  array,
  allocated_size,
  size 
)
Value:
if( NULL == *( array ) || *( allocated_size ) == 0 ) \
{ \
*( array ) = (type*)malloc( sizeof( type ) * ( size ) ); \
*( allocated_size ) = size; \
} \
else if( *( allocated_size ) < ( size ) ) \
{ \
printf( " Array passed in is non-zero but too short.\n" ); \
}

Definition at line 31 of file normals.cpp.

◆ STRINGIFY

#define STRINGIFY (   X)    STRINGIFY_( X )

Definition at line 20 of file normals.cpp.

◆ STRINGIFY_

#define STRINGIFY_ (   X)    #X

Definition at line 19 of file normals.cpp.

Typedef Documentation

◆ iRel_EntityHandle

typedef void* iRel_EntityHandle

Definition at line 42 of file normals.cpp.

Function Documentation

◆ compute_normals()

int compute_normals ( iRel_Instance  assoc,
iGeom_Instance  geom,
iMesh_Instance  mesh,
iRel_PairHandle  pair 
)
  • compute normals onto the given geometry

Definition at line 427 of file normals.cpp.

428 {
429  int result;
430  int i;
431 
432  iBase_EntityHandle* gentities = NULL;
433  int gentities_size = 0, gentities_alloc = 0;
434 
435  iBase_EntitySetHandle* out_mentities = NULL;
436  int out_mentities_size, out_mentities_alloc = 0;
437 
438  /* get all the face geo entities, and find relation to some mesh entity */
439  iGeom_getEntities( geom, NULL, iBase_FACE, &gentities, &gentities_alloc, &gentities_size, &result );
440  if( iBase_SUCCESS != result )
441  {
442  printf( "Problem getting all geom entities.\n" );
443  return 0;
444  }
445  for( i = 0; i < gentities_size; i++ )
446  {
447  print_geom_info( geom, gentities[i] );
448  }
449 
450  iRel_getEntArrSetArrRelation( assoc, pair, gentities, gentities_size, 0, &out_mentities, &out_mentities_alloc,
451  &out_mentities_size, &result );
452  /* might not all be */
453  if( iBase_SUCCESS != result )
454  {
455  printf( "Failed to get mesh entities related to geom entities in compute_normals.\n" );
456  return 0;
457  }
458 
459  /* check that they're all non-null */
460  if( out_mentities_size != gentities_size )
461  {
462  printf( "Number of mesh & related geom entities don't match.\n" );
463  return 0;
464  }
465 
466  /* check to make sure they're mesh sets; how to do that? */
467  for( i = 0; i < out_mentities_size; i++ )
468  {
469  int is_list;
470  iMesh_isList( mesh, (iBase_EntitySetHandle)out_mentities[i], &is_list, &result );
471  if( iBase_SUCCESS != result )
472  {
473  printf( "Entity set returned from classification wasn't valid.\n" );
474  return 0;
475  }
476  }
477 
478  moab::Interface* mb = reinterpret_cast< MBiMesh* >( mesh )->mbImpl;
479  if( !mb ) return 0;
481 
482  moab::Tag idtag;
483  rval = mb->tag_get_handle( "GLOBAL_ID", idtag );
484  if( MB_SUCCESS != rval ) return 0;
485 
486  for( i = 0; i < gentities_size; i++ )
487  {
488 
489  EntityHandle meshSet = (EntityHandle)out_mentities[i];
490  Range faces;
491  rval = mb->get_entities_by_dimension( meshSet, 2, faces ); // MB_CHK_ERR(rval);
492 
493  Range vertices;
494  rval = mb->get_connectivity( faces, vertices );
495 
496  std::vector< double > coords;
497  coords.resize( vertices.size() * 3 );
498  rval = mb->get_coords( vertices, &coords[0] );
499 
500  int id;
501  rval = mb->tag_get_data( idtag, &meshSet, 1, &id );
502  printf( "surface %d has %d faces and %d vertices \n", id, (int)faces.size(), (int)vertices.size() );
503 
504  std::vector< double > normals;
505  normals.resize( 3 * vertices.size() );
506 
507  std::vector< double > on_coordinates;
508  on_coordinates.resize( 3 * vertices.size() );
509 
510  for( int j = 0; j < (int)vertices.size(); j++ )
511  {
512  iGeom_getEntNrmlXYZ( geom, gentities[i], coords[3 * j], coords[3 * j + 1], coords[3 * j + 2],
513  &normals[3 * j], &normals[3 * j + 1], &normals[3 * j + 2], &result );
514  if( iBase_SUCCESS != result )
515  {
516  printf( "Problem getting normals.\n" );
517  return 0;
518  }
519  EntityHandle vertex = vertices[j];
520  rval = mb->tag_get_data( idtag, &vertex, 1, &id );
521  printf( "v: %4d coor: %12.6f %12.6f %12.6f norm: %12.6f %12.6f %12.6f \n", id, coords[3 * j],
522  coords[3 * j + 1], coords[3 * j + 2], normals[3 * j], normals[3 * j + 1], normals[3 * j + 2] );
523  ;
524  }
525  }
526 
527  free( gentities );
528  gentities = NULL;
529  free( out_mentities );
530  out_mentities = NULL;
531  /* ok, we're done */
532  return 1;
533 }

References ErrorCode, geom, moab::Core::get_connectivity(), moab::Core::get_coords(), moab::Core::get_entities_by_dimension(), iBase_FACE, iBase_SUCCESS, iMesh_isList, iRel_getEntArrSetArrRelation, mb, MB_SUCCESS, mesh, print_geom_info(), moab::Range::size(), moab::Core::tag_get_data(), and moab::Core::tag_get_handle().

Referenced by main().

◆ create_relation()

int create_relation ( iRel_Instance  assoc,
iGeom_Instance  geom,
iMesh_Instance  mesh,
iRel_PairHandle pair 
)
  • Create relation between geom and mesh

Definition at line 195 of file normals.cpp.

196 {
197  int result;
198  iBase_Instance iface1, iface2;
199  int type1, type2;
200  int ent_or_set1, ent_or_set2;
201  int status1, status2;
202 
203  iRel_PairHandle tmp_pair;
204  iRel_PairHandle* pair_ptr = &tmp_pair;
205  int pairs_alloc = 1, pairs_size;
206 
207  /* create an relation, entity to set */
209  iRel_ACTIVE, pair, &result );
210  if( iBase_SUCCESS != result )
211  {
212  printf( "Couldn't create a new relation.\n" );
213  return 0;
214  }
215 
216  iRel_getPairInfo( assoc, *pair, &iface1, &ent_or_set1, &type1, &status1, &iface2, &ent_or_set2, &type2, &status2,
217  &result );
218  if( iBase_SUCCESS != result )
219  {
220  printf( "Couldn't retrieve relation info.\n" );
221  return 0;
222  }
223  if( iface1 != geom || ent_or_set1 != iRel_ENTITY || type1 != iRel_IGEOM_IFACE || iface2 != mesh ||
224  ent_or_set2 != iRel_SET || type2 != iRel_IMESH_IFACE )
225  {
226  printf( "Unexpected relation info returned.\n" );
227  return 0;
228  }
229 
230  iRel_findPairs( assoc, geom, &pair_ptr, &pairs_alloc, &pairs_size, &result );
231  if( iBase_SUCCESS != result )
232  {
233  printf( "Couldn't find relation pair when querying geom.\n" );
234  return 0;
235  }
236  if( pairs_size != 1 || tmp_pair != *pair )
237  {
238  printf( "Unexpected relation pairs returned when querying geom.\n" );
239  return 0;
240  }
241 
242  iRel_findPairs( assoc, mesh, &pair_ptr, &pairs_alloc, &pairs_size, &result );
243  if( iBase_SUCCESS != result )
244  {
245  printf( "Couldn't find relation pair when querying mesh.\n" );
246  return 0;
247  }
248  if( pairs_size != 1 || tmp_pair != *pair )
249  {
250  printf( "Unexpected relation pairs returned when querying mesh.\n" );
251  return 0;
252  }
253 
254  return 1;
255 }

References geom, iBase_SUCCESS, iRel_ACTIVE, iRel_createPair, iRel_ENTITY, iRel_findPairs, iRel_getPairInfo, iRel_IGEOM_IFACE, iRel_IMESH_IFACE, iRel_SET, and mesh.

Referenced by main().

◆ load_geom_mesh()

int load_geom_mesh ( const char *  geom_filename,
const char *  mesh_filename,
iGeom_Instance  geom,
iMesh_Instance  mesh 
)
  • Load a geom and a mesh file

Definition at line 169 of file normals.cpp.

170 {
171  /* load a geom */
172  int result;
173  iGeom_load( geom, geom_filename, 0, &result, strlen( geom_filename ), 0 );
174  if( iBase_SUCCESS != result )
175  {
176  printf( "ERROR : can not load a geometry\n" );
177  return 0;
178  }
179 
180  /* load a mesh */
181  iMesh_load( mesh, 0, mesh_filename, 0, &result, strlen( mesh_filename ), 0 );
182  if( iBase_SUCCESS != result )
183  {
184  printf( "ERROR : can not load a mesh\n" );
185  return 0;
186  }
187 
188  return 1;
189 }

References geom, iBase_SUCCESS, iMesh_load, and mesh.

Referenced by main().

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 535 of file normals.cpp.

536 {
537  /* Check command line arg */
538  const char* geom_filename = DEFAULT_GEOM;
539  const char* mesh_filename = DEFAULT_MESH;
540 
541  int result;
542 
543  iGeom_Instance geom;
545  iRel_Instance assoc;
546  iRel_PairHandle pair;
547 
548  printf( "Usage: %s %s\n", geom_filename, mesh_filename );
549 
550  if( argc == 2 && !strcmp( argv[1], "-h" ) )
551  {
552  printf( "Usage: %s <geom_filename> <mesh_filename>\n", argv[0] );
553  return 1;
554  }
555  else if( argc == 2 )
556  {
557  geom_filename = argv[1];
558  mesh_filename = argv[1];
559  }
560  else if( argc == 3 )
561  {
562  geom_filename = argv[1];
563  mesh_filename = argv[2];
564  }
565 
566  /* initialize the Geometry */
567  iGeom_newGeom( 0, &geom, &result, 0 );
568 
569  /* initialize the Mesh */
570  iMesh_newMesh( 0, &mesh, &result, 0 );
571 
572  /* initialize the Associate */
573  iRel_create( 0, &assoc, &result, 0 );
574 
575  printf( " load_geom_mesh: \n" );
576  result = load_geom_mesh( geom_filename, mesh_filename, geom, mesh );
577 
578  printf( " create_relation: \n" );
579  result = create_relation( assoc, geom, mesh, &pair );
580 
581  printf( " relate_geom_mesh: \n" );
582  result = relate_geom_mesh( assoc, geom, mesh, pair );
583 
584  /* compute normals */
585  printf( " compute normals: \n" );
586  result = compute_normals( assoc, geom, mesh, pair );
587 
588  /* summary */
589 
590  iRel_destroy( assoc, &result );
591  iMesh_dtor( mesh, &result );
592  iGeom_dtor( geom, &result );
593 
594  return 0;
595 }

References compute_normals(), create_relation(), geom, iMesh_dtor, iMesh_newMesh, iRel_create, iRel_destroy, load_geom_mesh(), mesh, and relate_geom_mesh().

◆ print_geom_info()

int print_geom_info ( iGeom_Instance  geom,
iBase_EntityHandle  gent 
)

Definition at line 44 of file normals.cpp.

45 {
46  /* print information about this entity */
47  int ent_type;
48  int result;
49  const char* type_names[] = { "Vertex", "Edge", "Face", "Region" };
50 
51  iGeom_getEntType( geom, gent, &ent_type, &result );
52 
53  if( iBase_SUCCESS != result )
54  {
55  printf( "Trouble getting entity adjacencies or types." );
56  return 0;
57  }
58 
59  printf( "%s 0x%lx\n", type_names[ent_type], (unsigned long)gent );
60 
61  return 1;
62 }

References geom, and iBase_SUCCESS.

Referenced by compute_normals().

◆ print_mesh_info()

int print_mesh_info ( iMesh_Instance  mesh,
iBase_EntityHandle  ment 
)

Definition at line 64 of file normals.cpp.

65 {
66  /* print information about this entity */
67 
68  /* get adjacencies first; assume not more than 50 */
69  iBase_EntityHandle adj_ents[500], *adj_ents_ptr = adj_ents;
70  int ent_types[500], *ent_types_ptr = ent_types;
71  int adj_ents_alloc = 500, adj_ents_size, ent_types_size, ent_types_allocated = 500;
72  int result;
73 
74  iBase_TagHandle* ment_tags = NULL;
75  int ment_tags_size, ment_tags_alloc;
76 
77  char** tag_names;
78  int i;
79 
80  const char* type_names[] = { "Vertex", "Edge", "Face", "Region" };
81 
82  iMesh_getEntAdj( mesh, ment, iBase_ALL_TYPES, &adj_ents_ptr, &adj_ents_alloc, &adj_ents_size, &result );
83 
84  if( iBase_SUCCESS != result ) return 0;
85 
86  /* put this ent on the end, then get types */
87  adj_ents[adj_ents_size] = ment;
88  iMesh_getEntArrType( mesh, adj_ents, adj_ents_size + 1, &ent_types_ptr, &ent_types_allocated, &ent_types_size,
89  &result );
90  if( iBase_SUCCESS != result )
91  {
92  printf( "Trouble getting entity adjacencies or types." );
93  return 0;
94  }
95 
96  /* get tags on ment */
97  iMesh_getAllTags( mesh, ment, &ment_tags, &ment_tags_alloc, &ment_tags_size, &result );
98 
99  printf( "Trouble getting tags on an entity or their names." );
100 
101  /* while we're at it, get all the tag names */
102 
103  tag_names = (char**)malloc( ment_tags_size * sizeof( char* ) );
104 
105  for( i = 0; i < ment_tags_size; i++ )
106  {
107  tag_names[i] = (char*)malloc( 120 * sizeof( char ) );
108  iMesh_getTagName( mesh, ment_tags[i], tag_names[i], &result, 120 );
109  }
110 
111  /* now print the information */
112  printf( "%s %ld:\n", type_names[ent_types[ent_types_size - 1]], (long)ment );
113  printf( "Adjacencies:" );
114  for( i = 0; i < adj_ents_size; i++ )
115  {
116  if( i > 0 ) printf( ", " );
117  printf( "%s %ld", type_names[ent_types[i]], (long)adj_ents[i] );
118  }
119  printf( "\nTags: \n" );
120  for( i = 0; i < ment_tags_size; i++ )
121  {
122  int tag_type;
123 
124  printf( "%s ", tag_names[i] );
125  iMesh_getTagType( mesh, ment_tags[i], &tag_type, &result );
126  if( iBase_SUCCESS != result )
127  printf( "(trouble getting type...)\n" );
128  else
129  {
130  char* dum_handle = NULL;
131  int dum_handle_alloc = 0, dum_handle_size = 0;
132  int int_data;
133  double dbl_data;
134  iBase_EntityHandle eh_data;
135 
136  switch( tag_type )
137  {
138  case iBase_INTEGER:
139  iMesh_getIntData( mesh, ment, ment_tags[i], &int_data, &result );
140  printf( "(Int value=%d)", int_data );
141  break;
142  case iBase_DOUBLE:
143  iMesh_getDblData( mesh, ment, ment_tags[i], &dbl_data, &result );
144  printf( "(Dbl value=%f)", dbl_data );
145  break;
146  case iBase_ENTITY_HANDLE:
147  iMesh_getEHData( mesh, ment, ment_tags[i], &eh_data, &result );
148  printf( "(EH value=%ld)", (long)eh_data );
149  break;
150  case iBase_BYTES:
151  iMesh_getData( mesh, ment, ment_tags[i], (void**)&dum_handle, &dum_handle_alloc, &dum_handle_size,
152  &result );
153  if( NULL != dum_handle && dum_handle_size > 0 ) printf( "(Opaque value=%c)", dum_handle[0] );
154  break;
155  }
156  }
157 
158  printf( "\n" );
159  }
160  printf( "(end tags)\n\n" );
161  free( ment_tags );
162 
163  return 1;
164 }

References iBase_ALL_TYPES, iBase_BYTES, iBase_DOUBLE, iBase_ENTITY_HANDLE, iBase_INTEGER, iBase_SUCCESS, iMesh_getAllTags, iMesh_getData, iMesh_getDblData, iMesh_getEHData, iMesh_getEntAdj, iMesh_getEntArrType, iMesh_getIntData, iMesh_getTagName, iMesh_getTagType, and mesh.

◆ relate_geom_mesh()

int relate_geom_mesh ( iRel_Instance  assoc,
iGeom_Instance  geom,
iMesh_Instance  mesh,
iRel_PairHandle  pair 
)
  • Check relation between geom and mesh

Definition at line 260 of file normals.cpp.

261 {
262  int result;
263 
264  iBase_EntityHandle* gentities = NULL;
265  int gentities_size = 0, gentities_alloc = 0;
266 
267  iBase_EntitySetHandle* mentity_handles = NULL;
268  int mentity_handles_size = 0, mentity_handles_alloc = 0;
269 
270  const char* dim_tag_name = "GEOM_DIMENSION";
271  iBase_TagHandle dim_tag_mesh;
272 
273  iBase_EntitySetHandle* mentities_vec;
274  int mentities_vec_size = 0;
275  int i;
276 
277  iBase_EntitySetHandle* out_mentities = NULL;
278  int out_mentities_size = 0, out_mentities_alloc = 0;
279 
280  iBase_EntitySetHandle* out_mentities2 = NULL;
281  int out_mentities2_size = 0, out_mentities2_alloc = 0;
282 
283  iBase_EntityHandle* out_gentities = NULL;
284  int out_gentities_size = 0, out_gentities_alloc = 0;
285 
286  /* relate geometry entities with coresponding mesh entity sets */
287  iGeom_getEntities( geom, NULL, iBase_VERTEX, &gentities, &gentities_alloc, &gentities_size, &result );
288  if( iBase_SUCCESS != result )
289  {
290  printf( "Failed to get gentities by type in relate_geom_mesh.\n" );
291  return 0;
292  }
293 
294  iRel_inferEntArrRelations( assoc, pair, gentities, gentities_size, 0, &result );
295  if( iBase_SUCCESS != result )
296  {
297  printf( "Failed to relate geom entities in relate_geom_mesh.\n" );
298  return 0;
299  }
300 
301  /* relate coresponding mesh entity sets for geometry entities */
302  /* get 1-dimensional mesh entitysets */
303  iMesh_getEntSets( mesh, NULL, 1, &mentity_handles, &mentity_handles_alloc, &mentity_handles_size, &result );
304  if( iBase_SUCCESS != result )
305  {
306  printf( "Problem to get all entity sets.\n" );
307  return 0;
308  }
309 
310  /* get geom dimension tags for mesh entitysets */
311  iMesh_createTag( mesh, dim_tag_name, 1, iBase_INTEGER, &dim_tag_mesh, &result, 15 );
312  if( iBase_SUCCESS != result && result != iBase_TAG_ALREADY_EXISTS )
313  {
314  printf( "Couldn't create geom dim tag for mesh entities.\n" );
315  return 0;
316  }
317 
318  /* get 1-dimensional mesh entitysets */
319  mentities_vec = (iBase_EntitySetHandle*)malloc( mentity_handles_size * sizeof( iBase_EntitySetHandle ) );
320  for( i = 0; i < mentity_handles_size; i++ )
321  { /* test */
322  int dim;
323  iMesh_getEntSetIntData( mesh, mentity_handles[i], dim_tag_mesh, &dim, &result );
324  if( iBase_SUCCESS != result ) continue;
325 
326  if( dim == 1 ) mentities_vec[mentities_vec_size++] = mentity_handles[i];
327  }
328 
329  iRel_inferSetArrRelations( assoc, pair, mentities_vec, mentities_vec_size, 1, &result );
330  if( iBase_SUCCESS != result )
331  {
332  printf( "Failed to relate mesh entities in relate_geom_mesh.\n" );
333  return 0;
334  }
335 
336  /* relate all geometry and mesh entities */
337  iRel_inferAllRelations( assoc, pair, &result );
338  if( iBase_SUCCESS != result )
339  {
340  printf( "Failed to relate all geom and mesh entities in relate_geom_mesh.\n" );
341  return 0;
342  }
343 
344  /* reset geom entities list and get all geom entities (prev
345  only vertices) */
346  free( gentities );
347  gentities = NULL;
348  gentities_alloc = 0;
349  iGeom_getEntities( geom, NULL, iBase_ALL_TYPES, &gentities, &gentities_alloc, &gentities_size, &result );
350  if( iBase_SUCCESS != result )
351  {
352  printf( "Failed to get gentities by type in relate_geom_mesh.\n" );
353  return 0;
354  }
355 
356  /* get related mesh entity sets for geometry entities */
357  iRel_getEntArrSetArrRelation( assoc, pair, gentities, gentities_size, 0, &out_mentities, &out_mentities_alloc,
358  &out_mentities_size, &result );
359  if( iBase_SUCCESS != result )
360  {
361  printf( "Failed to get geom entities in relate_geom_mesh.\n" );
362  return 0;
363  }
364 
365  if( out_mentities_size != gentities_size )
366  {
367  printf( "Number of input geom entities and output mesh entity sets should be same\n" );
368  return 0;
369  }
370 
371  /* now try deleting this relation */
372  iRel_rmvEntArrRelation( assoc, pair, gentities, gentities_size, 0, &result );
373  if( iBase_SUCCESS != result )
374  {
375  printf( "Failed to remove relation in relate_geom_mesh.\n" );
376  return 0;
377  }
378 
379  iRel_getEntArrSetArrRelation( assoc, pair, gentities, gentities_size, 0, &out_mentities2, &out_mentities2_alloc,
380  &out_mentities2_size, &result );
381  if( iBase_SUCCESS == result )
382  {
383  printf( "Shouldn't have gotten mesh sets in relate_geom_mesh.\n" );
384  return 0;
385  }
386 
387  /* restore the relation, since we need it later */
388  iRel_setEntArrSetArrRelation( assoc, pair, gentities, gentities_size, out_mentities, out_mentities_size, &result );
389  if( iBase_SUCCESS != result )
390  {
391  printf( "Failed to restore relation in relate_geom_mesh.\n" );
392  return 0;
393  }
394 
395  /* get related geometry entities for mesh entity sets */
396  iRel_getSetArrEntArrRelation( assoc, pair, out_mentities, out_mentities_size, 1, &out_gentities,
397  &out_gentities_alloc, &out_gentities_size, &result );
398  if( iBase_SUCCESS != result )
399  {
400  printf( "Failed to get mesh entities in relate_geom_mesh.\n" );
401  return 0;
402  }
403 
404  if( out_mentities_size != out_gentities_size )
405  {
406  printf( "Number of input mesh entity sets and output geom entities should be same\n" );
407  return 0;
408  }
409  free( mentity_handles );
410  mentity_handles = NULL;
411  free( gentities );
412  gentities = NULL;
413  free( mentity_handles );
414  mentity_handles = NULL;
415  free( out_mentities );
416  out_mentities = NULL;
417  free( mentities_vec );
418  mentities_vec = NULL;
419  free( out_gentities );
420  out_gentities = NULL;
421  return 1;
422 }

References dim, geom, iBase_ALL_TYPES, iBase_INTEGER, iBase_SUCCESS, iBase_TAG_ALREADY_EXISTS, iBase_VERTEX, iMesh_createTag, iMesh_getEntSetIntData, iMesh_getEntSets, iRel_getEntArrSetArrRelation, iRel_getSetArrEntArrRelation, iRel_inferAllRelations, iRel_inferEntArrRelations, iRel_inferSetArrRelations, iRel_rmvEntArrRelation, iRel_setEntArrSetArrRelation, and mesh.

Referenced by main().