diff --git a/source/RobotAPI/libraries/armem_robot_mapping/aron_conversions.h b/source/RobotAPI/libraries/armem_robot_mapping/aron_conversions.h index 7e0d690a48da10f3d07290f6bf32281251a877e5..7ecffc237d480fd33c30226ef7f1cf02c09308de 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/aron_conversions.h +++ b/source/RobotAPI/libraries/armem_robot_mapping/aron_conversions.h @@ -63,7 +63,7 @@ namespace armarx inline aron::datanavigator::NDArrayNavigatorPtr toAron(const LaserScan& laserScan) { - return aron::datanavigator::NDArrayNavigator::FromVector(laserScan); + return aron::converter::AronVectorConverter::ConvertFromVector(laserScan); } diff --git a/source/RobotAPI/libraries/aron/converter/common/VectorConverter.h b/source/RobotAPI/libraries/aron/converter/common/VectorConverter.h index 17475a3b9df0f39ee10e82443f24e5251db63c58..78cce4a1a7d2d9b6d9f5fc9a1f156683c67c0d71 100644 --- a/source/RobotAPI/libraries/aron/converter/common/VectorConverter.h +++ b/source/RobotAPI/libraries/aron/converter/common/VectorConverter.h @@ -39,7 +39,7 @@ namespace armarx::aron::converter { public: AronVectorConverter() = delete; - + template<typename T> static std::vector<T> ConvertToVector(const datanavigator::NDArrayNavigatorPtr& nav) { @@ -47,16 +47,16 @@ namespace armarx::aron::converter const auto& dims = nav->getDimensions(); - if(dims.size() != 2) + if (dims.size() != 2) { throw error::AronException("AronVectorConverter", "ConvertToVector", "The NDArray must have two dimensions.", nav->getPath()); } - - if(dims.at(1) != sizeof(T)) + + if (dims.at(1) != sizeof(T)) { throw error::AronException("AronVectorConverter", "ConvertToVector", "Dimension 1 of the array has to match the element size.", nav->getPath()); } - + const int size = std::accumulate(std::begin(dims), std::end(dims), 1, std::multiplies<>()); std::vector<T> v(dims.at(0)); @@ -64,6 +64,19 @@ namespace armarx::aron::converter return v; } + + + template<typename T> + static datanavigator::NDArrayNavigatorPtr ConvertFromVector(const std::vector<T>& data) + { + datanavigator::NDArrayNavigatorPtr ndArr(new datanavigator::NDArrayNavigator); + + ndArr->setDimensions({static_cast<int>(data.size()), sizeof(T)}); + ndArr->setData(sizeof(T) * data.size(), reinterpret_cast <const unsigned char* >(data.data())); + + return ndArr; + } + }; } // namespace armarx::aron::converter diff --git a/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h b/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h index 5e447b102d889f2ba91d95e23a60a89028cf1ff4..c6d12cc6b896a53a8b28cbc2e6c134fae58612f0 100644 --- a/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h +++ b/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h @@ -68,31 +68,10 @@ namespace armarx::aron::datanavigator /// Return dimensions in a readable string such as "(2, 3, 4)". static std::string DimensionsToString(const std::vector<int>& dimensions); - // TODO(fabian.reister): move this to VectorConverter? - template<typename T> - static NDArrayNavigatorPtr FromVector(const std::vector<T>& data) - { - NDArrayNavigatorPtr ndArr(new NDArrayNavigator); - - ndArr->setDimensions({static_cast<int>(data.size()), sizeof(T)}); - ndArr->setData(data); - - return ndArr; - } - - // public member functions unsigned char* getData() const; void setData(unsigned int, const unsigned char*); - // TODO(fabian.reister): move this to VectorConverter? - template<typename T> - void setData(const std::vector<T>& data) - { - using E = typename decltype(aron->data)::value_type; - setData(sizeof(T) * data.size(), reinterpret_cast < const E* >(data.data())); - } - std::vector<int> getDimensions() const; void setDimensions(const std::vector<int>&); void addDimension(int);