moab
|
00001 #include "DamselUtil.hpp" 00002 #include "moab/Range.hpp" 00003 00004 #include "damsel.h" 00005 00006 namespace moab { 00007 00008 damsel_entity_type DamselUtil::mtod_entity_type[] = { 00009 DAMSEL_ENTITY_TYPE_VERTEX, // MBVERTEX 00010 DAMSEL_ENTITY_TYPE_EDGE, // MBEDGE 00011 DAMSEL_ENTITY_TYPE_TRI, // MBTRI 00012 DAMSEL_ENTITY_TYPE_QUAD, // MBQUAD 00013 DAMSEL_ENTITY_TYPE_POLYGON, // MBPOLYGON 00014 DAMSEL_ENTITY_TYPE_TET,// MBTET 00015 DAMSEL_ENTITY_TYPE_PYRAMID, // MBPYRAMID 00016 DAMSEL_ENTITY_TYPE_PRISM, // MBPRISM 00017 DAMSEL_ENTITY_TYPE_UNDEFINED, // MBKNIFE 00018 DAMSEL_ENTITY_TYPE_HEX, // MBHEX, 00019 DAMSEL_ENTITY_TYPE_POLYHEDRON, // MBPOLYHEDRON 00020 DAMSEL_ENTITY_TYPE_UNDEFINED // MBENTITYSET 00021 }; 00022 00023 EntityType DamselUtil::dtom_entity_type[] = { 00024 MBVERTEX, // MBVERTEX 00025 MBEDGE, // MBEDGE 00026 MBTRI, // MBTRI 00027 MBQUAD, // MBQUAD 00028 MBPOLYGON, // MBPOLYGON 00029 MBTET,// MBTET 00030 MBPRISM, // MBPRISM 00031 MBPYRAMID, // MBPYRAMID 00032 MBHEX, // MBHEX, 00033 MBPOLYHEDRON, // MBPOLYHEDRON 00034 MBMAXTYPE, // MBENTITYSET 00035 MBMAXTYPE // MBMAXTYPE 00036 }; 00037 00038 damsel_data_type DamselUtil::mtod_data_type[] = { 00039 DAMSEL_DATA_TYPE_BYTES, // MB_TYPE_OPAQUE 00040 DAMSEL_DATA_TYPE_INTEGER, // MB_TYPE_INTEGER 00041 DAMSEL_DATA_TYPE_DOUBLE, // MB_TYPE_DOUBLE 00042 DAMSEL_DATA_TYPE_INVALID, // MB_TYPE_BIT 00043 DAMSEL_DATA_TYPE_HANDLE // MB_TYPE_HANDLE 00044 }; 00045 00046 DataType DamselUtil::dtom_data_type[] = { 00047 MB_TYPE_OPAQUE, // DAMSEL_DATA_TYPE_INVALID = 0, 00048 MB_TYPE_OPAQUE, // DAMSEL_DATA_TYPE_BYTES = 1, 00049 MB_TYPE_INTEGER, // DAMSEL_DATA_TYPE_INTEGER = 2, 00050 MB_TYPE_OPAQUE, // DAMSEL_DATA_TYPE_INT64 = 3, 00051 MB_TYPE_OPAQUE, // DAMSEL_DATA_TYPE_FLOAT = 4, 00052 MB_TYPE_DOUBLE, // DAMSEL_DATA_TYPE_DOUBLE = 5, 00053 MB_TYPE_HANDLE, // DAMSEL_DATA_TYPE_HANDLE = 6, 00054 MB_TYPE_OPAQUE, // DAMSEL_DATA_TYPE_ID_T = 7, 00055 MB_TYPE_OPAQUE, // DAMSEL_DATA_TYPE_SHORTINT = 8, 00056 MB_TYPE_OPAQUE // DAMSEL_DATA_TYPE_PREDEFINED_WATERMARK = 9; 00057 }; 00058 00059 DamselUtil::DamselUtil() 00060 : dmslLib(DAMSEL_LIBRARY_INVALID), dmslModel(DAMSEL_MODEL_INVALID), 00061 moabHandleType(DAMSEL_HANDLE_TYPE_INVALID) 00062 {} 00063 00066 ErrorCode DamselUtil::container_to_range(damsel_model m, damsel_container &c, Range &r) 00067 { 00068 if (DMSLcontainer_get_type(c) == DAMSEL_HANDLE_CONTAINER_TYPE_SEQUENCE) { 00069 damsel_handle start; 00070 size_t count, stride; 00071 damsel_err_t err = DMSLcontainer_sequence_get_contents(m, c, &start, &count, &stride); 00072 CHK_DMSL_ERR_NM(err); 00073 for (damsel_handle i = start+(count-1)*stride; i >= start; i-=stride) 00074 r.insert(i); 00075 } 00076 else if (DMSLcontainer_get_type(c) == DAMSEL_HANDLE_CONTAINER_TYPE_VECTOR) { 00077 damsel_handle *handle_ptr; 00078 size_t count; 00079 damsel_err_t err = DMSLcontainer_vector_get_contents(m, c, &handle_ptr, &count); 00080 CHK_DMSL_ERR_NM(err); 00081 for (int i = count-1; i >= 0; i--) 00082 r.insert(handle_ptr[i]); 00083 } 00084 else if (DMSLcontainer_get_type(c) == DAMSEL_HANDLE_CONTAINER_TYPE_TREE) { 00085 damsel_handle_ptr node_ptr = NULL; 00086 damsel_container cont = NULL; 00087 damsel_err_t err = DMSLcontainer_tree_get_contents(m, c, &node_ptr, &cont); 00088 while (err.id == DMSL_OK.id && cont) { 00089 ErrorCode rval = container_to_range(m, c, r); 00090 if (MB_SUCCESS != rval) return rval; 00091 err = DMSLcontainer_tree_get_contents(m, c, &node_ptr, &cont); 00092 } 00093 } 00094 00095 return MB_SUCCESS; 00096 } 00097 00098 }