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