Code-Eli  0.3.6
piecewise_creator_base.hpp
Go to the documentation of this file.
1 /*********************************************************************************
2 * Copyright (c) 2013 David D. Marshall <ddmarsha@calpoly.edu>
3 *
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * David D. Marshall - initial code and implementation
11 ********************************************************************************/
12 
13 #ifndef eli_geom_surface_piecewise_creator_base_hpp
14 #define eli_geom_surface_piecewise_creator_base_hpp
15 
16 #include <list>
17 #include <iterator>
18 
19 #include "eli/code_eli.hpp"
20 
21 #include "eli/util/tolerance.hpp"
22 
25 
26 namespace eli
27 {
28  namespace geom
29  {
30  namespace surface
31  {
32  template<typename data__, unsigned short dim__, typename tol__>
34  {
35  public:
36  typedef data__ data_type;
37  typedef Eigen::Matrix<data_type, 1, dim__> point_type;
38  typedef typename point_type::Index index_type;
39  typedef tol__ tolerance_type;
41 
42  public:
43  piecewise_creator_base(const data_type &uu0, const data_type &vv0)
44  : du(0), dv(0), u0(uu0), v0(vv0)
45  {
46  }
48  : du(pcb.du), dv(pcb.dv), u0(pcb.u0), v0(pcb.v0) {}
50 
51  index_type get_number_u_segments() const
52  {
53  return static_cast<index_type>(du.size());
54  }
55 
56  index_type get_number_v_segments() const
57  {
58  return static_cast<index_type>(dv.size());
59  }
60 
61  data_type get_u0() const {return u0;}
62  data_type get_v0() const {return v0;}
63 
64  data_type get_segment_du(const index_type &i) const
65  {
66  if ((i<0) || (i>=static_cast<index_type>(du.size())))
67  {
68  assert(false);
69  return static_cast<data_type>(-1);
70  }
71 
72  return du[i];
73  }
74 
75  data_type get_segment_dv(const index_type &i) const
76  {
77  if ((i<0) || (i>=get_number_v_segments()))
78  {
79  assert(false);
80  return static_cast<data_type>(-1);
81  }
82 
83  return dv[i];
84  }
85 
86  virtual bool create(piecewise_surface_type &ps) const = 0;
87 
88  protected:
89 
90  typedef std::vector<data_type> param_container_type;
91  typedef typename param_container_type::const_iterator param_iterator;
92 
93  param_iterator du_begin() const {return du.begin();}
94  param_iterator du_end() const {return du.end();}
95  param_iterator dv_begin() const {return dv.begin();}
96  param_iterator dv_end() const {return dv.end();}
97 
98  void set_number_u_segments(const index_type &ns)
99  {
100  size_t old_size(du.size());
101 
102  du.resize(ns);
103  for (index_type i=old_size; i<ns; ++i)
104  du[i]=1;
105  }
106  void set_number_v_segments(const index_type &ns)
107  {
108  size_t old_size(dv.size());
109 
110  dv.resize(ns);
111  for (index_type i=old_size; i<ns; ++i)
112  dv[i]=1;
113  }
114 
117  void insert_du(const data_type &duu, const index_type &i)
118  {
119  if ((duu>0) && (i>=0) && (i<static_cast<index_type>(du.size())))
120  {
121  du.insert(du.begin()+i, duu);
122  }
123  else
124  {
125  assert(false);
126  }
127  }
130  void insert_dv(const data_type &dvv, const index_type &j)
131  {
132  if ((dvv>0) && (j>=0) && (j<static_cast<index_type>(dv.size())))
133  {
134  dv.insert(dv.begin()+j, dvv);
135  }
136  else
137  {
138  assert(false);
139  }
140  }
141 
142  void append_du(const data_type &duu)
143  {
144  if (duu>0)
145  {
146  du.append(duu);
147  }
148  else
149  {
150  assert(false);
151  }
152  }
153 
154  void append_dv(const data_type &dvv)
155  {
156  if (dvv>0)
157  {
158  dv.append(dvv);
159  }
160  else
161  {
162  assert(false);
163  }
164  }
165 
166  void set_initial_u(const data_type &uu0) {u0=uu0;}
167  void set_initial_v(const data_type &vv0) {v0=vv0;}
168 
169  void set_du(const data_type &duu, const index_type &i)
170  {
171  if ((duu>0) && (i>=0) && (i<static_cast<index_type>(du.size())))
172  du[i]=duu;
173  else
174  assert(false);
175  }
176  void set_dv(const data_type &dvv, const index_type &j)
177  {
178  if ((dvv>0) && (j>=0) && (j<static_cast<index_type>(dv.size())))
179  dv[j]=dvv;
180  else
181  assert(false);
182  }
183 
184  private:
185  param_container_type du, dv;
186  data_type u0, v0;
187  };
188  }
189  }
190 }
191 #endif
Eigen::Matrix< data_type, 1, dim__ > point_type
Definition: piecewise_creator_base.hpp:37
index_type get_number_u_segments() const
Definition: piecewise_creator_base.hpp:51
Definition: math.hpp:20
data__ data_type
Definition: piecewise_creator_base.hpp:36
piecewise_creator_base(const piecewise_creator_base< data_type, dim__, tolerance_type > &pcb)
Definition: piecewise_creator_base.hpp:47
virtual bool create(piecewise_surface_type &ps) const =0
void insert_dv(const data_type &dvv, const index_type &j)
Definition: piecewise_creator_base.hpp:130
data_type get_u0() const
Definition: piecewise_creator_base.hpp:61
data_type get_v0() const
Definition: piecewise_creator_base.hpp:62
void set_initial_u(const data_type &uu0)
Definition: piecewise_creator_base.hpp:166
void append_du(const data_type &duu)
Definition: piecewise_creator_base.hpp:142
void set_du(const data_type &duu, const index_type &i)
Definition: piecewise_creator_base.hpp:169
param_iterator dv_begin() const
Definition: piecewise_creator_base.hpp:95
Definition: piecewise.hpp:37
Definition: piecewise_creator_base.hpp:33
tol__ tolerance_type
Definition: piecewise_creator_base.hpp:39
param_iterator du_end() const
Definition: piecewise_creator_base.hpp:94
param_iterator du_begin() const
Definition: piecewise_creator_base.hpp:93
void insert_du(const data_type &duu, const index_type &i)
Definition: piecewise_creator_base.hpp:117
void set_number_v_segments(const index_type &ns)
Definition: piecewise_creator_base.hpp:106
virtual ~piecewise_creator_base()
Definition: piecewise_creator_base.hpp:49
index_type get_number_v_segments() const
Definition: piecewise_creator_base.hpp:56
void set_dv(const data_type &dvv, const index_type &j)
Definition: piecewise_creator_base.hpp:176
param_container_type dv
Definition: piecewise_creator_base.hpp:185
param_iterator dv_end() const
Definition: piecewise_creator_base.hpp:96
param_container_type::const_iterator param_iterator
Definition: piecewise_creator_base.hpp:91
data_type v0
Definition: piecewise_creator_base.hpp:186
void set_number_u_segments(const index_type &ns)
Definition: piecewise_creator_base.hpp:98
data_type u0
Definition: piecewise_creator_base.hpp:186
point_type::Index index_type
Definition: piecewise_creator_base.hpp:38
param_container_type du
Definition: piecewise_creator_base.hpp:185
void set_initial_v(const data_type &vv0)
Definition: piecewise_creator_base.hpp:167
piecewise_creator_base(const data_type &uu0, const data_type &vv0)
Definition: piecewise_creator_base.hpp:43
piecewise< bezier, data_type, dim__, tolerance_type > piecewise_surface_type
Definition: piecewise_creator_base.hpp:40
void append_dv(const data_type &dvv)
Definition: piecewise_creator_base.hpp:154
std::vector< data_type > param_container_type
Definition: piecewise_creator_base.hpp:90
data_type get_segment_dv(const index_type &i) const
Definition: piecewise_creator_base.hpp:75
data_type get_segment_du(const index_type &i) const
Definition: piecewise_creator_base.hpp:64