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> ©Sets,
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
|