Branch data Line data Source code
1 : : #include "MeshAssocPairSide.hpp"
2 : :
3 : : #include <cstring>
4 : : #include <sstream>
5 : : #include <string>
6 : :
7 : : #include <iMesh_extensions.h>
8 : :
9 : : #include "Lasso.hpp"
10 : : #include "iRel_Lasso.hpp"
11 : :
12 : : #define PROCESS_ERROR do { \
13 : : if (iBase_SUCCESS != result) { \
14 : : char this_descr[120]; \
15 : : iMesh_getDescription(instance_, this_descr, 120); \
16 : : ERRORR(result, this_descr); \
17 : : } \
18 : : } while(false)
19 : :
20 : : // Redefine LASSOI
21 : : #undef LASSOI
22 : : #define LASSOI lasso_instance(relation)
23 : :
24 : : static const char *GLOBAL_ID_TAG_NAME = "GLOBAL_ID";
25 : : static const char *MESH_DIMENSION_TAG_NAME = "GEOM_DIMENSION";
26 : : static const char *RELATION_TAG_NAME = "__MESH_ASSOCIATION";
27 : :
28 : 7 : MeshAssocPairSide::MeshAssocPairSide(iRel_Instance relation,
29 : : iBase_Instance instance, int id) :
30 : : relation(relation),
31 : : instance_(reinterpret_cast<iMesh_Instance>(instance)),
32 : 7 : id(id)
33 : : {
34 : : int result;
35 : :
36 [ + - ]: 7 : create_relation_side();
37 : :
38 : : iMesh_getTagHandle(instance_, GLOBAL_ID_TAG_NAME, &gid_tag, &result,
39 [ + - ]: 7 : strlen(GLOBAL_ID_TAG_NAME));
40 [ - + ]: 7 : if (result == iBase_TAG_NOT_FOUND) {
41 : : iMesh_createTag(instance_, GLOBAL_ID_TAG_NAME, 1, iBase_INTEGER,
42 [ # # ]: 0 : &gid_tag, &result, strlen(GLOBAL_ID_TAG_NAME));
43 : : }
44 : :
45 : : iMesh_getTagHandle(instance_, MESH_DIMENSION_TAG_NAME, &dim_tag, &result,
46 [ + - ]: 7 : strlen(MESH_DIMENSION_TAG_NAME));
47 [ - + ]: 7 : if (result == iBase_TAG_NOT_FOUND)
48 : 0 : dim_tag = NULL;
49 : 7 : }
50 : :
51 : 7 : MeshAssocPairSide::~MeshAssocPairSide()
52 : : {
53 [ + - ]: 7 : destroy_relation_side();
54 [ - + ]: 14 : }
55 : :
56 : 4 : iBase_Instance MeshAssocPairSide::instance() const
57 : : {
58 : 4 : return instance_;
59 : : }
60 : :
61 : 2 : iRel_IfaceType MeshAssocPairSide::type() const
62 : : {
63 : 2 : return iRel_IMESH_IFACE;
64 : : }
65 : :
66 : 7 : int MeshAssocPairSide::create_relation_side()
67 : : {
68 : : int result;
69 : 7 : std::stringstream ss;
70 [ + - ][ + - ]: 7 : ss << RELATION_TAG_NAME << id;
71 [ + - ]: 7 : std::string rel_tag_name(ss.str());
72 : :
73 : : iMesh_getTagHandle(instance_, rel_tag_name.c_str(), &relation_tag, &result,
74 [ + - ][ + - ]: 7 : rel_tag_name.size());
[ + - ]
75 [ + - ]: 7 : if (result == iBase_TAG_NOT_FOUND) {
76 : : iMesh_createTag(instance_, rel_tag_name.c_str(), 1, iBase_ENTITY_HANDLE,
77 [ + - ][ + - ]: 7 : &relation_tag, &result, rel_tag_name.size());
[ + - ]
78 : : }
79 : :
80 [ - + ][ # # ]: 7 : PROCESS_ERROR;
[ # # ]
81 [ + - ][ + - ]: 7 : RETURNR(iBase_SUCCESS);
82 : : }
83 : :
84 : 7 : int MeshAssocPairSide::destroy_relation_side()
85 : : {
86 [ + - ]: 7 : if (relation_tag) {
87 : : int result;
88 : :
89 : 7 : iMesh_destroyTag(instance_, relation_tag, true, &result);
90 : 7 : relation_tag = NULL;
91 : :
92 [ - + ]: 7 : PROCESS_ERROR;
93 : : }
94 : 7 : RETURNR(iBase_SUCCESS);
95 : : }
96 : :
97 : 0 : int MeshAssocPairSide::get_all_entities(int dimension,
98 : : iBase_EntityHandle **entities,
99 : : int *entities_alloc,
100 : : int *entities_size)
101 : : {
102 [ # # ]: 0 : int this_type = (dimension == -1 ? iBase_ALL_TYPES : dimension);
103 : : int result;
104 : :
105 : : iMesh_getEntities(instance_, 0, this_type, iMesh_ALL_TOPOLOGIES,
106 : 0 : entities, entities_alloc, entities_size, &result);
107 [ # # ]: 0 : PROCESS_ERROR;
108 : 0 : RETURNR(iBase_SUCCESS);
109 : : }
110 : :
111 : 4 : int MeshAssocPairSide::get_all_sets(iBase_EntitySetHandle **sets,
112 : : int *sets_alloc, int *sets_size)
113 : : {
114 : : int result;
115 : :
116 : 4 : iMesh_getEntSets(instance_, 0, 0, sets, sets_alloc, sets_size, &result);
117 [ - + ]: 4 : PROCESS_ERROR;
118 : 4 : RETURNR(iBase_SUCCESS);
119 : : }
120 : :
121 : 4 : int MeshAssocPairSide::get_entities(int dimension,
122 : : iBase_EntitySetHandle set_handle,
123 : : iBase_EntityHandle **entities,
124 : : int *entities_alloc,
125 : : int *entities_size)
126 : : {
127 [ - + ]: 4 : int this_type = (dimension == -1 ? iBase_ALL_TYPES : dimension);
128 : : int result;
129 : :
130 : : iMesh_getEntities(instance_, set_handle, this_type, iMesh_ALL_TOPOLOGIES,
131 : 4 : entities, entities_alloc, entities_size, &result);
132 [ - + ]: 4 : PROCESS_ERROR;
133 : 4 : RETURNR(iBase_SUCCESS);
134 : : }
135 : :
136 : 0 : int MeshAssocPairSide::get_ents_dims(iBase_EntityHandle *entities,
137 : : int entities_size,
138 : : int **ent_types,
139 : : int *ent_types_alloc,
140 : : int *ent_types_size)
141 : : {
142 : : int result;
143 : :
144 : : iMesh_getEntArrType(instance_, entities, entities_size, ent_types,
145 : 0 : ent_types_alloc, ent_types_size, &result);
146 [ # # ]: 0 : PROCESS_ERROR;
147 : 0 : RETURNR(iBase_SUCCESS);
148 : : }
149 : :
150 : 0 : int MeshAssocPairSide::get_related_ents(iBase_EntityHandle **entities,
151 : : int *entities_alloc, int *entities_size)
152 : : {
153 : : int result;
154 : : iMesh_getEntsByTagsRec(instance_, 0, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES,
155 : : &relation_tag, NULL, 1, false, entities,
156 : 0 : entities_alloc, entities_size, &result);
157 [ # # ]: 0 : PROCESS_ERROR;
158 : 0 : RETURNR(iBase_SUCCESS);
159 : : }
160 : :
161 : 4 : int MeshAssocPairSide::get_related_sets(iBase_EntitySetHandle **sets,
162 : : int *sets_alloc, int *sets_size)
163 : : {
164 : : int result;
165 : : iMesh_getEntSetsByTagsRec(instance_, 0, &relation_tag, NULL, 1, false, sets,
166 : 4 : sets_alloc, sets_size, &result);
167 [ - + ]: 4 : PROCESS_ERROR;
168 : 4 : RETURNR(iBase_SUCCESS);
169 : : }
170 : :
171 : 6 : int MeshAssocPairSide::get_relation_side(iBase_EntityHandle *entities,
172 : : int num_entities, void *values)
173 : : {
174 : 6 : int values_alloc = num_entities * sizeof(iBase_EntityHandle);
175 : : int values_size;
176 : : int result;
177 : :
178 : : iMesh_getArrData(instance_, entities, num_entities, relation_tag,
179 : 6 : &values, &values_alloc, &values_size, &result);
180 [ + + ]: 6 : PROCESS_ERROR;
181 : 6 : RETURNR(iBase_SUCCESS);
182 : : }
183 : :
184 : 9 : int MeshAssocPairSide::get_relation_side(iBase_EntitySetHandle *sets,
185 : : int num_sets, void *values)
186 : : {
187 : 9 : char *data = static_cast<char*>(values);
188 : 9 : int values_alloc = sizeof(iBase_EntityHandle);
189 : : int values_size;
190 : : int result;
191 : :
192 [ + + ]: 98 : for (int i = 0; i < num_sets; i++) {
193 : 89 : iMesh_getEntSetData(instance_, sets[i], relation_tag,
194 : : reinterpret_cast<void**>(&data),
195 : 89 : &values_alloc, &values_size, &result);
196 : 89 : data += values_size;
197 [ - + ]: 89 : PROCESS_ERROR;
198 : : }
199 : 9 : RETURNR(iBase_SUCCESS);
200 : : }
201 : :
202 : 12 : int MeshAssocPairSide::set_relation_side(iBase_EntityHandle *entities,
203 : : int num_entities, const void *values)
204 : : {
205 : : int result;
206 : :
207 : : iMesh_setArrData(instance_, entities, num_entities, relation_tag,
208 : : static_cast<const char*>(values),
209 : 12 : num_entities*sizeof(iBase_EntityHandle), &result);
210 [ - + ]: 12 : PROCESS_ERROR;
211 : 12 : RETURNR(iBase_SUCCESS);
212 : : }
213 : :
214 : 124 : int MeshAssocPairSide::set_relation_side(iBase_EntitySetHandle *sets,
215 : : int num_sets, const void *values)
216 : : {
217 : 124 : const char *data = static_cast<const char*>(values);
218 : 124 : int size = sizeof(iBase_EntityHandle);
219 : : int result;
220 : :
221 [ + + ]: 248 : for (int i = 0; i < num_sets; i++) {
222 : 124 : iMesh_setEntSetData(instance_, sets[i], relation_tag, data, size, &result);
223 : 124 : data += size;
224 [ - + ]: 124 : PROCESS_ERROR;
225 : : }
226 : 124 : RETURNR(iBase_SUCCESS);
227 : : }
228 : :
229 : 1 : int MeshAssocPairSide::rmv_relation_side(iBase_EntityHandle *entities,
230 : : int num_entities)
231 : : {
232 : : int result;
233 : :
234 : 1 : iMesh_rmvArrTag(instance_, entities, num_entities, relation_tag, &result);
235 [ - + ]: 1 : PROCESS_ERROR;
236 : 1 : RETURNR(iBase_SUCCESS);
237 : : }
238 : :
239 : 2 : int MeshAssocPairSide::rmv_relation_side(iBase_EntitySetHandle *sets,
240 : : int num_sets)
241 : : {
242 : : int result;
243 : :
244 [ + + ]: 44 : for (int i = 0; i < num_sets; i++) {
245 : 42 : iMesh_rmvEntSetTag(instance_, sets[i], relation_tag, &result);
246 [ - + ]: 42 : PROCESS_ERROR;
247 : : }
248 : :
249 : 2 : RETURNR(iBase_SUCCESS);
250 : : }
251 : :
252 : 0 : int MeshAssocPairSide::get_iterator(iBase_EntitySetHandle set,
253 : : iBase_EntityIterator *iter)
254 : : {
255 : : int result;
256 : 0 : int resilient=0;
257 : : iMesh_initEntIter(instance_, set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES,
258 : 0 : resilient, iter, &result);
259 : 0 : RETURNR(iBase_SUCCESS);
260 : : }
261 : :
262 : 0 : int MeshAssocPairSide::get_gids(iBase_EntityHandle *entities, int num_entities,
263 : : int *values)
264 : : {
265 : 0 : int values_alloc = num_entities * sizeof(int);
266 : : int values_size;
267 : : int result;
268 : :
269 : : iMesh_getArrData(instance_, entities, num_entities, gid_tag,
270 : 0 : &values, &values_alloc, &values_size, &result);
271 [ # # ]: 0 : PROCESS_ERROR;
272 : 0 : RETURNR(iBase_SUCCESS);
273 : : }
274 : :
275 : 6 : int MeshAssocPairSide::get_gids(iBase_EntitySetHandle *sets, int num_sets,
276 : : int *values)
277 : : {
278 : 6 : char *data = reinterpret_cast<char*>(values);
279 : 6 : int values_alloc = sizeof(int);
280 : : int values_size;
281 : : int result;
282 : :
283 [ + + ]: 109 : for (int i = 0; i < num_sets; i++) {
284 : 103 : iMesh_getEntSetData(instance_, sets[i], gid_tag,
285 : : reinterpret_cast<void**>(&data),
286 : 103 : &values_alloc, &values_size, &result);
287 : 103 : data += values_size;
288 [ - + ]: 103 : PROCESS_ERROR;
289 : : }
290 : 6 : RETURNR(iBase_SUCCESS);
291 : : }
292 : :
293 : 0 : int MeshAssocPairSide::get_dims(iBase_EntityHandle *entities, int num_entities,
294 : : int *values)
295 : : {
296 : 0 : int values_alloc = num_entities * sizeof(int);
297 : : int values_size;
298 : : int result;
299 : :
300 : : iMesh_getArrData(instance_, entities, num_entities, dim_tag,
301 : 0 : &values, &values_alloc, &values_size, &result);
302 [ # # ]: 0 : PROCESS_ERROR;
303 : 0 : RETURNR(iBase_SUCCESS);
304 : : }
305 : :
306 : 6 : int MeshAssocPairSide::get_dims(iBase_EntitySetHandle *sets, int num_sets,
307 : : int *values)
308 : : {
309 : 6 : char *data = reinterpret_cast<char*>(values);
310 : 6 : int values_alloc = sizeof(int);
311 : : int values_size;
312 : : int result;
313 : :
314 [ + + ]: 109 : for (int i = 0; i < num_sets; i++) {
315 : 103 : iMesh_getEntSetData(instance_, sets[i], dim_tag,
316 : : reinterpret_cast<void**>(&data),
317 : 103 : &values_alloc, &values_size, &result);
318 : 103 : data += values_size;
319 [ - + ]: 103 : PROCESS_ERROR;
320 : : }
321 : 6 : RETURNR(iBase_SUCCESS);
322 : : }
|