MOAB: Mesh Oriented datABase
(version 5.4.1)
|
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 */