MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / parse_element_field

Method parse_element_field

src/IO/MshLoader.cpp:347–418  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

345}
346
347void MshLoader::parse_element_field(std::ifstream& fin) {
348 size_t num_string_tags;
349 size_t num_real_tags;
350 size_t num_int_tags;
351
352 fin >> num_string_tags;
353 std::string* str_tags = new std::string[num_string_tags];
354 for (size_t i=0; i<num_string_tags; i++) {
355 IOUtils::eat_white_space(fin);
356 if (fin.peek() == '\"') {
357 // Handle field name between quoates.
358 char buf[128];
359 fin.get(); // remove the quote at the beginning.
360 fin.getline(buf, 128, '\"');
361 str_tags[i] = std::string(buf);
362 } else {
363 fin >> str_tags[i];
364 }
365 }
366
367 fin >> num_real_tags;
368 Float* real_tags = new Float[num_real_tags];
369 for (size_t i=0; i<num_real_tags; i++)
370 fin >> real_tags[i];
371
372 fin >> num_int_tags;
373 int* int_tags = new int[num_int_tags];
374 for (size_t i=0; i<num_int_tags; i++)
375 fin >> int_tags[i];
376
377 if (num_string_tags <= 0 || num_int_tags <= 2) {
378 delete [] str_tags;
379 delete [] real_tags;
380 delete [] int_tags;
381 throw INVALID_FORMAT;
382 }
383 std::string fieldname = str_tags[0];
384 int num_components = int_tags[1];
385 int num_entries = int_tags[2];
386 VectorF field(num_entries * num_components);
387
388 delete [] str_tags;
389 delete [] real_tags;
390 delete [] int_tags;
391
392 if (m_binary) {
393 size_t num_bytes = (num_components * m_data_size + 4) * num_entries;
394 char* data = new char[num_bytes];
395 IOUtils::eat_white_space(fin);
396 fin.read(data, num_bytes);
397 for (size_t i=0; i<num_entries; i++) {
398 int elem_idx = *reinterpret_cast<int*>(&data[i*(4+num_components*m_data_size)]);
399 elem_idx -= 1;
400 size_t base_idx = i*(4+num_components*m_data_size) + 4;
401 for (size_t j=0; j<num_components; j++) {
402 field[elem_idx * num_components + j] = *reinterpret_cast<Float*>(&data[base_idx+j*m_data_size]);
403 }
404 }

Callers

nothing calls this directly

Calls 1

getMethod · 0.45

Tested by

no test coverage detected