MOAB: Mesh Oriented datABase
(version 5.4.1)
|
test mbground, a test for the FBEngine class, which is providing iGeom like methods to a MOAB db More...
#include "moab/Core.hpp"
#include <iostream>
#include <fstream>
#include <set>
#include <algorithm>
#include <vector>
#include <iterator>
#include <iomanip>
#include <cassert>
#include <cstring>
#include <cmath>
#include "moab/FBEngine.hpp"
#include "moab/GeomTopoTool.hpp"
#include "TestUtil.hpp"
Go to the source code of this file.
Functions | |
ErrorCode | split_test_across () |
ErrorCode | verify_split () |
void | handle_error_code (ErrorCode rv, int &number_failed, int &number_successful) |
int | main (int argc, char *argv[]) |
Variables | |
std::string | filename |
std::string | filename_out |
std::string | polyline_file_name |
double | min_dot = 0.8 |
bool | keep_output |
int | number_tests_successful = 0 |
int | number_tests_failed = 0 |
test mbground, a test for the FBEngine class, which is providing iGeom like methods to a MOAB db
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
Definition in file mbground_test.cpp.
void handle_error_code | ( | ErrorCode | rv, |
int & | number_failed, | ||
int & | number_successful | ||
) |
Definition at line 44 of file mbground_test.cpp.
References MB_SUCCESS.
{ if( rv == MB_SUCCESS ) { std::cout << "Success"; number_successful++; } else { std::cout << "Failure"; number_failed++; } }
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 58 of file mbground_test.cpp.
References ErrorCode, filename, filename_out, handle_error_code(), moab::FBEngine::Init(), keep_output, moab::Interface::load_file(), mb, MB_CHK_SET_ERR, mbcore, min_dot, number_tests_failed, number_tests_successful, polyline_file_name, split_test_across(), and verify_split().
{ filename = TestDir + "unittest/PB.h5m"; polyline_file_name = TestDir + "unittest/polyline.txt"; filename_out = "PB_ground.h5m"; min_dot = 0.8; keep_output = false; if( argc == 1 ) { std::cout << "Using default input " << filename << " " << polyline_file_name << " " << min_dot << " " << filename_out << std::endl; std::cout << " default output file: " << filename_out << " will be deleted \n"; } else if( argc == 5 ) { filename = argv[1]; polyline_file_name = argv[2]; min_dot = atof( argv[3] ); filename_out = argv[4]; keep_output = true; } else { std::cerr << "Usage: " << argv[0] << " [geom_filename] [polygon_file] [min_dot] [output_file]" << std::endl; return 1; } Core mbcore; Interface* mb = &mbcore; ErrorCode rval = mb->load_file( filename.c_str() );MB_CHK_SET_ERR( rval, "failed to load input file" ); FBEngine* pFacet = new FBEngine( mb, NULL, true ); // smooth facetting, no OBB tree passed if( !pFacet ) return 1; // error // should the init be part of constructor or not? // this is where the obb tree is constructed, and smooth faceting initialized, too. rval = pFacet->Init();MB_CHK_SET_ERR( rval, "failed to initialize smoothing" ); delete pFacet; pFacet = NULL; // split_test_across std::cout << " split across test: "; rval = split_test_across(); handle_error_code( rval, number_tests_failed, number_tests_successful ); std::cout << "\n"; std::cout << " verify split "; rval = verify_split(); handle_error_code( rval, number_tests_failed, number_tests_successful ); std::cout << "\n"; // when we are done, remove modified file if we want to if( !keep_output ) { remove( filename_out.c_str() ); } return number_tests_failed; }
Definition at line 124 of file mbground_test.cpp.
References moab::FBEngine::delete_smooth_tags(), ErrorCode, filename, filename_out, moab::FBEngine::getEntities(), moab::FBEngine::getRootSet(), moab::FBEngine::Init(), moab::Interface::load_file(), mb, MB_CHK_ERR, MB_CHK_SET_ERR, mbcore, nr, polyline_file_name, root_set, moab::Range::size(), moab::FBEngine::split_surface_with_direction(), and moab::Interface::write_file().
Referenced by main().
{ Core mbcore; Interface* mb = &mbcore; ErrorCode rval = mb->load_file( filename.c_str() );MB_CHK_SET_ERR( rval, "failed to load already modified file" ); FBEngine* pFacet = new FBEngine( mb, NULL, true ); rval = pFacet->Init();MB_CHK_SET_ERR( rval, "failed to initialize smoothing" ); EntityHandle root_set; rval = pFacet->getRootSet( &root_set );MB_CHK_SET_ERR( rval, "ERROR : getRootSet failed!" ); int top = 2; // iBase_FACE; Range faces; rval = pFacet->getEntities( root_set, top, faces );MB_CHK_SET_ERR( rval, "Failed to get faces in split_test." ); if( faces.size() != 1 ) { std::cout << "num faces model:" << faces.size() << "\n"; return MB_FAILURE; // } // check only the second face EntityHandle second_face = faces[0]; // use the polyPB.txt file to get the trimming polygon ; // read the file with the polygon user data std::ifstream datafile( polyline_file_name.c_str(), std::ifstream::in ); if( !datafile ) { std::cout << "can't read file\n"; return MB_FAILURE; } // char temp[100]; double direction[3]; // normalized double gridSize; datafile.getline( temp, 100 ); // first line // get direction and mesh size along polygon segments, from file sscanf( temp, " %lf %lf %lf %lf ", direction, direction + 1, direction + 2, &gridSize ); // NORMALIZE(direction);// just to be sure std::vector< double > xyz; while( !datafile.eof() ) { datafile.getline( temp, 100 ); // int id = 0; double x, y, z; int nr = sscanf( temp, "%lf %lf %lf", &x, &y, &z ); if( nr == 3 ) { xyz.push_back( x ); xyz.push_back( y ); xyz.push_back( z ); } } int sizePolygon = (int)xyz.size() / 3; if( sizePolygon < 2 ) { std::cerr << " Not enough points in the polygon" << std::endl; return MB_FAILURE; } EntityHandle newFace; // this test is with a "grounding" line // the second face should be the one that we want for test rval = pFacet->split_surface_with_direction( second_face, xyz, direction, /*closed*/ 0, /*min_dot */ 0.8, newFace );MB_CHK_ERR( rval ); // save a new database, with 3 faces, eventually pFacet->delete_smooth_tags(); delete pFacet; pFacet = NULL; // try not to write the obb tree rval = mb->write_file( filename_out.c_str() );MB_CHK_SET_ERR( rval, "Writing mesh file failed\n" ); return rval; }
Definition at line 206 of file mbground_test.cpp.
References moab::GeomTopoTool::check_model(), ErrorCode, filename_out, moab::Interface::load_file(), mb, MB_CHK_SET_ERR, and MB_SUCCESS.
Referenced by main().
{ Interface* mb = new Core(); ErrorCode rval = mb->load_file( filename_out.c_str() );MB_CHK_SET_ERR( rval, "Loading mesh file failed\n" ); moab::GeomTopoTool gTopoTool( mb, true, 0, true, false ); if( !gTopoTool.check_model() ) return MB_FAILURE; delete mb; return MB_SUCCESS; }
std::string filename |
Definition at line 31 of file mbground_test.cpp.
std::string filename_out |
Definition at line 32 of file mbground_test.cpp.
bool keep_output |
Definition at line 35 of file mbground_test.cpp.
double min_dot = 0.8 |
Definition at line 34 of file mbground_test.cpp.
int number_tests_failed = 0 |
Definition at line 37 of file mbground_test.cpp.
int number_tests_successful = 0 |
Definition at line 36 of file mbground_test.cpp.
std::string polyline_file_name |
Definition at line 33 of file mbground_test.cpp.
Referenced by main(), and split_test_across().