moab
|
00001 #ifndef MERGEMESH_HPP 00002 #define MERGEMESH_HPP 00003 00004 #include "moab/Interface.hpp" 00005 #include "moab/Range.hpp" 00006 00007 namespace moab { 00008 00009 class AdaptiveKDTree; 00010 00011 class MergeMesh 00012 { 00013 public: 00014 /* \brief Constructor 00015 */ 00016 MergeMesh(moab::Interface *mbImpl, bool printErrorIn = true); 00017 00018 /* \brief Destructor 00019 */ 00020 virtual ~MergeMesh(); 00021 00022 /* \brief Merge vertices in elements passed in 00023 */ 00024 moab::ErrorCode merge_entities(moab::EntityHandle *elems, 00025 int elems_size, 00026 const double merge_tol, 00027 const int do_merge = true, 00028 const int update_sets = false, 00029 moab::Tag merge_tag = 0, 00030 bool do_higher_dim = true); 00031 00032 moab::ErrorCode merge_entities(moab::Range &elems, 00033 const double merge_tol, 00034 const int do_merge = true, 00035 const int update_sets = false, 00036 moab::Tag merge_tag = 0, 00037 bool do_higher_dim = true); 00038 00039 //Identify higher dimension to be merged 00040 moab::ErrorCode merge_higher_dimensions(moab::Range &elems); 00041 00042 //- perform the actual merge 00043 moab::ErrorCode perform_merge(moab::Tag merged_to); 00044 private: 00045 //iMesh_Instance imeshImpl; 00046 00047 double mergeTol, mergeTolSq; 00048 00049 moab::Tag mergeTag; 00050 00051 //- given a kdtree, set tag on vertices in leaf nodes with vertices 00052 //- to which they should be merged 00053 moab::ErrorCode find_merged_to(moab::EntityHandle &tree_root, 00054 moab::AdaptiveKDTree &tree, 00055 moab::Tag merged_to); 00056 00057 moab::Interface *mbImpl; 00058 00059 //- the tag pointing to the entity to which an entity will be merged 00060 moab::Tag mbMergeTag; 00061 00062 //- entities which will go away after the merge 00063 moab::Range deadEnts; 00064 00065 //Allow a warning to be suppressed when no merging is done 00066 bool printError; 00067 }; 00068 00069 inline MergeMesh::MergeMesh(Interface *impl, bool printErrorIn) 00070 : mbImpl(impl), printError(printErrorIn) 00071 { 00072 } 00073 00074 inline MergeMesh::~MergeMesh() 00075 { 00076 if (mbMergeTag) mbImpl->tag_delete(mbMergeTag); 00077 } 00078 00079 } 00080 00081 #endif 00082