MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "moab/Core.hpp"
#include "TestUtil.hpp"
#include "moab/Range.hpp"
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cmath>
Go to the source code of this file.
Functions | |
void | calc_centroid (Interface *iface, EntityHandle pent, double result[3]) |
void | test_moab_v3_poly_format () |
int | main () |
void calc_centroid | ( | Interface * | iface, |
EntityHandle | pent, | ||
double | result[3] | ||
) |
Definition at line 12 of file h5legacy.cpp.
References CHECK_EQUAL, CHECK_ERR, ErrorCode, moab::Interface::get_connectivity(), and moab::Interface::get_coords().
Referenced by test_moab_v3_poly_format().
{ int len; const EntityHandle* conn; ErrorCode rval; rval = iface->get_connectivity( pent, conn, len );CHECK_ERR( rval ); CHECK_EQUAL( 5, len ); double coords[15]; rval = iface->get_coords( conn, len, coords );CHECK_ERR( rval ); for( int d = 0; d < 3; ++d ) { result[d] = 0; for( int i = 0; i < 5; ++i ) result[d] += coords[3 * i + d]; result[d] /= 5; } }
int main | ( | ) |
Definition at line 80 of file h5legacy.cpp.
References RUN_TEST, and test_moab_v3_poly_format().
{ // only one test so far... should probably add second test // for really-old-format entityset parent/child links return RUN_TEST( test_moab_v3_poly_format ); }
void test_moab_v3_poly_format | ( | ) |
Definition at line 32 of file h5legacy.cpp.
References moab::Range::begin(), calc_centroid(), CHECK, CHECK_EQUAL, CHECK_ERR, CHECK_REAL_EQUAL, moab::Range::end(), ErrorCode, moab::Range::front(), moab::Interface::get_connectivity(), moab::Interface::get_entities_by_type(), moab::Interface::load_mesh(), mb, MB_TYPE_DOUBLE, MBPOLYGON, MBPOLYHEDRON, MBVERTEX, moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by main().
{ Core moab; Interface& mb = moab; ErrorCode rval; // load file containing a dodecahedron rval = mb.load_mesh( std::string( TestDir + "unittest/h5file/v3_dodec.h5m" ).c_str() );CHECK_ERR( rval ); // get entities from file Range verts, faces, polyhedrons; rval = mb.get_entities_by_type( 0, MBVERTEX, verts );CHECK_ERR( rval ); rval = mb.get_entities_by_type( 0, MBPOLYGON, faces );CHECK_ERR( rval ); rval = mb.get_entities_by_type( 0, MBPOLYHEDRON, polyhedrons );CHECK_ERR( rval ); // check expected number of entities CHECK_EQUAL( (size_t)20, verts.size() ); CHECK_EQUAL( (size_t)12, faces.size() ); CHECK_EQUAL( (size_t)1, polyhedrons.size() ); const EntityHandle polyhedron = polyhedrons.front(); // check the polyhedron connectivity list std::vector< EntityHandle > faces1, faces2; std::copy( faces.begin(), faces.end(), std::back_inserter( faces1 ) ); rval = mb.get_connectivity( &polyhedron, 1, faces2 );CHECK_ERR( rval ); std::sort( faces2.begin(), faces2.end() ); CHECK( faces1 == faces2 ); // each polygonshould have a tag value storing its centroid. // compare this value against the centroid calculated from // the vertex coords. // get tag for saved values Tag centroid; rval = mb.tag_get_handle( "CENTROID", 3, MB_TYPE_DOUBLE, centroid );CHECK_ERR( rval ); // for each face... for( Range::iterator i = faces.begin(); i != faces.end(); ++i ) { double saved[3], calc[3]; rval = mb.tag_get_data( centroid, &*i, 1, saved );CHECK_ERR( rval ); calc_centroid( &mb, *i, calc ); CHECK_REAL_EQUAL( saved[0], calc[0], 1e-6 ); CHECK_REAL_EQUAL( saved[1], calc[1], 1e-6 ); CHECK_REAL_EQUAL( saved[2], calc[2], 1e-6 ); } }