Branch data Line data Source code
1 : : #ifndef MESHKIT_SIZINGFUNCTION_HPP
2 : : #define MESHKIT_SIZINGFUNCTION_HPP
3 : :
4 : : #include "meshkit/Types.hpp"
5 : : #include "meshkit/MKCore.hpp"
6 : :
7 : : namespace MeshKit {
8 : :
9 : : class MKCore;
10 : :
11 : : /** \class SizingFunction SizingFunction.hpp "meshkit/SizingFunction.hpp"
12 : : * \brief A sizing function used with meshing algorithms
13 : : *
14 : : * SizingFunction stores a \em requested size or # intervals; the actual # intervals, computed or
15 : : * just requested, is stored on the ModelEnt. The Firmness is also stored on the ModelEnt.
16 : : * This class manages its own adding to MBCore, so no need for caller to do that.
17 : : */
18 : : class SizingFunction
19 : : {
20 : : public:
21 : :
22 : : //! Copy constructor
23 : : SizingFunction(const SizingFunction &sf);
24 : :
25 : : //! Constructor
26 : : SizingFunction(MKCore *mkcore, int num_int = -1, double int_size = -1.0);
27 : :
28 : : //! Destructor
29 : : virtual ~SizingFunction();
30 : :
31 : : //! Get core instance
32 : : MKCore *mk_core() const;
33 : :
34 : : /** \brief Get size with optional location
35 : : * \param xyz Location where size is requested
36 : : * \return Size at requested location
37 : : */
38 : : virtual double size(double *xyz = NULL) const;
39 : :
40 : : //! Get the number of intervals (assuming they were set somehow somewhere else)
41 : : virtual int intervals() const;
42 : :
43 : : /** \brief Set the number of intervals
44 : : * \param num_int Intervals to be set
45 : : */
46 : : virtual void intervals(int num_int);
47 : :
48 : : //! Return index of this sf in MKCore
49 : : virtual unsigned int core_index() const;
50 : :
51 : : // a marker for var size or not; by default false; implemented by SizingFunctionVar -> true
52 : 614 : virtual bool variable() {return false;}
53 : :
54 : : protected:
55 : : //! MKCore associated with this SizingFunction
56 : : MKCore *mkCore;
57 : :
58 : : //! Interval setting
59 : : int thisInterval;
60 : :
61 : : //! Size setting
62 : : double thisSize;
63 : :
64 : : //! This SizingFunction's index in MKCore
65 : : unsigned int coreIndex;
66 : :
67 : : private:
68 : :
69 : : };
70 : :
71 : : //! Copy constructor
72 : : inline SizingFunction::SizingFunction(const SizingFunction &sf)
73 : : : mkCore(sf.mk_core()), thisInterval(sf.intervals()), thisSize(sf.size())
74 : : {
75 : : coreIndex = mkCore->add_sizing_function(this);
76 : : }
77 : :
78 : : //! Constructor
79 : 38 : inline SizingFunction::SizingFunction(MKCore *mkcore, int num_int, double int_size)
80 : 38 : : mkCore(mkcore), thisInterval(num_int), thisSize(int_size)
81 : : {
82 : 38 : coreIndex = mkCore->add_sizing_function(this);
83 : 38 : }
84 : :
85 : : //! Destructor
86 : 44 : inline SizingFunction::~SizingFunction()
87 : : {
88 : 34 : mkCore->remove_sizing_function(coreIndex, false);
89 [ - + ]: 44 : }
90 : :
91 : : //! Get core instance
92 : : inline MKCore *SizingFunction::mk_core() const
93 : : {
94 : : return mkCore;
95 : : }
96 : :
97 : : //! Get size with optional location
98 : 10039 : inline double SizingFunction::size(double *) const
99 : : {
100 : 10039 : return thisSize;
101 : : }
102 : :
103 : : //! Get the number of intervals (assuming they were set somehow somewhere else)
104 : 468 : inline int SizingFunction::intervals() const
105 : : {
106 : 468 : return thisInterval;
107 : : }
108 : :
109 : : //! Set the number of intervals
110 : 0 : inline void SizingFunction::intervals(int num_int)
111 : : {
112 : 0 : thisInterval = num_int;
113 : 0 : }
114 : :
115 : : //! Return index of this sf in MKCore
116 : 36 : inline unsigned int SizingFunction::core_index() const
117 : : {
118 : 36 : return coreIndex;
119 : : }
120 : :
121 : : } // namespace MeshKit
122 : :
123 : : #endif
124 : :
125 : :
|