OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
Translation.cpp
Go to the documentation of this file.
4
5#include <iostream>
6#include <memory>
7#include <string>
8#include <vector>
9
10namespace mslang {
11 void Translation::print(int indentwidth) {
12 std::string indent(indentwidth, ' ');
13 std::string indent2(indentwidth + 8, ' ');
14 std::cout << indent << "translate, " << std::endl;
15 func_m->print(indentwidth + 8);
16 std::cout << ",\n"
17 << indent2 << "dx: " << shiftx_m << ", \n"
18 << indent2 << "dy: " << shifty_m;
19 }
20
21 void Translation::applyTranslation(std::vector<std::shared_ptr<Base> > &bfuncs) {
22 AffineTransformation shift(Vector_t({1.0, 0.0, -shiftx_m}),
23 Vector_t({0.0, 1.0, -shifty_m}));
24
25 const unsigned int size = bfuncs.size();
26 for (unsigned int j = 0; j < size; ++ j) {
27 std::shared_ptr<Base> &obj = bfuncs[j];
28 obj->trafo_m = obj->trafo_m.mult(shift);
29
30 if (!obj->divisor_m.empty())
31 applyTranslation(obj->divisor_m);
32 }
33 }
34
35 void Translation::apply(std::vector<std::shared_ptr<Base> > &bfuncs) {
36 func_m->apply(bfuncs);
37 applyTranslation(bfuncs);
38 }
39
41 Translation *trans = static_cast<Translation*>(fun);
42 if (!parse(it, end, trans->func_m)) return false;
43
44 ArgumentExtractor arguments(std::string(++ it, end));
45 try {
46 trans->shiftx_m = parseMathExpression(arguments.get(0));
47 trans->shifty_m = parseMathExpression(arguments.get(1));
48 } catch (std::runtime_error &e) {
49 std::cout << e.what() << std::endl;
50 return false;
51 }
52
53 it += (arguments.getLengthConsumed() + 1);
54
55 return true;
56 }
57}
PartBunchBase< T, Dim >::ConstIterator end(PartBunchBase< T, Dim > const &bunch)
double parseMathExpression(const std::string &str)
Definition matheval.cpp:4
std::string::iterator iterator
Definition MSLang.h:13
virtual void apply(std::vector< std::shared_ptr< Base > > &bfuncs)=0
static bool parse(iterator &it, const iterator &end, Function *&fun)
Definition MSLang.cpp:46
virtual void print(int indent)=0
std::string get(unsigned int i) const
unsigned int getLengthConsumed() const
virtual void apply(std::vector< std::shared_ptr< Base > > &bfuncs)
void applyTranslation(std::vector< std::shared_ptr< Base > > &bfuncs)
virtual void print(int indentwidth)
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Vektor< double, 3 > Vector_t
Definition Vektor.h:6