OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
Rotation.cpp
Go to the documentation of this file.
4
5#include <regex>
6
7namespace mslang {
8 void Rotation::print(int indentwidth) {
9 std::string indent(indentwidth, ' ');
10 std::string indent2(indentwidth + 8, ' ');
11 std::cout << indent << "rotate, " << std::endl;
12 func_m->print(indentwidth + 8);
13 std::cout << ",\n" << indent2 << "angle: " << angle_m;
14 }
15
16 void Rotation::applyRotation(std::vector<std::shared_ptr<Base> >& bfuncs) {
17 AffineTransformation rotation(
18 Vector_t<double, 3>(cos(angle_m), sin(angle_m), 0.0),
19 Vector_t<double, 3>(-sin(angle_m), cos(angle_m), 0.0));
20
21 const unsigned int size = bfuncs.size();
22
23 for (unsigned int j = 0; j < size; ++j) {
24 std::shared_ptr<Base>& obj = bfuncs[j];
25 obj->trafo_m = obj->trafo_m.mult(rotation);
26
27 if (!obj->divisor_m.empty()) applyRotation(obj->divisor_m);
28 }
29 }
30
31 void Rotation::apply(std::vector<std::shared_ptr<Base> >& bfuncs) {
32 func_m->apply(bfuncs);
33 applyRotation(bfuncs);
34 }
35
36 bool Rotation::parse_detail(iterator& it, const iterator& end, Function*& fun) {
37 Rotation* rot = static_cast<Rotation*>(fun);
38 if (!parse(it, end, rot->func_m)) return false;
39
40 ArgumentExtractor arguments(std::string(++it, end));
41 try {
42 rot->angle_m = parseMathExpression(arguments.get(0));
43 } catch (std::runtime_error& e) {
44 std::cout << e.what() << std::endl;
45 return false;
46 }
47
48 it += (arguments.getLengthConsumed() + 1);
49
50 return true;
51 }
52} // namespace mslang
ippl::Vector< T, Dim > Vector_t
double parseMathExpression(const std::string &str)
Definition matheval.cpp:4
std::string::iterator iterator
Definition MSLang.h:14
std::string get(unsigned int i) const
unsigned int getLengthConsumed() const
virtual void apply(std::vector< std::shared_ptr< Base > > &bfuncs)=0
static bool parse(iterator &it, const iterator &end, Function *&fun)
Definition MSLang.cpp:47
virtual void print(int indent)=0
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Rotation.cpp:36
virtual void apply(std::vector< std::shared_ptr< Base > > &bfuncs)
Definition Rotation.cpp:31
void applyRotation(std::vector< std::shared_ptr< Base > > &bfuncs)
Definition Rotation.cpp:16
virtual void print(int indentwidth)
Definition Rotation.cpp:8
double angle_m
Definition Rotation.h:9
Function * func_m
Definition Rotation.h:8