moab
MergeMesh.hpp
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines