Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
Geometry3D.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include <Eigen/Core>
11#include <Eigen/Geometry>
12#include <vector>
13
16
17namespace open3d {
18namespace geometry {
19
20class AxisAlignedBoundingBox;
21class OrientedBoundingBox;
22class OrientedBoundingEllipsoid;
23
29class Geometry3D : public Geometry {
30public:
31 ~Geometry3D() override {}
32
33protected:
38
39public:
40 Geometry3D& Clear() override = 0;
41 bool IsEmpty() const override = 0;
43 virtual Eigen::Vector3d GetMinBound() const = 0;
45 virtual Eigen::Vector3d GetMaxBound() const = 0;
47 virtual Eigen::Vector3d GetCenter() const = 0;
48
52
59 bool robust = false) const = 0;
60
68 bool robust = false) const = 0;
69
71 virtual Geometry3D& Transform(const Eigen::Matrix4d& transformation) = 0;
72
78 virtual Geometry3D& Translate(const Eigen::Vector3d& translation,
79 bool relative = true) = 0;
87 virtual Geometry3D& Scale(const double scale,
88 const Eigen::Vector3d& center) = 0;
89
96 virtual Geometry3D& Rotate(const Eigen::Matrix3d& R,
97 const Eigen::Vector3d& center) = 0;
98
99 virtual Geometry3D& Rotate(const Eigen::Matrix3d& R);
100
102 static Eigen::Matrix3d GetRotationMatrixFromXYZ(
103 const Eigen::Vector3d& rotation);
105 static Eigen::Matrix3d GetRotationMatrixFromYZX(
106 const Eigen::Vector3d& rotation);
108 static Eigen::Matrix3d GetRotationMatrixFromZXY(
109 const Eigen::Vector3d& rotation);
111 static Eigen::Matrix3d GetRotationMatrixFromXZY(
112 const Eigen::Vector3d& rotation);
114 static Eigen::Matrix3d GetRotationMatrixFromZYX(
115 const Eigen::Vector3d& rotation);
117 static Eigen::Matrix3d GetRotationMatrixFromYXZ(
118 const Eigen::Vector3d& rotation);
120 static Eigen::Matrix3d GetRotationMatrixFromAxisAngle(
121 const Eigen::Vector3d& rotation);
123 static Eigen::Matrix3d GetRotationMatrixFromQuaternion(
124 const Eigen::Vector4d& rotation);
125
126protected:
128 Eigen::Vector3d ComputeMinBound(
129 const std::vector<Eigen::Vector3d>& points) const;
131 Eigen::Vector3d ComputeMaxBound(
132 const std::vector<Eigen::Vector3d>& points) const;
134 Eigen::Vector3d ComputeCenter(
135 const std::vector<Eigen::Vector3d>& points) const;
136
142 void ResizeAndPaintUniformColor(std::vector<Eigen::Vector3d>& colors,
143 const size_t size,
144 const Eigen::Vector3d& color) const;
145
150 void TransformPoints(const Eigen::Matrix4d& transformation,
151 std::vector<Eigen::Vector3d>& points) const;
152
157 void TransformNormals(const Eigen::Matrix4d& transformation,
158 std::vector<Eigen::Vector3d>& normals) const;
159
164 void TransformCovariances(const Eigen::Matrix4d& transformation,
165 std::vector<Eigen::Matrix3d>& covariances) const;
166
174 void TranslatePoints(const Eigen::Vector3d& translation,
175 std::vector<Eigen::Vector3d>& points,
176 bool relative) const;
177
184 void ScalePoints(const double scale,
185 std::vector<Eigen::Vector3d>& points,
186 const Eigen::Vector3d& center) const;
187
194 void RotatePoints(const Eigen::Matrix3d& R,
195 std::vector<Eigen::Vector3d>& points,
196 const Eigen::Vector3d& center) const;
197
202 void RotateNormals(const Eigen::Matrix3d& R,
203 std::vector<Eigen::Vector3d>& normals) const;
204
209 void RotateCovariances(const Eigen::Matrix3d& R,
210 std::vector<Eigen::Matrix3d>& covariances) const;
211};
212
213} // namespace geometry
214} // namespace open3d
math::float4 color
Definition LineSetBuffers.cpp:45
A bounding box that is aligned along the coordinate axes and defined by the min_bound and max_bound.
Definition BoundingVolume.h:285
The base geometry class for 3D geometries.
Definition Geometry3D.h:29
void TransformPoints(const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &points) const
Transforms all points with the transformation matrix.
Definition Geometry3D.cpp:77
virtual Geometry3D & Scale(const double scale, const Eigen::Vector3d &center)=0
Apply scaling to the geometry coordinates. Given a scaling factor , and center , a given point is tr...
static Eigen::Matrix3d GetRotationMatrixFromYXZ(const Eigen::Vector3d &rotation)
Get Rotation Matrix from YXZ RotationType.
Definition Geometry3D.cpp:184
void ResizeAndPaintUniformColor(std::vector< Eigen::Vector3d > &colors, const size_t size, const Eigen::Vector3d &color) const
Resizes the colors vector and paints a uniform color.
Definition Geometry3D.cpp:56
void ScalePoints(const double scale, std::vector< Eigen::Vector3d > &points, const Eigen::Vector3d &center) const
Scale the coordinates of all points by the scaling factor scale.
Definition Geometry3D.cpp:115
virtual Eigen::Vector3d GetCenter() const =0
Returns the center of the geometry coordinates.
virtual OrientedBoundingBox GetMinimalOrientedBoundingBox(bool robust=false) const =0
~Geometry3D() override
Definition Geometry3D.h:31
void TranslatePoints(const Eigen::Vector3d &translation, std::vector< Eigen::Vector3d > &points, bool relative) const
Apply translation to the geometry coordinates.
Definition Geometry3D.cpp:103
Eigen::Vector3d ComputeMaxBound(const std::vector< Eigen::Vector3d > &points) const
Compute max bound of a list points.
Definition Geometry3D.cpp:34
virtual Eigen::Vector3d GetMaxBound() const =0
Returns max bounds for geometry coordinates.
virtual Eigen::Vector3d GetMinBound() const =0
Returns min bounds for geometry coordinates.
bool IsEmpty() const override=0
Returns true iff the geometry is empty.
void TransformCovariances(const Eigen::Matrix4d &transformation, std::vector< Eigen::Matrix3d > &covariances) const
Transforms all covariance matrices with the transformation.
Definition Geometry3D.cpp:97
virtual AxisAlignedBoundingBox GetAxisAlignedBoundingBox() const =0
static Eigen::Matrix3d GetRotationMatrixFromXZY(const Eigen::Vector3d &rotation)
Get Rotation Matrix from XZY RotationType.
Definition Geometry3D.cpp:170
void RotatePoints(const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &points, const Eigen::Vector3d &center) const
Rotate all points with the rotation matrix R.
Definition Geometry3D.cpp:123
Geometry3D & Clear() override=0
Clear all elements in the geometry.
void RotateCovariances(const Eigen::Matrix3d &R, std::vector< Eigen::Matrix3d > &covariances) const
Rotate all covariance matrices with the rotation matrix R.
Definition Geometry3D.cpp:141
Eigen::Vector3d ComputeMinBound(const std::vector< Eigen::Vector3d > &points) const
Compute min bound of a list points.
Definition Geometry3D.cpp:22
void RotateNormals(const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &normals) const
Rotate all normals with the rotation matrix R.
Definition Geometry3D.cpp:131
virtual OrientedBoundingBox GetOrientedBoundingBox(bool robust=false) const =0
static Eigen::Matrix3d GetRotationMatrixFromAxisAngle(const Eigen::Vector3d &rotation)
Get Rotation Matrix from AxisAngle RotationType.
Definition Geometry3D.cpp:191
virtual Geometry3D & Rotate(const Eigen::Matrix3d &R, const Eigen::Vector3d &center)=0
Apply rotation to the geometry coordinates and normals. Given a rotation matrix , and center ,...
static Eigen::Matrix3d GetRotationMatrixFromXYZ(const Eigen::Vector3d &rotation)
Get Rotation Matrix from XYZ RotationType.
Definition Geometry3D.cpp:149
Geometry3D(GeometryType type)
Parameterized Constructor.
Definition Geometry3D.h:37
void TransformNormals(const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &normals) const
Transforms the normals with the transformation matrix.
Definition Geometry3D.cpp:87
Eigen::Vector3d ComputeCenter(const std::vector< Eigen::Vector3d > &points) const
Computer center of a list of points.
Definition Geometry3D.cpp:45
static Eigen::Matrix3d GetRotationMatrixFromZYX(const Eigen::Vector3d &rotation)
Get Rotation Matrix from ZYX RotationType.
Definition Geometry3D.cpp:177
static Eigen::Matrix3d GetRotationMatrixFromQuaternion(const Eigen::Vector4d &rotation)
Get Rotation Matrix from Quaternion.
Definition Geometry3D.cpp:200
virtual Geometry3D & Translate(const Eigen::Vector3d &translation, bool relative=true)=0
Apply translation to the geometry coordinates.
static Eigen::Matrix3d GetRotationMatrixFromYZX(const Eigen::Vector3d &rotation)
Get Rotation Matrix from YZX RotationType.
Definition Geometry3D.cpp:156
virtual Geometry3D & Transform(const Eigen::Matrix4d &transformation)=0
Apply transformation (4x4 matrix) to the geometry coordinates.
static Eigen::Matrix3d GetRotationMatrixFromZXY(const Eigen::Vector3d &rotation)
Get Rotation Matrix from ZXY RotationType.
Definition Geometry3D.cpp:163
The base geometry class.
Definition Geometry.h:18
GeometryType
Specifies possible geometry types.
Definition Geometry.h:23
A bounding box oriented along an arbitrary frame of reference.
Definition BoundingVolume.h:138
int size
Definition FilePCD.cpp:41
int points
Definition FilePCD.cpp:55
char type
Definition FilePCD.cpp:42
Definition PinholeCameraIntrinsic.cpp:16
const core::Tensor * normals
Definition TriangleMesh.cpp:2126