diff --git a/source/RobotAPI/libraries/core/EigenHelpers.h b/source/RobotAPI/libraries/core/EigenHelpers.h new file mode 100644 index 0000000000000000000000000000000000000000..742bcca37d57df9541eebf9eb508197a46bed251 --- /dev/null +++ b/source/RobotAPI/libraries/core/EigenHelpers.h @@ -0,0 +1,117 @@ +/* + * This file is part of ArmarX. + * + * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), + * Karlsruhe Institute of Technology (KIT), all rights reserved. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @author Simon Ottenhaus (simon dot ottenhaus at kit dot edu) + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#pragma once + +#include <eigen3/Eigen/Core> + +namespace armarx +{ + + template<class ScalarType> + inline Eigen::Matrix<ScalarType, Eigen::Dynamic, 1> MakeVectorX(std::initializer_list<ScalarType> ilist) + { + Eigen::Matrix<ScalarType, Eigen::Dynamic, 1> r(ilist.size()); + std::size_t i = 0; + for (const auto e : ilist) + { + r(i++) = e; + } + return r; + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(std::initializer_list<float> ilist) + { + return MakeVectorX<float>(ilist); + } + + template<class ScalarType, class...Ts> + inline Eigen::Matrix<ScalarType, Eigen::Dynamic, 1> MakeVectorXWarnNarrowing(Ts&& ...ts) + { + return MakeVectorX<ScalarType>(std::initializer_list<ScalarType> {std::forward<Ts>(ts)...}); + } + template<class ScalarType, class...Ts> + inline Eigen::Matrix<ScalarType, Eigen::Dynamic, 1> MakeVectorXIgnoreNarrowing(Ts&& ...ts) + { + return MakeVectorX<ScalarType>(std::initializer_list<ScalarType> {static_cast<ScalarType>(std::forward<Ts>(ts))...}); + } + template<class ScalarType, class...Ts> + inline Eigen::Matrix<ScalarType, Eigen::Dynamic, 1> MakeVectorX(Ts&& ...ts) + { + return MakeVectorX<ScalarType>(std::initializer_list<ScalarType> {static_cast<ScalarType>(std::forward<Ts>(ts))...}); + } + + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(std::vector<float> vec) + { + Eigen::Matrix<float, Eigen::Dynamic, 1> r(vec.size()); + std::size_t i = 0; + for (const auto e : vec) + { + r(i++) = e; + } + return r; + } + + /* Qt-Creator does not support variable amount of parameters. The following methods are only for Qt-Creator. */ + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1) + { + return MakeVectorX<float>(f1); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2) + { + return MakeVectorX<float>(f1, f2); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3) + { + return MakeVectorX<float>(f1, f2, f3); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3, float f4) + { + return MakeVectorX<float>(f1, f2, f3, f4); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3, float f4, float f5) + { + return MakeVectorX<float>(f1, f2, f3, f4, f5); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3, float f4, float f5, float f6) + { + return MakeVectorX<float>(f1, f2, f3, f4, f5, f6); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3, float f4, float f5, float f6, float f7) + { + return MakeVectorX<float>(f1, f2, f3, f4, f5, f6, f7); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8) + { + return MakeVectorX<float>(f1, f2, f3, f4, f5, f6, f7, f8); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9) + { + return MakeVectorX<float>(f1, f2, f3, f4, f5, f6, f7, f8, f9); + } + inline Eigen::Matrix<float, Eigen::Dynamic, 1> MakeVectorXf(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10) + { + return MakeVectorX<float>(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10); + } + + +}