Skip to content

Commit f1c06bb

Browse files
committed
get_occupied_voxel_centers and std::vector with allocator
1 parent 788dabe commit f1c06bb

File tree

4 files changed

+87
-1
lines changed

4 files changed

+87
-1
lines changed

pcl.pyx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,3 +565,11 @@ cdef class OctreePointCloud:
565565
"""
566566
def is_voxel_occupied_at_point(self, double point_x, double point_y, double point_z):
567567
return self.me.isVoxelOccupiedAtPoint(point_x, point_y, point_z)
568+
569+
"""
570+
Get list of centers of all occupied voxels.
571+
"""
572+
def get_occupied_voxel_centers(self):
573+
cdef cpp.AlignedPointTVector_t points_v
574+
cdef int num = self.me.getOccupiedVoxelCenters (points_v)
575+
return [(points_v[i].x, points_v[i].y, points_v[i].z) for i in range(num)]

pcl_defs.pxd

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ from libcpp.string cimport string
33
from libcpp cimport bool
44

55
from shared_ptr cimport shared_ptr
6+
from vector cimport vector as vector2
67

78
cdef extern from "pcl/point_cloud.h" namespace "pcl":
89
cdef cppclass PointCloud[T]:
@@ -72,6 +73,13 @@ cdef extern from "pcl/search/kdtree.h" namespace "pcl::search":
7273
cdef cppclass KdTree[T]:
7374
KdTree()
7475

76+
cdef extern from "Eigen/src/Core/util/Memory.h" namespace "Eigen":
77+
cdef cppclass aligned_allocator[T]:
78+
pass
79+
80+
ctypedef aligned_allocator[PointXYZ] aligned_allocator_t
81+
ctypedef vector2[PointXYZ, aligned_allocator_t] AlignedPointTVector_t
82+
7583
cdef extern from "pcl/octree/octree_pointcloud.h" namespace "pcl::octree":
7684
cdef cppclass OctreePointCloud[T]:
7785
OctreePointCloud(double)
@@ -81,7 +89,7 @@ cdef extern from "pcl/octree/octree_pointcloud.h" namespace "pcl::octree":
8189
void addPointsFromInputCloud()
8290
void deleteTree()
8391
bool isVoxelOccupiedAtPoint(double, double, double)
84-
int getOccupiedVoxelCenters(vector[PointXYZ])
92+
int getOccupiedVoxelCenters(AlignedPointTVector_t)
8593
void deleteVoxelAtPoint(PointXYZ)
8694

8795
ctypedef OctreePointCloud[PointXYZ] OctreePointCloud_t

tests/test.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,3 +301,5 @@ def testLoad(self):
301301
self.assertTrue(rs)
302302
rs = self.t.is_voxel_occupied_at_point(0.5, 0.5, 0.5)
303303
self.assertFalse(rs)
304+
305+
self.assertEqual(len(self.t.get_occupied_voxel_centers()), 44)

vector.pxd

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
cdef extern from "<vector>" namespace "std":
2+
cdef cppclass vector[T, A]:
3+
cppclass iterator:
4+
T& operator*() nogil
5+
iterator operator++() nogil
6+
iterator operator--() nogil
7+
bint operator==(iterator) nogil
8+
bint operator!=(iterator) nogil
9+
bint operator<(iterator) nogil
10+
bint operator>(iterator) nogil
11+
bint operator<=(iterator) nogil
12+
bint operator>=(iterator) nogil
13+
cppclass reverse_iterator:
14+
T& operator*() nogil
15+
iterator operator++() nogil
16+
iterator operator--() nogil
17+
bint operator==(reverse_iterator) nogil
18+
bint operator!=(reverse_iterator) nogil
19+
bint operator<(reverse_iterator) nogil
20+
bint operator>(reverse_iterator) nogil
21+
bint operator<=(reverse_iterator) nogil
22+
bint operator>=(reverse_iterator) nogil
23+
#cppclass const_iterator(iterator):
24+
# pass
25+
#cppclass const_reverse_iterator(reverse_iterator):
26+
# pass
27+
vector() nogil except +
28+
vector(vector&) nogil except +
29+
vector(size_t) nogil except +
30+
vector(size_t, T&) nogil except +
31+
#vector[input_iterator](input_iterator, input_iterator)
32+
T& operator[](size_t) nogil
33+
#vector& operator=(vector&)
34+
bint operator==(vector&, vector&) nogil
35+
bint operator!=(vector&, vector&) nogil
36+
bint operator<(vector&, vector&) nogil
37+
bint operator>(vector&, vector&) nogil
38+
bint operator<=(vector&, vector&) nogil
39+
bint operator>=(vector&, vector&) nogil
40+
void assign(size_t, T&) nogil
41+
#void assign[input_iterator](input_iterator, input_iterator)
42+
T& at(size_t) nogil
43+
T& back() nogil
44+
iterator begin() nogil
45+
#const_iterator begin()
46+
size_t capacity() nogil
47+
void clear() nogil
48+
bint empty() nogil
49+
iterator end() nogil
50+
#const_iterator end()
51+
iterator erase(iterator) nogil
52+
iterator erase(iterator, iterator) nogil
53+
T& front() nogil
54+
iterator insert(iterator, T&) nogil
55+
void insert(iterator, size_t, T&) nogil
56+
void insert(iterator, iterator, iterator) nogil
57+
size_t max_size() nogil
58+
void pop_back() nogil
59+
void push_back(T&) nogil
60+
reverse_iterator rbegin() nogil
61+
#const_reverse_iterator rbegin()
62+
reverse_iterator rend() nogil
63+
#const_reverse_iterator rend()
64+
void reserve(size_t) nogil
65+
void resize(size_t) nogil
66+
void resize(size_t, T&) nogil
67+
size_t size() nogil
68+
void swap(vector&) nogil

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy