Open3D (C++ API)  0.18.0
Loading...
Searching...
No Matches
BoundingVolume.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2023 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include "open3d/core/Tensor.h"
16
17namespace open3d {
18namespace t {
19namespace geometry {
20
21class OrientedBoundingBox;
22
47public:
49 AxisAlignedBoundingBox(const core::Device &device = core::Device("CPU:0"));
50
60 AxisAlignedBoundingBox(const core::Tensor &min_bound,
61 const core::Tensor &max_bound);
62
63 virtual ~AxisAlignedBoundingBox() override {}
64
66 core::Device GetDevice() const override { return device_; }
67
69 core::Dtype GetDtype() const { return dtype_; }
70
77 bool copy = false) const;
78
81 return To(GetDevice(), /*copy=*/true);
82 }
83
84 AxisAlignedBoundingBox &Clear() override;
85
86 bool IsEmpty() const override { return Volume() == 0; }
87
94 void SetMinBound(const core::Tensor &min_bound);
95
102 void SetMaxBound(const core::Tensor &max_bound);
103
110 void SetColor(const core::Tensor &color);
111
112public:
114
116
117 core::Tensor GetColor() const { return color_; }
118
119 core::Tensor GetCenter() const { return (min_bound_ + max_bound_) * 0.5; }
120
131 bool relative = true);
132
145 double scale,
147
152
155
157 core::Tensor GetHalfExtent() const { return GetExtent() / 2; }
158
161 double GetMaxExtent() const {
162 return GetExtent().Max({0}).To(core::Float64).Item<double>();
163 }
164
167 double GetXPercentage(double x) const;
168
171 double GetYPercentage(double y) const;
172
175 double GetZPercentage(double z) const;
176
178 double Volume() const {
179 return GetExtent().Prod({0}).To(core::Float64).Item<double>();
180 }
181
186
191 const core::Tensor &points) const;
192
194 std::string ToString() const;
195
198
201
211 const core::Dtype &dtype = core::Float32,
212 const core::Device &device = core::Device("CPU:0"));
213
220
221protected:
232};
233
258public:
260 OrientedBoundingBox(const core::Device &device = core::Device("CPU:0"));
261
274 OrientedBoundingBox(const core::Tensor &center,
275 const core::Tensor &rotation,
276 const core::Tensor &extent);
277
278 virtual ~OrientedBoundingBox() override {}
279
281 core::Device GetDevice() const override { return device_; }
282
284 core::Dtype GetDtype() const { return dtype_; }
285
291 OrientedBoundingBox To(const core::Device &device, bool copy = false) const;
292
294 OrientedBoundingBox Clone() const { return To(GetDevice(), /*copy=*/true); }
295
296 OrientedBoundingBox &Clear() override;
297
298 bool IsEmpty() const override { return Volume() == 0; }
299
305 void SetCenter(const core::Tensor &center);
306
312 void SetRotation(const core::Tensor &rotation);
313
319 void SetExtent(const core::Tensor &extent);
320
325 void SetColor(const core::Tensor &color);
326
327public:
329
331
332 core::Tensor GetColor() const { return color_; }
333
334 core::Tensor GetCenter() const { return center_; }
335
337
338 core::Tensor GetExtent() const { return extent_; }
339
347 OrientedBoundingBox &Translate(const core::Tensor &translation,
348 bool relative = true);
349
359 const core::Tensor &rotation,
361
366 OrientedBoundingBox &Transform(const core::Tensor &transformation);
367
380 double scale,
382
384 double Volume() const {
385 return GetExtent().Prod({0}).To(core::Float64).Item<double>();
386 }
387
412
417 const core::Tensor &points) const;
418
420 std::string ToString() const;
421
424
427
434 const AxisAlignedBoundingBox &aabb);
435
444 const core::Dtype &dtype = core::Float32,
445 const core::Device &device = core::Device("CPU:0"));
446
461 bool robust = false);
462
463protected:
470};
471
472} // namespace geometry
473} // namespace t
474} // namespace open3d
math::float4 color
Definition LineSetBuffers.cpp:45
bool copy
Definition VtkUtils.cpp:73
Definition Device.h:18
Definition Dtype.h:20
Definition Tensor.h:32
Tensor Prod(const SizeVector &dims, bool keepdim=false) const
Definition Tensor.cpp:1229
Tensor Max(const SizeVector &dims, bool keepdim=false) const
Definition Tensor.cpp:1243
A bounding box that is aligned along the coordinate axes and defined by the min_bound and max_bound.
Definition BoundingVolume.h:160
A bounding box oriented along an arbitrary frame of reference.
Definition BoundingVolume.h:25
A bounding box that is aligned along the coordinate axes and defined by the min_bound and max_bound.
Definition BoundingVolume.h:46
double GetZPercentage(double z) const
Definition BoundingVolume.cpp:192
double Volume() const
Returns the volume of the bounding box.
Definition BoundingVolume.h:178
core::Tensor GetMinBound() const
Definition BoundingVolume.h:113
core::Dtype GetDtype() const
Returns the data type attribute of this AxisAlignedBoundingBox.
Definition BoundingVolume.h:69
static AxisAlignedBoundingBox FromLegacy(const open3d::geometry::AxisAlignedBoundingBox &box, const core::Dtype &dtype=core::Float32, const core::Device &device=core::Device("CPU:0"))
Definition BoundingVolume.cpp:265
void SetMinBound(const core::Tensor &min_bound)
Set the min bound of the box. If the data type of the given tensor differs from the data type of the ...
Definition BoundingVolume.cpp:73
core::Tensor GetBoxPoints() const
Returns the eight points that define the bounding box.
Definition BoundingVolume.cpp:198
OrientedBoundingBox GetOrientedBoundingBox() const
Convert to an oriented box.
Definition BoundingVolume.cpp:261
void SetColor(const core::Tensor &color)
Set the color of the box. If the data type of the given tensor differs from the data type of the box,...
Definition BoundingVolume.cpp:109
double GetYPercentage(double y) const
Definition BoundingVolume.cpp:186
double GetMaxExtent() const
Returns the maximum extent, i.e. the maximum of X, Y and Z axis' extents.
Definition BoundingVolume.h:161
core::Dtype dtype_
The data type of the bounding box.
Definition BoundingVolume.h:225
virtual ~AxisAlignedBoundingBox() override
Definition BoundingVolume.h:63
open3d::geometry::AxisAlignedBoundingBox ToLegacy() const
Convert to a legacy Open3D axis-aligned box.
Definition BoundingVolume.cpp:248
AxisAlignedBoundingBox Clone() const
Returns copy of the AxisAlignedBoundingBox on the same device.
Definition BoundingVolume.h:80
std::string ToString() const
Text description.
Definition BoundingVolume.cpp:225
core::Tensor GetExtent() const
Get the extent/length of the bounding box in x, y, and z dimension.
Definition BoundingVolume.h:154
AxisAlignedBoundingBox & operator+=(const AxisAlignedBoundingBox &other)
Add operation for axis-aligned bounding box. The device of other box must be the same as the device o...
Definition BoundingVolume.cpp:161
core::Tensor max_bound_
The upper x, y, z bounds of the bounding box.
Definition BoundingVolume.h:229
AxisAlignedBoundingBox & Clear() override
Clear all elements in the geometry.
Definition BoundingVolume.cpp:66
AxisAlignedBoundingBox & Scale(double scale, const utility::optional< core::Tensor > &center=utility::nullopt)
Scale the axis-aligned box. If is the min_bound and is the max_bound of the axis aligned bounding b...
Definition BoundingVolume.cpp:143
core::Tensor GetColor() const
Definition BoundingVolume.h:117
void SetMaxBound(const core::Tensor &max_bound)
Set the max bound of the box. If the data type of the given tensor differs from the data type of the ...
Definition BoundingVolume.cpp:91
core::Tensor GetCenter() const
Definition BoundingVolume.h:119
core::Device device_
The device to use for the bounding box. The default is CPU:0.
Definition BoundingVolume.h:223
core::Tensor GetMaxBound() const
Definition BoundingVolume.h:115
AxisAlignedBoundingBox & Translate(const core::Tensor &translation, bool relative=true)
Translate the axis-aligned box by the given translation.
Definition BoundingVolume.cpp:125
core::Tensor min_bound_
The lower x, y, z bounds of the bounding box.
Definition BoundingVolume.h:227
core::Tensor color_
The color of the bounding box in RGB. The default is white.
Definition BoundingVolume.h:231
core::Tensor GetHalfExtent() const
Returns the half extent of the bounding box.
Definition BoundingVolume.h:157
core::Device GetDevice() const override
Returns the device attribute of this AxisAlignedBoundingBox.
Definition BoundingVolume.h:66
double GetXPercentage(double x) const
Definition BoundingVolume.cpp:180
AxisAlignedBoundingBox To(const core::Device &device, bool copy=false) const
Transfer the AxisAlignedBoundingBox to a specified device.
Definition BoundingVolume.cpp:54
core::Tensor GetPointIndicesWithinBoundingBox(const core::Tensor &points) const
Indices to points that are within the bounding box.
Definition BoundingVolume.cpp:209
bool IsEmpty() const override
Returns true iff the geometry is empty.
Definition BoundingVolume.h:86
static AxisAlignedBoundingBox CreateFromPoints(const core::Tensor &points)
Definition BoundingVolume.cpp:232
Mix-in class for geometry types that can be visualized.
Definition DrawableGeometry.h:19
The base geometry class.
Definition Geometry.h:21
@ AxisAlignedBoundingBox
AxisAlignedBoundingBox.
A bounding box oriented along an arbitrary frame of reference.
Definition BoundingVolume.h:257
static OrientedBoundingBox CreateFromAxisAlignedBoundingBox(const AxisAlignedBoundingBox &aabb)
Definition BoundingVolume.cpp:532
core::Dtype dtype_
Definition BoundingVolume.h:465
double Volume() const
Returns the volume of the bounding box.
Definition BoundingVolume.h:384
void SetRotation(const core::Tensor &rotation)
Set the rotation matrix of the box. If the data type of the given tensor differs from the data type o...
Definition BoundingVolume.cpp:375
core::Tensor center_
Definition BoundingVolume.h:466
static OrientedBoundingBox CreateFromPoints(const core::Tensor &points, bool robust=false)
Definition BoundingVolume.cpp:568
OrientedBoundingBox & Scale(double scale, const utility::optional< core::Tensor > &center=utility::nullopt)
Scale the axis-aligned box. If is the min_bound and is the max_bound of the axis aligned bounding b...
Definition BoundingVolume.cpp:478
core::Dtype GetDtype() const
Returns the data type attribute of this OrientedBoundingBox.
Definition BoundingVolume.h:284
static OrientedBoundingBox FromLegacy(const open3d::geometry::OrientedBoundingBox &box, const core::Dtype &dtype=core::Float32, const core::Device &device=core::Device("CPU:0"))
Definition BoundingVolume.cpp:541
bool IsEmpty() const override
Returns true iff the geometry is empty.
Definition BoundingVolume.h:298
core::Tensor extent_
Definition BoundingVolume.h:468
core::Tensor GetColor() const
Definition BoundingVolume.h:332
core::Tensor GetCenter() const
Definition BoundingVolume.h:334
core::Tensor GetPointIndicesWithinBoundingBox(const core::Tensor &points) const
Indices to points that are within the bounding box.
Definition BoundingVolume.cpp:493
core::Tensor rotation_
Definition BoundingVolume.h:467
void SetCenter(const core::Tensor &center)
Set the center of the box. If the data type of the given tensor differs from the data type of the box...
Definition BoundingVolume.cpp:353
OrientedBoundingBox & Clear() override
Clear all elements in the geometry.
Definition BoundingVolume.cpp:345
core::Tensor GetRotation() const
Definition BoundingVolume.h:336
OrientedBoundingBox & Transform(const core::Tensor &transformation)
Transform the oriented box by the given transformation matrix.
Definition BoundingVolume.cpp:462
core::Tensor GetMaxBound() const
Definition BoundingVolume.cpp:408
core::Device device_
Definition BoundingVolume.h:464
void SetColor(const core::Tensor &color)
Set the color of the box.
Definition BoundingVolume.cpp:389
std::string ToString() const
Text description.
Definition BoundingVolume.cpp:510
open3d::geometry::OrientedBoundingBox ToLegacy() const
Convert to a legacy Open3D oriented box.
Definition BoundingVolume.cpp:515
OrientedBoundingBox & Rotate(const core::Tensor &rotation, const utility::optional< core::Tensor > &center=utility::nullopt)
Rotate the oriented box by the given rotation matrix. If the rotation matrix is not orthogonal,...
Definition BoundingVolume.cpp:433
virtual ~OrientedBoundingBox() override
Definition BoundingVolume.h:278
core::Device GetDevice() const override
Returns the device attribute of this OrientedBoundingBox.
Definition BoundingVolume.h:281
OrientedBoundingBox To(const core::Device &device, bool copy=false) const
Definition BoundingVolume.cpp:332
AxisAlignedBoundingBox GetAxisAlignedBoundingBox() const
Convert to an axis-aligned box.
Definition BoundingVolume.cpp:528
core::Tensor color_
Definition BoundingVolume.h:469
void SetExtent(const core::Tensor &extent)
Set the extent of the box. If the data type of the given tensor differs from the data type of the box...
Definition BoundingVolume.cpp:361
core::Tensor GetMinBound() const
Definition BoundingVolume.cpp:404
core::Tensor GetBoxPoints() const
Returns the eight points that define the bounding box.
Definition BoundingVolume.cpp:412
OrientedBoundingBox & Translate(const core::Tensor &translation, bool relative=true)
Translate the oriented box by the given translation. If relative is true, the translation is added to...
Definition BoundingVolume.cpp:418
core::Tensor GetExtent() const
Definition BoundingVolume.h:338
OrientedBoundingBox Clone() const
Returns copy of the OrientedBoundingBox on the same device.
Definition BoundingVolume.h:294
Definition Optional.h:259
int points
Definition FilePCD.cpp:54
const Dtype Float64
Definition Dtype.cpp:43
const Dtype Float32
Definition Dtype.cpp:42
constexpr nullopt_t nullopt
Definition Optional.h:152
Definition PinholeCameraIntrinsic.cpp:16