16 : boundaries(boundaries) {}
21 std::vector<IndicesOfBlock> blocks;
22 if (boundaries.empty()) {
26 auto it = boundaries.begin();
29 while (it != boundaries.end()) {
30 blocks.emplace_back(start, *it);
38 return boundaries.empty() ? 0 : boundaries.size() - 1;
41template <
typename Scalar>
43 std::vector<TransformationType> transformation_type)
44 : matrix(std::move(matrix)), transformation_type(std::move(transformation_type)) {}
46template <
typename Scalar>
51 std::vector<TransformationType> transformation_type)
52 : matrix(std::move(matrix)), transformation_type(std::move(transformation_type)) {}
57template <
typename Scalar>
60 const std::array<real_t, 3> &to_y_axis)
const {
62 return this->get_rotator(euler_zyz_angles[0], euler_zyz_angles[1], euler_zyz_angles[2]);
67#define INSTANTIATE_TRANSFORMATION(SCALAR) \
68 template struct Transformation<SCALAR>; \
69 template class TransformationBuilderInterface<SCALAR>;
75#undef INSTANTIATE_TRANSFORMATION
IndicesOfBlocksCreator(std::initializer_list< size_t > boundaries)
void add(size_t boundary)
std::vector< IndicesOfBlock > create() const
std::array< Real, 3 > get_euler_angles(std::array< Real, 3 > to_z_axis, std::array< Real, 3 > to_y_axis)
Extract the Euler angles alpha, beta, gamma.
IndicesOfBlock(size_t start, size_t end)