![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
#include "FBiGeom.h"
#include "FBiGeom_MOAB.hpp"
#include "iMesh.h"
#include <iostream>
#include <set>
#include <algorithm>
#include <vector>
#include <iterator>
#include <iomanip>
#include <cassert>
#include <cstring>
#include <cmath>
Go to the source code of this file.
Classes | |
class | SimpleArray< T > |
Defines | |
#define | CHECK(STR) if( err != iBase_SUCCESS ) return print_error( STR, err, geom, __FILE__, __LINE__ ) |
#define | STRINGIFY(S) XSTRINGIFY( S ) |
#define | XSTRINGIFY(S) #S |
#define | ARRAY_INOUT(A) A.ptr(), &( A ).capacity(), &( A ).size() |
#define | ARRAY_IN(A) &( A )[0], ( A ).size() |
Typedefs | |
typedef iBase_TagHandle | TagHandle |
typedef iBase_EntityHandle | GentityHandle |
typedef iBase_EntitySetHandle | GentitysetHandle |
Functions | |
static bool | print_error (const char *desc, int err, FBiGeom_Instance geom, const char *file, int line) |
void | FBiGeom_newGeomFromMesh (iMesh_Instance mesh, iBase_EntitySetHandle set, const char *options, FBiGeom_Instance *geom, int *err, int options_len) |
void | FBiGeom_dtor2 (FBiGeom_Instance instance, int *err) |
bool | smooth_test (const std::string &filename, FBiGeom_Instance) |
bool | tags_test (FBiGeom_Instance geom) |
bool | tag_get_set_test (FBiGeom_Instance geom) |
bool | tag_info_test (FBiGeom_Instance geom) |
bool | gentityset_test (FBiGeom_Instance geom, bool, bool) |
bool | topology_adjacencies_test (FBiGeom_Instance geom) |
bool | geometry_evaluation_test (FBiGeom_Instance geom) |
bool | construct_test (FBiGeom_Instance geom) |
bool | primitives_test (FBiGeom_Instance geom) |
bool | transforms_test (FBiGeom_Instance geom) |
bool | booleans_test (FBiGeom_Instance geom) |
bool | shutdown_test2 (FBiGeom_Instance geom, std::string &engine_opt) |
bool | save_entset_test (FBiGeom_Instance geom) |
bool | mesh_size_test (FBiGeom_Instance geom) |
bool | normals_test (FBiGeom_Instance geom) |
bool | ray_test (FBiGeom_Instance geom) |
void | handle_error_code (const bool result, int &number_failed, int &, int &number_successful) |
int | main (int argc, char *argv[]) |
static bool | compare_box (const double *expected_min, const double *expected_max, const double *actual_min, const double *actual_max) |
static int | get_entities (FBiGeom_Instance geom, int entity_type, std::vector< iBase_EntityHandle > &entities_out, iBase_TagHandle id_tag=0, std::vector< int > *ids_out=0) |
static int | check_firmness (FBiGeom_Instance geom, const std::vector< iBase_EntityHandle > &entities, const std::vector< int > &ids, iBase_TagHandle firmness_tag, const char *expected_value, const char *ent_type_str) |
static int | count_num_with_tag (FBiGeom_Instance geom, const std::vector< iBase_EntityHandle > &ents, iBase_TagHandle tag) |
Definition at line 135 of file testSmooth2.cpp.
#define ARRAY_INOUT | ( | A | ) | A.ptr(), &( A ).capacity(), &( A ).size() |
Definition at line 134 of file testSmooth2.cpp.
#define CHECK | ( | STR | ) | if( err != iBase_SUCCESS ) return print_error( STR, err, geom, __FILE__, __LINE__ ) |
Definition at line 27 of file testSmooth2.cpp.
Referenced by main(), and shutdown_test2().
#define STRINGIFY | ( | S | ) | XSTRINGIFY( S ) |
Definition at line 30 of file testSmooth2.cpp.
Referenced by main().
#define XSTRINGIFY | ( | S | ) | #S |
Definition at line 31 of file testSmooth2.cpp.
typedef iBase_EntityHandle GentityHandle |
Definition at line 48 of file testSmooth2.cpp.
Definition at line 49 of file testSmooth2.cpp.
typedef iBase_TagHandle TagHandle |
Definition at line 47 of file testSmooth2.cpp.
bool booleans_test | ( | FBiGeom_Instance | geom | ) |
static int check_firmness | ( | FBiGeom_Instance | geom, |
const std::vector< iBase_EntityHandle > & | entities, | ||
const std::vector< int > & | ids, | ||
iBase_TagHandle | firmness_tag, | ||
const char * | expected_value, | ||
const char * | ent_type_str | ||
) | [static] |
Definition at line 1455 of file testSmooth2.cpp.
References FBiGeom_getArrData, iBase_FAILURE, and iBase_SUCCESS.
{
const int firmness_size = 4;
std::vector< char > firmness( firmness_size * entities.size() );
char* byte_ptr = &firmness[0];
int err, junk1 = firmness.size(), junk2 = entities.size() * firmness_size;
FBiGeom_getArrData( geom, &entities[0], entities.size(), firmness_tag, (void**)&byte_ptr, &junk1, &junk2, &err );
if( iBase_SUCCESS != err ) return err;
bool all_correct = true;
for( unsigned i = 0; i < entities.size(); ++i )
if( std::string( &firmness[firmness_size * i], firmness_size ) != expected_value ) all_correct = false;
if( !all_correct )
{
std::cout << "ERROR: Expected \"" << expected_value << "\" firmness "
<< "for all " << ent_type_str << "." << std::endl;
std::cout << "ID Actual " << std::endl;
for( unsigned i = 0; i < entities.size(); ++i )
std::cout << std::setw( 2 ) << ids[i] << " " << std::string( &firmness[firmness_size * i], firmness_size )
<< std::endl;
return iBase_FAILURE;
}
return iBase_SUCCESS;
}
static bool compare_box | ( | const double * | expected_min, |
const double * | expected_max, | ||
const double * | actual_min, | ||
const double * | actual_max | ||
) | [static] |
Definition at line 1244 of file testSmooth2.cpp.
{
bool same = true;
double dtol = 1.0e-6;
for( int i = 0; i < 3; ++i )
{
if( expected_min[i] < actual_min[i] - dtol || expected_min[i] * 10 > actual_min[i] ||
expected_max[i] > actual_max[i] + dtol || expected_max[i] * 10 < actual_max[i] )
same = false;
}
return same;
}
bool construct_test | ( | FBiGeom_Instance | geom | ) |
static int count_num_with_tag | ( | FBiGeom_Instance | geom, |
const std::vector< iBase_EntityHandle > & | ents, | ||
iBase_TagHandle | tag | ||
) | [static] |
Definition at line 1487 of file testSmooth2.cpp.
References FBiGeom_getData, FBiGeom_getTagSizeBytes, iBase_SUCCESS, and iBase_TAG_NOT_FOUND.
{
int err, bytes;
FBiGeom_getTagSizeBytes( geom, tag, &bytes, &err );
if( iBase_SUCCESS != err ) return -1;
std::vector< char > data( bytes );
int success_count = 0;
for( size_t i = 0; i < ents.size(); ++i )
{
char* ptr = &data[0];
int junk1 = bytes, junk2;
FBiGeom_getData( geom, ents[i], tag, (void**)&ptr, &junk1, &junk2, &err );
if( iBase_TAG_NOT_FOUND == err ) continue;
if( iBase_SUCCESS != err ) return -1;
++success_count;
}
return success_count;
}
void FBiGeom_dtor2 | ( | FBiGeom_Instance | instance, |
int * | err | ||
) |
Definition at line 119 of file FBiGeom_MOAB.cpp.
References FBE_cast(), moab::FBEngine::get_gtt(), and iBase_SUCCESS.
Referenced by shutdown_test2().
{
moab::FBEngine* fbe = FBE_cast( instance );
if( fbe )
{
moab::GeomTopoTool* gtt = fbe->get_gtt();
if( gtt ) delete gtt;
delete fbe;
}
MBiGeom** mbigeom = reinterpret_cast< MBiGeom** >( &instance );
if( *mbigeom ) delete *mbigeom;
*err = iBase_SUCCESS;
}
void FBiGeom_newGeomFromMesh | ( | iMesh_Instance | mesh, |
iBase_EntitySetHandle | set, | ||
const char * | options, | ||
FBiGeom_Instance * | geom, | ||
int * | err, | ||
int | options_len | ||
) |
Definition at line 94 of file FBiGeom_MOAB.cpp.
References geom, iBase_SUCCESS, moab::FBEngine::Init(), MBiMesh::mbImpl, and mesh.
Referenced by main().
{
MBiMesh* mbimesh = reinterpret_cast< MBiMesh* >( mesh );
moab::Interface* mbi = mbimesh->mbImpl;
moab::EntityHandle rootSet = reinterpret_cast< moab::EntityHandle >( set );
moab::GeomTopoTool* gtt = new moab::GeomTopoTool( mbi, true, rootSet );
bool smooth = false; // decide from options
char smth[] = "SMOOTH;";
const char* res = strstr( options, smth );
if( res != NULL ) smooth = true;
moab::FBEngine* fbe = new moab::FBEngine( mbi, gtt, smooth );
MBiGeom** mbigeom = reinterpret_cast< MBiGeom** >( geom );
*mbigeom = NULL;
*mbigeom = new MBiGeom( mbimesh, fbe );
// will do now the initialization of the engine;
// heavy duty computation
fbe->Init();
*err = iBase_SUCCESS;
}
bool gentityset_test | ( | FBiGeom_Instance | geom, |
bool | , | ||
bool | |||
) |
bool geometry_evaluation_test | ( | FBiGeom_Instance | geom | ) |
static int get_entities | ( | FBiGeom_Instance | geom, |
int | entity_type, | ||
std::vector< iBase_EntityHandle > & | entities_out, | ||
iBase_TagHandle | id_tag = 0 , |
||
std::vector< int > * | ids_out = 0 |
||
) | [static] |
Definition at line 1423 of file testSmooth2.cpp.
References FBiGeom_getEntities, FBiGeom_getIntArrData, FBiGeom_getNumOfType, FBiGeom_getRootSet, and iBase_SUCCESS.
{
int err, num;
iBase_EntitySetHandle root;
FBiGeom_getRootSet( geom, &root, &err );
if( iBase_SUCCESS != err ) return err;
FBiGeom_getNumOfType( geom, root, entity_type, &num, &err );
if( iBase_SUCCESS != err ) return err;
entities_out.resize( num );
int junk1 = entities_out.size(), junk2;
iBase_EntityHandle* junk_ptr = &entities_out[0];
;
FBiGeom_getEntities( geom, root, entity_type, &junk_ptr, &junk1, &junk2, &err );
if( iBase_SUCCESS != err ) return err;
assert( num == junk1 && num == junk2 );
if( !ids_out ) return iBase_SUCCESS;
ids_out->resize( num );
int* int_ptr = &( *ids_out )[0];
FBiGeom_getIntArrData( geom, &entities_out[0], num, id_tag, &int_ptr, &junk1, &junk2, &err );
if( iBase_SUCCESS != err ) return err;
assert( num == junk1 && num == junk2 );
return iBase_SUCCESS;
}
void handle_error_code | ( | const bool | result, |
int & | number_failed, | ||
int & | , | ||
int & | number_successful | ||
) |
Definition at line 156 of file testSmooth2.cpp.
{
if( result )
{
std::cout << "Success";
number_successful++;
}
else
{
std::cout << "Failure";
number_failed++;
}
}
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 170 of file testSmooth2.cpp.
References CHECK, FBiGeom_newGeomFromMesh(), geom, geometry_evaluation_test(), handle_error_code(), iBase_SUCCESS, iMesh_createEntSet, iMesh_dtor, iMesh_load, iMesh_newMesh, mesh, normals_test(), ray_test(), root_set, shutdown_test2(), smooth_test(), STRINGIFY, tags_test(), and topology_adjacencies_test().
{
std::string filename = STRINGIFY( MESHDIR ) "/shell.h5m";
if( argc == 1 )
{
std::cout << "Using default input file: " << filename << std::endl;
}
else if( argc == 2 )
{
filename = argv[1];
}
else
{
std::cerr << "Usage: " << argv[0] << " [geom_filename]" << std::endl;
return 1;
}
int err;
int number_tests = 0;
int number_tests_successful = 0;
int number_tests_not_implemented = 0;
int number_tests_failed = 0;
// initialize the FBiGeom, in a different way
iMesh_Instance mesh = NULL;
FBiGeom_Instance geom;
iMesh_newMesh( NULL, &mesh, &err, 0 );
if( err != iBase_SUCCESS )
std::cerr << " Error code: " << err << " At : " << __FILE__ << ':' << __LINE__ << std::endl;
iBase_EntitySetHandle root_set;
iMesh_createEntSet( mesh, 0, &root_set, &err );
if( err != iBase_SUCCESS )
std::cerr << " Error code: " << err << " failed to create a model set"
<< " At : " << __FILE__ << ':' << __LINE__ << std::endl;
iMesh_load( mesh, root_set, filename.c_str(), NULL, &err, filename.length(), 0 );
if( err != iBase_SUCCESS )
std::cerr << " Error code: " << err << " failed load the file"
<< " At : " << __FILE__ << ':' << __LINE__ << std::endl;
std::string opts( "SMOOTH;" );
// new constructor
FBiGeom_newGeomFromMesh( mesh, root_set, opts.c_str(), &geom, &err, opts.length() );
CHECK( "Interface initialization didn't work properly." );
// Print out Header information
std::cout << "\n\nITAPS GEOMETRY INTERFACE TEST PROGRAM:\n\n";
// gLoad test
bool result;
std::cout << " Smooth faceting load and initialization: \n";
result = smooth_test( filename, geom );
handle_error_code( result, number_tests_failed, number_tests_not_implemented, number_tests_successful );
number_tests++;
std::cout << "\n";
// tags test
std::cout << " tags: ";
result = tags_test( geom );
handle_error_code( result, number_tests_failed, number_tests_not_implemented, number_tests_successful );
number_tests++;
std::cout << "\n";
/*
// gentitysets test
std::cout << " gentity sets: ";
result = gentityset_test(geom, false, false);
handle_error_code(result, number_tests_failed,
number_tests_not_implemented,
number_tests_successful);
number_tests++;
std::cout << "\n";
*/
// topology adjacencies test
std::cout << " topology adjacencies: ";
result = topology_adjacencies_test( geom );
handle_error_code( result, number_tests_failed, number_tests_not_implemented, number_tests_successful );
number_tests++;
std::cout << "\n";
// geometry evaluation test
std::cout << " geometry evaluation: \n";
result = geometry_evaluation_test( geom );
handle_error_code( result, number_tests_failed, number_tests_not_implemented, number_tests_successful );
number_tests++;
std::cout << "\n";
// normals evaluation test
std::cout << " normals geometry evaluation: \n";
result = normals_test( geom );
handle_error_code( result, number_tests_failed, number_tests_not_implemented, number_tests_successful );
number_tests++;
std::cout << "\n";
// ray tracing test
std::cout << " ray intersection test: \n";
result = ray_test( geom );
handle_error_code( result, number_tests_failed, number_tests_not_implemented, number_tests_successful );
number_tests++;
std::cout << "\n";
/*
// construct test
std::cout << " construct: ";
result = construct_test(geom);
handle_error_code(result, number_tests_failed,
number_tests_not_implemented,
number_tests_successful);
number_tests++;
std::cout << "\n";
// primitives test
std::cout << " primitives: ";
result = primitives_test(geom);
handle_error_code(result, number_tests_failed,
number_tests_not_implemented,
number_tests_successful);
number_tests++;
std::cout << "\n";
// transforms test
std::cout << " transforms: ";
result = transforms_test(geom);
handle_error_code(result, number_tests_failed,
number_tests_not_implemented,
number_tests_successful);
number_tests++;
std::cout << "\n";
// booleans test
std::cout << " booleans: ";
result = booleans_test(geom);
handle_error_code(result, number_tests_failed,
number_tests_not_implemented,
number_tests_successful);
number_tests++;
std::cout << "\n";
#if defined(HAVE_ACIS) && !defined(FORCE_OCC)
std::cout << " mesh size: ";
result = mesh_size_test(geom);
handle_error_code(result, number_tests_failed,
number_tests_not_implemented,
number_tests_successful);
number_tests++;
std::cout << "\n";
// save entset test
std::cout << " save entset: ";
result = save_entset_test(geom);
handle_error_code(result, number_tests_failed,
number_tests_not_implemented,
number_tests_successful);
number_tests++;
std::cout << "\n";
#endif
*/
// shutdown test
std::cout << " shutdown: ";
std::string engine_opt;
result = shutdown_test2( geom, engine_opt );
handle_error_code( result, number_tests_failed, number_tests_not_implemented, number_tests_successful );
number_tests++;
std::cout << "\n";
// shutdown imesh instance too
iMesh_dtor( mesh, &err );
CHECK( "shutdown imesh error" );
// summary
std::cout << "\nTSTT TEST SUMMARY: \n"
<< " Number Tests: " << number_tests << "\n"
<< " Number Successful: " << number_tests_successful << "\n"
<< " Number Not Implemented: " << number_tests_not_implemented << "\n"
<< " Number Failed: " << number_tests_failed << "\n\n"
<< std::endl;
return number_tests_failed;
}
bool mesh_size_test | ( | FBiGeom_Instance | geom | ) |
bool normals_test | ( | FBiGeom_Instance | geom | ) |
bool primitives_test | ( | FBiGeom_Instance | geom | ) |
static bool print_error | ( | const char * | desc, |
int | err, | ||
FBiGeom_Instance | geom, | ||
const char * | file, | ||
int | line | ||
) | [static] |
Definition at line 33 of file testSmooth2.cpp.
References buffer, and FBiGeom_getDescription.
{
char buffer[1024];
FBiGeom_getDescription( geom, buffer, sizeof( buffer ) );
buffer[sizeof( buffer ) - 1] = '\0';
std::cerr << "ERROR: " << desc << std::endl
<< " Error code: " << err << std::endl
<< " Error desc: " << buffer << std::endl
<< " At : " << file << ':' << line << std::endl;
return false; // must always return false or CHECK macro will break
}
bool ray_test | ( | FBiGeom_Instance | geom | ) |
bool save_entset_test | ( | FBiGeom_Instance | geom | ) |
bool shutdown_test2 | ( | FBiGeom_Instance | geom, |
std::string & | engine_opt | ||
) |
Definition at line 1611 of file testSmooth2.cpp.
References CHECK, and FBiGeom_dtor2().
Referenced by main().
{
int err;
// test shutdown2
FBiGeom_dtor2( geom, &err );
CHECK( "Interface destruction didn't work properly." );
// FBiGeom_newGeom(engine_opt.c_str(), &geom, &err, engine_opt.length());
// CHECK( "Interface re-construction didn't work properly." );
//
// FBiGeom_dtor(geom, &err);
// CHECK( "2nd Interface destruction didn't work properly." );
return true;
}
bool smooth_test | ( | const std::string & | filename, |
FBiGeom_Instance | geom | ||
) |
bool tag_get_set_test | ( | FBiGeom_Instance | geom | ) |
bool tag_info_test | ( | FBiGeom_Instance | geom | ) |
bool tags_test | ( | FBiGeom_Instance | geom | ) |
bool topology_adjacencies_test | ( | FBiGeom_Instance | geom | ) |
bool transforms_test | ( | FBiGeom_Instance | geom | ) |