Add support for accessing and modifying sensor data Array elements
This commit is contained in:
parent
e08b4e6cfd
commit
4da71fc39f
|
@ -103,6 +103,8 @@
|
|||
- `save_to_disk(path, color_converter=None)`
|
||||
- `__len__()`
|
||||
- `__iter__()`
|
||||
- `__getitem__(pos)`
|
||||
- `__setitem__(pos, color)`
|
||||
|
||||
## `carla.LidarMeasurement`
|
||||
|
||||
|
@ -115,6 +117,8 @@
|
|||
- `save_to_disk(path)`
|
||||
- `__len__()`
|
||||
- `__iter__()`
|
||||
- `__getitem__(pos)`
|
||||
- `__setitem__(pos, location)`
|
||||
|
||||
## `carla.VehicleControl`
|
||||
|
||||
|
|
|
@ -9,8 +9,9 @@
|
|||
#include "carla/Debug.h"
|
||||
#include "carla/sensor/SensorData.h"
|
||||
|
||||
#include <type_traits>
|
||||
#include <exception>
|
||||
#include <iterator>
|
||||
#include <type_traits>
|
||||
|
||||
namespace carla {
|
||||
namespace sensor {
|
||||
|
@ -24,9 +25,13 @@ namespace data {
|
|||
using value_type = T;
|
||||
using iterator = value_type *;
|
||||
using const_iterator = typename std::add_const<value_type>::type *;
|
||||
using size_type = typename std::iterator_traits<iterator>::difference_type;
|
||||
using pointer = typename std::iterator_traits<iterator>::pointer;
|
||||
using reference = typename std::iterator_traits<iterator>::reference;
|
||||
using reverse_iterator = std::reverse_iterator<iterator>;
|
||||
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
||||
using size_type = size_t;
|
||||
using pointer = value_type *;
|
||||
using const_pointer = typename std::add_const<value_type>::type *;
|
||||
using reference = value_type &;
|
||||
using const_reference = typename std::add_const<value_type>::type &;
|
||||
|
||||
iterator begin() {
|
||||
return reinterpret_cast<iterator>(_data.begin() + _offset);
|
||||
|
@ -52,6 +57,30 @@ namespace data {
|
|||
return cend();
|
||||
}
|
||||
|
||||
reverse_iterator rbegin() {
|
||||
return reverse_iterator(begin());
|
||||
}
|
||||
|
||||
const_reverse_iterator crbegin() const {
|
||||
return const_reverse_iterator(cbegin());
|
||||
}
|
||||
|
||||
const_reverse_iterator rbegin() const {
|
||||
return crbegin();
|
||||
}
|
||||
|
||||
reverse_iterator rend() {
|
||||
return reverse_iterator(end());
|
||||
}
|
||||
|
||||
const_reverse_iterator crend() const {
|
||||
return const_reverse_iterator(cend());
|
||||
}
|
||||
|
||||
const_reverse_iterator rend() const {
|
||||
return crend();
|
||||
}
|
||||
|
||||
bool empty() const {
|
||||
return begin() == end();
|
||||
}
|
||||
|
@ -68,12 +97,26 @@ namespace data {
|
|||
return begin();
|
||||
}
|
||||
|
||||
reference operator[](size_type i) {
|
||||
return data()[i];
|
||||
reference operator[](size_type pos) {
|
||||
return data()[pos];
|
||||
}
|
||||
|
||||
const reference operator[](size_type i) const {
|
||||
return data()[i];
|
||||
const_reference operator[](size_type pos) const {
|
||||
return data()[pos];
|
||||
}
|
||||
|
||||
reference at(size_type pos) {
|
||||
if (!(pos < size())) {
|
||||
throw std::out_of_range("Array index out of range");
|
||||
}
|
||||
return operator[](pos);
|
||||
}
|
||||
|
||||
const_reference at(size_type pos) const {
|
||||
if (!(pos < size())) {
|
||||
throw std::out_of_range("Array index out of range");
|
||||
}
|
||||
return operator[](pos);
|
||||
}
|
||||
|
||||
protected:
|
||||
|
@ -91,6 +134,7 @@ namespace data {
|
|||
DEBUG_ASSERT(_data.size() >= _offset);
|
||||
DEBUG_ASSERT((_data.size() - _offset) % sizeof(T) == 0u);
|
||||
_offset = offset;
|
||||
DEBUG_ASSERT(begin() <= end());
|
||||
}
|
||||
|
||||
const RawData &GetRawData() const {
|
||||
|
|
|
@ -117,6 +117,7 @@ static std::string SavePointCloudToDisk(T &self, std::string path) {
|
|||
void export_sensor_data() {
|
||||
using namespace boost::python;
|
||||
namespace cc = carla::client;
|
||||
namespace cr = carla::rpc;
|
||||
namespace cs = carla::sensor;
|
||||
namespace csd = carla::sensor::data;
|
||||
|
||||
|
@ -141,6 +142,12 @@ void export_sensor_data() {
|
|||
.def("save_to_disk", &SaveImageToDisk<csd::Image>, (arg("path"), arg("color_converter")=EColorConverter::None))
|
||||
.def("__len__", &csd::Image::size)
|
||||
.def("__iter__", iterator<csd::Image>())
|
||||
.def("__getitem__", +[](const csd::Image &self, size_t pos) -> csd::Color {
|
||||
return self.at(pos);
|
||||
})
|
||||
.def("__setitem__", +[](csd::Image &self, size_t pos, csd::Color color) {
|
||||
self.at(pos) = color;
|
||||
})
|
||||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
|
||||
|
@ -152,6 +159,12 @@ void export_sensor_data() {
|
|||
.def("save_to_disk", &SavePointCloudToDisk<csd::LidarMeasurement>, (arg("path")))
|
||||
.def("__len__", &csd::LidarMeasurement::size)
|
||||
.def("__iter__", iterator<csd::LidarMeasurement>())
|
||||
.def("__getitem__", +[](const csd::LidarMeasurement &self, size_t pos) -> cr::Location {
|
||||
return self.at(pos);
|
||||
})
|
||||
.def("__setitem__", +[](csd::LidarMeasurement &self, size_t pos, const cr::Location &point) {
|
||||
self.at(pos) = point;
|
||||
})
|
||||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue