MOAB: Mesh Oriented datABase  (version 5.5.0)
iMesh.h
Go to the documentation of this file.
1 #ifndef _ITAPS_iMesh
2 #define _ITAPS_iMesh
3 
4 #include "iBase.h"
5 #include "iMesh_protos.h"
6 
7 /***************************************************************************/ /**
8  * \ingroup
9  *VersionNumbers
10  * \brief Compile time
11  *version number
12  *digits
13  *
14  * iMesh maintains a
15  *major, minor and
16  *patch digit in its
17  *version number.
18  * Technically
19  *speaking, there is
20  *not much practical
21  *value in patch digit
22  * for an interface
23  *specification. A
24  *patch release is
25  *typically only used
26  * for bug fix
27  *releases. Although
28  *it is rare,
29  *sometimes a bug fix
30  * necessitates an API
31  *change. So, we
32  *define a patch digit
33  *for iMesh.
34  ******************************************************************************/
35 #define IMESH_VERSION_MAJOR ITAPS_VERSION_MAJOR
36 #define IMESH_VERSION_MINOR ITAPS_VERSION_MINOR
37 #define IMESH_VERSION_PATCH ITAPS_VERSION_PATCH
38 
39 /***************************************************************************/ /**
40  * \ingroup
41  *VersionNumbers
42  * \brief Maintain
43  *backward
44  *compatibility with
45  *old version symbol
46  *names
47  ******************************************************************************/
48 #define IMESH_MAJOR_VERSION IMESH_VERSION_MAJOR
49 #define IMESH_MINOR_VERSION IMESH_VERSION_MINOR
50 #define IMESH_PATCH_VERSION IMESH_VERSION_PATCH
51 
52 /***************************************************************************/ /**
53  * \ingroup
54  *VersionNumbers
55  * \brief Version
56  *Comparison
57  *
58  * Evaluates to true
59  *at CPP time if the
60  *version of iMesh
61  *currently being
62  * compiled is greater
63  *than or equal to the
64  *version specified.
65  ******************************************************************************/
66 #define IMESH_VERSION_GE( Maj, Min, Pat ) ITAPS_VERSION_GE( Maj, Min, Pat )
67 
68 /***************************************************************************/ /**
69  * \ingroup
70  *VersionNumbers
71  * \brief Compose
72  *string represention
73  *of the iMesh version
74  *number
75  ******************************************************************************/
76 #define IMESH_VERSION_STRING ITAPS_VERSION_STRING_( iMesh )
77 
78 /***************************************************************************/ /**
79  * \ingroup
80  *VersionNumbers
81  * \brief Compose a
82  *symbol name derived
83  *from the current
84  *iMesh version
85  *number.
86  ******************************************************************************/
87 #define IMESH_VERSION_TAG ITAPS_VERSION_TAG_( iMesh )
88 
89 /***************************************************************************/ /**
90  * \ingroup
91  *VersionNumbers
92  * \brief Define
93  *iMesh_newMesh symbol
94  *such that it depends
95  *on version number.
96  *
97  * Note: We ran into
98  *problems with this
99  *as it influences or
100  *is influenced by
101  * fortran name
102  *mangling and so
103  *breaks fortran
104  *compilation. So,
105  *this is currently
106  *disabled.
107  ******************************************************************************/
108 #define IMESH_NEW_MESH_NAME__( A, B, C ) A##_##B##_##C
109 #define IMESH_NEW_MESH_NAME_( A, B, C ) IMESH_NEW_MESH_NAME__( A, B, C )
110 #define IMESH_NEW_MESH_NAME( A ) IMESH_NEW_MESH_NAME_( A, IMESH_VERSION_MAJOR, IMESH_VERSION_MINOR )
111 /*
112 #undef iMesh_newMesh
113 #define iMesh_newMesh IMESH_NEW_MESH_NAME(iMesh_newMesh)
114 */
115 
116 #ifdef __cplusplus
117 extern "C" {
118 #endif
119 
120 /***************************************************************************/ /**
121  * \ingroup Datatypes
122  * \brief iMesh
123  *instance
124  ******************************************************************************/
125 typedef struct iMesh_Instance_Private* iMesh_Instance;
126 
127 /***************************************************************************/ /**
128  * \ingroup Datatypes
129  * \brief Entity
130  *Topology
131  ******************************************************************************/
133 {
135  /**< MIN symbol used to facilitate iteration over topologies */
137  /**< a 0D entity (e.g. a vertex) */
139  /**< a 1D entity (e.g. an edge) */
141  /**< a general 2D entity */
143  /**< a specific 2D entity bounded by 3 edge entities */
145  /**< a specific 2D entity bounded by 4 edge entities */
147  /**< a general 3D entity */
149  /**< a specific 3D entity bounded by 4 triangle entities */
151  /**< a specific 3D entity bounded by 6 quadrilateral entities */
152  iMesh_PRISM,
153  /**< a specific 3D entity bounded by a combination of 3 quadrilateral
154  entities and 2 triangle entities */
156  /**< a specific 3D entity bounded by a combination of 1 quadrilateral
157  entity and 4 triangle entities */
159  /**< a hexahedral entity with one collapsed edge */
161  /**< used only in queries to request information about all topologies */
163  /**< MAX symbol used to facilitate iteration over topologies */
164 };
165 
166 /***************************************************************************/ /**
167  * \ingroup
168  *ErrorHandling \brief
169  *Get the error type
170  *returned from the
171  *last iMesh function
172  ******************************************************************************/
173 void iMesh_getErrorType( iMesh_Instance instance,
174  /**< [in] iMesh instance handle */
175  int* error_type
176  /**< [out] Error type returned from last iMesh function
177  (see iBase_ErrorType) */
178 
179 );
180 
181 /***************************************************************************/ /**
182  * \ingroup
183  *ErrorHandling \brief
184  *Get a description of
185  *the error returned
186  *from the last iMesh
187  *function
188  ******************************************************************************/
189 void iMesh_getDescription( iMesh_Instance instance,
190  /**< [in] iMesh instance handle */
191  char* descr,
192  /**< [in,out] Pointer to a character string to be filled with a
193  description of the error from the last iMesh function */
194  int descr_len
195  /**< [in] Length of the character string pointed to by descr
196  (\ref strlen) */
197 );
198 
199 /***************************************************************************/ /**
200  * \ingroup
201  *Initialization
202  * \brief Construct a
203  *new iMesh instance
204  *
205  ******************************************************************************/
206 
207 void iMesh_newMesh( const char* options,
208  /**< [in] Pointer to implementation-specific options string
209  (\ref options) */
210  iMesh_Instance* instance,
211  /**< [in] iMesh instance handle */
212  int* err,
213  /**< [out] Returned Error status (see iBase_ErrorType) */
214  int options_len
215  /**< [in] Length of the character string pointed to by options
216  (\ref strlen) */
217 );
218 
219 /***************************************************************************/ /**
220  * \ingroup
221  *Initialization
222  * \brief Destroy an
223  *iMesh instance
224  *
225  ******************************************************************************/
226 
227 void iMesh_dtor( iMesh_Instance instance,
228  /**< [in] iMesh instance handle */
229  int* err
230  /**< [out] Returned Error status (see iBase_ErrorType) */
231 );
232 
233 /***************************************************************************/ /**
234  * \ingroup
235  *Initialization
236  * \brief Load a mesh
237  *from a file
238  *
239  * Load a mesh from a
240  *file. If entity set
241  *is specified, loaded
242  *mesh is added to
243  *that set; specify
244  *root set if that is
245  *not desired.
246  ******************************************************************************/
247 
248 void iMesh_load( iMesh_Instance instance,
249  /**< [in] iMesh instance handle */
250  const iBase_EntitySetHandle entity_set_handle,
251  /**< [in] Set to which loaded mesh will be added, otherwise root */
252  const char* name,
253  /**< [in] File name from which mesh is to be loaded */
254  const char* options,
255  /**< [in] Pointer to implementation-specific options string
256  (\ref options) */
257  int* err,
258  /**< [out] Returned Error status (see iBase_ErrorType) */
259  int name_len,
260  /**< [in] Length of the file name character string
261  (\ref strlen) */
262  int options_len
263  /**< [in] Length of the options character string
264  (\ref strlen) */
265 );
266 
267 /***************************************************************************/ /**
268  * \ingroup
269  *Initialization
270  * \brief Save a mesh
271  *to a file
272  *
273  * Save a mesh to a
274  *file. If entity set
275  *is specified, save
276  *only the mesh
277  *contained in that
278  *set.
279  ******************************************************************************/
280 
281 void iMesh_save( iMesh_Instance instance,
282  /**< [in] iMesh instance handle */
283  const iBase_EntitySetHandle entity_set_handle,
284  /**< [in] Entity set being saved */
285  const char* name,
286  /**< [in] File name to which mesh is to be saved */
287  const char* options,
288  /**< [in] Pointer to implementation-specific options string
289  (\ref options) */
290  int* err,
291  /**< [out] Returned Error status (see iBase_ErrorType) */
292  const int name_len,
293  /**< [in] Length of the file name character string
294  (\ref strlen) */
295  int options_len
296  /**< [in] Length of the options character string
297  (\ref strlen) */
298 );
299 
300 /***************************************************************************/ /**
301  * \ingroup
302  *Initialization
303  * \brief Get handle
304  *of the root set for
305  *this instance
306  *
307  * Get handle of the
308  *root set for this
309  *instance. All mesh
310  *entities in this
311  *instance can be
312  *accessed from this
313  *set.
314  ******************************************************************************/
315 
316 void iMesh_getRootSet( iMesh_Instance instance,
317  /**< [in] iMesh instance handle */
319  /**< [out] Pointer to set handle returned from function */
320  int* err
321  /**< [out] Returned Error status (see iBase_ErrorType) */
322 );
323 
324 /***************************************************************************/ /**
325  * \ingroup
326  *Initialization
327  * \brief Get the
328  *geometric dimension
329  *of mesh represented
330  *in this instance
331  *
332  ******************************************************************************/
333 
335  /**< [in] iMesh instance handle */
336  int* geom_dim,
337  /**< [out] Pointer to dimension returned from this function */
338  int* err
339  /**< [out] Returned Error status (see iBase_ErrorType) */
340 );
341 
342 /***************************************************************************/ /**
343  * \ingroup
344  *Initialization
345  * \brief Set
346  *geometric dimension
347  *of vertex
348  *coordinates
349  *
350  * Set the geometric
351  *dimension of the
352  *mesh. Note: An
353  *application should
354  *not expect this
355  *function to succeed
356  *unless the mesh
357  *instance is empty.
358  *An empty mesh
359  *instance is any mesh
360  *instance in which
361  *there are no vertex
362  *entities.
363  ******************************************************************************/
364 
366  /**< [in] iMesh instance handle */
367  int geom_dim,
368  /**< [in] Requested geometric dimension. */
369  int* err
370  /**< [out] Returned Error status (see iBase_ErrorType) */
371 );
372 
373 /***************************************************************************/ /**
374  * \ingroup
375  *Initialization
376  * \brief Get the
377  *default storage
378  *order used by this
379  *implementation
380  *
381  * Get the default
382  *storage order used
383  *by this
384  *implementation.
385  *Value returned is a
386  *member of the
387  *iBase_StorageOrder
388  *enumeration.
389  ******************************************************************************/
390 
391 void iMesh_getDfltStorage( iMesh_Instance instance,
392  /**< [in] iMesh instance handle */
393  int* order,
394  /**< [out] Pointer to storage order returned from function
395  (\sa iBase_StorageOrder) */
396  int* err
397  /**< [out] Returned Error status (see iBase_ErrorType) */
398 );
399 
400 /***************************************************************************/ /**
401  * \ingroup
402  *Adjacencies \brief
403  *Get the adjacency
404  *table for this
405  *implementation
406  *
407  * Get the adjacency
408  *table for this
409  *implementation. This
410  *table is a 4x4 array
411  *whose entries
412  *characterize how the
413  *implementation
414  * behaves when
415  *adjacent and
416  *intermediate
417  *entities are
418  *queried. Entry [i,j]
419  *(i=row, j=col,
420  *0-based indexing)
421  *will have one of the
422  *values in the
423  *iBase_AdjacencyCost
424  *enumeration.
425  *Off-diagonal entres,
426  *i!=j, represents the
427  *relative cost of
428  *retrieving entities
429  *of dimension i
430  *adjacent to entities
431  *of dimension j.
432  * Diagonal entries,
433  *i==j, indicate
434  *whether or not
435  *handles to ALL
436  * entities of that
437  *dimension are
438  *obtainable from
439  *calls that return
440  * entity handles.
441  *This is always true
442  *by definition for
443  *i==j==0 as well as
444  *for i==j==2 in a 2D
445  *mesh and i==j==3 in
446  *a 3D mesh. However,
447  *diagonal entries
448  *[1,1] for a 2D mesh
449  *and both [1,1] and
450  *[2,2] for a 3D mesh
451  *indicate whether or
452  *not handles to ALL
453  * intermediate
454  *dimensioned entities
455  *(ALL edges in a 2D
456  *mesh or ALL edges
457  *and ALL faces in a
458  *3D mesh) are
459  *obtainable from
460  *calls that return
461  *entity handles. A
462  *value of
463  *iBase_AVAILABLE for
464  *a diagonal entry
465  *indicates that
466  *handles are
467  *obtainable for ALL
468  * entities of that
469  *dimension while a
470  *value of
471  *iBase_UNAVAILABLE
472  * indicates that
473  *handles are not
474  *obtainable for ALL
475  *entities of that
476  * dimension.
477  ******************************************************************************/
478 
479 void iMesh_getAdjTable( iMesh_Instance instance,
480  /**< [in] iMesh instance handle */
481  int** adjacency_table,
482  /**< [out] Pointer to array representing adjacency table
483  \ref trio) */
484  int* adjacency_table_allocated,
485  /**< [in,out] Pointer to allocated size of adjacency_table */
486  int* adjacency_table_size,
487  /**< [out] Pointer to occupied size of adjacency_table */
488  int* err
489  /**< [out] Returned Error status (see iBase_ErrorType) */
490 );
491 
492 /***************************************************************************/ /**
493  * \ingroup
494  *Adjacencies \brief
495  *Set the adjacency
496  *table as requested
497  *by the application
498  *
499  * Set the adjacency
500  *table as requested
501  *by the application.
502  * See
503  *iMesh_getAdjTable
504  *for a description of
505  *the meaning of the
506  *entries in this
507  *table. This call to
508  *set the adjacency
509  *table allows an
510  *application to
511  *request how it would
512  *like an
513  *implementation to
514  *behave when adjacent
515  * and/or intermediate
516  *entities are
517  *queried. If the
518  *implementation is
519  *not able to
520  *accommodate the
521  *requested query
522  *behavior associated
523  *with ANY entry in
524  *the table, the call
525  *will fail and return
526  *an error of
527  * iBase_NOT_SUPPORTED.
528  *Otherwise, the
529  *implementation is
530  *able to accommodate
531  * the requested query
532  *behavior associated
533  *with ALL table
534  *entries and the call
535  *will succeed. In
536  *either case,
537  *however, the
538  *implementation will
539  * over-write the
540  *entries in the
541  *adjacency_table
542  *argument with the
543  *same values that
544  *would be obtained in
545  *a succeeding call to
546  *iMesh_getAdjTable.
547  ******************************************************************************/
548 
549 void iMesh_setAdjTable( iMesh_Instance instance,
550  /**< [in] iMesh instance handle */
551  int* adjacency_table,
552  /**< [in,out] Array representing adjacency table requested by
553  application */
554  int adjacency_table_size,
555  /**< [in] Size of adj table array */
556  int* err
557  /**< [out] Returned Error status (see iBase_ErrorType) */
558 );
559 
560 /***************************************************************************/ /**
561  * \ingroup EntitySets
562  * \brief Get the
563  *number of entities
564  *of specified type in
565  *the instance or set
566  *
567  * Get the number of
568  *entities with the
569  *specified type in
570  *the instance or set.
571  *If entity set handle
572  *is root set, return
573  *information for
574  *instance, otherwise
575  *for set. Value of
576  *entity type must be
577  *from the
578  * iBase_EntityType
579  *enumeration. If
580  *iBase_ALL_TYPES is
581  *specified, total
582  *number of entities
583  *(excluding entity
584  *sets) is returned.
585  ******************************************************************************/
586 
587 void iMesh_getNumOfType( iMesh_Instance instance,
588  /**< [in] iMesh instance handle */
589  const iBase_EntitySetHandle entity_set_handle,
590  /**< [in] Entity set being queried */
591  const int entity_type,
592  /**< [in] Type of entity requested */
593  int* num_type,
594  /**< [out] Pointer to number of entities, returned from function */
595  int* err
596  /**< [out] Returned Error status (see iBase_ErrorType) */
597 );
598 
599 /***************************************************************************/ /**
600  * \ingroup EntitySets
601  * \brief Get the
602  *number of entities
603  *of specified
604  *topology in instance
605  *or set
606  *
607  * Get the number of
608  *entities with the
609  *specified topology
610  *in the instance or
611  *set. If entity set
612  *handle is root set,
613  *return information
614  *for instance,
615  * otherwise for set.
616  *Value of entity
617  *topology must be
618  *from the
619  * iMesh_EntityTopology
620  *enumeration. If
621  *iMesh_ALL_TOPOLOGIES
622  *is specified, total
623  *number of entities
624  *(excluding entity
625  *sets) is returned.
626  ******************************************************************************/
627 
628 void iMesh_getNumOfTopo( iMesh_Instance instance,
629  /**< [in] iMesh instance handle */
630  const iBase_EntitySetHandle entity_set_handle,
631  /**< [in] Entity set being queried */
632  const int entity_topology,
633  /**< [in] Topology of entity requested */
634  int* num_topo,
635  /**< [out] Pointer to number of entities, returned from function */
636  int* err
637  /**< [out] Returned Error status (see iBase_ErrorType) */
638 );
639 
640 /***************************************************************************/ /**
641  * \ingroup
642  *MeshModification
643  * \brief Permit
644  *implementation to
645  *'optimize' the mesh
646  *instance
647  *
648  * Its concievable
649  *that after a series
650  *of operations
651  *modifying the mesh
652  * instance, the
653  *implementation's
654  *internal
655  *representation of
656  *the mesh may include
657  *data and tie up
658  *memory resources
659  *that could be
660  *'optimized' away.
661  * For example, if the
662  *implementation only
663  *marks removed
664  *entities for
665  *deletion but does
666  *not actually free up
667  *memory resources
668  *associated those
669  *entities, a call to
670  *this function gives
671  *the implementation
672  *the 'ok' to go ahead
673  *and free up such
674  *memory.
675  *
676  * Depending on the
677  *implementation as
678  *well as the amount
679  *and kind of changes
680  * to the mesh that
681  *have been made prior
682  *to calling it, this
683  *call may be very
684  *expensive in time
685  *complexity. On the
686  *other hand, it is
687  *also perfectly
688  * acceptable that an
689  *implementation
690  *basically treat this
691  *operation as a
692  *no-op.
693  *
694  * In any event, any
695  *entity, entity set,
696  *iterator or tag
697  *handle obtained
698  *prior to calling
699  *this method will may
700  *be invalidated as a
701  *result of this call.
702  *In that case, the
703  *caller must
704  *re-acquire handles
705  *after making this
706  *call. A return
707  *argument indicates
708  *if handles have been
709  *invalidated.
710  ******************************************************************************/
711 
712 void iMesh_optimize( iMesh_Instance instance,
713  /**< [in] iMesh instance handle */
714  int* handles_invalidated,
715  /**< [out] Returned flag indicating if any handles the caller held
716  before calling this function have been invalidated as a result of
717  this call. A value of non-zero returned here indicates that any
718  handles the caller had prior to this call must not be trusted and
719  must be re-acquired by caller. */
720  int* err
721  /**< [out] Returned Error status (see iBase_ErrorType) */
722 );
723 
724 /***************************************************************************/ /**
725  * \ingroup Entities
726  * \brief Get
727  *entities of specific
728  *type and/or topology
729  *in set or instance
730  *
731  * Get entities of
732  *specific type and/or
733  *topology in set or
734  *instance. All
735  * entities of a given
736  *type or topology are
737  *requested by
738  *specifying
739  * iBase_ALL_TOPOLOGIES
740  *or iBase_ALL_TYPES,
741  *respectively.
742  *Specified type or
743  *topology must be a
744  *value in the
745  *iBase_EntityType or
746  *iBase_EntityTopology
747  * enumeration,
748  *respectively.
749  ******************************************************************************/
750 
751 void iMesh_getEntities( iMesh_Instance instance,
752  /**< [in] iMesh instance handle */
753  const iBase_EntitySetHandle entity_set_handle,
754  /**< [in] Entity set being queried */
755  const int entity_type,
756  /**< [in] Type of entities being requested */
757  const int entity_topology,
758  /**< [in] Topology of entities being requested */
759  iBase_EntityHandle** entity_handles,
760  /**< [in,out] Pointer to array of entity handles returned \ref trio) */
761  int* entity_handles_allocated,
762  /**< [in,out] Pointer to allocated size of entity_handles array */
763  int* entity_handles_size,
764  /**< [out] Pointer to occupied size of entity_handles array */
765  int* err
766  /**< [out] Returned Error status (see iBase_ErrorType) */
767 );
768 
769 /***************************************************************************/ /**
770  * \ingroup
771  *VertexEntities
772  * \brief Get
773  *coordinates of
774  *specified vertices
775  *
776  * Get coordinates of
777  *specified vertices.
778  *Coordinates are
779  *returned in the
780  *storage order
781  *indicated by the
782  *storage_order
783  *argument.
784  ******************************************************************************/
785 
787  /**< [in] iMesh instance handle */
788  const iBase_EntityHandle* vertex_handles,
789  /**< [in] Array of mesh vertex handles whose coordinates are being
790  requested */
791  const int vertex_handles_size,
792  /**< [in] Number of vertices in vertex_handles array */
793  const int storage_order,
794  /**< [in] Requested storage order of returned coordinates
795  (see iBase_StorageOrder) */
796  double** coords,
797  /**< [in,out] Pointer to array of coordinates returned from function
798  \ref trio) */
799  int* coords_allocated,
800  /**< [in,out] Pointer to allocated size of coords array */
801  int* coords_size,
802  /**< [out] Pointer to occupied size of coords array */
803  int* err
804  /**< [out] Returned Error status (see iBase_ErrorType) */
805 );
806 
807 /***************************************************************************/ /**
808  * \ingroup
809  *EntityIterators
810  * \brief Initialize
811  *an array iterator
812  *over specified
813  *entity type,
814  *topology, and size
815  *
816  * Initialize an array
817  *iterator over
818  *specified entity
819  *type, topology, and
820  * size, for a
821  *specified set or
822  *instance. Iterator
823  *returned can be used
824  * as input to
825  *functions returning
826  *entities for the
827  *iterator. If all
828  * entities of a
829  *specified type
830  *and/or topology are
831  *to be iterated,
832  * specify
833  *iBase_ALL_TYPES or
834  *iMesh_ALL_TOPOLOGIES,
835  *respectively.
836  * Specified type or
837  *topology must be a
838  *value in the
839  *iBase_EntityType or
840  * iMesh_EntityTopology
841  *enumerations,
842  *respectively.
843  ******************************************************************************/
844 
845 void iMesh_initEntArrIter( iMesh_Instance instance,
846  /**< [in] iMesh instance handle */
847  const iBase_EntitySetHandle entity_set_handle,
848  /**< [in] Entity set being iterated */
849  const int requested_entity_type,
850  /**< [in] Type of entity to iterate */
851  const int requested_entity_topology,
852  /**< [in] Topology of entity to iterate */
853  const int requested_array_size,
854  /**< [in] Size of chunks of handles returned for each value of the
855  iterator */
856  const int resilient,
857  /**< [in] If zero, return a non-resilient iterator.
858  Otherwise, a resilient iterator (\ref resilient) */
859  iBase_EntityArrIterator* entArr_iterator,
860  /**< [out] Pointer to iterator returned from function */
861  int* err
862  /**< [out] Returned Error status (see iBase_ErrorType) */
863 );
864 
865 /***************************************************************************/ /**
866  * \ingroup
867  *EntityIterators
868  * \brief Get
869  *entities contained
870  *in array iterator
871  *and increment
872  *iterator
873  *
874  * Get the entities
875  *corresponding to an
876  *array iterator (e.g.
877  *dereference the
878  *array iterator), and
879  *increment the
880  *iterator. The
881  *dereferenced
882  * value(s) are
883  *returned in
884  *entity_handles. If
885  *the iterator is at
886  *the end of the
887  *iteration, the
888  *dereferenced
889  *value(s) are
890  *undefined and
891  * has_data will be
892  *returned with a
893  *value of zero.
894  *Otherwise, has_data
895  * will be returned
896  *with a non-zero
897  *value.
898  ******************************************************************************/
899 
901  /**< [in] iMesh instance handle */
902  iBase_EntityArrIterator entArr_iterator,
903  /**< [in] Iterator being queried */
904  iBase_EntityHandle** entity_handles,
905  /**< [in,out] Pointer to array of entity handles contained in current
906  value of iterator \ref trio) */
907  int* entity_handles_allocated,
908  /**< [in,out] Pointer to allocated size of entity_handles */
909  int* entity_handles_size,
910  /**< [out] Pointer to occupied size of entity_handles */
911  int* has_data,
912  /**< [out] Pointer to a flag indicating if the value(s) returned
913  in entity_handles are valid. A non-zero value indicates the value(s)
914  are valid. A zero value indicates the value(s) are NOT valid. */
915  int* err
916  /**< [out] Returned Error status (see iBase_ErrorType) */
917 );
918 
919 /***************************************************************************/ /**
920  * \ingroup
921  *EntityIterators
922  * \brief Reset the
923  *array iterator
924  *
925  ******************************************************************************/
926 
928  /**< [in] iMesh instance handle */
929  iBase_EntityArrIterator entArr_iterator,
930  /**< [in] Iterator to reset */
931  int* err
932  /**< [out] Returned Error status (see iBase_ErrorType) */
933 );
934 
935 /***************************************************************************/ /**
936  * \ingroup
937  *EntityIterators
938  * \brief Destroy the
939  *specified array
940  *iterator
941  *
942  ******************************************************************************/
943 
944 void iMesh_endEntArrIter( iMesh_Instance instance,
945  /**< [in] iMesh instance handle */
946  iBase_EntityArrIterator entArr_iterator,
947  /**< [in] Iterator which gets destroyed */
948  int* err
949  /**< [out] Returned Error status (see iBase_ErrorType) */
950 );
951 
952 /***************************************************************************/ /**
953  * \ingroup Entities
954  * \brief Get the
955  *entity topology for
956  *the specified
957  *entities
958  *
959  * Get the entity
960  *topology for the
961  *specified entities.
962  *Topologies returned
963  *are values in the
964  *iMesh_EntityTopology
965  *enumeration.
966  ******************************************************************************/
967 
968 void iMesh_getEntArrTopo( iMesh_Instance instance,
969  /**< [in] iMesh instance handle */
970  const iBase_EntityHandle* entity_handles,
971  /**< [in] Array of entity handles being queried */
972  const int entity_handles_size,
973  /**< [in] Number of entities in entity_handles array */
974  int** topology,
975  /**< [in,out] Pointer to array of entity topologies returned
976  \ref trio) */
977  int* topology_allocated,
978  /**< [in,out] Pointer to allocated size of topology array */
979  int* topology_size,
980  /**< [out] Pointer to occupied size of topology array */
981  int* err
982  /**< [out] Returned Error status (see iBase_ErrorType) */
983 );
984 
985 /***************************************************************************/ /**
986  * \ingroup Entities
987  * \brief Get the
988  *entity type for the
989  *specified entities
990  *
991  * Get the entity type
992  *for the specified
993  *entities. Types
994  * returned are values
995  *in the
996  *iBase_EntityType
997  *enumeration.
998  ******************************************************************************/
999 
1000 void iMesh_getEntArrType( iMesh_Instance instance,
1001  /**< [in] iMesh instance handle */
1002  const iBase_EntityHandle* entity_handles,
1003  /**< [in] Array of entity handles being queried */
1004  const int entity_handles_size,
1005  /**< [in] Number of entities in entity_handles array */
1006  int** type,
1007  /**< [in,out] Pointer to array of types returned from function
1008  \ref trio) */
1009  int* type_allocated,
1010  /**< [in,out] Pointer to allocated size of type array */
1011  int* type_size,
1012  /**< [out] Pointer to occupied size of type array */
1013  int* err
1014  /**< [out] Returned Error status (see iBase_ErrorType) */
1015 );
1016 
1017 /***************************************************************************/ /**
1018  * \ingroup
1019  *Adjacencies \brief
1020  *Get entities of
1021  *specified type
1022  *adjacent to entities
1023  *
1024  * Get entities of
1025  *specified type
1026  *adjacent to
1027  *entities. Specified
1028  *type must be value
1029  *in the
1030  *iBase_EntityType
1031  *enumeration. \em
1032  *offset(i) is index
1033  *of first entity in
1034  *adjacentEntityHandles
1035  *array adjacent to
1036  * entity_handles[i].
1037  *More precisely, the
1038  *entities adjacent to
1039  *the ith entity in
1040  *entity_handles are
1041  *found in
1042  *adjacentEntityHandles
1043  * running from
1044  *offset[i] to
1045  *offset[i+1] - 1.
1046  *This implies that
1047  *the offset_size will
1048  *be
1049  *entity_handles_size
1050  *+ 1.
1051  *
1052  * Note 1: Because
1053  *'adjacent' as
1054  *defined by the iMesh
1055  *data model refers to
1056  *those entities that
1057  *bound another, the
1058  *entities being
1059  *queried here (in
1060  *entity_handles arg)
1061  *are NEVER ALSO
1062  *returned in
1063  * adjacentEntityHandles
1064  *even if the
1065  *entity_type_requested
1066  * matches the
1067  *entity type(s) in
1068  *entity_handles.
1069  ******************************************************************************/
1070 
1071 void iMesh_getEntArrAdj( iMesh_Instance instance,
1072  /**< [in] iMesh instance handle */
1073  const iBase_EntityHandle* entity_handles,
1074  /**< [in] Array of entity handles being queried */
1075  const int entity_handles_size,
1076  /**< [in] Number of entities in entity_handles array */
1077  const int entity_type_requested,
1078  /**< [in] Type of adjacent entities requested */
1079  iBase_EntityHandle** adjacentEntityHandles,
1080  /**< [in,out] Pointer to array of adjacentEntityHandles \ref trio)
1081  returned from function. Note that the implicit INTERLEAVED storage
1082  order rule applies (see iBase_StorageOrder) */
1083  int* adjacentEntityHandles_allocated,
1084  /**< [in,out] Pointer to allocated size of adjacentEntityHandles array */
1085  int* adj_entity_handles_size,
1086  /**< [out] Pointer to occupied size of adjacentEntityHandles array */
1087  int** offset,
1088  /**< [in,out] Pointer to array of offsets returned from function
1089  \ref trio) */
1090  int* offset_allocated,
1091  /**< [in,out] Pointer to allocated size of offset array */
1092  int* offset_size,
1093  /**< [out] Pointer to occupied size of offset array */
1094  int* err
1095  /**< [out] Returned Error status (see iBase_ErrorType) */
1096 );
1097 
1098 /***************************************************************************/ /**
1099  * \ingroup
1100  *Adjacencies \brief
1101  *Get "2nd order"
1102  *adjacencies to an
1103  *array of entities
1104  *
1105  * Get "2nd order"
1106  *adjacencies to an
1107  *array of entities,
1108  *that is, from each
1109  * entity, through
1110  *other entities of a
1111  *specified "bridge"
1112  *dimension, to other
1113  * entities of another
1114  *specified "to"
1115  *dimension. Note 1:
1116  *If the "bridge"
1117  *dimension is the
1118  *same as the "to"
1119  *dimension, the
1120  *output will be empty
1121  *(and an error code
1122  *of
1123  * iBase_INVALID_ARGUMENT
1124  *returned). If the
1125  *type of a particular
1126  * entity matches
1127  *the "bridge"
1128  *dimension, there
1129  *will be no entities
1130  * returned for
1131  *that input entity.
1132  *This is consistent
1133  *with the definition
1134  *of adjacencies and
1135  *the behavior of
1136  *iMesh first
1137  * adjacency calls.
1138  * Note 2: An entity
1139  *will never be
1140  *returned as a second
1141  *adjacency of itself,
1142  *on the grounds that
1143  *this is the most
1144  *likely expectation
1145  *of applications, and
1146  *that it is easier
1147  *for an application
1148  *to add the original
1149  *entity to the
1150  *returned data than
1151  *to find and remove
1152  *it. Note 3: The
1153  *entities adjacent to
1154  *the ith entity in
1155  *entity_handles are
1156  * found in
1157  *adj_entity_handles
1158  *running from
1159  *offset[i] to
1160  * offset[i+1] - 1.
1161  *This implies that
1162  *the offset_size will
1163  *be
1164  * entity_handles_size
1165  *+ 1.
1166  ******************************************************************************/
1167 
1168 void iMesh_getEntArr2ndAdj( iMesh_Instance instance,
1169  /**< [in] iMesh instance handle */
1170  iBase_EntityHandle const* entity_handles,
1171  /**< [in] Entities from which adjacencies are requested */
1172  int entity_handles_size,
1173  /**< [in] Number of entities whose adjacencies are requested */
1174  int bridge_entity_type,
1175  /**< [in] Type of bridge entity for 2nd order adjacencies */
1176  int requested_entity_type,
1177  /**< [in] Type of adjacent entities returned */
1178  iBase_EntityHandle** adj_entity_handles,
1179  /**< [in,out] Adjacent entities. Note that the implicit INTERLEAVED
1180  storage order rule applies (see iBase_StorageOrder)
1181  \ref trio) */
1182  int* adj_entity_handles_allocated,
1183  /**< [in,out] Allocated size of returned array */
1184  int* adj_entity_handles_size,
1185  /**< [out] Occupied size of returned array */
1186  int** offset,
1187  /**< [in,out] Offset[i] is offset into adj_entity_handles of 2nd order
1188  adjacencies of ith entity in entity_handles \ref trio) */
1189  int* offset_allocated,
1190  /**< [in,out] Allocated size of offset array */
1191  int* offset_size,
1192  /**< [out] Occupied size of offset array */
1193  int* err
1194  /**< [out] Returned Error status (see iBase_ErrorType) */
1195 );
1196 
1197 /***************************************************************************/ /**
1198  * \ingroup
1199  *Adjacencies \brief
1200  *Get indexed
1201  *representation of
1202  *mesh or subset of
1203  *mesh
1204  *
1205  * Given an entity set
1206  *and optionally a
1207  *type or topology,
1208  *return:
1209  * - The entities in
1210  *the set of the
1211  *specified type or
1212  *topology
1213  * - The entities
1214  *adjacent to those
1215  *entities with a
1216  *specified type, as a
1217  *list of unique
1218  *handles.
1219  * - For each entity
1220  *in the first list,
1221  *the adjacent
1222  *entities, specified
1223  *as indices into the
1224  *second list.
1225  *
1226  * Note 1: Because
1227  *'adjacent' as
1228  *defined by the iMesh
1229  *data model refers to
1230  *those entities that
1231  *bound another, the
1232  *entities being
1233  *queried here (in
1234  *entity_set_handle
1235  *arg) are NEVER ALSO
1236  *returned in
1237  * adj_entity_handles
1238  *even if the
1239  *entity_type_requested
1240  * matches the
1241  *entity type(s) in
1242  *entity_set_handle.
1243  * Note 2: The
1244  *entities adjacent to
1245  *the ith entity in
1246  *entity_handles are
1247  * found in
1248  *adj_entity_handles
1249  *running from
1250  *offset[i] to
1251  * offset[i+1]
1252  *- 1. This implies
1253  *that the offset_size
1254  *will be
1255  *entity_handles_size
1256  *+ 1. Note 3: This
1257  *function will fail
1258  *and return an error
1259  *if the caller passes
1260  * a
1261  *combination of
1262  *entity_type and
1263  *entity_topology that
1264  *are not consistent.
1265  ******************************************************************************/
1266 
1267 void iMesh_getAdjEntIndices( iMesh_Instance instance,
1268  /**< [in] iMesh instance handle */
1269  iBase_EntitySetHandle entity_set_handle,
1270  /**< [in] The set of entities from which to query */
1271  int entity_type_requester,
1272  /**< [in] If not iBase_ALL_TYPES, act only on the subset of entities
1273  contained in entity_set_handle of the specified type. */
1274  int entity_topology_requester,
1275  /**< [in] If not iMesh_ALL_TOPOLOGIES, act only on the subset of
1276  entities contained in entity_set_handle of specified topology. */
1277  int entity_type_requested,
1278  /**< [in] The type of the adjacent entities to return */
1279  iBase_EntityHandle** entity_handles,
1280  /**< [in,out] The handles of the (non-struct) subset of the entities
1281  contained in entity_set_handle indicated by the optional type and
1282  topology filtering arguments. \ref trio) */
1283  int* entity_handles_allocated,
1284  /**< [in,out] Allocated size of entity_handles array */
1285  int* entity_handles_size,
1286  /**< [out] Occupied size of entity_handles array */
1287  iBase_EntityHandle** adj_entity_handles,
1288  /**< [in,out] The union of the unique entities of type
1289  requested_entity_type adjacent to each entity in entity_handles.
1290  Note that the implicit INTERLEAVED storage order rule
1291  applies (see iBase_StorageOrder) \ref trio) */
1292  int* adj_entity_handles_allocated,
1293  /**< [in,out] Allocated size of adj_entity_handles array */
1294  int* adj_entity_handles_size,
1295  /**< [out] Occupied size of adj_entity_handles array */
1296  int** adj_entity_indices,
1297  /**< [in,out] For each entity in entity_handles, the adjacent
1298  entities of type entity_type_requested, specified as indices into
1299  adj_entity_handles. The values are concatenated into a single
1300  array in the order of the entity handles in entity_handles.
1301  \ref trio) */
1302  int* adj_entity_indices_allocated,
1303  /**< [in,out] Allocated size of adj_entity_indices array */
1304  int* adj_entity_indices_size,
1305  /**< [out] Occupied size of adj_entity_indices array */
1306  int** offset,
1307  /**< [in,out] For each entity in the corresponding position in
1308  entity_handles, the position in adj_entity_indices at which
1309  values for that entity are stored \ref trio) */
1310  int* offset_allocated,
1311  /**< [in,out] Allocated size of offset array */
1312  int* offset_size,
1313  /**< [out] Occipied size of offset array */
1314  int* err
1315  /**< [out] Returned Error status (see iBase_ErrorType) */
1316 );
1317 
1318 /***************************************************************************/ /**
1319  * \ingroup EntitySets
1320  * \brief Create an
1321  *entity set
1322  *
1323  * Create an entity
1324  *set, either ordered
1325  *(isList=1) or
1326  *unordered
1327  *(isList=0).
1328  * Unordered entity
1329  *sets can contain a
1330  *given entity or set
1331  *only once.
1332  *
1333  * An entity set in
1334  *iMesh supports
1335  *managing its
1336  *contained members in
1337  *one of two modes.
1338  *When an entitiy set
1339  *is first created,
1340  *the caller is
1341  *required to indicate
1342  *which mode of
1343  *membership the set
1344  *will support. The
1345  *two modes that are
1346  *supported are a)
1347  *order-preserving
1348  *(isList=1) or b)
1349  *duplicate-preventing
1350  *(isList=0).
1351  *
1352  * For
1353  *order-preserving
1354  *membership, the
1355  *implementation will
1356  *permit duplicate
1357  * entities. However,
1358  *the implementation
1359  *will guarantee that
1360  *the order in which
1361  * entities are added
1362  *to the set will be
1363  *the same as the
1364  *order in which they
1365  *are queried by the
1366  *various methods that
1367  *return the entities
1368  *of a set. This order
1369  * preserving
1370  *guarantee holds
1371  *across removals.
1372  *However, it does not
1373  *hold across removals
1374  *followed by
1375  *re-additions of the
1376  *previously removed
1377  *entities. This kind
1378  *of an entity set
1379  *behaves like an STL
1380  *vector or STL list
1381  *and is created by
1382  *setting isList=1
1383  *when creating an
1384  *entity set.
1385  *
1386  * For
1387  *duplicate-preventing
1388  *membership, the
1389  *implementation will
1390  *guarantee that
1391  * duplicate entities
1392  *are prevented. Any
1393  *attempts to add
1394  *duplicate entities
1395  *to such a set will
1396  *be detected,
1397  *prevented and
1398  *silently ignored by
1399  *the implementation.
1400  *This kind of entity
1401  *set behaves like an
1402  *STL set and is
1403  *created by setting
1404  *isList=0 when
1405  *creating an entity
1406  *set.
1407  *
1408  * Finally, all of the
1409  *above comments apply
1410  *only to entity
1411  *members of an entity
1412  * set and do not
1413  *apply to the entity
1414  *set members.
1415  *Order-preserving and
1416  * duplicate
1417  *preventing behavior
1418  *for entity set
1419  *members is
1420  *unspecified. Each
1421  * implementation may
1422  *behave differently
1423  *for entity set
1424  *members. This design
1425  *was chosen because
1426  *we could not
1427  *identify any use
1428  *cases where
1429  * order-preserving
1430  *behavior for set
1431  *members was
1432  *necessary. However,
1433  *if users encounter
1434  *situations where
1435  *such behavior is
1436  *desirable or
1437  *necessary, then the
1438  *ITAPS development
1439  *team can certainly
1440  *consider adjusting
1441  *the interface
1442  * specification to
1443  *support it.
1444  ******************************************************************************/
1445 
1446 void iMesh_createEntSet( iMesh_Instance instance,
1447  /**< [in] iMesh instance handle */
1448  const int isList,
1449  /**< [in] If non-zero, an ordered list is created, otherwise an
1450  unordered set is created. */
1451  iBase_EntitySetHandle* entity_set_created,
1452  /**< [out] Entity set created by function */
1453  int* err
1454  /**< [out] Returned Error status (see iBase_ErrorType) */
1455 );
1456 
1457 /***************************************************************************/ /**
1458  * \ingroup EntitySets
1459  * \brief Destroy an
1460  *entity set
1461  *
1462  ******************************************************************************/
1463 
1464 void iMesh_destroyEntSet( iMesh_Instance instance,
1465  /**< [in] iMesh instance handle */
1466  iBase_EntitySetHandle entity_set,
1467  /**< [in] Entity set to be destroyed */
1468  int* err
1469  /**< [out] Returned Error status (see iBase_ErrorType) */
1470 );
1471 
1472 /***************************************************************************/ /**
1473  * \ingroup EntitySets
1474  * \brief Return
1475  *whether a specified
1476  *set is ordered or
1477  *unordered
1478  *
1479  * Return whether a
1480  *specified set is
1481  *ordered (*is_list=1)
1482  *or unordered
1483  *(*is_list=0)
1484  ******************************************************************************/
1485 
1486 void iMesh_isList( iMesh_Instance instance,
1487  /**< [in] iMesh instance handle */
1488  const iBase_EntitySetHandle entity_set,
1489  /**< [in] Entity set being queried */
1490  int* is_list,
1491  /**< [out] Pointer to flag returned from function */
1492  int* err
1493  /**< [out] Returned Error status (see iBase_ErrorType) */
1494 );
1495 
1496 /***************************************************************************/ /**
1497  * \ingroup EntitySets
1498  * \brief Get the
1499  *number of entity
1500  *sets contained in a
1501  *set or interface
1502  *
1503  * Get the number of
1504  *entity sets
1505  *contained in a set
1506  *or interface.
1507  ******************************************************************************/
1508 
1509 void iMesh_getNumEntSets( iMesh_Instance instance,
1510  /**< [in] iMesh instance handle */
1511  const iBase_EntitySetHandle entity_set_handle,
1512  /**< [in] Entity set being queried */
1513  const int num_hops,
1514  /**< [in] Maximum hops from entity_set_handle to contained set, not
1515  inclusive of the contained set. \ref numhops) */
1516  int* num_sets,
1517  /**< [out] Pointer to the number of sets returned from function */
1518  int* err
1519  /**< [out] Returned Error status (see iBase_ErrorType) */
1520 );
1521 
1522 /***************************************************************************/ /**
1523  * \ingroup EntitySets
1524  * \brief Get the
1525  *entity sets
1526  *contained in a set
1527  *or interface
1528  *
1529  * Get the entity sets
1530  *contained in a set
1531  *or interface.
1532  ******************************************************************************/
1533 
1534 void iMesh_getEntSets( iMesh_Instance instance,
1535  /**< [in] iMesh instance handle */
1536  const iBase_EntitySetHandle entity_set_handle,
1537  /**< [in] Entity set being queried */
1538  const int num_hops,
1539  /**< [in] Maximum hops from entity_set_handle to contained set, not
1540  inclusive of the contained set \ref numhops) */
1541  iBase_EntitySetHandle** contained_set_handles,
1542  /**< [in,out] Pointer to array of set handles returned \ref trio) */
1543  int* contained_set_handles_allocated,
1544  /**< [in,out] Pointer to allocated length of */
1545  int* contained_set_handles_size,
1546  /**< [out] Pointer to occupied length of */
1547  int* err
1548  /**< [out] Returned Error status (see iBase_ErrorType) */
1549 );
1550 
1551 /***************************************************************************/ /**
1552  * \ingroup EntitySets
1553  * \brief Add an
1554  *entity to a set
1555  *
1556  ******************************************************************************/
1557 
1558 void iMesh_addEntToSet( iMesh_Instance instance,
1559  /**< [in] iMesh instance handle */
1560  iBase_EntityHandle entity_handle,
1561  /**< [in] The entity being added */
1562  iBase_EntitySetHandle entity_set,
1563  /**< [in] Pointer to the set being added to */
1564  int* err
1565  /**< [out] Returned Error status (see iBase_ErrorType) */
1566 );
1567 
1568 /***************************************************************************/ /**
1569  * \ingroup EntitySets
1570  * \brief Remove an
1571  *entity from a set
1572  *
1573  ******************************************************************************/
1574 
1575 void iMesh_rmvEntFromSet( iMesh_Instance instance,
1576  /**< [in] iMesh instance handle */
1577  iBase_EntityHandle entity_handle,
1578  /**< [in] The entity being removed */
1579  iBase_EntitySetHandle entity_set,
1580  /**< [in] Pointer to the set being removed from */
1581  int* err
1582  /**< [out] Returned Error status (see iBase_ErrorType) */
1583 );
1584 
1585 /***************************************************************************/ /**
1586  * \ingroup EntitySets
1587  * \brief Add an
1588  *array of entities to
1589  *a set
1590  *
1591  ******************************************************************************/
1592 
1593 void iMesh_addEntArrToSet( iMesh_Instance instance,
1594  /**< [in] iMesh instance handle */
1595  const iBase_EntityHandle* entity_handles,
1596  /**< [in] Array of entities being added */
1597  int entity_handles_size,
1598  /**< [in] Number of entities in entity_handles array */
1599  iBase_EntitySetHandle entity_set,
1600  /**< [in] Pointer to the set being added to */
1601  int* err
1602  /**< [out] Returned Error status (see iBase_ErrorType) */
1603 );
1604 
1605 /***************************************************************************/ /**
1606  * \ingroup EntitySets
1607  * \brief Remove an
1608  *array of entities
1609  *from a set
1610  *
1611  ******************************************************************************/
1612 
1613 void iMesh_rmvEntArrFromSet( iMesh_Instance instance,
1614  /**< [in] iMesh instance handle */
1615  const iBase_EntityHandle* entity_handles,
1616  /**< [in] Array of entities being remove */
1617  int entity_handles_size,
1618  /**< [in] Number of entities in entity_handles array */
1619  iBase_EntitySetHandle entity_set,
1620  /**< [in] Pointer to the set being removed from */
1621  int* err
1622  /**< [out] Returned Error status (see iBase_ErrorType) */
1623 );
1624 
1625 /***************************************************************************/ /**
1626  * \ingroup EntitySets
1627  * \brief Add an
1628  *entity set to a set
1629  *
1630  * Add an entity set
1631  *to a set (\ref
1632  *cycles)
1633  ******************************************************************************/
1634 
1635 void iMesh_addEntSet( iMesh_Instance instance,
1636  /**< [in] iMesh instance handle */
1637  iBase_EntitySetHandle entity_set_to_add,
1638  /**< [in] The entity set being added */
1639  iBase_EntitySetHandle entity_set_handle,
1640  /**< [in] Pointer to the set being added to */
1641  int* err
1642  /**< [out] Returned Error status (see iBase_ErrorType) */
1643 );
1644 
1645 /***************************************************************************/ /**
1646  * \ingroup EntitySets
1647  * \brief Remove an
1648  *entity set from a
1649  *set
1650  *
1651  * Remove an entity
1652  *set from a set
1653  ******************************************************************************/
1654 
1655 void iMesh_rmvEntSet( iMesh_Instance instance,
1656  /**< [in] iMesh instance handle */
1657  iBase_EntitySetHandle entity_set_to_remove,
1658  /**< [in] The entity set being removed */
1659  iBase_EntitySetHandle entity_set_handle,
1660  /**< [in] Pointer to the set being removed from */
1661  int* err
1662  /**< [out] Returned Error status (see iBase_ErrorType) */
1663 );
1664 
1665 /***************************************************************************/ /**
1666  * \ingroup EntitySets
1667  * \brief Return
1668  *whether an entity is
1669  *contained in another
1670  *set
1671  *
1672  * Return whether an
1673  *entity is contained
1674  *(*is_contained=1) or
1675  *not contained
1676  *(*is_contained=0) in
1677  *another set
1678  ******************************************************************************/
1679 
1680 void iMesh_isEntContained( iMesh_Instance instance,
1681  /**< [in] iMesh instance handle */
1682  iBase_EntitySetHandle containing_entity_set,
1683  /**< [in] Entity set being queried */
1684  iBase_EntityHandle contained_entity,
1685  /**< [in] Entity potentially contained in containing_entity_set */
1686  int* is_contained,
1687  /**< [out] Pointer to flag returned from function */
1688  int* err
1689  /**< [out] Returned Error status (see iBase_ErrorType) */
1690 );
1691 
1692 /***************************************************************************/ /**
1693  * \ingroup EntitySets
1694  * \brief Return
1695  *whether entities are
1696  *contained in a set
1697  *
1698  ******************************************************************************/
1699 
1701  /**< [in] iMesh instance handle */
1702  iBase_EntitySetHandle containing_entity_set,
1703  /**< [in] Entity set being queried */
1704  const iBase_EntityHandle* entity_handles,
1705  /**< [in] List of entities for which to check containment. */
1706  int num_entity_handles,
1707  /**< [in] Size of entity_handles array of entities to be checked. */
1708  int** is_contained,
1709  /**< [in,out] One value for each input entity, 1 if contained in set,
1710  zero otherwise. \ref trio) */
1711  int* is_contained_allocated,
1712  /**< [in,out] Allocated size of is_contained array */
1713  int* is_contained_size,
1714  /**< [out] Occupied size of is_contained array */
1715  int* err
1716  /**< [out] Returned Error status (see iBase_ErrorType) */
1717 );
1718 
1719 /***************************************************************************/ /**
1720  * \ingroup EntitySets
1721  * \brief Return
1722  *whether an entity
1723  *set is contained in
1724  *another set
1725  *
1726  * Return whether a
1727  *set is contained
1728  *(*is_contained=1) or
1729  *not contained
1730  * (*is_contained=0)
1731  *in another set
1732  ******************************************************************************/
1733 
1735  /**< [in] iMesh instance handle */
1736  const iBase_EntitySetHandle containing_entity_set,
1737  /**< [in] Entity set being queried */
1738  const iBase_EntitySetHandle contained_entity_set,
1739  /**< [in] Entity set potentially contained in containing_entity_set */
1740  int* is_contained,
1741  /**< [out] Pointer to flag returned from function */
1742  int* err
1743  /**< [out] Returned Error status (see iBase_ErrorType) */
1744 );
1745 
1746 /***************************************************************************/ /**
1747  * \ingroup
1748  *ParentChildLinks
1749  * \brief Add
1750  *parent/child links
1751  *between two sets
1752  *
1753  * Add parent/child
1754  *links between two
1755  *sets. Makes parent
1756  *point to child and
1757  *child point to
1758  *parent. (\ref
1759  *cycles)
1760  ******************************************************************************/
1761 
1762 void iMesh_addPrntChld( iMesh_Instance instance,
1763  /**< [in] iMesh instance handle */
1764  iBase_EntitySetHandle parent_entity_set,
1765  /**< [in] Pointer to parent set */
1766  iBase_EntitySetHandle child_entity_set,
1767  /**< [in] Pointer to child set */
1768  int* err
1769  /**< [out] Returned Error status (see iBase_ErrorType) */
1770 );
1771 
1772 /***************************************************************************/ /**
1773  * \ingroup
1774  *ParentChildLinks
1775  * \brief Remove
1776  *parent/child links
1777  *between two sets
1778  *
1779  * Remove parent/child
1780  *links between two
1781  *sets.
1782  ******************************************************************************/
1783 
1784 void iMesh_rmvPrntChld( iMesh_Instance instance,
1785  /**< [in] iMesh instance handle */
1786  iBase_EntitySetHandle parent_entity_set,
1787  /**< [in] Pointer to parent set */
1788  iBase_EntitySetHandle child_entity_set,
1789  /**< [in] Pointer to child set */
1790  int* err
1791  /**< [out] Returned Error status (see iBase_ErrorType) */
1792 );
1793 
1794 /***************************************************************************/ /**
1795  * \ingroup
1796  *ParentChildLinks
1797  * \brief Return
1798  *whether two sets are
1799  *related by
1800  *parent/child links
1801  *
1802  * Return whether two
1803  *sets are related
1804  *(*is_child=1) or not
1805  *(*is_child=0) by
1806  *parent/child links
1807  ******************************************************************************/
1808 
1809 void iMesh_isChildOf( iMesh_Instance instance,
1810  /**< [in] iMesh instance handle */
1811  const iBase_EntitySetHandle parent_entity_set,
1812  /**< [in] Pointer to parent set */
1813  const iBase_EntitySetHandle child_entity_set,
1814  /**< [in] Pointer to child set */
1815  int* is_child,
1816  /**< [out] Pointer to flag returned from function */
1817  int* err
1818  /**< [out] Returned Error status (see iBase_ErrorType) */
1819 );
1820 
1821 /***************************************************************************/ /**
1822  * \ingroup
1823  *ParentChildLinks
1824  * \brief Get the
1825  *number of child sets
1826  *linked from a
1827  *specified set
1828  *
1829  * Get the number of
1830  *child sets linked
1831  *from a specified
1832  *set.
1833  ******************************************************************************/
1834 
1835 void iMesh_getNumChld( iMesh_Instance instance,
1836  /**< [in] iMesh instance handle */
1837  const iBase_EntitySetHandle entity_set,
1838  /**< [in] Entity set being queried */
1839  const int num_hops,
1840  /**< [in] Maximum hops from entity_set_handle to child set, not
1841  inclusive of the child set. \ref numhops) */
1842  int* num_child,
1843  /**< [out] Pointer to number of children returned from function */
1844  int* err
1845  /**< [out] Returned Error status (see iBase_ErrorType) */
1846 );
1847 
1848 /***************************************************************************/ /**
1849  * \ingroup
1850  *ParentChildLinks
1851  * \brief Get the
1852  *number of parent
1853  *sets linked from a
1854  *specified set
1855  *
1856  * Get the number of
1857  *parent sets linked
1858  *from a specified
1859  *set.
1860  ******************************************************************************/
1861 
1862 void iMesh_getNumPrnt( iMesh_Instance instance,
1863  /**< [in] iMesh instance handle */
1864  const iBase_EntitySetHandle entity_set,
1865  /**< [in] Entity set being queried */
1866  const int num_hops,
1867  /**< [in] Maximum hops from entity_set_handle to parent set, not
1868  inclusive of the parent set. \ref numhops) */
1869  int* num_parent,
1870  /**< [out] Pointer to number of parents returned from function */
1871  int* err
1872  /**< [out] Returned Error status (see iBase_ErrorType) */
1873 );
1874 
1875 /***************************************************************************/ /**
1876  * \ingroup
1877  *ParentChildLinks
1878  * \brief Get the
1879  *child sets linked
1880  *from a specified set
1881  *
1882  * Get the child sets
1883  *linked from a
1884  *specified set.
1885  ******************************************************************************/
1886 
1887 void iMesh_getChldn( iMesh_Instance instance,
1888  /**< [in] iMesh instance handle */
1889  const iBase_EntitySetHandle from_entity_set,
1890  /**< [in] Entity set being queried */
1891  const int num_hops,
1892  /**< [in] Maximum hops from entity_set_handle to child set,
1893  \ref numhops) */
1894  iBase_EntitySetHandle** entity_set_handles,
1895  /**< [in,out] Pointer to array of child sets \ref trio) */
1896  int* entity_set_handles_allocated,
1897  /**< [in,out] Pointer to allocated size of */
1898  int* entity_set_handles_size,
1899  /**< [out] Pointer to occupied size of */
1900  int* err
1901  /**< [out] Returned Error status (see iBase_ErrorType) */
1902 );
1903 
1904 /***************************************************************************/ /**
1905  * \ingroup
1906  *ParentChildLinks
1907  * \brief Get the
1908  *parent sets linked
1909  *from a specified set
1910  *
1911  * Get the parent sets
1912  *linked from a
1913  *specified set.
1914  ******************************************************************************/
1915 
1916 void iMesh_getPrnts( iMesh_Instance instance,
1917  /**< [in] iMesh instance handle */
1918  const iBase_EntitySetHandle from_entity_set,
1919  /**< [in] Entity set being queried */
1920  const int num_hops,
1921  /**< [in] Maximum hops from entity_set_handle to parent set,
1922  \ref numhops) */
1923  iBase_EntitySetHandle** entity_set_handles,
1924  /**< [in,out] Pointer to array of parent sets \ref trio) */
1925  int* entity_set_handles_allocated,
1926  /**< [in,out] Pointer to allocated size of */
1927  int* entity_set_handles_size,
1928  /**< [out] Pointer to occupied size of */
1929  int* err
1930  /**< [out] Returned Error status (see iBase_ErrorType) */
1931 );
1932 
1933 /***************************************************************************/ /**
1934  * \ingroup
1935  *VertexEntities
1936  * \brief Set
1937  *coordinates for an
1938  *array of vertices
1939  *
1940  * Set coordinates for
1941  *an array of
1942  *vertices. Specified
1943  *storage order must
1944  *be either
1945  *iBase_INTERLEAVED or
1946  *iBase_BLOCKED, and
1947  * indicates order of
1948  *x, y, and z
1949  *coordinates in
1950  *coordinate array.
1951  ******************************************************************************/
1952 
1953 void iMesh_setVtxArrCoords( iMesh_Instance instance,
1954  /**< [in] iMesh instance handle */
1955  const iBase_EntityHandle* vertex_handles,
1956  /**< [in] Array of vertex handles */
1957  const int vertex_handles_size,
1958  /**< [in] Number of vertex handles in array */
1959  const int storage_order,
1960  /**< [in] Storage order of coordinates in coordinate array */
1961  const double* new_coords,
1962  /**< [in] Coordinate array */
1963  const int new_coords_size,
1964  /**< [in] Size of coordinate array; should be */
1965  int* err
1966  /**< [out] Returned Error status (see iBase_ErrorType) */
1967 );
1968 
1969 /***************************************************************************/ /**
1970  * \ingroup
1971  *VertexEntities
1972  * \brief Create an
1973  *array of new
1974  *vertices at
1975  *specified
1976  *coordinates
1977  *
1978  * Create an array of
1979  *new vertices at
1980  *specified
1981  *coordinates. Value
1982  *of storage_order
1983  *must be either
1984  *iBase_INTERLEAVED or
1985  *iBase_BLOCKED.
1986  ******************************************************************************/
1987 
1988 void iMesh_createVtxArr( iMesh_Instance instance,
1989  /**< [in] iMesh instance handle */
1990  const int num_verts,
1991  /**< [in] Number of new vertices to be created */
1992  const int storage_order,
1993  /**< [in] Storage order of coordinates in new_coords array
1994  (see iBase_StorageOrder) */
1995  const double* new_coords,
1996  /**< [in] Array of coordinates of new vertices. Should be G*num_verts
1997  in length where G is geometric dimension of the mesh. */
1998  const int new_coords_size,
1999  /**< [in] Number of coordinates in new_coords array, should */
2000  iBase_EntityHandle** new_vertex_handles,
2001  /**< [in,out] Pointer to array of new vertex handles \ref trio) */
2002  int* new_vertex_handles_allocated,
2003  /**< [in,out] Pointer to allocated size of */
2004  int* new_vertex_handles_size,
2005  /**< [out] Pointer to occupied size of */
2006  int* err
2007  /**< [out] Returned Error status (see iBase_ErrorType) */
2008 );
2009 
2010 /***************************************************************************/ /**
2011  * \ingroup Entities
2012  * \brief Create an
2013  *array of new
2014  *entities with
2015  *specified
2016  *lower-order topology
2017  *
2018  * Create an array of
2019  *new entities with
2020  *specified
2021  *lower-order
2022  *topology. Specified
2023  *new_entity_topology
2024  *must be value in
2025  *iMesh_EntityTopology
2026  * enumeration. Values
2027  *return in status
2028  *array must be values
2029  *in the
2030  * iBase_CreationStatus
2031  *enumeration.
2032  ******************************************************************************/
2033 
2034 void iMesh_createEntArr( iMesh_Instance instance,
2035  /**< [in] iMesh instance handle */
2036  const int new_entity_topology,
2037  /**< [in] Topology of created entity */
2038  const iBase_EntityHandle* lower_order_entity_handles,
2039  /**< [in] Array of lower order entity handles to be used to construct
2040  new entities */
2041  const int lower_order_entity_handles_size,
2042  /**< [in] Number of entities in lower_order_entity_handles array */
2043  iBase_EntityHandle** new_entity_handles,
2044  /**< [in,out] Pointer to array of new_entity_handles
2045  \ref trio) */
2046  int* new_entity_handles_allocated,
2047  /**< [in,out] Pointer to allocated size of */
2048  int* new_entity_handles_size,
2049  /**< [out] Pointer to occupied size of */
2050  int** status,
2051  /**< [in,out] Pointer to array of creation status returned from
2052  \ref trio) (see iBase_CreationStatus) */
2053  int* status_allocated,
2054  /**< [in,out] Pointer to allocated size of status array */
2055  int* status_size,
2056  /**< [out] Pointer to occupied size of status array */
2057  int* err
2058  /**< [out] Returned Error status (see iBase_ErrorType) */
2059 );
2060 
2061 /***************************************************************************/ /**
2062  * \ingroup Entities
2063  * \brief Delete
2064  *specified entities
2065  *
2066  * Delete specified
2067  *entities
2068  ******************************************************************************/
2069 
2070 void iMesh_deleteEntArr( iMesh_Instance instance,
2071  /**< [in] iMesh instance handle */
2072  const iBase_EntityHandle* entity_handles,
2073  /**< [in] Array of entity handles to be deleted */
2074  const int entity_handles_size,
2075  /**< [in] Number of entities in array to be deleted */
2076  int* err
2077  /**< [out] Returned Error status (see iBase_ErrorType) */
2078 );
2079 
2080 /***************************************************************************/ /**
2081  * \ingroup Tags
2082  * \brief Create a
2083  *tag with specified
2084  *name, size, and type
2085  *
2086  * Create a tag with
2087  *specified name,
2088  *size, and type. Tag
2089  *size is in units of
2090  *size of tag_type
2091  *data types. Value
2092  *input for tag type
2093  *must be value in
2094  *iBase_TagType
2095  *enumeration.
2096  ******************************************************************************/
2097 
2098 void iMesh_createTag( iMesh_Instance instance,
2099  /**< [in] iMesh instance handle */
2100  const char* tag_name,
2101  /**< [in] Character string indicating tag name */
2102  const int tag_size,
2103  /**< [in] Size of each tag value, in units of number of
2104  tag_type datums. */
2105  const int tag_type,
2106  /**< [in] Data type for data stored in this tag */
2107  iBase_TagHandle* tag_handle,
2108  /**< [out] Pointer to tag handle returned from function */
2109  int* err,
2110  /**< [out] Returned Error status (see iBase_ErrorType) */
2111  const int tag_name_len
2112  /**< [in] Length of tag name string (\ref strlen) */
2113 );
2114 
2115 /***************************************************************************/ /**
2116  * \ingroup Tags
2117  * \brief Destroy a
2118  *tag
2119  *
2120  * Destroy a tag. If
2121  *forced is non-zero
2122  *and entities still
2123  *have values set for
2124  *this tag, tag is
2125  *deleted anyway and
2126  *those values
2127  *disappear, otherwise
2128  *tag is not deleted.
2129  ******************************************************************************/
2130 
2131 void iMesh_destroyTag( iMesh_Instance instance,
2132  /**< [in] iMesh instance handle */
2133  iBase_TagHandle tag_handle,
2134  /**< [in] Handle of tag to be deleted */
2135  const int forced,
2136  /**< [in] If non-zero, delete the tag even if entities have values set
2137  for the tag. */
2138  int* err
2139  /**< [out] Returned Error status (see iBase_ErrorType) */
2140 );
2141 
2142 /***************************************************************************/ /**
2143  * \ingroup Tags
2144  * \brief Get the
2145  *name for a given tag
2146  *handle
2147  *
2148  * Get the name for a
2149  *given tag handle
2150  ******************************************************************************/
2151 
2152 void iMesh_getTagName( iMesh_Instance instance,
2153  /**< [in] iMesh instance handle */
2154  const iBase_TagHandle tag_handle,
2155  /**< [in] Tag handle being queried */
2156  char* name,
2157  /**< [in,out] Pointer to character string to store name returned from */
2158  int* err,
2159  /**< [out] Returned Error status (see iBase_ErrorType) */
2160  int name_len
2161  /**< [in] Length of character string input to function
2162  (\ref strlen) */
2163 );
2164 
2165 /***************************************************************************/ /**
2166  * \ingroup Tags
2167  * \brief Get size of
2168  *a tag in units of
2169  *numbers of tag data
2170  *type
2171  *
2172  * Get size of a tag
2173  *in units of numbers
2174  *of tag data type
2175  ******************************************************************************/
2176 
2177 void iMesh_getTagSizeValues( iMesh_Instance instance,
2178  /**< [in] iMesh instance handle */
2179  const iBase_TagHandle tag_handle,
2180  /**< [in] Handle of tag being queried */
2181  int* tag_size,
2182  /**< [out] Pointer to tag size returned from function */
2183  int* err
2184  /**< [out] Returned Error status (see iBase_ErrorType) */
2185 );
2186 
2187 /***************************************************************************/ /**
2188  * \ingroup Tags
2189  * \brief Get size of
2190  *a tag in units of
2191  *bytes
2192  *
2193  * Get size of a tag
2194  *in units of bytes
2195  ******************************************************************************/
2196 
2197 void iMesh_getTagSizeBytes( iMesh_Instance instance,
2198  /**< [in] iMesh instance handle */
2199  const iBase_TagHandle tag_handle,
2200  /**< [in] Handle of tag being queried */
2201  int* tag_size,
2202  /**< [out] Pointer to tag size returned from function */
2203  int* err
2204  /**< [out] Returned Error status (see iBase_ErrorType) */
2205 );
2206 
2207 /***************************************************************************/ /**
2208  * \ingroup Tags
2209  * \brief Get a the
2210  *handle of an
2211  *existing tag with
2212  *the specified name
2213  *
2214  * Get a the handle of
2215  *an existing tag with
2216  *the specified name
2217  ******************************************************************************/
2218 
2219 void iMesh_getTagHandle( iMesh_Instance instance,
2220  /**< [in] iMesh instance handle */
2221  const char* tag_name,
2222  /**< [in] Name of tag being queried */
2223  iBase_TagHandle* tag_handle,
2224  /**< [out] Pointer to tag handle returned from function */
2225  int* err,
2226  /**< [out] Returned Error status (see iBase_ErrorType) */
2227  int tag_name_len
2228  /**< [in] Length of tag name string (\ref strlen) */
2229 );
2230 
2231 /***************************************************************************/ /**
2232  * \ingroup Tags
2233  * \brief Get the
2234  *data type of the
2235  *specified tag handle
2236  *
2237  * Get the data type
2238  *of the specified tag
2239  *handle. Tag type is
2240  *a value in the
2241  *iBase_TagType
2242  *enumeration.
2243  ******************************************************************************/
2244 
2245 void iMesh_getTagType( iMesh_Instance instance,
2246  /**< [in] iMesh instance handle */
2247  const iBase_TagHandle tag_handle,
2248  /**< [in] Handle for the tag being queried */
2249  int* tag_type,
2250  /**< [out] Pointer to tag type returned from function */
2251  int* err
2252  /**< [out] Returned Error status (see iBase_ErrorType) */
2253 );
2254 
2255 /***************************************************************************/ /**
2256  * \ingroup TagsOnSets
2257  * \brief Set a tag
2258  *value of arbitrary
2259  *type on an entity
2260  *set
2261  *
2262  * Set a tag value of
2263  *arbitrary type on an
2264  *entity set. The tag
2265  *data is passed as
2266  *void*.
2267  *tag_value_size
2268  *specifies the size
2269  *of the memory
2270  * pointed to by
2271  *tag_value in terms
2272  *of bytes.
2273  *Applications are
2274  *free to use this
2275  *function to set data
2276  *of any type, not
2277  *just iBase_BYTES.
2278  * However, in all
2279  *cases, the size
2280  *specified by
2281  *tag_value_size is
2282  * always in terms of
2283  *bytes.
2284  ******************************************************************************/
2285 
2286 void iMesh_setEntSetData( iMesh_Instance instance,
2287  /**< [in] iMesh instance handle */
2288  iBase_EntitySetHandle entity_set_handle,
2289  /**< [in] Entity set on which tag is being set */
2290  const iBase_TagHandle tag_handle,
2291  /**< [in] Tag being set on an entity set */
2292  const void* tag_value,
2293  /**< [in] Pointer to tag data being set on entity set */
2294  const int tag_value_size,
2295  /**< [in] Size in bytes of tag data */
2296  int* err
2297  /**< [out] Returned Error status (see iBase_ErrorType) */
2298 );
2299 
2300 /***************************************************************************/ /**
2301  * \ingroup TagsOnSets
2302  * \brief Set a tag
2303  *value of integer
2304  *type on an entity
2305  *set
2306  *
2307  * Set a tag value of
2308  *integer type on an
2309  *entity set.
2310  ******************************************************************************/
2311 
2312 void iMesh_setEntSetIntData( iMesh_Instance instance,
2313  /**< [in] iMesh instance handle */
2314  iBase_EntitySetHandle entity_set,
2315  /**< [in] Entity set on which tag is being set */
2316  const iBase_TagHandle tag_handle,
2317  /**< [in] Tag being set on an entity set */
2318  const int tag_value,
2319  /**< [in] Tag value being set on entity set */
2320  int* err
2321  /**< [out] Returned Error status (see iBase_ErrorType) */
2322 );
2323 
2324 /***************************************************************************/ /**
2325  * \ingroup TagsOnSets
2326  * \brief Set a tag
2327  *value of double type
2328  *on an entity set
2329  *
2330  * Set a tag value of
2331  *double type on an
2332  *entity set.
2333  ******************************************************************************/
2334 
2335 void iMesh_setEntSetDblData( iMesh_Instance instance,
2336  /**< [in] iMesh instance handle */
2337  iBase_EntitySetHandle entity_set,
2338  /**< [in] Entity set on which tag is being set */
2339  const iBase_TagHandle tag_handle,
2340  /**< [in] Tag being set on an entity set */
2341  const double tag_value,
2342  /**< [in] Tag value being set on entity set */
2343  int* err
2344  /**< [out] Returned Error status (see iBase_ErrorType) */
2345 );
2346 
2347 /***************************************************************************/ /**
2348  * \ingroup TagsOnSets
2349  * \brief Set a tag
2350  *value of entity
2351  *handle type on an
2352  *entity set
2353  *
2354  * Set a tag value of
2355  *entity handle type
2356  *on an entity set.
2357  ******************************************************************************/
2358 
2359 void iMesh_setEntSetEHData( iMesh_Instance instance,
2360  /**< [in] iMesh instance handle */
2361  iBase_EntitySetHandle entity_set,
2362  /**< [in] Entity set on which tag is being set */
2363  const iBase_TagHandle tag_handle,
2364  /**< [in] Tag being set on an entity set */
2365  const iBase_EntityHandle tag_value,
2366  /**< [in] Tag value being set on entity set */
2367  int* err
2368  /**< [out] Returned Error status (see iBase_ErrorType) */
2369 );
2370 
2371 /***************************************************************************/ /**
2372  * \ingroup TagsOnSets
2373  * \brief Set a tag
2374  *value of entity set
2375  *handle type on an
2376  *
2377  * entity set
2378  * Set a tag value of
2379  *entity set handle
2380  *type on an entity
2381  *set.
2382  ******************************************************************************/
2383 
2384 void iMesh_setEntSetESHData( iMesh_Instance instance,
2385  /**< [in] iMesh instance handle */
2386  iBase_EntitySetHandle entity_set,
2387  /**< [in] Entity set on which tag is being set */
2388  const iBase_TagHandle tag_handle,
2389  /**< [in] Tag being set on an entity set */
2390  const iBase_EntitySetHandle tag_value,
2391  /**< [in] Tag value being set on entity set */
2392  int* err
2393  /**< [out] Returned Error status (see iBase_ErrorType) */
2394 );
2395 
2396 /***************************************************************************/ /**
2397  * \ingroup TagsOnSets
2398  * \brief Get the
2399  *value of a tag of
2400  *arbitrary type on an
2401  *entity set
2402  *
2403  * Get the value of a
2404  *tag of arbitrary
2405  *type on an entity
2406  *set. Tag data is
2407  *returned back as
2408  *void*.
2409  *tag_value_size
2410  *specifies the size
2411  *of the memory
2412  *pointed to by
2413  *tag_value in terms
2414  *of bytes.
2415  *Applications may use
2416  *this function to get
2417  *data of any type,
2418  *not just
2419  *iBase_BYTES. However
2420  *because this
2421  *function supports
2422  *data of arbitrary
2423  *type, in all cases
2424  *the size specified
2425  *by tag_value_size is
2426  *always in terms of
2427  *bytes.
2428  ******************************************************************************/
2429 
2430 void iMesh_getEntSetData( iMesh_Instance instance,
2431  /**< [in] iMesh instance handle */
2432  const iBase_EntitySetHandle entity_set_handle,
2433  /**< [in] Entity set on which tag is being set */
2434  const iBase_TagHandle tag_handle,
2435  /**< [in] Tag being set on an entity set */
2436  void* tag_value,
2437  /**< [in,out] Pointer to tag data array being queried
2438  \ref trio) */
2439  int* tag_value_allocated,
2440  /**< [in,out] Pointer allocated size, in bytes, of tag_value array. */
2441  int* tag_value_size,
2442  /**< [out] Pointer to occupied size, in bytes, of tag_value array. */
2443  int* err
2444  /**< [out] Returned Error status (see iBase_ErrorType) */
2445 );
2446 
2447 /***************************************************************************/ /**
2448  * \ingroup TagsOnSets
2449  * \brief Get the
2450  *value of a tag of
2451  *integer type on an
2452  *entity set
2453  *
2454  * Get the value of a
2455  *tag of integer type
2456  *on an entity set.
2457  ******************************************************************************/
2458 
2459 void iMesh_getEntSetIntData( iMesh_Instance instance,
2460  /**< [in] iMesh instance handle */
2461  const iBase_EntitySetHandle entity_set,
2462  /**< [in] Entity set on which tag is being set */
2463  const iBase_TagHandle tag_handle,
2464  /**< [in] Tag being set on an entity set */
2465  int* out_data,
2466  /**< [out] Pointer to tag value returned from function */
2467  int* err
2468  /**< [out] Returned Error status (see iBase_ErrorType) */
2469 );
2470 
2471 /***************************************************************************/ /**
2472  * \ingroup TagsOnSets
2473  * \brief Get the
2474  *value of a tag of
2475  *double type on an
2476  *entity set
2477  *
2478  * Get the value of a
2479  *tag of double type
2480  *on an entity set.
2481  ******************************************************************************/
2482 
2483 void iMesh_getEntSetDblData( iMesh_Instance instance,
2484  /**< [in] iMesh instance handle */
2485  const iBase_EntitySetHandle entity_set,
2486  /**< [in] Entity set on which tag is being set */
2487  const iBase_TagHandle tag_handle,
2488  /**< [in] Tag being set on an entity set */
2489  double* out_data,
2490  /**< [out] Pointer to tag value returned from function */
2491  int* err
2492  /**< [out] Returned Error status (see iBase_ErrorType) */
2493 );
2494 
2495 /***************************************************************************/ /**
2496  * \ingroup TagsOnSets
2497  * \brief Get the
2498  *value of a tag of
2499  *entity handle type
2500  *on an entity set
2501  *
2502  * Get the value of a
2503  *tag of entity handle
2504  *type on an entity
2505  *set.
2506  ******************************************************************************/
2507 
2508 void iMesh_getEntSetEHData( iMesh_Instance instance,
2509  /**< [in] iMesh instance handle */
2510  const iBase_EntitySetHandle entity_set,
2511  /**< [in] Entity set on which tag is being set */
2512  const iBase_TagHandle tag_handle,
2513  /**< [in] Tag being set on an entity set */
2514  iBase_EntityHandle* out_data,
2515  /**< [out] Pointer to tag value returned from function */
2516  int* err
2517  /**< [out] Returned Error status (see iBase_ErrorType) */
2518 );
2519 
2520 /***************************************************************************/ /**
2521  * \ingroup TagsOnSets
2522  * \brief Get the
2523  *value of a tag of
2524  *entity set handle
2525  *type on an
2526  *
2527  * entity set
2528  * Get the value of a
2529  *tag of entity set
2530  *handle type on an
2531  *entity set.
2532  ******************************************************************************/
2533 
2534 void iMesh_getEntSetESHData( iMesh_Instance instance,
2535  /**< [in] iMesh instance handle */
2536  const iBase_EntitySetHandle entity_set,
2537  /**< [in] Entity set on which tag is being set */
2538  const iBase_TagHandle tag_handle,
2539  /**< [in] Tag being set on an entity set */
2540  iBase_EntitySetHandle* out_data,
2541  /**< [out] Pointer to tag value returned from function */
2542  int* err
2543  /**< [out] Returned Error status (see iBase_ErrorType) */
2544 );
2545 
2546 /***************************************************************************/ /**
2547  * \ingroup Tags
2548  * \brief Get all the
2549  *tags associated with
2550  *a specified entity
2551  *set
2552  *
2553  * Get all the tags
2554  *associated with a
2555  *specified entity set
2556  ******************************************************************************/
2557 
2558 void iMesh_getAllEntSetTags( iMesh_Instance instance,
2559  /**< [in] iMesh instance handle */
2560  const iBase_EntitySetHandle entity_set_handle,
2561  /**< [in] Entity being queried */
2562  iBase_TagHandle** tag_handles,
2563  /**< [in,out] Pointer to array of tag_handles returned from
2564  \ref trio) */
2565  int* tag_handles_allocated,
2566  /**< [in,out] Pointer to allocated size of tag_handles */
2567  int* tag_handles_size,
2568  /**< [out] Pointer to occupied size of tag_handles array */
2569  int* err
2570  /**< [out] Returned Error status (see iBase_ErrorType) */
2571 );
2572 
2573 /***************************************************************************/ /**
2574  * \ingroup Tags
2575  * \brief Remove a
2576  *tag value from an
2577  *entity set
2578  *
2579  * Remove a tag value
2580  *from an entity set
2581  ******************************************************************************/
2582 
2583 void iMesh_rmvEntSetTag( iMesh_Instance instance,
2584  /**< [in] iMesh instance handle */
2585  iBase_EntitySetHandle entity_set_handle,
2586  /**< [in] Entity set from which tag is being removed */
2587  const iBase_TagHandle tag_handle,
2588  /**< [in] Tag handle of tag being removed */
2589  int* err
2590  /**< [out] Returned Error status (see iBase_ErrorType) */
2591 );
2592 
2593 /***************************************************************************/ /**
2594  * \ingroup
2595  *VertexEntities
2596  * \brief Set
2597  *coordinates for a
2598  *vertex
2599  *
2600  * Set coordinates for
2601  *a vertex.
2602  ******************************************************************************/
2603 
2604 void iMesh_setVtxCoord( iMesh_Instance instance,
2605  /**< [in] iMesh instance handle */
2606  iBase_EntityHandle vertex_handle,
2607  /**< [in] vertex handle being set */
2608  const double x,
2609  /**< [in] x coordinate being set */
2610  const double y,
2611  /**< [in] y coordinate being set */
2612  const double z,
2613  /**< [in] z coordinate being set */
2614  int* err
2615  /**< [out] Returned Error status (see iBase_ErrorType) */
2616 );
2617 
2618 /***************************************************************************/ /**
2619  * \ingroup
2620  *VertexEntities
2621  * \brief Create a
2622  *new vertex at
2623  *specified
2624  *coordinates
2625  *
2626  * Create a new vertex
2627  *at specified
2628  *coordinates.
2629  ******************************************************************************/
2630 
2631 void iMesh_createVtx( iMesh_Instance instance,
2632  /**< [in] iMesh instance handle */
2633  const double x,
2634  /**< [in] x coordinate of new vertex */
2635  const double y,
2636  /**< [in] y coordinate of new vertex */
2637  const double z,
2638  /**< [in] z coordinate of new vertex */
2639  iBase_EntityHandle* new_vertex_handle,
2640  /**< [out] Pointer to new vertex handles returned from */
2641  int* err
2642  /**< [out] Returned Error status (see iBase_ErrorType) */
2643 );
2644 
2645 /***************************************************************************/ /**
2646  * \ingroup Entities
2647  * \brief Create a
2648  *new entity with
2649  *specified
2650  *lower-order topology
2651  *
2652  * Create a new entity
2653  *with specified
2654  *lower-order
2655  *topology. Specified
2656  *new_entity_topology
2657  *must be value in
2658  *iMesh_EntityTopology
2659  * enumeration. Value
2660  *returned as status
2661  *must be a value in
2662  *the
2663  * iBase_CreationStatus
2664  *enumeration.
2665  ******************************************************************************/
2666 
2667 void iMesh_createEnt( iMesh_Instance instance,
2668  /**< [in] iMesh instance handle */
2669  const int new_entity_topology,
2670  /**< [in] Topology of created entity */
2671  const iBase_EntityHandle* lower_order_entity_handles,
2672  /**< [in] Array of lower order entity handles to be used to construct
2673  new entity. */
2674  const int lower_order_entity_handles_size,
2675  /**< [in] Number of entities in lower_order_entity_handles array */
2676  iBase_EntityHandle* new_entity_handle,
2677  /**< [out] Pointer to new entity handle returned from */
2678  int* status,
2679  /**< [out] Pointer to creation status returned from function
2680  (see iBase_CreationStatus) */
2681  int* err
2682  /**< [out] Returned Error status (see iBase_ErrorType) */
2683 );
2684 
2685 /***************************************************************************/ /**
2686  * \ingroup Entities
2687  * \brief Delete
2688  *specified entity
2689  *
2690  * Delete specified
2691  *entity
2692  ******************************************************************************/
2693 
2694 void iMesh_deleteEnt( iMesh_Instance instance,
2695  /**< [in] iMesh instance handle */
2696  iBase_EntityHandle entity_handle,
2697  /**< [in] Entity to be deleted */
2698  int* err
2699  /**< [out] Returned Error status (see iBase_ErrorType) */
2700 );
2701 
2702 /***************************************************************************/ /**
2703  * \ingroup TagsOnArr
2704  * \brief Get tag
2705  *values of arbitrary
2706  *type for an array of
2707  *entities
2708  *
2709  * Get tag values of
2710  *arbitrary type for
2711  *an array of
2712  *entities. Tag data
2713  * is returned as
2714  *void*.
2715  *tag_values_size
2716  *specifies the size
2717  *of the memory
2718  *pointed to by
2719  *tag_values in terms
2720  *of bytes.
2721  *Applications may use
2722  *this function to get
2723  *data of any type,
2724  *not just
2725  *iBase_BYTES.
2726  * However, because
2727  *this function
2728  *supports data of
2729  *arbitrary type, in
2730  * all cases the size
2731  *specified by
2732  *tag_values_size
2733  *always in terms of
2734  * bytes.
2735  ******************************************************************************/
2736 
2737 void iMesh_getArrData( iMesh_Instance instance,
2738  /**< [in] iMesh instance handle */
2739  const iBase_EntityHandle* entity_handles,
2740  /**< [in] Entity array on which tag is being set */
2741  const int entity_handles_size,
2742  /**< [in] Number of entities in array */
2743  const iBase_TagHandle tag_handle,
2744  /**< [in] Tag being set on an entity */
2745  void* tag_values,
2746  /**< [in,out] Pointer to tag data array being returned. Note that the
2747  implicit INTERLEAVED storage order rule applies
2748  (see iBase_StorageOrder) \ref trio) */
2749  int* tag_values_allocated,
2750  /**< [in,out] Pointer to allocated size of tag data array */
2751  int* tag_values_size,
2752  /**< [out] Pointer to occupied size in bytes of tag data */
2753  int* err
2754  /**< [out] Returned Error status (see iBase_ErrorType) */
2755 );
2756 
2757 /***************************************************************************/ /**
2758  * \ingroup TagsOnArr
2759  * \brief Get tag
2760  *values of integer
2761  *type for an array of
2762  *entities
2763  *
2764  * Get tag values of
2765  *integer type for an
2766  *array of entities.
2767  ******************************************************************************/
2768 
2769 void iMesh_getIntArrData( iMesh_Instance instance,
2770  /**< [in] iMesh instance handle */
2771  const iBase_EntityHandle* entity_handles,
2772  /**< [in] Entity array on which tag is being set */
2773  const int entity_handles_size,
2774  /**< [in] Number of entities in array */
2775  const iBase_TagHandle tag_handle,
2776  /**< [in] Tag being set on an entity */
2777  int** tag_values,
2778  /**< [in,out] Pointer to tag data array being returned. Note that the
2779  implicit INTERLEAVED storage order rule applies
2780  (see iBase_StorageOrder) \ref trio) */
2781  int* tag_values_allocated,
2782  /**< [in,out] Pointer to allocated size of tag data array */
2783  int* tag_values_size,
2784  /**< [out] Pointer to occupied size of tag data array */
2785  int* err
2786  /**< [out] Returned Error status (see iBase_ErrorType) */
2787 );
2788 
2789 /***************************************************************************/ /**
2790  * \ingroup TagsOnArr
2791  * \brief Get tag
2792  *values of double
2793  *type for an array of
2794  *entities
2795  *
2796  * Get tag values of
2797  *double type for an
2798  *array of entities.
2799  ******************************************************************************/
2800 
2801 void iMesh_getDblArrData( iMesh_Instance instance,
2802  /**< [in] iMesh instance handle */
2803  const iBase_EntityHandle* entity_handles,
2804  /**< [in] Entity array on which tag is being set */
2805  const int entity_handles_size,
2806  /**< [in] Number of entities in array */
2807  const iBase_TagHandle tag_handle,
2808  /**< [in] Tag being set on an entity */
2809  double** tag_values,
2810  /**< [in,out] Pointer to tag data array being returned. Note that the
2811  implicit INTERLEAVED storage order rule applies
2812  (see iBase_StorageOrder) \ref trio) */
2813  int* tag_values_allocated,
2814  /**< [in,out] Pointer to allocated size of tag data array */
2815  int* tag_values_size,
2816  /**< [out] Pointer to occupied size of tag data array */
2817  int* err
2818  /**< [out] Returned Error status (see iBase_ErrorType) */
2819 );
2820 
2821 /***************************************************************************/ /**
2822  * \ingroup TagsOnArr
2823  * \brief Get tag
2824  *values of entity
2825  *handle type for an
2826  *array of entities
2827  *
2828  * Get tag values of
2829  *entity handle type
2830  *for an array of
2831  *entities.
2832  ******************************************************************************/
2833 
2834 void iMesh_getEHArrData( iMesh_Instance instance,
2835  /**< [in] iMesh instance handle */
2836  const iBase_EntityHandle* entity_handles,
2837  /**< [in] Entity array on which tag is being set */
2838  const int entity_handles_size,
2839  /**< [in] Number of entities in array */
2840  const iBase_TagHandle tag_handle,
2841  /**< [in] Tag being set on an entity */
2842  iBase_EntityHandle** tag_value,
2843  /**< [in,out] Pointer to tag data array being returned. Note that the
2844  implicit INTERLEAVED storage order rule applies
2845  (see iBase_StorageOrder) \ref trio) */
2846  int* tag_value_allocated,
2847  /**< [in,out] Pointer to allocated size of tag data array */
2848  int* tag_value_size,
2849  /**< [out] Pointer to occupied size of tag data array */
2850  int* err
2851  /**< [out] Returned Error status (see iBase_ErrorType) */
2852 );
2853 
2854 /***************************************************************************/ /**
2855  * \ingroup TagsOnArr
2856  * \brief Get tag
2857  *values of entity set
2858  *handle type for an
2859  *array of
2860  *
2861  * entities
2862  * Get tag values of
2863  *entity set handle
2864  *type for an array of
2865  *entities.
2866  ******************************************************************************/
2867 
2868 void iMesh_getESHArrData( iMesh_Instance instance,
2869  /**< [in] iMesh instance handle */
2870  const iBase_EntityHandle* entity_handles,
2871  /**< [in] Entity array on which tag is being set */
2872  const int entity_handles_size,
2873  /**< [in] Number of entities in array */
2874  const iBase_TagHandle tag_handle,
2875  /**< [in] Tag being set on an entity */
2876  iBase_EntitySetHandle** tag_value,
2877  /**< [in,out] Pointer to tag data array being returned. Note that the
2878  implicit INTERLEAVED storage order rule applies
2879  (see iBase_StorageOrder) \ref trio) */
2880  int* tag_value_allocated,
2881  /**< [in,out] Pointer to allocated size of tag data array */
2882  int* tag_value_size,
2883  /**< [out] Pointer to occupied size of tag data array */
2884  int* err
2885  /**< [out] Returned Error status (see iBase_ErrorType) */
2886 );
2887 
2888 /***************************************************************************/ /**
2889  * \ingroup TagsOnArr
2890  * \brief Set tag
2891  *values of arbitrary
2892  *type on an array of
2893  *entities
2894  *
2895  * Set tag values of
2896  *arbitrary type on an
2897  *array of entities.
2898  *Tag data is passed
2899  *as void*.
2900  *tag_values_size
2901  *specifies the size
2902  *of the memory
2903  *pointed to by
2904  *tag_values in terms
2905  *of bytes.
2906  *Applications may use
2907  *this function to set
2908  *data of any type,
2909  *not just
2910  *iBase_BYTES.
2911  * However, because
2912  *this function
2913  *supports data of
2914  *arbitrary type, in
2915  *all cases the size
2916  *specified by
2917  *tag_values_size is
2918  *always in terms of
2919  * bytes.
2920  ******************************************************************************/
2921 
2922 void iMesh_setArrData( iMesh_Instance instance,
2923  /**< [in] iMesh instance handle */
2924  const iBase_EntityHandle* entity_handles,
2925  /**< [in] Entity array on which tag is being set */
2926  const int entity_handles_size,
2927  /**< [in] Number of entities in array */
2928  const iBase_TagHandle tag_handle,
2929  /**< [in] Tag being set on an entity */
2930  const void* tag_values,
2931  /**< [in] Pointer to tag data being set on entity. Note that the
2932  implicit INTERLEAVED storage order rule applies
2933  (see iBase_StorageOrder) */
2934  const int tag_values_size,
2935  /**< [in] Size in bytes of tag data */
2936  int* err
2937  /**< [out] Returned Error status (see iBase_ErrorType) */
2938 );
2939 
2940 /***************************************************************************/ /**
2941  * \ingroup TagsOnArr
2942  * \brief Set tag
2943  *values of integer
2944  *type on an array of
2945  *entities
2946  *
2947  * Set tag values of
2948  *integer type on an
2949  *array of entities.
2950  ******************************************************************************/
2951 
2952 void iMesh_setIntArrData( iMesh_Instance instance,
2953  /**< [in] iMesh instance handle */
2954  const iBase_EntityHandle* entity_handles,
2955  /**< [in] Entity array on which tag is being set */
2956  const int entity_handles_size,
2957  /**< [in] Number of entities in array */
2958  const iBase_TagHandle tag_handle,
2959  /**< [in] Tag being set on an entity */
2960  const int* tag_values,
2961  /**< [in] Pointer to tag data being set on entities. Note that the
2962  implicit INTERLEAVED storage order rule applies
2963  (see iBase_StorageOrder) */
2964  const int tag_values_size,
2965  /**< [in] Size in total number of integers of tag data */
2966  int* err
2967  /**< [out] Returned Error status (see iBase_ErrorType) */
2968 );
2969 
2970 /***************************************************************************/ /**
2971  * \ingroup TagsOnArr
2972  * \brief Set tag
2973  *values of double
2974  *type on an array of
2975  *entities
2976  *
2977  * Set tag values of
2978  *double type on an
2979  *array of entities.
2980  ******************************************************************************/
2981 
2982 void iMesh_setDblArrData( iMesh_Instance instance,
2983  /**< [in] iMesh instance handle */
2984  const iBase_EntityHandle* entity_handles,
2985  /**< [in] Entity array on which tag is being set */
2986  const int entity_handles_size,
2987  /**< [in] Number of entities in array */
2988  const iBase_TagHandle tag_handle,
2989  /**< [in] Tag being set on an entity */
2990  const double* tag_values,
2991  /**< [in] Pointer to tag data being set on entities. Note that the
2992  implicit INTERLEAVED storage order rule applies
2993  (see iBase_StorageOrder) */
2994  const int tag_values_size,
2995  /**< [in] Size in total number of doubles of tag data */
2996  int* err
2997  /**< [out] Returned Error status (see iBase_ErrorType) */
2998 );
2999 
3000 /***************************************************************************/ /**
3001  * \ingroup TagsOnArr
3002  * \brief Set tag
3003  *values of entity
3004  *handle type on an
3005  *array of entities
3006  *
3007  * Set tag values of
3008  *entity handle type
3009  *on an array of
3010  *entities.
3011  ******************************************************************************/
3012 
3013 void iMesh_setEHArrData( iMesh_Instance instance,
3014  /**< [in] iMesh instance handle */
3015  const iBase_EntityHandle* entity_handles,
3016  /**< [in] Entity array on which tag is being set */
3017  const int entity_handles_size,
3018  /**< [in] Number of entities in array */
3019  const iBase_TagHandle tag_handle,
3020  /**< [in] Tag being set on an entity */
3021  const iBase_EntityHandle* tag_values,
3022  /**< [in] Pointer to tag data being set on entities. Note that the
3023  implicit INTERLEAVED storage order rule applies
3024  (see iBase_StorageOrder) */
3025  const int tag_values_size,
3026  /**< [in] Size in total number of entity handles of tag */
3027  int* err
3028  /**< [out] Returned Error status (see iBase_ErrorType) */
3029 );
3030 
3031 /***************************************************************************/ /**
3032  * \ingroup TagsOnArr
3033  * \brief Set tag
3034  *values of entity set
3035  *handle type on an
3036  *array of
3037  *
3038  * entities
3039  * Set tag values of
3040  *entity set handle
3041  *type on an array of
3042  *entities.
3043  ******************************************************************************/
3044 
3045 void iMesh_setESHArrData( iMesh_Instance instance,
3046  /**< [in] iMesh instance handle */
3047  const iBase_EntityHandle* entity_handles,
3048  /**< [in] Entity array on which tag is being set */
3049  const int entity_handles_size,
3050  /**< [in] Number of entities in array */
3051  const iBase_TagHandle tag_handle,
3052  /**< [in] Tag being set on an entity */
3053  const iBase_EntitySetHandle* tag_values,
3054  /**< [in] Pointer to tag data being set on entities. Note that the
3055  implicit INTERLEAVED storage order rule applies
3056  (see iBase_StorageOrder) */
3057  const int tag_values_size,
3058  /**< [in] Size in total number of entity handles of tag */
3059  int* err
3060  /**< [out] Returned Error status (see iBase_ErrorType) */
3061 );
3062 
3063 /***************************************************************************/ /**
3064  * \ingroup Tags
3065  * \brief Remove a
3066  *tag value from an
3067  *array of entities
3068  *
3069  * Remove a tag value
3070  *from an array of
3071  *entities
3072  ******************************************************************************/
3073 
3074 void iMesh_rmvArrTag( iMesh_Instance instance,
3075  /**< [in] iMesh instance handle */
3076  const iBase_EntityHandle* entity_handles,
3077  /**< [in] Entity from which tag is being removed */
3078  const int entity_handles_size,
3079  /**< [in] Number of entities in entity array */
3080  const iBase_TagHandle tag_handle,
3081  /**< [in] Tag handle of tag being removed */
3082  int* err
3083  /**< [out] Returned Error status (see iBase_ErrorType) */
3084 );
3085 
3086 /***************************************************************************/ /**
3087  * \ingroup TagsOnEnts
3088  * \brief Get the
3089  *value of a tag of
3090  *arbitrary type on an
3091  *entity
3092  *
3093  * Get the value of a
3094  *tag of arbitrary
3095  *type on an entity.
3096  *Tag data is passed
3097  *back as void*.
3098  *tag_value_size
3099  *specifies the size
3100  *of the memory
3101  *pointed to by
3102  *tag_value in terms
3103  *of bytes.
3104  *Applications may use
3105  *this function to get
3106  *data of any type,
3107  *not just
3108  *iBase_BYTES.
3109  * However, because
3110  *this function
3111  *supports arbitrary
3112  *type, in all cases
3113  *the size specified
3114  *by tag_value_size is
3115  *always in terms of
3116  * bytes.
3117  ******************************************************************************/
3118 
3119 void iMesh_getData( iMesh_Instance instance,
3120  /**< [in] iMesh instance handle */
3121  const iBase_EntityHandle entity_handle,
3122  /**< [in] Entity on which tag is being set */
3123  const iBase_TagHandle tag_handle,
3124  /**< [in] Tag being set on an entity */
3125  void* tag_value,
3126  /**< [in,out] Pointer to tag data array being queried
3127  \ref trio) */
3128  int* tag_value_allocated,
3129  /**< [in,out] Pointer to tag data array allocated size */
3130  int* tag_value_size,
3131  /**< [out] Pointer to occupied size in bytes of tag data */
3132  int* err
3133  /**< [out] Returned Error status (see iBase_ErrorType) */
3134 );
3135 
3136 /***************************************************************************/ /**
3137  * \ingroup TagsOnEnts
3138  * \brief Get the
3139  *value of a tag of
3140  *integer type on an
3141  *entity
3142  *
3143  * Get the value of a
3144  *tag of integer type
3145  *on an entity.
3146  ******************************************************************************/
3147 
3148 void iMesh_getIntData( iMesh_Instance instance,
3149  /**< [in] iMesh instance handle */
3150  const iBase_EntityHandle entity_handle,
3151  /**< [in] Entity on which tag is being set */
3152  const iBase_TagHandle tag_handle,
3153  /**< [in] Tag being set on an entity */
3154  int* out_data,
3155  /**< [out] Pointer to tag value returned from function */
3156  int* err
3157  /**< [out] Returned Error status (see iBase_ErrorType) */
3158 );
3159 
3160 /***************************************************************************/ /**
3161  * \ingroup TagsOnEnts
3162  * \brief Get the
3163  *value of a tag of
3164  *double type on an
3165  *entity
3166  *
3167  * Get the value of a
3168  *tag of double type
3169  *on an entity.
3170  ******************************************************************************/
3171 
3172 void iMesh_getDblData( iMesh_Instance instance,
3173  /**< [in] iMesh instance handle */
3174  const iBase_EntityHandle entity_handle,
3175  /**< [in] Entity on which tag is being set */
3176  const iBase_TagHandle tag_handle,
3177  /**< [in] Tag being set on an entity */
3178  double* out_data,
3179  /**< [out] Pointer to tag value returned from function */
3180  int* err
3181  /**< [out] Returned Error status (see iBase_ErrorType) */
3182 );
3183 
3184 /***************************************************************************/ /**
3185  * \ingroup TagsOnEnts
3186  * \brief Get the
3187  *value of a tag of
3188  *entity handle type
3189  *on an entity
3190  *
3191  * Get the value of a
3192  *tag of entity handle
3193  *type on an entity.
3194  ******************************************************************************/
3195 
3196 void iMesh_getEHData( iMesh_Instance instance,
3197  /**< [in] iMesh instance handle */
3198  const iBase_EntityHandle entity_handle,
3199  /**< [in] Entity on which tag is being set */
3200  const iBase_TagHandle tag_handle,
3201  /**< [in] Tag being set on an entity */
3202  iBase_EntityHandle* out_data,
3203  /**< [out] Pointer to tag value returned from function */
3204  int* err
3205  /**< [out] Returned Error status (see iBase_ErrorType) */
3206 );
3207 
3208 /***************************************************************************/ /**
3209  * \ingroup TagsOnEnts
3210  * \brief Get the
3211  *value of a tag of
3212  *entity set handle
3213  *type on an
3214  *
3215  * entity
3216  * Get the value of a
3217  *tag of entity set
3218  *handle type on an
3219  *entity.
3220  ******************************************************************************/
3221 
3222 void iMesh_getESHData( iMesh_Instance instance,
3223  /**< [in] iMesh instance handle */
3224  const iBase_EntityHandle entity_handle,
3225  /**< [in] Entity on which tag is being set */
3226  const iBase_TagHandle tag_handle,
3227  /**< [in] Tag being set on an entity */
3228  iBase_EntitySetHandle* out_data,
3229  /**< [out] Pointer to tag value returned from function */
3230  int* err
3231  /**< [out] Returned Error status (see iBase_ErrorType) */
3232 );
3233 
3234 /***************************************************************************/ /**
3235  * \ingroup TagsOnEnts
3236  * \brief Set a tag
3237  *value of arbitrary
3238  *type on an entity
3239  *
3240  * Set a tag value of
3241  *arbitrary type on an
3242  *entity. Tag data is
3243  *passed as void*.
3244  *tag_value_size
3245  *specifies the size
3246  *of the memory
3247  *pointed to by
3248  *tag_value in terms
3249  *of bytes.
3250  *Applications may use
3251  *this function to set
3252  *data of any type,
3253  *not just
3254  *iBase_BYTES.
3255  * However, because
3256  *this function
3257  *supports data of
3258  *arbitrary type, in
3259  * all cases the size
3260  *specified by
3261  *tag_value_size is
3262  *always in terms of
3263  *bytes.
3264  ******************************************************************************/
3265 
3266 void iMesh_setData( iMesh_Instance instance,
3267  /**< [in] iMesh instance handle */
3268  iBase_EntityHandle entity_handle,
3269  /**< [in] Entity on which tag is being set */
3270  const iBase_TagHandle tag_handle,
3271  /**< [in] Tag being set on an entity */
3272  const void* tag_value,
3273  /**< [in] Pointer to tag data being set on entity */
3274  const int tag_value_size,
3275  /**< [in] Size in bytes of tag data */
3276  int* err
3277  /**< [out] Returned Error status (see iBase_ErrorType) */
3278 );
3279 
3280 /***************************************************************************/ /**
3281  * \ingroup TagsOnEnts
3282  * \brief Set a tag
3283  *value of integer
3284  *type on an entity
3285  *
3286  * Set a tag value of
3287  *integer type on an
3288  *entity.
3289  ******************************************************************************/
3290 
3291 void iMesh_setIntData( iMesh_Instance instance,
3292  /**< [in] iMesh instance handle */
3293  iBase_EntityHandle entity_handle,
3294  /**< [in] Entity on which tag is being set */
3295  const iBase_TagHandle tag_handle,
3296  /**< [in] Tag being set on an entity */
3297  const int tag_value,
3298  /**< [in] Tag value being set on entity */
3299  int* err
3300  /**< [out] Returned Error status (see iBase_ErrorType) */
3301 );
3302 
3303 /***************************************************************************/ /**
3304  * \ingroup TagsOnEnts
3305  * \brief Set a tag
3306  *value of double type
3307  *on an entity
3308  *
3309  * Set a tag value of
3310  *double type on an
3311  *entity.
3312  ******************************************************************************/
3313 
3314 void iMesh_setDblData( iMesh_Instance instance,
3315  /**< [in] iMesh instance handle */
3316  iBase_EntityHandle entity_handle,
3317  /**< [in] Entity on which tag is being set */
3318  const iBase_TagHandle tag_handle,
3319  /**< [in] Tag being set on an entity */
3320  const double tag_value,
3321  /**< [in] Tag value being set on entity */
3322  int* err
3323  /**< [out] Returned Error status (see iBase_ErrorType) */
3324 );
3325 
3326 /***************************************************************************/ /**
3327  * \ingroup TagsOnEnts
3328  * \brief Set a tag
3329  *value of entity
3330  *handle type on an
3331  *entity
3332  *
3333  * Set a tag value of
3334  *entity handle type
3335  *on an entity.
3336  ******************************************************************************/
3337 
3338 void iMesh_setEHData( iMesh_Instance instance,
3339  /**< [in] iMesh instance handle */
3340  iBase_EntityHandle entity_handle,
3341  /**< [in] Entity on which tag is being set */
3342  const iBase_TagHandle tag_handle,
3343  /**< [in] Tag being set on an entity */
3344  const iBase_EntityHandle tag_value,
3345  /**< [in] Tag value being set on entity */
3346  int* err
3347  /**< [out] Returned Error status (see iBase_ErrorType) */
3348 );
3349 
3350 /***************************************************************************/ /**
3351  * \ingroup TagsOnEnts
3352  * \brief Set a tag
3353  *value of entity set
3354  *handle type on an
3355  *entity
3356  *
3357  * Set a tag value of
3358  *entity set handle
3359  *type on an entity.
3360  ******************************************************************************/
3361 
3362 void iMesh_setESHData( iMesh_Instance instance,
3363  /**< [in] iMesh instance handle */
3364  iBase_EntityHandle entity_handle,
3365  /**< [in] Entity on which tag is being set */
3366  const iBase_TagHandle tag_handle,
3367  /**< [in] Tag being set on an entity */
3368  const iBase_EntitySetHandle tag_value,
3369  /**< [in] Tag value being set on entity */
3370  int* err
3371  /**< [out] Returned Error status (see iBase_ErrorType) */
3372 );
3373 
3374 /***************************************************************************/ /**
3375  * \ingroup Tags
3376  * \brief Get all the
3377  *tags associated with
3378  *a specified entity
3379  *handle
3380  *
3381  * Get all the tags
3382  *associated with a
3383  *specified entity
3384  *handle
3385  ******************************************************************************/
3386 
3387 void iMesh_getAllTags( iMesh_Instance instance,
3388  /**< [in] iMesh instance handle */
3389  const iBase_EntityHandle entity_handle,
3390  /**< [in] Entity being queried */
3391  iBase_TagHandle** tag_handles,
3392  /**< [in,out] Pointer to array of tag_handles returned from
3393  \ref trio) */
3394  int* tag_handles_allocated,
3395  /**< [in,out] Pointer to allocated size of tag_handles */
3396  int* tag_handles_size,
3397  /**< [out] Pointer to occupied size of tag_handles array */
3398  int* err
3399  /**< [out] Returned Error status (see iBase_ErrorType) */
3400 );
3401 
3402 /***************************************************************************/ /**
3403  * \ingroup Tags
3404  * \brief Remove a
3405  *tag value from an
3406  *entity
3407  *
3408  * Remove a tag value
3409  *from an entity
3410  ******************************************************************************/
3411 
3412 void iMesh_rmvTag( iMesh_Instance instance,
3413  /**< [in] iMesh instance handle */
3414  iBase_EntityHandle entity_handle,
3415  /**< [in] Entity from which tag is being removed */
3416  const iBase_TagHandle tag_handle,
3417  /**< [in] Tag handle of tag being removed */
3418  int* err
3419  /**< [out] Returned Error status (see iBase_ErrorType) */
3420 );
3421 
3422 /***************************************************************************/ /**
3423  * \ingroup
3424  *EntityIterators
3425  * \brief Initialize
3426  *an iterator over
3427  *specified entity
3428  *type, topology, and
3429  *size
3430  *
3431  * Initialize an
3432  *iterator over
3433  *specified entity
3434  *type, topology, and
3435  *size, for a
3436  *specified set or
3437  *instance. Iterator
3438  *returned can be used
3439  *as input to
3440  *functions returning
3441  *the entity for the
3442  *iterator. If all
3443  *entities of a
3444  *specified type
3445  *and/or topology are
3446  *to be iterated,
3447  *specify
3448  * iBase_ALL_TYPES or
3449  *iMesh_ALL_TOPOLOGIES,
3450  *respectively.
3451  *Specified type or
3452  *topology must be a
3453  *value in the
3454  *iBase_EntityType or
3455  * iMesh_EntityTopology
3456  *enumerations,
3457  *respectively.
3458  *
3459  * Note: This function
3460  *will fail and return
3461  *an error if the
3462  *caller passes a
3463  * combination of
3464  *entity_type and
3465  *entity_topology that
3466  *are not consistent.
3467  ******************************************************************************/
3468 
3469 void iMesh_initEntIter( iMesh_Instance instance,
3470  /**< [in] iMesh instance handle */
3471  const iBase_EntitySetHandle entity_set_handle,
3472  /**< [in] Entity set being iterated */
3473  const int requested_entity_type,
3474  /**< [in] Type of entity to iterate */
3475  const int requested_entity_topology,
3476  /**< [in] Topology of entity to iterate */
3477  const int resilient,
3478  /**< [in] If zero, return a non-resilient iterator.
3479  Otherwise, a resilient iterator (\ref resilient) */
3480  iBase_EntityIterator* entity_iterator,
3481  /**< [out] Pointer to iterator returned from function */
3482  int* err
3483  /**< [out] Returned Error status (see iBase_ErrorType) */
3484 );
3485 
3486 /***************************************************************************/ /**
3487  * \ingroup
3488  *EntityIterators
3489  * \brief Get entity
3490  *corresponding to an
3491  *iterator and
3492  *increment iterator
3493  *
3494  * Get the entity
3495  *corresponding to an
3496  *iterator (that is,
3497  *dereference the
3498  *iterator), and
3499  *increment the
3500  *iterator. The
3501  *dereferenced value
3502  * is returned in
3503  *'entity_handle'. If
3504  *the iterator is at
3505  *the end of the
3506  * iteration, the
3507  *dereferenced value
3508  *will be undefined
3509  *and 'has_data' will
3510  *have a value of
3511  *zero. Otherwise,
3512  *'has_data' will have
3513  *a non-zero value.
3514  ******************************************************************************/
3515 
3516 void iMesh_getNextEntIter( iMesh_Instance instance,
3517  /**< [in] iMesh instance handle */
3518  iBase_EntityIterator entity_iterator,
3519  /**< [in] Iterator being queried */
3520  iBase_EntityHandle* entity_handle,
3521  /**< [out] Pointer to an entity handle corresponding to the current
3522  value of iterator just prior to the call. */
3523  int* has_data,
3524  /**< [out] Pointer to a flag indicating if the value returned in
3525  entity_handle is valid. A non-zero value indicates the value is
3526  valid. A zero value indicates the value is NOT valid. */
3527  int* err
3528  /**< [out] Returned Error status (see iBase_ErrorType) */
3529 );
3530 
3531 /***************************************************************************/ /**
3532  * \ingroup
3533  *EntityIterators
3534  * \brief Reset the
3535  *iterator
3536  *
3537  * Reset the iterator
3538  ******************************************************************************/
3539 
3540 void iMesh_resetEntIter( iMesh_Instance instance,
3541  /**< [in] iMesh instance handle */
3542  iBase_EntityIterator entity_iterator,
3543  /**< [in] Iterator to reset */
3544  int* err
3545  /**< [out] Returned Error status (see iBase_ErrorType) */
3546 );
3547 
3548 /***************************************************************************/ /**
3549  * \ingroup
3550  *EntityIterators
3551  * \brief Destroy the
3552  *specified iterator
3553  *
3554  * Destroy the
3555  *specified iterator
3556  ******************************************************************************/
3557 
3558 void iMesh_endEntIter( iMesh_Instance instance,
3559  /**< [in] iMesh instance handle */
3560  iBase_EntityIterator entity_iterator,
3561  /**< [in] Iterator which gets destroyed */
3562  int* err
3563  /**< [out] Returned Error status (see iBase_ErrorType) */
3564 );
3565 
3566 /***************************************************************************/ /**
3567  * \ingroup Entities
3568  * \brief Get the
3569  *entity topology for
3570  *the specified entity
3571  *
3572  * Get the entity
3573  *topology for the
3574  *specified entity.
3575  *Topology returned is
3576  *a value in the
3577  *iMesh_EntityTopology
3578  *enumeration.
3579  ******************************************************************************/
3580 
3581 void iMesh_getEntTopo( iMesh_Instance instance,
3582  /**< [in] iMesh instance handle */
3583  const iBase_EntityHandle entity_handle,
3584  /**< [in] Entity handle being queried */
3585  int* out_topo,
3586  /**< [out] Pointer to entity topology returned from function */
3587  int* err
3588  /**< [out] Returned Error status (see iBase_ErrorType) */
3589 );
3590 
3591 /***************************************************************************/ /**
3592  * \ingroup Entities
3593  * \brief Get the
3594  *entity type for the
3595  *specified entity
3596  *
3597  * Get the entity type
3598  *for the specified
3599  *entity. Type
3600  *returned is a value
3601  * in the
3602  *iBase_EntityType
3603  *enumeration.
3604  ******************************************************************************/
3605 
3606 void iMesh_getEntType( iMesh_Instance instance,
3607  /**< [in] iMesh instance handle */
3608  const iBase_EntityHandle entity_handle,
3609  /**< [in] Entity handle being queried */
3610  int* out_type,
3611  /**< [out] Pointer to entity type returned from function */
3612  int* err
3613  /**< [out] Returned Error status (see iBase_ErrorType) */
3614 );
3615 
3616 /***************************************************************************/ /**
3617  * \ingroup
3618  *VertexEntities
3619  * \brief Get
3620  *coordinates of
3621  *specified vertex
3622  *
3623  * Get coordinates of
3624  *specified vertex.
3625  ******************************************************************************/
3626 
3627 void iMesh_getVtxCoord( iMesh_Instance instance,
3628  /**< [in] iMesh instance handle */
3629  const iBase_EntityHandle vertex_handle,
3630  /**< [in] Mesh vertex being queried */
3631  double* x,
3632  /**< [out] Pointer to x coordinate returned from function */
3633  double* y,
3634  /**< [out] Pointer to y coordinate returned from function */
3635  double* z,
3636  /**< [out] Pointer to z coordinate returned from function */
3637  int* err
3638  /**< [out] Returned Error status (see iBase_ErrorType) */
3639 );
3640 
3641 /***************************************************************************/ /**
3642  * \ingroup
3643  *Adjacencies \brief
3644  *Get entities of
3645  *specified type
3646  *adjacent to an
3647  *entity
3648  *
3649  * Get entities of
3650  *specified type
3651  *adjacent to an
3652  *entity. Specified
3653  *type must be value
3654  *in the
3655  *iBase_EntityType
3656  *enumeration.
3657  *
3658  * Note 1: Because
3659  *'adjacent' as
3660  *defined by the iMesh
3661  *data model refers to
3662  *those entities that
3663  *bound another, the
3664  *entity being queried
3665  * here (in
3666  *entity_handle arg)
3667  *is NEVER ALSO
3668  *returned in
3669  * adj_entity_handles
3670  *even if the
3671  *entity_type_requested
3672  * matches the
3673  *entity type in
3674  *entity_handle.
3675  ******************************************************************************/
3676 
3677 void iMesh_getEntAdj( iMesh_Instance instance,
3678  /**< [in] iMesh instance handle */
3679  const iBase_EntityHandle entity_handle,
3680  /**< [in] Entity handle being queried */
3681  const int entity_type_requested,
3682  /**< [in] Type of adjacent entities requested */
3683  iBase_EntityHandle** adj_entity_handles,
3684  /**< [in,out] Pointer to array of adjacent entities \ref trio) */
3685  int* adj_entity_handles_allocated,
3686  /**< [in,out] Pointer to allocated size of adj_entity_handles */
3687  int* adj_entity_handles_size,
3688  /**< [out] Pointer to occupied size of adj_entity_handles */
3689  int* err
3690  /**< [out] Returned Error status (see iBase_ErrorType) */
3691 );
3692 
3693 /***************************************************************************/ /**
3694  * \ingroup
3695  *Adjacencies \brief
3696  *Get "2nd order"
3697  *adjacencies to an
3698  *entity
3699  *
3700  * Get "2nd order"
3701  *adjacencies to an
3702  *entity, that is,
3703  *from an entity,
3704  *through other
3705  *entities of a
3706  *specified "bridge"
3707  *dimension, to other
3708  *entities of another
3709  *specified "to"
3710  *dimension. Note 1:
3711  *If the "bridge"
3712  *dimension is the
3713  *same as the "to"
3714  *dimension or the
3715  *dimension of the
3716  *input entity, the
3717  *output will be empty
3718  * (and an error
3719  *code of
3720  *iBase_INVALID_ARGUMENT
3721  *returned). This is
3722  * consistent with
3723  *the definition of
3724  *adjacencies and the
3725  *behavior of iMesh
3726  *first adjacency
3727  *calls. Note 2: An
3728  *entity will never be
3729  *returned as a second
3730  *adjacency of itself,
3731  *on the grounds that
3732  *this is the most
3733  *likely expectation
3734  *of applications, and
3735  *that it is easier
3736  *for an application
3737  *to add the original
3738  *entity to the
3739  *returned data than
3740  *to find and remove
3741  *it.
3742  ******************************************************************************/
3743 
3744 void iMesh_getEnt2ndAdj( iMesh_Instance instance,
3745  /**< [in] iMesh instance handle */
3746  iBase_EntityHandle entity_handle,
3747  /**< [in] Entity from which adjacencies are requested */
3748  int bridge_entity_type,
3749  /**< [in] Type of bridge entity for 2nd order adjacencies */
3750  int requested_entity_type,
3751  /**< [in] Type of adjacent entities returned */
3752  iBase_EntityHandle** adjacent_entities,
3753  /**< [in,out] Adjacent entities \ref trio) */
3754  int* adjacent_entities_allocated,
3755  /**< [in,out] Allocated size of returned array */
3756  int* adjacent_entities_size,
3757  /**< [out] Occupied size of returned array */
3758  int* err
3759  /**< [out] Returned Error status (see iBase_ErrorType) */
3760 );
3761 
3762 /***************************************************************************/ /**
3763  * \ingroup
3764  *EntitySetOperators
3765  * \brief Subtract
3766  *contents of one
3767  *entity set from
3768  *another
3769  *
3770  * Subtract contents
3771  *of one entity set
3772  *from another
3773  ******************************************************************************/
3774 
3775 void iMesh_subtract( iMesh_Instance instance,
3776  /**< [in] iMesh instance handle */
3777  const iBase_EntitySetHandle entity_set_1,
3778  /**< [in] Entity set from which other set is being subtracted */
3779  const iBase_EntitySetHandle entity_set_2,
3780  /**< [in] Entity set being subtracted from other set */
3781  iBase_EntitySetHandle* result_entity_set,
3782  /**< [out] Pointer to entity set returned from function */
3783  int* err
3784  /**< [out] Returned Error status (see iBase_ErrorType) */
3785 );
3786 
3787 /***************************************************************************/ /**
3788  * \ingroup
3789  *EntitySetOperators
3790  * \brief Intersect
3791  *contents of one
3792  *entity set with
3793  *another
3794  *
3795  * Intersect contents
3796  *of one entity set
3797  *with another
3798  ******************************************************************************/
3799 
3800 void iMesh_intersect( iMesh_Instance instance,
3801  /**< [in] iMesh instance handle */
3802  const iBase_EntitySetHandle entity_set_1,
3803  /**< [in] Entity set being intersected with another */
3804  const iBase_EntitySetHandle entity_set_2,
3805  /**< [in] Entity set being intersected with another */
3806  iBase_EntitySetHandle* result_entity_set,
3807  /**< [out] Pointer to entity set returned from function */
3808  int* err
3809  /**< [out] Returned Error status (see iBase_ErrorType) */
3810 );
3811 
3812 /***************************************************************************/ /**
3813  * \ingroup
3814  *EntitySetOperators
3815  * \brief Unite
3816  *contents of one
3817  *entity set with
3818  *another
3819  *
3820  ******************************************************************************/
3821 
3822 void iMesh_unite( iMesh_Instance instance,
3823  /**< [in] iMesh instance handle */
3824  const iBase_EntitySetHandle entity_set_1,
3825  /**< [in] Entity set being united with another */
3826  const iBase_EntitySetHandle entity_set_2,
3827  /**< [in] Entity set being united with another */
3828  iBase_EntitySetHandle* result_entity_set,
3829  /**< [out] Pointer to entity set returned from function */
3830  int* err
3831  /**< [out] Returned Error status (see iBase_ErrorType) */
3832 );
3833 
3834 /***************************************************************************/ /**
3835  * \page imesh iMesh:
3836  *ITAPS Serial Mesh
3837  *Interface
3838  *
3839  * The ITAPS Mesh
3840  *Interface iMesh
3841  *provides a common
3842  *interface for
3843  * accessing mesh and
3844  *data associated with
3845  *a mesh. Applications
3846  *written to use this
3847  *interface can use a
3848  *variety of
3849  *implementations,
3850  *choosing the one
3851  *that best meets its
3852  *needs. They can
3853  *also use tools
3854  *written to this
3855  *interface, for
3856  *example mesh
3857  *smoothing, adaptive
3858  *mesh refinement, and
3859  *parallel mesh
3860  *support.
3861  *
3862  * The ITAPS
3863  *interfaces use a
3864  *data model composed
3865  *of four basic data
3866  *types: /Entity/:
3867  *basic topological
3868  *entities in a mesh,
3869  *e.g. vertices,
3870  * triangles,
3871  *hexahedra. /Entity
3872  *Set/: arbitrary
3873  *grouping of other
3874  *entities and sets.
3875  * Entity sets also
3876  *support parent/child
3877  *relations with other
3878  *sets which are
3879  *distinct from
3880  *entities contained
3881  *in those sets.
3882  *Parent/child links
3883  * can be used to
3884  *embed graph
3885  *relationships
3886  *between sets, e.g.
3887  *to represent
3888  *topological
3889  *relationships
3890  *between the sets.
3891  * /Interface/: the
3892  *object with which
3893  *mesh is associated
3894  *and on which
3895  * functions in iMesh
3896  *are called. /Tag/:
3897  *application data
3898  *associated with
3899  *objects of any of
3900  *the other data
3901  *types. Each tag has
3902  *a designated name,
3903  *size, and data type.
3904  *
3905  * ITAPS Entity Type,
3906  *Topology Each entity
3907  *has a specific
3908  *Entity Type and
3909  *Entity Topology. The
3910  *Entity Type is one
3911  *of VERTEX, EDGE,
3912  *FACE, and REGION,
3913  *and is synonymous
3914  *with the topological
3915  *dimension of the
3916  *entity. The Entity
3917  *Topology denotes the
3918  *specific shape, for
3919  *example TRIANGLE,
3920  *QUADRILATERAL,
3921  *TETRAHEDRON, and
3922  *HEXAHEDRON. Entity
3923  *Type and Entity
3924  *Topology exist as
3925  *enumerated types,
3926  *Entity Type in the
3927  *iBase_EntityType
3928  *enumeration, and
3929  * Entity Topology in
3930  *the
3931  *iMesh_EntityTopology
3932  *enumeration.
3933  *
3934  * ITAPS Entity-,
3935  *Array-, and
3936  *Iterator-Based
3937  *Access The iMesh
3938  *interface provides
3939  *functions for
3940  *accessing entities
3941  * individually, as
3942  *arrays of entities,
3943  *or using iterators.
3944  *These access methods
3945  *have different
3946  *memory versus
3947  *execution time
3948  *tradeoffs, depending
3949  *on the
3950  *implementation.
3951  *
3952  * \image html
3953  *example_pic.jpeg
3954  *
3955  * \subpage cycles
3956  *
3957  * \page cycles Cycles
3958  *in Set-Inclusion and
3959  *Parent-Child
3960  *structures.
3961  *
3962  * There are two
3963  *graph-like
3964  *structures in the
3965  *iMesh interface and
3966  *data model; the
3967  *set-inclusion
3968  *structure and the
3969  *parent-child link
3970  *structure. Whether
3971  *these structures
3972  *support cycles is
3973  *relevant to
3974  *implementors.
3975  *
3976  * Over the evolution
3977  *of the iMesh data
3978  *model and API, both
3979  *of these structures
3980  *have been viewed
3981  *more or less like a
3982  *tree and so cycles
3983  *seem incompatible
3984  *with that notion.
3985  *
3986  * Allowing a cycle in
3987  *the set inclusion
3988  *structure implies
3989  *all entity sets in
3990  *the cycle are all
3991  *equal to each other.
3992  *That is the only
3993  *rational,
3994  * model-level view
3995  *that would allow
3996  *them all to be
3997  *(improper) subsets
3998  *of each other. On
3999  *the other hand if
4000  *the iMesh
4001  *specification
4002  *excludes cycles from
4003  *the set inclusion
4004  *structure, the time
4005  *complexity
4006  *(performance) as a
4007  * function of the
4008  *number of entity
4009  *sets may be
4010  *prohibitive for
4011  * implementations to
4012  *detect and prevent
4013  *them.
4014  *
4015  * Allowing a cycle in
4016  *the parent-child
4017  *link structure seems
4018  *likewise hard to
4019  *justify. However,
4020  *when the
4021  *parent-child
4022  *structure is viewed
4023  *more like a general
4024  *graph (a view that
4025  *the current API
4026  *itself supports even
4027  *if the function
4028  *names themselves do
4029  *not suggest that)
4030  *than specifically a
4031  *tree, the admission
4032  *of cycles there is
4033  *potentially more
4034  *natural and useful.
4035  *
4036  * Implementations are
4037  *required to support
4038  *cycles in the
4039  *Parent-Child
4040  * structure.
4041  *Implementations are
4042  *neither required to
4043  *support nor required
4044  * to explicitly
4045  *prevent cycles in
4046  *the Set-Inclusion
4047  *structure. Portable
4048  * applications should
4049  *NOT rely on
4050  *implementations
4051  *support for cycles
4052  * in the
4053  *set-inclusion
4054  *structure.
4055  ******************************************************************************/
4056 
4057 /***************************************************************************/ /**
4058  * \defgroup iMesh
4059  *iMesh
4060  ******************************************************************************/
4061 
4062 /***************************************************************************/ /**
4063  * \defgroup
4064  *Initialization
4065  *Initialization
4066  * \ingroup iMesh
4067  ******************************************************************************/
4068 
4069 /***************************************************************************/ /**
4070  * \defgroup Entities
4071  *Entities \ingroup
4072  *iMesh
4073  ******************************************************************************/
4074 
4075 /***************************************************************************/ /**
4076  * \defgroup
4077  *VertexEntities
4078  *Vertex Entities
4079  * \ingroup Entities
4080  ******************************************************************************/
4081 
4082 /***************************************************************************/ /**
4083  * \defgroup
4084  *EntitySets Entity
4085  *Sets \ingroup iMesh
4086  ******************************************************************************/
4087 
4088 /***************************************************************************/ /**
4089  * \defgroup
4090  *EntitySetOperators
4091  *Entity Set Operators
4092  * \ingroup EntitySets
4093  ******************************************************************************/
4094 
4095 /***************************************************************************/ /**
4096  * \defgroup
4097  *Adjacencies
4098  *Adjacencies \ingroup
4099  *iMesh
4100  ******************************************************************************/
4101 
4102 /***************************************************************************/ /**
4103  * \defgroup
4104  *EntityIterators
4105  *Entity Iterators
4106  * \ingroup iMesh
4107  ******************************************************************************/
4108 
4109 /***************************************************************************/ /**
4110  * \defgroup Tags Tags
4111  * \ingroup iMesh
4112  ******************************************************************************/
4113 
4114 /***************************************************************************/ /**
4115  * \defgroup TagData
4116  *Tag Data \ingroup
4117  *iMesh
4118  ******************************************************************************/
4119 
4120 /***************************************************************************/ /**
4121  * \defgroup
4122  *TagsOnEnts Tag Data
4123  *On Entities \ingroup
4124  *TagData
4125  ******************************************************************************/
4126 
4127 /***************************************************************************/ /**
4128  * \defgroup
4129  *TagsOnSets Tag Data
4130  *On Entity Sets
4131  * \ingroup TagData
4132  ******************************************************************************/
4133 
4134 /***************************************************************************/ /**
4135  * \defgroup TagsOnArr
4136  *Tag Data On Arrays
4137  *of Entities \ingroup
4138  *TagData
4139  ******************************************************************************/
4140 
4141 /***************************************************************************/ /**
4142  * \defgroup
4143  *MeshModification
4144  *Mesh Modification
4145  * \ingroup iMesh
4146  ******************************************************************************/
4147 
4148 /***************************************************************************/ /**
4149  * \defgroup
4150  *ParentChildLinks
4151  *Parent Child Links
4152  * \ingroup iMesh
4153  ******************************************************************************/
4154 
4155 /***************************************************************************/ /**
4156  * \defgroup Datatypes
4157  *Datatypes \ingroup
4158  *iMesh
4159  ******************************************************************************/
4160 
4161 #ifdef __cplusplus
4162 } /* extern "C" */
4163 #endif
4164 
4165 #endif /* ifndef _ITAPS_iMesh */