LCOV - code coverage report
Current view: top level - algs/meshkit - CESets.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 15 15 100.0 %
Date: 2020-07-01 15:24:36 Functions: 10 10 100.0 %
Branches: 1 2 50.0 %

           Branch data     Line data    Source code
       1                 :            : #ifndef MESHKIT_CD_SETS_HPP
       2                 :            : #define MESHKIT_CD_SETS_HPP
       3                 :            : 
       4                 :            : #include "meshkitalgs_export.hpp"
       5                 :            : 
       6                 :            : #include <set>
       7                 :            : #include <string>
       8                 :            : #include <vector>
       9                 :            : 
      10                 :            : #include "meshkit/MKCore.hpp"
      11                 :            : 
      12                 :            : #include <iBase.h>
      13                 :            : #include <iMesh.h>
      14                 :            : 
      15                 :            : namespace MeshKit {
      16                 :            : 
      17                 :            : class MESHKITALGS_EXPORT CESets
      18                 :            : {
      19                 :            : public:
      20                 :            :   struct tag_data
      21                 :            :   {
      22                 :         15 :     tag_data(iMesh::TagHandle tag, char *value)
      23                 :         15 :       : tag(tag), value(value)
      24                 :         15 :     {}
      25                 :            : 
      26                 :            :     iMesh::TagHandle tag;
      27                 :            :     char *value;
      28                 :            :   };
      29                 :            : 
      30                 :            :   typedef std::vector<tag_data> tag_type;
      31                 :            :   typedef std::set<iMesh::EntitySetHandle> set_type;
      32                 :            :   typedef tag_type::iterator       tag_iterator;
      33                 :            :   typedef tag_type::const_iterator const_tag_iterator;
      34                 :            :   typedef set_type::iterator       set_iterator;
      35                 :            :   typedef set_type::const_iterator const_set_iterator;
      36                 :            : 
      37         [ +  - ]:         34 :   CESets(MKCore *mkcore) : mesh_(mkcore->imesh_instance())
      38                 :         17 :   {}
      39                 :            : 
      40                 :            :   ~CESets();
      41                 :            : 
      42                 :        114 :   iMesh * imesh_instance() const { return mesh_; }
      43                 :            : 
      44                 :          9 :   void add_set(iMesh::EntitySetHandle set)
      45                 :            :   {
      46                 :          9 :     sets_.insert(set);
      47                 :          9 :   }
      48                 :            : 
      49                 :            :   template <typename T>
      50                 :            :   void add_sets(T begin, T end)
      51                 :            :   {
      52                 :            :     sets_.insert(begin, end);
      53                 :            :   }
      54                 :            : 
      55                 :            :   void add_tag(iMesh::TagHandle tag_handle, const char *value = NULL);
      56                 :            :   void add_tag(const std::string &tag_name, const char *value = NULL);
      57                 :            :   void update_tagged_sets();
      58                 :            : 
      59                 :            :   void clear()
      60                 :            :   {
      61                 :            :     sets_.clear();
      62                 :            :   }
      63                 :            : 
      64                 :            :   tag_type & tags()             { return tags_; }
      65                 :            :   const tag_type & tags() const { return tags_; }
      66                 :         64 :   set_type & sets()             { return sets_; }
      67                 :          8 :   const set_type & sets() const { return sets_; }
      68                 :            : 
      69                 :            :   tag_iterator tbegin()             { return tags_.begin(); }
      70                 :         20 :   const_tag_iterator tbegin() const { return tags_.begin(); }
      71                 :            :   tag_iterator tend()               { return tags_.end(); }
      72                 :         28 :   const_tag_iterator tend() const   { return tags_.end(); }
      73                 :            :   set_iterator sbegin()             { return sets_.begin(); }
      74                 :         34 :   const_set_iterator sbegin() const { return sets_.begin(); }
      75                 :            :   set_iterator send()               { return sets_.end(); }
      76                 :         84 :   const_set_iterator send() const   { return sets_.end(); }
      77                 :            : 
      78                 :            : private:
      79                 :            :   iMesh *mesh_;
      80                 :            :   tag_type tags_;
      81                 :            :   set_type sets_;
      82                 :            : };
      83                 :            : 
      84                 :            : /**\brief Set the target sets for expand sets to be themselves
      85                 :            :  */
      86                 :            : void MESHKITALGS_EXPORT link_expand_sets(const CESets &ce_sets, iMesh::TagHandle local_tag);
      87                 :            : 
      88                 :            : /**\brief Add newly-created entities/sets to a collection of sets
      89                 :            :  *
      90                 :            :  * Given a collection of copy, expand, or extrude source sets and a tag, create 
      91                 :            :  * a destination (copy) set unless one already exists. Fill this set with any
      92                 :            :  * new entities/sets created from those in the source set.
      93                 :            :  * \param mesh the iMesh instance handle
      94                 :            :  * \param cesets a collection of source sets
      95                 :            :  * \param local_tag the tag relating source and target entities/sets
      96                 :            :  */
      97                 :            : void MESHKITALGS_EXPORT process_ce_sets(iMesh *mesh,
      98                 :            :                      const std::set<iMesh::EntitySetHandle> &cesets,
      99                 :            :                      iMesh::TagHandle local_tag);
     100                 :            : 
     101                 :            : /**\brief Tag a collection of copied sets
     102                 :            :  *
     103                 :            :  * Given a collection of source sets and a tag |copyTag| relating sources to
     104                 :            :  * destinations, apply a tag |tag| to the destination sets if the tag exists on
     105                 :            :  * the corresponding source.
     106                 :            :  * \param mesh the iMesh instance handle
     107                 :            :  * \param copyTag the tag relating sources and destinations
     108                 :            :  * \param copySets a collection of source sets
     109                 :            :  * \param tag the tag to set on the destinations
     110                 :            :  * \param tag_val if non-NULL, only set |tag| on the destination if the source's
     111                 :            :  *                tag matches this value
     112                 :            :  */
     113                 :            : void MESHKITALGS_EXPORT tag_copy_sets(iMesh *mesh, iMesh::TagHandle copyTag,
     114                 :            :                    const std::set<iMesh::EntitySetHandle> &copySets,
     115                 :            :                    iMesh::TagHandle tag, const char *tag_val);
     116                 :            : 
     117                 :            : /**\brief Tag a collection of copied sets
     118                 :            :  *
     119                 :            :  * Given a CESets instance and a tag |local_tag| relating sources to
     120                 :            :  * destinations, move the contents of the local tag to |copy_tag| and 
     121                 :            :  * apply the tags in CESets to the destination sets if the tag exists on the
     122                 :            :  * corresponding source.
     123                 :            :  * \param ce_sets the CESets to operate on
     124                 :            :  * \param local_tag the local tag relating copied sets with their originals
     125                 :            :  * \param copy_tag the copy tag to receive local_tag's data
     126                 :            :  */
     127                 :            : void MESHKITALGS_EXPORT tag_copy_sets(const CESets &ce_sets, iMesh::TagHandle local_tag,
     128                 :            :                    iMesh::TagHandle copy_tag);
     129                 :            : 
     130                 :            : } // namespace MeshKit
     131                 :            : #endif

Generated by: LCOV version 1.11