Open3D (C++ API)
Geometry3D.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // The MIT License (MIT)
5 //
6 // Copyright (c) 2018 www.open3d.org
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 // IN THE SOFTWARE.
25 // ----------------------------------------------------------------------------
26 
27 #pragma once
28 
29 #include <Eigen/Core>
30 #include <Eigen/Geometry>
31 
33 #include "Open3D/Utility/Eigen.h"
34 
35 namespace open3d {
36 namespace geometry {
37 
38 class AxisAlignedBoundingBox;
39 class OrientedBoundingBox;
40 
46 class Geometry3D : public Geometry {
47 public:
48  ~Geometry3D() override {}
49 
50 protected:
55 
56 public:
57  Geometry3D& Clear() override = 0;
58  bool IsEmpty() const override = 0;
60  virtual Eigen::Vector3d GetMinBound() const = 0;
62  virtual Eigen::Vector3d GetMaxBound() const = 0;
64  virtual Eigen::Vector3d GetCenter() const = 0;
68  virtual OrientedBoundingBox GetOrientedBoundingBox() const = 0;
70  virtual Geometry3D& Transform(const Eigen::Matrix4d& transformation) = 0;
71 
77  virtual Geometry3D& Translate(const Eigen::Vector3d& translation,
78  bool relative = true) = 0;
86  virtual Geometry3D& Scale(const double scale,
87  const Eigen::Vector3d& center) = 0;
88 
95  virtual Geometry3D& Rotate(const Eigen::Matrix3d& R,
96  const Eigen::Vector3d& center) = 0;
97 
99  static Eigen::Matrix3d GetRotationMatrixFromXYZ(
100  const Eigen::Vector3d& rotation);
102  static Eigen::Matrix3d GetRotationMatrixFromYZX(
103  const Eigen::Vector3d& rotation);
105  static Eigen::Matrix3d GetRotationMatrixFromZXY(
106  const Eigen::Vector3d& rotation);
108  static Eigen::Matrix3d GetRotationMatrixFromXZY(
109  const Eigen::Vector3d& rotation);
111  static Eigen::Matrix3d GetRotationMatrixFromZYX(
112  const Eigen::Vector3d& rotation);
114  static Eigen::Matrix3d GetRotationMatrixFromYXZ(
115  const Eigen::Vector3d& rotation);
117  static Eigen::Matrix3d GetRotationMatrixFromAxisAngle(
118  const Eigen::Vector3d& rotation);
120  static Eigen::Matrix3d GetRotationMatrixFromQuaternion(
121  const Eigen::Vector4d& rotation);
122 
123 protected:
125  Eigen::Vector3d ComputeMinBound(
126  const std::vector<Eigen::Vector3d>& points) const;
128  Eigen::Vector3d ComputeMaxBound(
129  const std::vector<Eigen::Vector3d>& points) const;
131  Eigen::Vector3d ComputeCenter(
132  const std::vector<Eigen::Vector3d>& points) const;
133 
139  void ResizeAndPaintUniformColor(std::vector<Eigen::Vector3d>& colors,
140  const size_t size,
141  const Eigen::Vector3d& color) const;
142 
147  void TransformPoints(const Eigen::Matrix4d& transformation,
148  std::vector<Eigen::Vector3d>& points) const;
149 
154  void TransformNormals(const Eigen::Matrix4d& transformation,
155  std::vector<Eigen::Vector3d>& normals) const;
163  void TranslatePoints(const Eigen::Vector3d& translation,
164  std::vector<Eigen::Vector3d>& points,
165  bool relative) const;
166 
173  void ScalePoints(const double scale,
174  std::vector<Eigen::Vector3d>& points,
175  const Eigen::Vector3d& center) const;
176 
183  void RotatePoints(const Eigen::Matrix3d& R,
184  std::vector<Eigen::Vector3d>& points,
185  const Eigen::Vector3d& center) const;
186 
191  void RotateNormals(const Eigen::Matrix3d& R,
192  std::vector<Eigen::Vector3d>& normals) const;
193 };
194 
195 } // namespace geometry
196 } // namespace open3d
Eigen::Vector3d ComputeCenter(const std::vector< Eigen::Vector3d > &points) const
Computer center of a list of points.
Definition: Geometry3D.cpp:60
The base geometry class.
Definition: Geometry.h:37
bool IsEmpty() const override=0
Returns true iff the geometry is empty.
virtual Eigen::Vector3d GetMinBound() const =0
Returns min bounds for geometry coordinates.
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 ...
A bounding box that is aligned along the coordinate axes.
Definition: BoundingVolume.h:164
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...
virtual OrientedBoundingBox GetOrientedBoundingBox() const =0
Returns an oriented bounding box of the geometry.
Geometry3D(GeometryType type)
Parameterized Constructor.
Definition: Geometry3D.h:54
virtual Eigen::Vector3d GetCenter() const =0
Returns the center of the geometry coordinates.
virtual Geometry3D & Transform(const Eigen::Matrix4d &transformation)=0
Apply transformation (4x4 matrix) to the geometry coordinates.
virtual AxisAlignedBoundingBox GetAxisAlignedBoundingBox() const =0
Returns an axis-aligned bounding box of the geometry.
virtual Eigen::Vector3d GetMaxBound() const =0
Returns max bounds for geometry coordinates.
void RotateNormals(const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &normals) const
Rotate all normals with the rotation matrix R.
Definition: Geometry3D.cpp:140
void TransformNormals(const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &normals) const
Transforms the normals with the transformation matrix.
Definition: Geometry3D.cpp:102
A bounding box oriented along an arbitrary frame of reference.
Definition: BoundingVolume.h:44
Geometry3D & Clear() override=0
Clear all elements in the geometry.
int size
Definition: FilePCD.cpp:57
static Eigen::Matrix3d GetRotationMatrixFromYXZ(const Eigen::Vector3d &rotation)
Get Rotation Matrix from YXZ RotationType.
Definition: Geometry3D.cpp:182
math::float4 color
Definition: LineSetBuffers.cpp:46
The base geometry class for 3D geometries.
Definition: Geometry3D.h:46
static Eigen::Matrix3d GetRotationMatrixFromZYX(const Eigen::Vector3d &rotation)
Get Rotation Matrix from ZYX RotationType.
Definition: Geometry3D.cpp:175
void TranslatePoints(const Eigen::Vector3d &translation, std::vector< Eigen::Vector3d > &points, bool relative) const
Apply translation to the geometry coordinates.
Definition: Geometry3D.cpp:112
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:124
static Eigen::Matrix3d GetRotationMatrixFromYZX(const Eigen::Vector3d &rotation)
Get Rotation Matrix from YZX RotationType.
Definition: Geometry3D.cpp:154
static Eigen::Matrix3d GetRotationMatrixFromZXY(const Eigen::Vector3d &rotation)
Get Rotation Matrix from ZXY RotationType.
Definition: Geometry3D.cpp:161
char type
Definition: FilePCD.cpp:58
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:132
static Eigen::Matrix3d GetRotationMatrixFromXZY(const Eigen::Vector3d &rotation)
Get Rotation Matrix from XZY RotationType.
Definition: Geometry3D.cpp:168
~Geometry3D() override
Definition: Geometry3D.h:48
int points
Definition: FilePCD.cpp:71
void TransformPoints(const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &points) const
Transforms all points with the transformation matrix.
Definition: Geometry3D.cpp:92
Definition: Open3DViewer.h:29
GeometryType
Specifies possible geometry types.
Definition: Geometry.h:42
static Eigen::Matrix3d GetRotationMatrixFromXYZ(const Eigen::Vector3d &rotation)
Get Rotation Matrix from XYZ RotationType.
Definition: Geometry3D.cpp:147
virtual Geometry3D & Translate(const Eigen::Vector3d &translation, bool relative=true)=0
Apply translation to the geometry coordinates.
static Eigen::Matrix3d GetRotationMatrixFromQuaternion(const Eigen::Vector4d &rotation)
Get Rotation Matrix from Quaternion.
Definition: Geometry3D.cpp:195
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:71
Eigen::Vector3d ComputeMinBound(const std::vector< Eigen::Vector3d > &points) const
Compute min bound of a list points.
Definition: Geometry3D.cpp:37
static Eigen::Matrix3d GetRotationMatrixFromAxisAngle(const Eigen::Vector3d &rotation)
Get Rotation Matrix from AxisAngle RotationType.
Definition: Geometry3D.cpp:189
Eigen::Vector3d ComputeMaxBound(const std::vector< Eigen::Vector3d > &points) const
Compute max bound of a list points.
Definition: Geometry3D.cpp:49