MOAB: Mesh Oriented datABase  (version 5.5.0)
GeomAssocPairSide.cpp
Go to the documentation of this file.
1 #include "GeomAssocPairSide.hpp"
2 
3 #include <cstring>
4 #include <sstream>
5 #include <string>
6 
7 #include "Lasso.hpp"
8 #include "iRel_Lasso.hpp"
9 
10 #define PROCESS_ERROR \
11  do \
12  { \
13  if( iBase_SUCCESS != result ) \
14  { \
15  char this_descr[120]; \
16  iGeom_getDescription( instance_, this_descr, 120 ); \
17  ERRORR( result, this_descr ); \
18  } \
19  } while( false )
20 
21 // Redefine LASSOI
22 #undef LASSOI
23 #define LASSOI lasso_instance( relation )
24 
25 static const char* GLOBAL_ID_TAG_NAME = "GLOBAL_ID";
26 static const char* RELATION_TAG_NAME = "__GEOM_ASSOCIATION";
27 
29  : relation( p_relation ), instance_( reinterpret_cast< iGeom_Instance >( p_instance ) ), id( p_id )
30 {
31  int result;
32 
34 
35  iGeom_getTagHandle( instance_, GLOBAL_ID_TAG_NAME, &gid_tag, &result, strlen( GLOBAL_ID_TAG_NAME ) );
36  if( result == iBase_TAG_NOT_FOUND )
37  {
38  iGeom_createTag( instance_, GLOBAL_ID_TAG_NAME, 1, iBase_INTEGER, &gid_tag, &result,
39  strlen( GLOBAL_ID_TAG_NAME ) );
40  }
41 }
42 
44 {
46 }
47 
49 {
50  return instance_;
51 }
52 
54 {
55  return iRel_IGEOM_IFACE;
56 }
57 
59 {
60  int result;
61  std::stringstream ss;
62  ss << RELATION_TAG_NAME << id;
63  std::string rel_tag_name( ss.str() );
64 
65  iGeom_getTagHandle( instance_, rel_tag_name.c_str(), &relation_tag, &result, rel_tag_name.size() );
66  if( result == iBase_TAG_NOT_FOUND )
67  {
68  iGeom_createTag( instance_, rel_tag_name.c_str(), 1, iBase_ENTITY_HANDLE, &relation_tag, &result,
69  rel_tag_name.size() );
70  }
71 
74 }
75 
77 {
78  if( relation_tag )
79  {
80  int result;
81 
82  iGeom_destroyTag( instance_, relation_tag, true, &result );
83  relation_tag = NULL;
84 
86  }
88 }
89 
92  int* entities_alloc,
93  int* entities_size )
94 {
95  int this_type = ( dimension == -1 ? iBase_ALL_TYPES : dimension );
96  int result;
97 
98  iGeom_getEntities( instance_, 0, this_type, entities, entities_alloc, entities_size, &result );
101 }
102 
103 int GeomAssocPairSide::get_all_sets( iBase_EntitySetHandle** sets, int* sets_alloc, int* sets_size )
104 {
105  int result;
106 
107  iGeom_getEntSets( instance_, 0, 0, sets, sets_alloc, sets_size, &result );
110 }
111 
113  iBase_EntitySetHandle set_handle,
115  int* entities_alloc,
116  int* entities_size )
117 {
118  int this_type = ( dimension == -1 ? iBase_ALL_TYPES : dimension );
119  int result;
120 
121  iGeom_getEntities( instance_, set_handle, this_type, entities, entities_alloc, entities_size, &result );
124 }
125 
127  int entities_size,
128  int** ent_types,
129  int* ent_types_alloc,
130  int* ent_types_size )
131 {
132  int result;
133 
134  iGeom_getArrType( instance_, entities, entities_size, ent_types, ent_types_alloc, ent_types_size, &result );
137 }
138 
140  int* /*entities_alloc*/,
141  int* /*entities_size*/ )
142 {
144 }
145 
146 int GeomAssocPairSide::get_related_sets( iBase_EntitySetHandle** /*sets*/, int* /*sets_alloc*/, int* /*sets_size*/ )
147 {
149 }
150 
151 int GeomAssocPairSide::get_relation_side( iBase_EntityHandle* entities, int num_entities, void* values )
152 {
153  int values_alloc = num_entities * sizeof( iBase_EntityHandle );
154  int values_size;
155  int result;
156 
157  iGeom_getArrData( instance_, entities, num_entities, relation_tag, &values, &values_alloc, &values_size, &result );
160 }
161 
162 int GeomAssocPairSide::get_relation_side( iBase_EntitySetHandle* sets, int num_sets, void* values )
163 {
164  char* data = static_cast< char* >( values );
165  int values_alloc = sizeof( iBase_EntityHandle );
166  int values_size;
167  int result;
168 
169  for( int i = 0; i < num_sets; i++ )
170  {
171  iGeom_getEntSetData( instance_, sets[i], relation_tag, reinterpret_cast< void** >( &data ), &values_alloc,
172  &values_size, &result );
173  data += values_size;
175  }
177 }
178 
179 int GeomAssocPairSide::set_relation_side( iBase_EntityHandle* entities, int num_entities, const void* values )
180 {
181  int result;
182 
183  iGeom_setArrData( instance_, entities, num_entities, relation_tag, static_cast< const char* >( values ),
184  num_entities * sizeof( iBase_EntityHandle ), &result );
187 }
188 
189 int GeomAssocPairSide::set_relation_side( iBase_EntitySetHandle* sets, int num_sets, const void* values )
190 {
191  const char* data = static_cast< const char* >( values );
192  int size = sizeof( iBase_EntityHandle );
193  int result;
194 
195  for( int i = 0; i < num_sets; i++ )
196  {
197  iGeom_setEntSetData( instance_, sets[i], relation_tag, data, size, &result );
198  data += size;
200  }
202 }
203 
205 {
206  int result;
207 
208  iGeom_rmvArrTag( instance_, entities, num_entities, relation_tag, &result );
211 }
212 
214 {
215  int result;
216 
217  for( int i = 0; i < num_sets; i++ )
218  {
219  iGeom_rmvEntSetTag( instance_, sets[i], relation_tag, &result );
221  }
222 
224 }
225 
227 {
228  int result;
229  iGeom_initEntIter( instance_, set, iBase_ALL_TYPES, iter, &result );
231 }
232 
233 int GeomAssocPairSide::get_gids( iBase_EntityHandle* entities, int num_entities, int* values )
234 {
235  int values_alloc = num_entities * sizeof( int );
236  int values_size;
237  int result;
238 
239  iGeom_getArrData( instance_, entities, num_entities, gid_tag, reinterpret_cast< void** >( &values ), &values_alloc,
240  &values_size, &result );
243 }
244 
245 int GeomAssocPairSide::get_gids( iBase_EntitySetHandle* sets, int num_sets, int* values )
246 {
247  char* data = reinterpret_cast< char* >( values );
248  int values_alloc = sizeof( int );
249  int values_size;
250  int result;
251 
252  for( int i = 0; i < num_sets; i++ )
253  {
254  iGeom_getEntSetData( instance_, sets[i], gid_tag, reinterpret_cast< void** >( &data ), &values_alloc,
255  &values_size, &result );
256  data += values_size;
258  }
260 }
261 
262 int GeomAssocPairSide::get_dims( iBase_EntityHandle* /*entities*/, int /*num_entities*/, int* /*values*/ )
263 {
265 }
266 
267 int GeomAssocPairSide::get_dims( iBase_EntitySetHandle* /*sets*/, int /*num_sets*/, int* /*values*/ )
268 {
270 }