![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef _ITAPS_iRel
00002 #define _ITAPS_iRel
00003
00004 /***************************************************************************/ /**
00005 * \ingroup
00006 *VersionNumbers
00007 * \brief Compile time
00008 *version number
00009 *digits
00010 *
00011 * iRel maintains a
00012 *major, minor and
00013 *patch digit in its
00014 *version number.
00015 * Technically
00016 *speaking, there is
00017 *not much practical
00018 *value in patch digit
00019 * for an interface
00020 *specification. A
00021 *patch release is
00022 *typically only used
00023 * for bug fix
00024 *releases. Although
00025 *it is rare,
00026 *sometimes a bug fix
00027 * necessitates an API
00028 *change. So, we
00029 *define a patch digit
00030 *for iRel.
00031 ******************************************************************************/
00032 #define IREL_VERSION_MAJOR 1
00033 #define IREL_VERSION_MINOR 1
00034 #define IREL_VERSION_PATCH 0
00035
00036 /***************************************************************************/ /**
00037 * \ingroup
00038 *VersionNumbers
00039 * \brief Maintain
00040 *backward
00041 *compatibility with
00042 *old version symbol
00043 *names
00044 ******************************************************************************/
00045 #define IREL_MAJOR_VERSION IREL_VERSION_MAJOR
00046 #define IREL_MINOR_VERSION IREL_VERSION_MINOR
00047 #define IREL_PATCH_VERSION IREL_VERSION_PATCH
00048
00049 /***************************************************************************/ /**
00050 * \ingroup
00051 *VersionNumbers
00052 * \brief Version
00053 *Comparison
00054 *
00055 * Evaluates to true
00056 *at CPP time if the
00057 *version of iRel
00058 *currently being
00059 * compiled is greater
00060 *than or equal to the
00061 *version specified.
00062 ******************************************************************************/
00063 #define IREL_VERSION_GE( Maj, Min, Pat ) ITAPS_VERSION_GE( Maj, Min, Pat )
00064
00065 /***************************************************************************/ /**
00066 * \ingroup
00067 *VersionNumbers
00068 * \brief Compose
00069 *string represention
00070 *of the iRel version
00071 *number
00072 ******************************************************************************/
00073 #define IREL_VERSION_STRING ITAPS_VERSION_STRING_( iRel )
00074
00075 /***************************************************************************/ /**
00076 * \ingroup
00077 *VersionNumbers
00078 * \brief Compose a
00079 *symbol name derived
00080 *from the current
00081 *iRel version number.
00082 ******************************************************************************/
00083 #define IREL_VERSION_TAG ITAPS_VERSION_TAG_( iRel )
00084
00085 /***************************************************************************/ /**
00086 * \ingroup
00087 *VersionNumbers
00088 * \brief Define
00089 *iRel_create symbol
00090 *such that it depends
00091 *on version number.
00092 *
00093 * Note: We ran into
00094 *problems with this
00095 *as it influences or
00096 *is influenced by
00097 * fortran name
00098 *mangling and so
00099 *breaks fortran
00100 *compilation. So,
00101 *this is currently
00102 *disabled.
00103 ******************************************************************************/
00104 #define IREL_CREATE_NAME__( A, B, C ) A##_##B##_##C
00105 #define IREL_CREATE_NAME_( A, B, C ) IREL_CREATE_NAME__( A, B, C )
00106 #define IREL_CREATE_NAME( A ) IREL_CREATE_NAME_( A, IREL_VERSION_MAJOR, IREL_VERSION_MINOR )
00107 /*
00108 #undef iRel_create
00109 #define iRel_create IREL_CREATE_NAME(iRel_create)
00110 */
00111
00112 #include "iBase.h"
00113 #include "iRel_protos.h"
00114
00115 #ifdef __cplusplus
00116 extern "C" {
00117 #endif
00118
00119 typedef void* iRel_Instance;
00120 typedef struct iRel_PairHandle_Private* iRel_PairHandle;
00121
00122 /***************************************************************************/ /**
00123 * \brief \enum
00124 *IfaceType Enumerator
00125 *specifying interface
00126 *types
00127 *
00128 * Enumerator
00129 *specifying interface
00130 *types. This
00131 *enumeration is
00132 * necessary because
00133 *functions to get
00134 *entities of a given
00135 *dimension are part
00136 *of the higher-level
00137 *interfaces (e.g.
00138 *iGeom, iMesh)
00139 *instead of iBase.
00140 ******************************************************************************/
00141 enum iRel_IfaceType
00142 {
00143 iRel_IfaceType_MIN = 0,
00144 /**< facilitates iteration over all values */
00145 iRel_IGEOM_IFACE = iRel_IfaceType_MIN,
00146 /**< description unavailable */
00147 iRel_IMESH_IFACE,
00148 /**< description unavailable */
00149 iRel_IFIELD_IFACE,
00150 /**< description unavailable */
00151 iRel_IREL_IFACE,
00152 /**< description unavailable */
00153 iRel_FBIGEOM_IFACE,
00154 /**< description unavailable */
00155 iRel_IfaceType_MAX = iRel_FBIGEOM_IFACE
00156 /**< facilitates iteration over all values */
00157 };
00158
00159 /***************************************************************************/ /**
00160 * \brief \enum
00161 *RelationType
00162 *Enumerator
00163 *specifying relation
00164 *types
00165 *
00166 * Enumerator
00167 *specifying relation
00168 *types. A relation
00169 *has two types, one
00170 * for each side of
00171 *the relation.
00172 ******************************************************************************/
00173 enum iRel_RelationType
00174 {
00175 iRel_RelationType_MIN = 0,
00176 /**< facilitates iteration over all values */
00177 iRel_ENTITY = iRel_RelationType_MIN,
00178 /**< description unavailable */
00179 iRel_SET,
00180 /**< description unavailable */
00181 iRel_BOTH,
00182 /**< description unavailable */
00183 iRel_RelationType_MAX = iRel_BOTH
00184 /**< facilitates iteration over all values */
00185 };
00186
00187 /***************************************************************************/ /**
00188 * \brief \enum
00189 *RelationStatus
00190 *Enumerator
00191 *specifying relation
00192 *status
00193 *
00194 * Enumerator
00195 *specifying relation
00196 *status. A relation
00197 *has two statuses,
00198 *one for each side of
00199 *the relation.
00200 *Allowed values of
00201 *this enumeration
00202 *are: It is an error
00203 *to request relations
00204 *from a side that
00205 *does not have
00206 * iRel_ACTIVE status.
00207 ******************************************************************************/
00208 enum iRel_RelationStatus
00209 {
00210 iRel_RelationStatus_MIN = 0,
00211 /**< facilitates iteration over all values */
00212 iRel_ACTIVE = iRel_RelationType_MIN,
00213 /**< the relation on this side is active and up to date */
00214 iRel_INACTIVE,
00215 /**< the relation on this side is inactive, and may be out of date */
00216 iRel_NOTEXIST,
00217 /**< the relation on this side is not stored */
00218 iRel_RelationStatus_MAX = iRel_NOTEXIST
00219 /**< facilitates iteration over all values */
00220 };
00221
00222 /***************************************************************************/ /**
00223 * \brief Get the
00224 *error type returned
00225 *from the last iRel
00226 *function
00227 *
00228 * Get the error type
00229 *returned from the
00230 *last iRel function.
00231 *Value returned is a
00232 *member of the
00233 *iBase_ErrorType
00234 *enumeration.
00235 ******************************************************************************/
00236 void iRel_getErrorType( iRel_Instance instance,
00237 /**< [in] iRel instance handle */
00238 int* error_type
00239 /**< [out] Error type returned from last iRel function */
00240 );
00241
00242 /***************************************************************************/ /**
00243 * \brief Get a
00244 *description of the
00245 *error returned from
00246 *the last iRel
00247 *function
00248 *
00249 * Get a description
00250 *of the error
00251 *returned from the
00252 *last iRel function
00253 ******************************************************************************/
00254 void iRel_getDescription( iRel_Instance instance,
00255 /**< [in] iRel instance handle */
00256 char* descr,
00257 /**< [inout] Pointer to a character string to be filled with a
00258 description of the error from the last iRel function */
00259 int descr_len
00260 /**< [in] Length of the character string pointed to by descr */
00261 );
00262
00263 /***************************************************************************/ /**
00264 * \brief Create a new
00265 *iRel instance
00266 *
00267 * Create a new iRel
00268 *instance. Currently
00269 *no options are
00270 *implemented.
00271 ******************************************************************************/
00272 void iRel_create( const char* options,
00273 /**< const Options for the implementation */
00274 iRel_Instance* instance,
00275 /**< [in] iRel instance handle */
00276 int* err,
00277 /**< [out] Returned Error status (see iBase_ErrorType) */
00278 const int options_len
00279 /**< [in] Length of options string */
00280 );
00281
00282 /***************************************************************************/ /**
00283 * \brief Destroy the
00284 *interface object
00285 *
00286 * Calls destructor on
00287 *interface object
00288 ******************************************************************************/
00289 void iRel_destroy( iRel_Instance instance,
00290 /**< [in] iRel instance handle */
00291 int* err
00292 /**< [out] Returned Error status (see iBase_ErrorType) */
00293 );
00294
00295 /***************************************************************************/ /**
00296 * \brief Create a
00297 *relation pair
00298 *between two
00299 *interfaces
00300 *
00301 * Creates a relation
00302 *pair between two
00303 *interfaces, passing
00304 * back a handle to
00305 *the pair. It is an
00306 *error to create a
00307 *relation pair having
00308 *both sides
00309 *iRel_NOTEXIST. If a
00310 *relation pair has a
00311 *side with status
00312 * iRel_NOTEXIST, the
00313 *relation for that
00314 *side is never
00315 *stored, and the
00316 *status cannot change
00317 *over the life of the
00318 *relation pair.
00319 ******************************************************************************/
00320 void iRel_createPair( iRel_Instance instance,
00321 /**< [in] iRel instance handle */
00322 iBase_Instance iface1,
00323 /**< [in] 1st interface object in the relation pair */
00324 const int ent_or_set1,
00325 /**< [in] This relation relates entities, sets, or both from 1st
00326 interface object */
00327 const int iface_type1,
00328 /**< [in] Type of 1st interface */
00329 const int irel_status1,
00330 /**< [in] The status of 1st side */
00331 iBase_Instance iface2,
00332 /**< [in] 2nd interface object in the relation pair */
00333 const int ent_or_set2,
00334 /**< [in] This relation relates entities, sets, or both from 2nd
00335 interface object */
00336 const int iface_type2,
00337 /**< [in] Type of 2nd interface */
00338 const int irel_status2,
00339 /**< [in] The status of 2nd side */
00340 iRel_PairHandle* pair,
00341 /**< [out] Pointer to relation pair handle, returned from function */
00342 int* err
00343 /**< [out] Returned Error status (see iBase_ErrorType) */
00344 );
00345
00346 /***************************************************************************/ /**
00347 * \brief Get
00348 *information for this
00349 *relation handle
00350 *
00351 * Get information
00352 *about the interfaces
00353 *and relation type
00354 *for this relation.
00355 *Relation type for
00356 *each side is passed
00357 *back as integers,
00358 * but values will be
00359 *from RelationType
00360 *enumeration.
00361 ******************************************************************************/
00362 void iRel_getPairInfo( iRel_Instance instance,
00363 /**< [in] iRel instance handle */
00364 iRel_PairHandle pair,
00365 /**< [in] handle of relation pair being queried */
00366 iBase_Instance* iface1,
00367 /**< [out] Side 1 instance for this relation */
00368 int* ent_or_set1,
00369 /**< [out] relation type for side 1 of this relation */
00370 int* iface_type1,
00371 /**< [out] Interface type for side 1 of this relation */
00372 int* irel_status1,
00373 /**< [out] The status of the first side of this relation */
00374 iBase_Instance* iface2,
00375 /**< [out] Side 2 instance for this relation */
00376 int* ent_or_set2,
00377 /**< [out] Relation type for side 2 of this relation */
00378 int* iface_type2,
00379 /**< [out] Interface type for side 2 of this relation */
00380 int* irel_status2,
00381 /**< [out] Status of the 2nd side of this relation */
00382 int* err
00383 /**< [out] Returned Error status (see iBase_ErrorType) */
00384 );
00385
00386 /***************************************************************************/ /**
00387 * \brief Change the
00388 *relation type
00389 *
00390 * Change the type of
00391 *one or both sides of
00392 *a relation. Only
00393 *changes that result
00394 *in no lost
00395 *information are
00396 *allowed, e.g.
00397 *changing a type from
00398 *SET to BOTH or vice
00399 *versa.
00400 ******************************************************************************/
00401 void iRel_changePairType( iRel_Instance instance,
00402 /**< [in] iRel instance handle */
00403 iRel_PairHandle pair,
00404 /**< [in] Relation pair handle being changed */
00405 int ent_or_set1,
00406 /**< [in] The new type of side 1 of this relation pair */
00407 int ent_or_set2,
00408 /**< [in] The new type of side 2 of this relation pair */
00409 int* err
00410 /**< [out] Returned Error status (see iBase_ErrorType) */
00411 );
00412
00413 /***************************************************************************/ /**
00414 * \brief Change the
00415 *relation status
00416 *
00417 * Change the status
00418 *of one or both sides
00419 *of a relation. It
00420 *is an error to
00421 * change the status
00422 *of both sides to
00423 *iRel_NOTEXIST. If a
00424 *side is changed to
00425 * iRel_NOTEXIST, it
00426 *will no longer be
00427 *changeable back to
00428 *iRel_ACTIVE or
00429 * iRel_INACTIVE.
00430 *Changing a side from
00431 *iRel_INACTIVE to
00432 *iRel_ACTIVE implies
00433 *a traversal of all
00434 *related entities on
00435 *the other side, to
00436 *recover the
00437 *relations on the
00438 *side being changed.
00439 *Changing both sides
00440 *from iRel_ACTIVE to
00441 *something else is an
00442 *error, since in that
00443 *case neither will be
00444 *able to be updated
00445 *to iRel_ACTIVE.
00446 ******************************************************************************/
00447 void iRel_changePairStatus( iRel_Instance instance,
00448 /**< [in] iRel instance handle */
00449 iRel_PairHandle pair,
00450 /**< [in] Relation pair handle being changed */
00451 int irel_status1,
00452 /**< [in] The new status of side 1 of this relation pair */
00453 int irel_status2,
00454 /**< [in] The new status of side 2 of this relation pair */
00455 int* err
00456 /**< [out] Returned Error status (see iBase_ErrorType) */
00457 );
00458
00459 /***************************************************************************/ /**
00460 * \brief Destroy a
00461 *relation pair
00462 *
00463 * Destroy the
00464 *relation pair
00465 *corresponding to the
00466 *handle input
00467 ******************************************************************************/
00468 void iRel_destroyPair( iRel_Instance instance,
00469 /**< [in] iRel instance handle */
00470 iRel_PairHandle pair,
00471 /**< [in] Handle of relation pair to destroy */
00472 int* err
00473 /**< [out] Returned Error status (see iBase_ErrorType) */
00474 );
00475
00476 /***************************************************************************/ /**
00477 * \brief Get
00478 *relations containing
00479 *specified interface
00480 *
00481 * Get relations
00482 *containing the
00483 *specified interface
00484 ******************************************************************************/
00485 void iRel_findPairs( iRel_Instance instance,
00486 /**< [in] iRel instance handle */
00487 iBase_Instance iface,
00488 /**< [in] Specified interface */
00489 iRel_PairHandle** pairs,
00490 /**< [inout] Pointer to array holding returned relation pairs
00491 containing specified interface */
00492 int* pairs_allocated,
00493 /**< [inout] Pointer to allocated size of relation pairs list */
00494 int* pairs_size,
00495 /**< [out] Pointer to occupied size of relation pairs list */
00496 int* err
00497 /**< [out] Returned Error status (see iBase_ErrorType) */
00498 );
00499
00500 /***************************************************************************/ /**
00501 * \brief Set a
00502 *relation between two
00503 *entities
00504 *
00505 * Set a relation
00506 *between an entity
00507 *and several
00508 *entities. It is an
00509 *error to set a
00510 *relation on a pair
00511 *with both sides not
00512 *iRel_ACTIVE.
00513 ******************************************************************************/
00514 void iRel_setEntEntRelation( iRel_Instance instance,
00515 /**< [in] iRel instance handle */
00516 iRel_PairHandle pair,
00517 /**< [in] Relation pair handle being queried */
00518 iBase_EntityHandle ent1,
00519 /**< [in] 1st entity of relation being set */
00520 iBase_EntityHandle ent2,
00521 /**< [in] 2nd entity of relation being set */
00522 int* err
00523 /**< [out] Returned Error status (see iBase_ErrorType) */
00524 );
00525
00526 /***************************************************************************/ /**
00527 * \brief Set a
00528 *relation between an
00529 *entity and an entity
00530 *set
00531 *
00532 * Description
00533 *unavailable.
00534 ******************************************************************************/
00535 void iRel_setEntSetRelation( iRel_Instance instance,
00536 /**< [in] iRel instance handle */
00537 iRel_PairHandle pair,
00538 /**< [in] Relation pair handle being queried */
00539 iBase_EntityHandle ent1,
00540 /**< [in] entity of relation being set */
00541 iBase_EntitySetHandle entset2,
00542 /**< [in] entity set of relation being set */
00543 int* err
00544 /**< [out] Returned Error status (see iBase_ErrorType) */
00545 );
00546
00547 /***************************************************************************/ /**
00548 * \brief Set a
00549 *relation between an
00550 *entity set an an
00551 *entity
00552 *
00553 * Description
00554 *unavailable.
00555 ******************************************************************************/
00556 void iRel_setSetEntRelation( iRel_Instance instance,
00557 /**< [in] iRel instance handle */
00558 iRel_PairHandle pair,
00559 /**< [in] Relation pair handle being queried */
00560 iBase_EntitySetHandle entset1,
00561 /**< [in] entity set of relation being set */
00562 iBase_EntityHandle ent2,
00563 /**< [in] entity of relation being set */
00564 int* err
00565 /**< [out] Returned Error status (see iBase_ErrorType) */
00566 );
00567
00568 /***************************************************************************/ /**
00569 * \brief Set a
00570 *relation between two
00571 *entity sets
00572 *
00573 * Description
00574 *unavailable. Set a
00575 *relation between an
00576 *entity and several
00577 *entities. It is an
00578 *error to set a
00579 *relation on a pair
00580 *with both sides not
00581 *iRel_ACTIVE.
00582 ******************************************************************************/
00583 void iRel_setSetSetRelation( iRel_Instance instance,
00584 /**< [in] iRel instance handle */
00585 iRel_PairHandle pair,
00586 /**< [in] Relation pair handle being queried */
00587 iBase_EntitySetHandle entset1,
00588 /**< [in] 1st entity set of relation being set */
00589 iBase_EntitySetHandle entset2,
00590 /**< [in] 2nd entity set of relation being set */
00591 int* err
00592 /**< [out] Returned Error status (see iBase_ErrorType) */
00593 );
00594
00595 /***************************************************************************/ /**
00596 * \brief Set
00597 *relations between
00598 *arrays of entities
00599 *pairwise,
00600 * ent_array_1[i]<->ent_array_2[i]
00601 *
00602 * Set relations
00603 *between arrays of
00604 *entities pairwise,
00605 * ent_array_1[i]<->ent_array_2[i].
00606 *If either array
00607 * contains sets and
00608 *that side of the
00609 *relation is
00610 *'both'-type, set
00611 *relations for
00612 *individual entities
00613 *in those sets too.
00614 *It is an error to
00615 * set a relation on a
00616 *pair with both sides
00617 *not iRel_ACTIVE.
00618 ******************************************************************************/
00619 void iRel_setEntArrEntArrRelation( iRel_Instance instance,
00620 /**< [in] iRel instance handle */
00621 iRel_PairHandle pair,
00622 /**< [in] Relation pair handle being queried */
00623 iBase_EntityHandle* ent_array_1,
00624 /**< [in] 1st array of entities of relation being set */
00625 int num_ent1,
00626 /**< [in] Number of entities in 1st array */
00627 iBase_EntityHandle* ent_array_2,
00628 /**< [in] 2nd array of entities of relation being set */
00629 int num_ent2,
00630 /**< [in] Number of entities in 2nd array */
00631 int* err
00632 /**< [out] Returned Error status (see iBase_ErrorType) */
00633 );
00634
00635 /***************************************************************************/ /**
00636 * \brief Set
00637 *relations between
00638 *arrays of entity
00639 *sets and entities
00640 *
00641 * Description
00642 *unavailable.
00643 ******************************************************************************/
00644 void iRel_setSetArrEntArrRelation( iRel_Instance instance,
00645 /**< [in] iRel instance handle */
00646 iRel_PairHandle pair,
00647 /**< [in] Relation pair handle being queried */
00648 iBase_EntitySetHandle* entset_array_1,
00649 /**< [in] 1st array of entities of relation being set */
00650 int num_set1,
00651 /**< [in] Number of entity sets in 1st array */
00652 iBase_EntityHandle* ent_array_2,
00653 /**< [in] 2nd array of entities of relation being set */
00654 int num_ent2,
00655 /**< [in] Number of entities in 2nd array */
00656 int* err
00657 /**< [out] Returned Error status (see iBase_ErrorType) */
00658 );
00659
00660 /***************************************************************************/ /**
00661 * \brief Set
00662 *relations between
00663 *arrays of entities
00664 *and entity sets
00665 *
00666 * Description
00667 *unavailable.
00668 ******************************************************************************/
00669 void iRel_setEntArrSetArrRelation( iRel_Instance instance,
00670 /**< [in] iRel instance handle */
00671 iRel_PairHandle pair,
00672 /**< [in] Relation pair handle being queried */
00673 iBase_EntityHandle* ent_array_1,
00674 /**< [in] 1st array of entities of relation being set */
00675 int num_ent1,
00676 /**< [in] Number of entities in 1st array */
00677 iBase_EntitySetHandle* entset_array_2,
00678 /**< [in] 2nd array of entities of relation being set */
00679 int num_set2,
00680 /**< [in] Number of entity sets in 2nd array */
00681 int* err
00682 /**< [out] Returned Error status (see iBase_ErrorType) */
00683 );
00684
00685 /***************************************************************************/ /**
00686 * \brief Set
00687 *relations between
00688 *arrays of entity
00689 *sets pairwise,
00690 * ent_array_1[i]<->ent_array_2[i]
00691 *
00692 * Set relations
00693 *between arrays of
00694 *entities pairwise,
00695 * ent_array_1[i]<->ent_array_2[i].
00696 *If either array
00697 * contains sets and
00698 *that side of the
00699 *relation is
00700 *'both'-type, set
00701 *relations for
00702 *individual entities
00703 *in those sets too.
00704 *It is an error to
00705 * set a relation on a
00706 *pair with both sides
00707 *not iRel_ACTIVE.
00708 ******************************************************************************/
00709 void iRel_setSetArrSetArrRelation( iRel_Instance instance,
00710 /**< [in] iRel instance handle */
00711 iRel_PairHandle pair,
00712 /**< [in] Relation pair handle being queried */
00713 iBase_EntitySetHandle* entset_array_1,
00714 /**< [in] 1st array of entities of relation being set */
00715 int num_set1,
00716 /**< [in] Number of entities in 1st array */
00717 iBase_EntitySetHandle* entset_array_2,
00718 /**< [in] 2nd array of entities of relation being set */
00719 int num_set2,
00720 /**< [in] Number of entities in 2nd array */
00721 int* err
00722 /**< [out] Returned Error status (see iBase_ErrorType) */
00723 );
00724
00725 /***************************************************************************/ /**
00726 * \brief Get entity
00727 *related to specified
00728 *entity and relation
00729 *handle
00730 *
00731 * Get entity related
00732 *to specified entity
00733 *and relation handle.
00734 *Also returns whether
00735 *the related entity
00736 *is an entity or a
00737 *set. It is an error
00738 *to get a relation
00739 *for a side with
00740 *status
00741 *iRel_NOTEXIST.
00742 ******************************************************************************/
00743 void iRel_getEntEntRelation( iRel_Instance instance,
00744 /**< [in] iRel instance handle */
00745 iRel_PairHandle pair,
00746 /**< [in] Relation pair handle being queried */
00747 iBase_EntityHandle ent1,
00748 /**< [in] 1st entity of relation being queried */
00749 int switch_order,
00750 /**< [in] 1st entity is related to 1st interface (=0) or 2nd interface
00751 (=1) of relation pair */
00752 iBase_EntityHandle* ent2,
00753 /**< [out] Pointer to entity related to ent1 */
00754 int* err
00755 /**< [out] Returned Error status (see iBase_ErrorType) */
00756 );
00757
00758 /***************************************************************************/ /**
00759 * \brief Get entity
00760 *set related to
00761 *specified entity and
00762 *relation handle
00763 *
00764 * Description
00765 *unavailable.
00766 ******************************************************************************/
00767 void iRel_getEntSetRelation( iRel_Instance instance,
00768 /**< [in] iRel instance handle */
00769 iRel_PairHandle pair,
00770 /**< [in] Relation pair handle being queried */
00771 iBase_EntityHandle ent1,
00772 /**< [in] entity of relation being queried */
00773 int switch_order,
00774 /**< [in] 1st entity is related to 1st interface (=0) or 2nd interface
00775 (=1) of relation pair */
00776 iBase_EntitySetHandle* entset2,
00777 /**< [out] Pointer to entity set related to ent1 */
00778 int* err
00779 /**< [out] Returned Error status (see iBase_ErrorType) */
00780 );
00781
00782 /***************************************************************************/ /**
00783 * \brief Get entity
00784 *related to specified
00785 *entity set and
00786 *relation handle
00787 *
00788 * Description
00789 *unavailable.
00790 ******************************************************************************/
00791 void iRel_getSetEntRelation( iRel_Instance instance,
00792 /**< [in] iRel instance handle */
00793 iRel_PairHandle pair,
00794 /**< [in] Relation pair handle being queried */
00795 iBase_EntitySetHandle entset1,
00796 /**< [in] entity set of relation being queried */
00797 int switch_order,
00798 /**< [in] 1st entity is related to 1st interface (=0) or 2nd interface
00799 (=1) of relation pair */
00800 iBase_EntityHandle* ent2,
00801 /**< [out] Pointer to entity related to entset1 */
00802 int* err
00803 /**< [out] Returned Error status (see iBase_ErrorType) */
00804 );
00805
00806 /***************************************************************************/ /**
00807 * \brief Get entity
00808 *set related to
00809 *specified entity set
00810 *and relation handle
00811 *
00812 * Description
00813 *unavailable.
00814 ******************************************************************************/
00815 void iRel_getSetSetRelation( iRel_Instance instance,
00816 /**< [in] iRel instance handle */
00817 iRel_PairHandle pair,
00818 /**< [in] Relation pair handle being queried */
00819 iBase_EntitySetHandle entset1,
00820 /**< [in] 1st entity set of relation being queried */
00821 int switch_order,
00822 /**< [in] 1st entity is related to 1st interface (=0) or 2nd interface
00823 (=1) of relation pair */
00824 iBase_EntitySetHandle* entset2,
00825 /**< [out] Pointer to entity set related to entset1 */
00826 int* err
00827 /**< [out] Returned Error status (see iBase_ErrorType) */
00828 );
00829
00830 /***************************************************************************/ /**
00831 * \brief Get entity
00832 *iterator related to
00833 *specified entity set
00834 *and relation handle.
00835 *
00836 * Description
00837 *unavailable.
00838 ******************************************************************************/
00839 void iRel_getEntSetIterRelation( iRel_Instance instance,
00840 /**< [in] iRel instance handle */
00841 iRel_PairHandle pair,
00842 /**< [in] Relation pair handle being queried */
00843 iBase_EntityHandle ent1,
00844 /**< [in] ent1 1st entity set of relation being queried */
00845 int switch_order,
00846 /**< [in] 1st entity is related to 1st interface (=0) or 2nd interface
00847 (=1) of relation pair */
00848 iBase_EntityIterator* entIter,
00849 /**< [out] Returned entity iterator */
00850 int* err
00851 /**< [out] Returned Error status (see iBase_ErrorType) */
00852 );
00853
00854 /***************************************************************************/ /**
00855 * \brief Get entities
00856 *related to those in
00857 *specified array and
00858 *relation, pairwise
00859 *
00860 * Get entities
00861 *related to those in
00862 *specified array and
00863 *relation, pairwise.
00864 * Returns sets or
00865 *entities, depending
00866 *on relation type and
00867 *entities in
00868 * ent_array_1. It is
00869 *an error to get a
00870 *relation for a side
00871 *with status
00872 * iRel_NOTEXIST.
00873 ******************************************************************************/
00874 void iRel_getEntArrEntArrRelation( iRel_Instance instance,
00875 /**< [in] iRel instance handle */
00876 iRel_PairHandle pair,
00877 /**< [in] Relation pair handle being queried */
00878 iBase_EntityHandle* ent_array_1,
00879 /**< [in] Array of entities whose relations are being queried */
00880 int ent_array_1_size,
00881 /**< [in] Number of entities in ent_array_1 */
00882 int switch_order,
00883 /**< [in] Entities in ent_array_1 are related with 1st (=0) or 2nd (=1)
00884 interface of this relation pair */
00885 iBase_EntityHandle** ent_array_2,
00886 /**< [inout] Pointer to array of entity handles returned from function */
00887 int* ent_array_2_allocated,
00888 /**< [inout] Pointer to allocated size of ent_array_2 */
00889 int* ent_array_2_size,
00890 /**< [out] Pointer to occupied size of ent_array_2 */
00891 int* err
00892 /**< [out] Returned Error status (see iBase_ErrorType) */
00893 );
00894
00895 /***************************************************************************/ /**
00896 * \brief Get entity
00897 *sets related to
00898 *entities in
00899 *specified array and
00900 *relation, pairwise
00901 *
00902 * Description
00903 *unavailable.
00904 ******************************************************************************/
00905 void iRel_getEntArrSetArrRelation( iRel_Instance instance,
00906 /**< [in] iRel instance handle */
00907 iRel_PairHandle pair,
00908 /**< [in] Relation pair handle being queried */
00909 iBase_EntityHandle* ent_array_1,
00910 /**< [in] Array of entities whose relations are being queried */
00911 int ent_array_1_size,
00912 /**< [in] Number of entities in ent_array_1 */
00913 int switch_order,
00914 /**< [in] Entities in ent_array_1 are related with 1st (=0) or 2nd (=1)
00915 interface of this relation pair */
00916 iBase_EntitySetHandle** entset_array_2,
00917 /**< [inout] Pointer to array of entity set handles returned from function */
00918 int* entset_array_2_allocated,
00919 /**< [inout] Pointer to allocated size of entset_array_2 */
00920 int* entset_array_2_size,
00921 /**< [out] Pointer to occupied size of entset_array_2 */
00922 int* err
00923 /**< [out] Returned Error status (see iBase_ErrorType) */
00924 );
00925
00926 /***************************************************************************/ /**
00927 * \brief Get entities
00928 *related to entity
00929 *sets in specified
00930 *array and relation,
00931 * pairwise
00932 *
00933 * Description
00934 *unavailable.
00935 ******************************************************************************/
00936 void iRel_getSetArrEntArrRelation( iRel_Instance instance,
00937 /**< [in] iRel instance handle */
00938 iRel_PairHandle pair,
00939 /**< [in] Relation pair handle being queried */
00940 iBase_EntitySetHandle* entset_array_1,
00941 /**< [in] Array of entity sets whose relations are being queried */
00942 int entset_array_1_size,
00943 /**< [in] Number of entity sets in entset_array_1 */
00944 int switch_order,
00945 /**< [in] Entities in ent_array_1 are related with 1st (=0) or 2nd (=1)
00946 interface of this relation pair */
00947 iBase_EntityHandle** ent_array_2,
00948 /**< [inout] Pointer to array of entity handles returned from function */
00949 int* ent_array_2_allocated,
00950 /**< [inout] Pointer to allocated size of ent_array_2 */
00951 int* ent_array_2_size,
00952 /**< [out] Pointer to occupied size of ent_array_2 */
00953 int* err
00954 /**< [out] Returned Error status (see iBase_ErrorType) */
00955 );
00956
00957 /***************************************************************************/ /**
00958 * \brief Get entity
00959 *sets related to
00960 *entity sets in
00961 *specified array and
00962 *relation, pairwise
00963 *
00964 * Description
00965 *unavailable.
00966 ******************************************************************************/
00967 void iRel_getSetArrSetArrRelation( iRel_Instance instance,
00968 /**< [in] iRel instance handle */
00969 iRel_PairHandle pair,
00970 /**< [in] Relation pair handle being queried */
00971 iBase_EntitySetHandle* entset_array_1,
00972 /**< [in] Array of entity sets whose relations are being queried */
00973 int entset_array_1_size,
00974 /**< [in] Number of entity sets in entset_array_1 */
00975 int switch_order,
00976 /**< [in] Entities in ent_array_1 are related with 1st (=0) or 2nd (=1)
00977 interface of this relation pair */
00978 iBase_EntitySetHandle** entset_array_2,
00979 /**< [inout] Pointer to array of entity handles returned from function */
00980 int* entset_array_2_allocated,
00981 /**< [inout] Pointer to allocated size of entset_array_2 */
00982 int* entset_array_2_size,
00983 /**< [out] Pointer to occupied size of entset_array_2 */
00984 int* err
00985 /**< [out] Returned Error status (see iBase_ErrorType) */
00986 );
00987
00988 /***************************************************************************/ /**
00989 * \brief Get entity
00990 *iterators related to
00991 *entity sets in
00992 *specified array and
00993 * relation.
00994 *
00995 * Description
00996 *unavailable.
00997 ******************************************************************************/
00998 void iRel_getEntArrSetIterArrRelation( iRel_Instance instance,
00999 /**< [in] iRel instance handle */
01000 iRel_PairHandle pair,
01001 /**< [in] Relation pair handle being queried */
01002 iBase_EntityHandle* ent_array_1,
01003 /**< [in] Array of entities whose relations are being queried */
01004 int ent_array_1_size,
01005 /**< [in] Number of entities in ent_array_1 */
01006 int switch_order,
01007 /**< [in] Entities in ent_array_1 are related with 1st (=0) or 2nd (=1)
01008 interface of this relation pair */
01009 iBase_EntityIterator** entiter,
01010 /**< [inout] Pointer to array of entity iterator handles returned from
01011 function */
01012 int* entiter_allocated,
01013 /**< [inout] Pointer to allocated size of entiter */
01014 int* entiter_size,
01015 /**< [out] Pointer to occupied size of entiter */
01016 int* err
01017 /**< [out] Returned Error status (see iBase_ErrorType) */
01018 );
01019
01020 /***************************************************************************/ /**
01021 * \brief Remove a
01022 *relation from an
01023 *entity
01024 *
01025 * Remove a relation
01026 *from an entity
01027 ******************************************************************************/
01028 void iRel_rmvEntRelation( iRel_Instance instance,
01029 /**< [in] iRel instance handle */
01030 iRel_PairHandle pair,
01031 /**< [in] Relation pair handle being queried */
01032 iBase_EntityHandle ent,
01033 /**< [in] entity of relation being removed */
01034 int switch_order,
01035 /**< [in] entity is related to 1st interface (=0) or 2nd interface
01036 (=1) of relation pair */
01037 int* err
01038 /**< [out] Returned Error status (see iBase_ErrorType) */
01039 );
01040
01041 /***************************************************************************/ /**
01042 * \brief Remove a
01043 *relation from an
01044 *entity set
01045 *
01046 * Remove a relation
01047 *from an entity set
01048 ******************************************************************************/
01049 void iRel_rmvSetRelation( iRel_Instance instance,
01050 /**< [in] iRel instance handle */
01051 iRel_PairHandle pair,
01052 /**< [in] Relation pair handle being queried */
01053 iBase_EntitySetHandle set,
01054 /**< [in] entity set of relation being removed */
01055 int switch_order,
01056 /**< [in] entity set is related to 1st interface (=0) or 2nd interface
01057 (=1) of relation pair */
01058 int* err
01059 /**< [out] Returned Error status (see iBase_ErrorType) */
01060 );
01061
01062 /***************************************************************************/ /**
01063 * \brief Remove a
01064 *relation from an
01065 *array of entities
01066 *
01067 * Remove a relation
01068 *from an array of
01069 *entities
01070 ******************************************************************************/
01071 void iRel_rmvEntArrRelation( iRel_Instance instance,
01072 /**< [in] iRel instance handle */
01073 iRel_PairHandle pair,
01074 /**< [in] Relation pair handle being queried */
01075 iBase_EntityHandle* ent_array_1,
01076 /**< [in] Array of entities of relation being removed */
01077 int num_ent1,
01078 /**< [in] Number of entities in array */
01079 int switch_order,
01080 /**< [in] entities are related to 1st interface (=0) or 2nd interface
01081 (=1) of relation pair */
01082 int* err
01083 /**< [out] Returned Error status (see iBase_ErrorType) */
01084 );
01085
01086 /***************************************************************************/ /**
01087 * \brief Remove a
01088 *relation from an
01089 *array of entity sets
01090 *
01091 * Remove a relation
01092 *from an array of
01093 *entity sets
01094 ******************************************************************************/
01095 void iRel_rmvSetArrRelation( iRel_Instance instance,
01096 /**< [in] iRel instance handle */
01097 iRel_PairHandle pair,
01098 /**< [in] Relation pair handle being queried */
01099 iBase_EntitySetHandle* entset_array_1,
01100 /**< [in] Array of entity sets of relation being removed */
01101 int num_entset1,
01102 /**< [in] Number of entity sets in array */
01103 int switch_order,
01104 /**< [in] entity sets are related to 1st interface (=0) or 2nd interface
01105 (=1) of relation pair */
01106 int* err
01107 /**< [out] Returned Error status (see iBase_ErrorType) */
01108 );
01109
01110 /***************************************************************************/ /**
01111 * \brief Infer
01112 *relations between
01113 *entities in
01114 *specified pair of
01115 *interfaces
01116 *
01117 * Infer relations
01118 *between entities in
01119 *specified pair of
01120 *interfaces. The
01121 * criteria used to
01122 *infer these
01123 *relations depends on
01124 *the interfaces in
01125 * the pair, the iRel
01126 *implementation, and
01127 *the source of the
01128 *data in those
01129 * interfaces.
01130 ******************************************************************************/
01131 void iRel_inferAllRelations( iRel_Instance instance,
01132 /**< [in] iRel instance handle */
01133 iRel_PairHandle pair,
01134 /**< [in] Relation pair handle being queried */
01135 int* err
01136 /**< [out] Returned Error status (see iBase_ErrorType) */
01137 );
01138
01139 /***************************************************************************/ /**
01140 * \brief Infer
01141 *relations and
01142 *relation type
01143 *between entities in
01144 *specified pair of
01145 *interfaces
01146 *
01147 * Infer relations
01148 *between entities in
01149 *specified pair of
01150 *interfaces, and the
01151 * relation type used
01152 *by this iRel
01153 *implementation. The
01154 *criteria used to
01155 * infer these
01156 *relations depends on
01157 *the interfaces in
01158 *the pair, the iRel
01159 * implementation, and
01160 *the source of the
01161 *data in those
01162 *interfaces.
01163 ******************************************************************************/
01164 void iRel_inferAllRelationsAndType( iRel_Instance instance,
01165 /**< [in] iRel instance handle */
01166 iRel_PairHandle* pair,
01167 /**< [in] Relation pair handle created by implementation */
01168 int* err
01169 /**< [out] Returned Error status (see iBase_ErrorType) */
01170 );
01171
01172 /***************************************************************************/ /**
01173 * \brief Infer
01174 *relations
01175 *corresponding to
01176 *specified entity and
01177 *relation pair
01178 *
01179 * Infer relations
01180 *corresponding to
01181 *specified entity and
01182 *relation pair. The
01183 * criteria used to
01184 *infer these
01185 *relations depends on
01186 *the interfaces in
01187 * the pair, the iRel
01188 *implementation, and
01189 *the source of the
01190 *data in those
01191 * interfaces.
01192 ******************************************************************************/
01193 void iRel_inferEntRelations( iRel_Instance instance,
01194 /**< [in] iRel instance handle */
01195 iRel_PairHandle pair,
01196 /**< [in] Relation pair handle being queried */
01197 iBase_EntityHandle entity,
01198 /**< [in] Entity whose relations are being inferred */
01199 int iface_no,
01200 /**< [in] Entity corresponds to 1st (=0) or 2nd (=1) interface in
01201 relation pair */
01202 int* err
01203 /**< [out] Returned Error status (see iBase_ErrorType) */
01204 );
01205
01206 /***************************************************************************/ /**
01207 * \brief Brief
01208 *unavailable
01209 *
01210 * Description
01211 *unavailable
01212 ******************************************************************************/
01213 void iRel_inferSetRelations( iRel_Instance instance,
01214 /**< [in] iRel instance handle */
01215 iRel_PairHandle pair,
01216 /**< [in] description unknown */
01217 iBase_EntitySetHandle entity_set,
01218 /**< [in] description unknown */
01219 int iface_no,
01220 /**< [in] description unknown */
01221 int* err
01222 /**< [out] Returned Error status (see iBase_ErrorType) */
01223 );
01224
01225 /***************************************************************************/ /**
01226 * \brief Infer
01227 *relations
01228 *corresponding to
01229 *specified entities
01230 *and relation pair
01231 *
01232 * Infer relations
01233 *corresponding to
01234 *specified entities
01235 *and relation pair.
01236 * The criteria used
01237 *to infer these
01238 *relations depends on
01239 *the interfaces in
01240 * the pair, the iRel
01241 *implementation, and
01242 *the source of the
01243 *data in those
01244 * interfaces.
01245 ******************************************************************************/
01246 void iRel_inferEntArrRelations( iRel_Instance instance,
01247 /**< [in] iRel instance handle */
01248 iRel_PairHandle pair,
01249 /**< [in] Relation pair handle being queried */
01250 iBase_EntityHandle* entities,
01251 /**< [in] Array of entities whose relation are being inferred */
01252 int entities_size,
01253 /**< [in] Number of entities in array */
01254 int iface_no,
01255 /**< [in] Entities correspond to 1st (=0) or 2nd (=1) interface in
01256 relation pair */
01257 int* err
01258 /**< [out] Returned Error status (see iBase_ErrorType) */
01259 );
01260
01261 /***************************************************************************/ /**
01262 * \brief Brief
01263 *unavailable
01264 *
01265 * Description
01266 *unavailable
01267 ******************************************************************************/
01268 void iRel_inferSetArrRelations( iRel_Instance instance,
01269 /**< [in] iRel instance handle */
01270 iRel_PairHandle pair,
01271 /**< [in] description unknown */
01272 iBase_EntitySetHandle* entity_sets,
01273 /**< [in] description unknown */
01274 int entities_size,
01275 /**< [in] description unknown */
01276 int iface_no,
01277 /**< [in] description unknown */
01278 int* err
01279 /**< [out] Returned Error status (see iBase_ErrorType) */
01280 );
01281
01282 /** \mainpage The ITAPS Relations Interface iRel
01283 *
01284 * Each ITAPS interface encapsulates functionality that "belongs"
01285 * together, for example mesh or geometric model functionality. In
01286 * some cases, however, data in several of these interfaces need to
01287 * be related together. For example, a collection of mesh faces
01288 * should be related to the geometric model face which they
01289 * discretize. The ITAPS Relations interface accomplishes this in a
01290 * way which allows the lower-level interfaces to remain
01291 * independent.
01292 *
01293 * iRel defines relations as pairwise relations between entities
01294 * or entity sets. Related entities can be in the same or different
01295 * interfaces. A given relation is created for a given pair of
01296 * interfaces and returned in the form of a \em Relation \em Handle.
01297 * After a specific relation pair has been created, concrete
01298 * relations for that pair can be assigned and retrieved for
01299 * specific entities using set and get functions on the iRel
01300 * interface. A given interface instance can appear in one or many
01301 * relation pairs, each identified by the relation pair handle.
01302 *
01303 * \section Types Relation Types
01304 *
01305 * Relations are also distinguished by a pair of relation types.
01306 * For each interface in a relation pair, a corresponding type
01307 * indicates whether the relation applies to entities, entity sets,
01308 * or both entities and sets in the corresponding interface in the
01309 * pair. If only one of the interfaces in a given pair has a
01310 * 'both'-type, entities and entity sets in that
01311 * interface are each related to either entities or sets in the other
01312 * interface in the pair. If both of the sides of a relation are of
01313 * 'both'-type, entities and sets on one side of a relation point to
01314 * sets on the other side.
01315 *
01316 * \section Status Relation Status
01317 *
01318 * Relations are also distinguished by a pair of relation statuses.
01319 * For each interface in a relation pair, a corresponding status indicates
01320 * whether the relation on that side is kept up to date, or stored at all.
01321 * Allowable values for status are iRel_ACTIVE, iRel_INACTIVE, and iRel_NOTEXIST,
01322 * defined in the iRel_RelationStatus enumeration. Status for a given side
01323 * can be changed from iRel_ACTIVE to iRel_INACTIVE and vice versa, or from
01324 * either of those to iRel_NOTEXIST. However, once changed to iRel_NOTEXIST
01325 * (or created that way), a side cannot be changed back to the other two.
01326 * Changing a side to be iRel_INACTIVE can be used when frequent changes to
01327 * the underlying entities are being made, e.g. during adaptive mesh refinement.
01328 * Changing from iRel_INACTIVE to iRel_ACTIVE implies a traversal of all entities
01329 * on the iRel_ACTIVE side to recover which entities on the iRel_INACTIVE side
01330 * must have their relations updated.
01331 *
01332 * \section ArgOrder Argument Order
01333 *
01334 * Many functions in the iRel interface take as input two entities,
01335 * or two lists of entities, along with a relation pair handle. For
01336 * these functions, the entities or lists are assumed to be in the
01337 * same order as the interfaces used to create that relation pair.
01338 * For example, if a relation pair is created by calling:
01339 * \code
01340 * iRel_createRelation(instance, iface1, ent_or_set1, type1,
01341 * iface2, ent_or_set2, type2,
01342 * &relation_handle, &ierr)
01343 * \endcode
01344 * and relations set by calling
01345 * \code
01346 * iRel_setEntEntRelation(instance, relation_handle,
01347 * ent1, is_set1, ent2, is_set2, &ierr)
01348 * \endcode
01349 * it is assumed that ent1 is contained in iface1 and ent2 in
01350 * iface2.
01351 *
01352 * For functions taking only one entity or list as input, and
01353 * returning an entity or list, an additional argument indicates
01354 * whether the input entity or list belongs to the first or second
01355 * interface in that relation pair.
01356 *
01357 */
01358
01359 #ifdef __cplusplus
01360 } /* extern "C" */
01361 #endif
01362
01363 #endif /* #ifndef _ITAPS_iRel */