@@ -123,6 +123,92 @@ double timediff(const timeval& start, const timeval& stop){
123
123
return (stop.tv_sec - start.tv_sec ) + 1.0e-6 *(stop.tv_usec - start.tv_usec );
124
124
}
125
125
126
+ void boundingBoxTest (OcTree* tree){
127
+ // tree->expand();
128
+ // test complete tree (should be equal to no bbx)
129
+ OcTreeKey bbxMinKey, bbxMaxKey;
130
+ double temp_x,temp_y,temp_z;
131
+ tree->getMetricMin (temp_x,temp_y,temp_z);
132
+ octomap::point3d bbxMin (temp_x,temp_y,temp_z);
133
+
134
+ tree->getMetricMax (temp_x,temp_y,temp_z);
135
+ octomap::point3d bbxMax (temp_x,temp_y,temp_z);
136
+
137
+ EXPECT_TRUE (tree->coordToKeyChecked (bbxMin, bbxMinKey));
138
+ EXPECT_TRUE (tree->coordToKeyChecked (bbxMax, bbxMaxKey));
139
+
140
+ OcTree::leaf_bbx_iterator it_bbx = tree->begin_leafs_bbx (bbxMinKey,bbxMaxKey);
141
+ EXPECT_TRUE (it_bbx == tree->begin_leafs_bbx (bbxMinKey,bbxMaxKey));
142
+ OcTree::leaf_bbx_iterator end_bbx = tree->end_leafs_bbx ();
143
+ EXPECT_TRUE (end_bbx == tree->end_leafs_bbx ());
144
+
145
+ OcTree::leaf_iterator it = tree->begin_leafs ();
146
+ EXPECT_TRUE (it == tree->begin_leafs ());
147
+ OcTree::leaf_iterator end = tree->end_leafs ();
148
+ EXPECT_TRUE (end == tree->end_leafs ());
149
+
150
+
151
+ for ( ; it!= end && it_bbx != end_bbx; ++it, ++it_bbx){
152
+ EXPECT_TRUE (it == it_bbx);
153
+ }
154
+ EXPECT_TRUE (it == end && it_bbx == end_bbx);
155
+
156
+
157
+ // now test an actual bounding box:
158
+ tree->expand (); // (currently only works properly for expanded tree (no multires)
159
+ bbxMin = point3d (-1 , -1 , - 1 );
160
+ bbxMax = point3d (3 , 2 , 1 );
161
+ EXPECT_TRUE (tree->coordToKeyChecked (bbxMin, bbxMinKey));
162
+ EXPECT_TRUE (tree->coordToKeyChecked (bbxMax, bbxMaxKey));
163
+
164
+ typedef unordered_ns::unordered_map<OcTreeKey, double , OcTreeKey::KeyHash> KeyVolumeMap;
165
+
166
+ KeyVolumeMap bbxVoxels;
167
+
168
+ size_t count = 0 ;
169
+ for (OcTree::leaf_bbx_iterator it = tree->begin_leafs_bbx (bbxMinKey,bbxMaxKey), end=tree->end_leafs_bbx ();
170
+ it!= end; ++it)
171
+ {
172
+ count++;
173
+ OcTreeKey currentKey = it.getKey ();
174
+ // leaf is actually a leaf:
175
+ EXPECT_FALSE (it->hasChildren ());
176
+
177
+ // leaf exists in tree:
178
+ OcTreeNode* node = tree->search (currentKey);
179
+ EXPECT_TRUE (node);
180
+ EXPECT_EQ (node, &(*it));
181
+ // all leafs are actually in the bbx:
182
+ for (unsigned i = 0 ; i < 3 ; ++i){
183
+ // if (!(currentKey[i] >= bbxMinKey[i] && currentKey[i] <= bbxMaxKey[i])){
184
+ // std::cout << "Key failed: " << i << " " << currentKey[i] << " "<< bbxMinKey[i] << " "<< bbxMaxKey[i]
185
+ // << "size: "<< it.getSize()<< std::endl;
186
+ // }
187
+ EXPECT_TRUE (currentKey[i] >= bbxMinKey[i] && currentKey[i] <= bbxMaxKey[i]);
188
+ }
189
+
190
+ bbxVoxels.insert (std::pair<OcTreeKey,double >(currentKey, it.getSize ()));
191
+ }
192
+ EXPECT_EQ (bbxVoxels.size (), count);
193
+ std::cout << " Bounding box traversed (" << count << " leaf nodes)\n\n " ;
194
+
195
+
196
+ // compare with manual BBX check on all leafs:
197
+ for (OcTree::leaf_iterator it = tree->begin (), end=tree->end (); it!= end; ++it) {
198
+ OcTreeKey key = it.getKey ();
199
+ if ( key[0 ] >= bbxMinKey[0 ] && key[0 ] <= bbxMaxKey[0 ]
200
+ && key[1 ] >= bbxMinKey[1 ] && key[1 ] <= bbxMaxKey[1 ]
201
+ && key[2 ] >= bbxMinKey[2 ] && key[2 ] <= bbxMaxKey[2 ])
202
+ {
203
+ KeyVolumeMap::iterator bbxIt = bbxVoxels.find (key);
204
+ EXPECT_FALSE (bbxIt == bbxVoxels.end ());
205
+ EXPECT_TRUE (key == bbxIt->first );
206
+ EXPECT_EQ (it.getSize (), bbxIt->second );
207
+ }
208
+
209
+ }
210
+ }
211
+
126
212
int main (int argc, char ** argv) {
127
213
128
214
@@ -166,7 +252,6 @@ int main(int argc, char** argv) {
166
252
}
167
253
EXPECT_EQ (iteratedNodes, 0 );
168
254
169
-
170
255
for (OcTree::leaf_iterator l_it = emptyTree.begin_leafs (maxDepth), l_end=emptyTree.end_leafs (); l_it!= l_end; ++l_it){
171
256
iteratedNodes++;
172
257
}
@@ -313,90 +398,11 @@ int main(int argc, char** argv) {
313
398
/* *
314
399
* bounding box tests
315
400
*/
316
- // tree->expand();
317
- // test complete tree (should be equal to no bbx)
318
- OcTreeKey bbxMinKey, bbxMaxKey;
319
- double temp_x,temp_y,temp_z;
320
- tree->getMetricMin (temp_x,temp_y,temp_z);
321
- octomap::point3d bbxMin (temp_x,temp_y,temp_z);
322
-
323
- tree->getMetricMax (temp_x,temp_y,temp_z);
324
- octomap::point3d bbxMax (temp_x,temp_y,temp_z);
325
-
326
- EXPECT_TRUE (tree->coordToKeyChecked (bbxMin, bbxMinKey));
327
- EXPECT_TRUE (tree->coordToKeyChecked (bbxMax, bbxMaxKey));
328
-
329
- OcTree::leaf_bbx_iterator it_bbx = tree->begin_leafs_bbx (bbxMinKey,bbxMaxKey);
330
- EXPECT_TRUE (it_bbx == tree->begin_leafs_bbx (bbxMinKey,bbxMaxKey));
331
- OcTree::leaf_bbx_iterator end_bbx = tree->end_leafs_bbx ();
332
- EXPECT_TRUE (end_bbx == tree->end_leafs_bbx ());
333
-
334
- OcTree::leaf_iterator it = tree->begin_leafs ();
335
- EXPECT_TRUE (it == tree->begin_leafs ());
336
- OcTree::leaf_iterator end = tree->end_leafs ();
337
- EXPECT_TRUE (end == tree->end_leafs ());
338
-
339
-
340
- for ( ; it!= end && it_bbx != end_bbx; ++it, ++it_bbx){
341
- EXPECT_TRUE (it == it_bbx);
342
- }
343
- EXPECT_TRUE (it == end && it_bbx == end_bbx);
344
-
345
-
346
- // now test an actual bounding box:
347
- tree->expand (); // (currently only works properly for expanded tree (no multires)
348
- bbxMin = point3d (-1 , -1 , - 1 );
349
- bbxMax = point3d (3 , 2 , 1 );
350
- EXPECT_TRUE (tree->coordToKeyChecked (bbxMin, bbxMinKey));
351
- EXPECT_TRUE (tree->coordToKeyChecked (bbxMax, bbxMaxKey));
352
-
353
- typedef unordered_ns::unordered_map<OcTreeKey, double , OcTreeKey::KeyHash> KeyVolumeMap;
354
-
355
- KeyVolumeMap bbxVoxels;
401
+ boundingBoxTest (tree);
402
+ boundingBoxTest (&emptyTree);
356
403
357
- count = 0 ;
358
- for (OcTree::leaf_bbx_iterator it = tree->begin_leafs_bbx (bbxMinKey,bbxMaxKey), end=tree->end_leafs_bbx ();
359
- it!= end; ++it)
360
- {
361
- count++;
362
- OcTreeKey currentKey = it.getKey ();
363
- // leaf is actually a leaf:
364
- EXPECT_FALSE (it->hasChildren ());
365
-
366
- // leaf exists in tree:
367
- OcTreeNode* node = tree->search (currentKey);
368
- EXPECT_TRUE (node);
369
- EXPECT_EQ (node, &(*it));
370
- // all leafs are actually in the bbx:
371
- for (unsigned i = 0 ; i < 3 ; ++i){
372
- // if (!(currentKey[i] >= bbxMinKey[i] && currentKey[i] <= bbxMaxKey[i])){
373
- // std::cout << "Key failed: " << i << " " << currentKey[i] << " "<< bbxMinKey[i] << " "<< bbxMaxKey[i]
374
- // << "size: "<< it.getSize()<< std::endl;
375
- // }
376
- EXPECT_TRUE (currentKey[i] >= bbxMinKey[i] && currentKey[i] <= bbxMaxKey[i]);
377
- }
378
-
379
- bbxVoxels.insert (std::pair<OcTreeKey,double >(currentKey, it.getSize ()));
380
- }
381
- EXPECT_EQ (bbxVoxels.size (), count);
382
- std::cout << " Bounding box traversed (" << count << " leaf nodes)\n\n " ;
383
-
384
-
385
- // compare with manual BBX check on all leafs:
386
- for (OcTree::leaf_iterator it = tree->begin (), end=tree->end (); it!= end; ++it) {
387
- OcTreeKey key = it.getKey ();
388
- if ( key[0 ] >= bbxMinKey[0 ] && key[0 ] <= bbxMaxKey[0 ]
389
- && key[1 ] >= bbxMinKey[1 ] && key[1 ] <= bbxMaxKey[1 ]
390
- && key[2 ] >= bbxMinKey[2 ] && key[2 ] <= bbxMaxKey[2 ])
391
- {
392
- KeyVolumeMap::iterator bbxIt = bbxVoxels.find (key);
393
- EXPECT_FALSE (bbxIt == bbxVoxels.end ());
394
- EXPECT_TRUE (key == bbxIt->first );
395
- EXPECT_EQ (it.getSize (), bbxIt->second );
396
- }
397
-
398
- }
399
404
405
+
400
406
// test tree with one node:
401
407
OcTree simpleTree (0.01 );
402
408
simpleTree.updateNode (point3d (10 , 10 , 10 ), 5 .0f );
0 commit comments