Open3D (C++ API)
|
#include <TriangleMesh.h>
Public Member Functions | |
TriangleMesh () | |
TriangleMesh (const std::vector< Eigen::Vector3d > &vertices, const std::vector< Eigen::Vector3i > &triangles) | |
~TriangleMesh () override | |
virtual TriangleMesh & | Clear () override |
Clear all elements in the geometry. More... | |
virtual TriangleMesh & | Transform (const Eigen::Matrix4d &transformation) override |
Apply transformation (4x4 matrix) to the geometry coordinates. More... | |
virtual TriangleMesh & | Rotate (const Eigen::Matrix3d &R, bool center=true) override |
Apply rotation to the geometry coordinates and normals. More... | |
TriangleMesh & | operator+= (const TriangleMesh &mesh) |
TriangleMesh | operator+ (const TriangleMesh &mesh) const |
bool | HasTriangles () const |
bool | HasTriangleNormals () const |
bool | HasAdjacencyList () const |
bool | HasTriangleUvs () const |
bool | HasTexture () const |
TriangleMesh & | NormalizeNormals () |
TriangleMesh & | ComputeTriangleNormals (bool normalized=true) |
Function to compute triangle normals, usually called before rendering. More... | |
TriangleMesh & | ComputeVertexNormals (bool normalized=true) |
Function to compute vertex normals, usually called before rendering. More... | |
TriangleMesh & | ComputeAdjacencyList () |
Function to compute adjacency list, call before adjacency list is needed. More... | |
TriangleMesh & | RemoveDuplicatedVertices () |
TriangleMesh & | RemoveDuplicatedTriangles () |
TriangleMesh & | RemoveUnreferencedVertices () |
TriangleMesh & | RemoveDegenerateTriangles () |
TriangleMesh & | RemoveNonManifoldEdges () |
TriangleMesh & | MergeCloseVertices (double eps) |
std::shared_ptr< TriangleMesh > | FilterSharpen (int number_of_iterations, double strength, FilterScope scope=FilterScope::All) const |
std::shared_ptr< TriangleMesh > | FilterSmoothSimple (int number_of_iterations, FilterScope scope=FilterScope::All) const |
std::shared_ptr< TriangleMesh > | FilterSmoothLaplacian (int number_of_iterations, double lambda, FilterScope scope=FilterScope::All) const |
std::shared_ptr< TriangleMesh > | FilterSmoothTaubin (int number_of_iterations, double lambda=0.5, double mu=-0.53, FilterScope scope=FilterScope::All) const |
int | EulerPoincareCharacteristic () const |
std::vector< Eigen::Vector2i > | GetNonManifoldEdges (bool allow_boundary_edges=true) const |
bool | IsEdgeManifold (bool allow_boundary_edges=true) const |
std::vector< int > | GetNonManifoldVertices () const |
bool | IsVertexManifold () const |
std::vector< Eigen::Vector2i > | GetSelfIntersectingTriangles () const |
bool | IsSelfIntersecting () const |
bool | IsBoundingBoxIntersecting (const TriangleMesh &other) const |
bool | IsIntersecting (const TriangleMesh &other) const |
bool | IsOrientable () const |
bool | IsWatertight () const |
bool | OrientTriangles () |
std::unordered_map< Eigen::Vector2i, std::vector< int >, utility::hash_eigen::hash< Eigen::Vector2i > > | GetEdgeToTrianglesMap () const |
std::unordered_map< Eigen::Vector2i, std::vector< int >, utility::hash_eigen::hash< Eigen::Vector2i > > | GetEdgeToVerticesMap () const |
double | GetTriangleArea (size_t triangle_idx) const |
double | GetSurfaceArea () const |
double | GetSurfaceArea (std::vector< double > &triangle_areas) const |
Eigen::Vector4d | GetTrianglePlane (size_t triangle_idx) const |
std::shared_ptr< PointCloud > | SamplePointsUniformlyImpl (size_t number_of_points, std::vector< double > &triangle_areas, double surface_area) const |
std::shared_ptr< PointCloud > | SamplePointsUniformly (size_t number_of_points) const |
std::shared_ptr< PointCloud > | SamplePointsPoissonDisk (size_t number_of_points, double init_factor=5, const std::shared_ptr< PointCloud > pcl_init=nullptr) const |
std::shared_ptr< TriangleMesh > | SubdivideMidpoint (int number_of_iterations) const |
std::shared_ptr< TriangleMesh > | SubdivideLoop (int number_of_iterations) const |
std::shared_ptr< TriangleMesh > | SimplifyVertexClustering (double voxel_size, SimplificationContraction contraction=SimplificationContraction::Average) const |
std::shared_ptr< TriangleMesh > | SimplifyQuadricDecimation (int target_number_of_triangles) const |
std::shared_ptr< TriangleMesh > | SelectDownSample (const std::vector< size_t > &indices) const |
std::shared_ptr< TriangleMesh > | Crop (const AxisAlignedBoundingBox &bbox) const |
std::shared_ptr< TriangleMesh > | Crop (const OrientedBoundingBox &bbox) const |
std::tuple< std::vector< int >, std::vector< size_t >, std::vector< double > > | ClusterConnectedTriangles () const |
void | RemoveTrianglesByIndex (const std::vector< size_t > &triangle_indices) |
This function removes the triangles with index in triangle_indices . Call RemoveUnreferencedVertices to clean up vertices afterwards. More... | |
void | RemoveTrianglesByMask (const std::vector< bool > &triangle_mask) |
This function removes the triangles that are masked in triangle_mask . Call RemoveUnreferencedVertices to clean up vertices afterwards. More... | |
void | RemoveVerticesByIndex (const std::vector< size_t > &vertex_indices) |
This function removes the vertices with index in vertex_indices . Note that also all triangles associated with the vertices are removeds. More... | |
void | RemoveVerticesByMask (const std::vector< bool > &vertex_mask) |
This function removes the vertices that are masked in vertex_mask . Note that also all triangles associated with the vertices are removed.. More... | |
std::shared_ptr< TriangleMesh > | DeformAsRigidAsPossible (const std::vector< int > &constraint_vertex_indices, const std::vector< Eigen::Vector3d > &constraint_vertex_positions, size_t max_iter) const |
This function deforms the mesh using the method by Sorkine and Alexa, "As-Rigid-As-Possible Surface Modeling", 2007. More... | |
![]() | |
MeshBase () | |
~MeshBase () override | |
virtual bool | IsEmpty () const override |
Returns true iff the geometry is empty. More... | |
virtual Eigen::Vector3d | GetMinBound () const override |
Returns min bounds for geometry coordinates. More... | |
virtual Eigen::Vector3d | GetMaxBound () const override |
Returns max bounds for geometry coordinates. More... | |
virtual Eigen::Vector3d | GetCenter () const override |
Returns the center of the geometry coordinates. More... | |
virtual AxisAlignedBoundingBox | GetAxisAlignedBoundingBox () const override |
Returns an axis-aligned bounding box of the geometry. More... | |
virtual OrientedBoundingBox | GetOrientedBoundingBox () const override |
Returns an oriented bounding box of the geometry. More... | |
virtual MeshBase & | Translate (const Eigen::Vector3d &translation, bool relative=true) override |
Apply translation to the geometry coordinates. More... | |
virtual MeshBase & | Scale (const double scale, bool center=true) override |
Apply scaling to the geometry coordinates. More... | |
MeshBase & | operator+= (const MeshBase &mesh) |
MeshBase | operator+ (const MeshBase &mesh) const |
bool | HasVertices () const |
bool | HasVertexNormals () const |
bool | HasVertexColors () const |
MeshBase & | NormalizeNormals () |
MeshBase & | PaintUniformColor (const Eigen::Vector3d &color) |
Assigns each vertex in the TriangleMesh the same color. More... | |
std::tuple< std::shared_ptr< TriangleMesh >, std::vector< size_t > > | ComputeConvexHull () const |
Function that computes the convex hull of the triangle mesh using qhull. More... | |
![]() | |
~Geometry3D () override | |
![]() | |
virtual | ~Geometry () |
GeometryType | GetGeometryType () const |
Returns one of registered geometry types. More... | |
int | Dimension () const |
Returns whether the geometry is 2D or 3D. More... | |
Static Public Member Functions | |
static double | ComputeTriangleArea (const Eigen::Vector3d &p0, const Eigen::Vector3d &p1, const Eigen::Vector3d &p2) |
Function that computes the area of a mesh triangle. More... | |
static Eigen::Vector3i | GetOrderedTriangle (int vidx0, int vidx1, int vidx2) |
static Eigen::Vector4d | ComputeTrianglePlane (const Eigen::Vector3d &p0, const Eigen::Vector3d &p1, const Eigen::Vector3d &p2) |
static Eigen::Vector2i | GetOrderedEdge (int vidx0, int vidx1) |
Helper function to get an edge with ordered vertex indices. More... | |
static std::shared_ptr< TriangleMesh > | CreateFromPointCloudAlphaShape (const PointCloud &pcd, double alpha, std::shared_ptr< TetraMesh > tetra_mesh=nullptr, std::vector< size_t > *pt_map=nullptr) |
Alpha shapes are a generalization of the convex hull. With decreasing alpha value the shape schrinks and creates cavities. See Edelsbrunner and Muecke, "Three-Dimensional Alpha Shapes", 1994. More... | |
static std::shared_ptr< TriangleMesh > | CreateFromPointCloudBallPivoting (const PointCloud &pcd, const std::vector< double > &radii) |
static std::tuple< std::shared_ptr< TriangleMesh >, std::vector< double > > | CreateFromPointCloudPoisson (const PointCloud &pcd, size_t depth=8, size_t width=0, float scale=1.1f, bool linear_fit=false) |
Function that computes a triangle mesh from a oriented PointCloud pcd. This implements the Screened Poisson Reconstruction proposed in Kazhdan and Hoppe, "Screened Poisson Surface Reconstruction", 2013. This function uses the original implementation by Kazhdan. See https://github.com/mkazhdan/PoissonRecon. More... | |
static std::shared_ptr< TriangleMesh > | CreateTetrahedron (double radius=1.0) |
static std::shared_ptr< TriangleMesh > | CreateOctahedron (double radius=1.0) |
static std::shared_ptr< TriangleMesh > | CreateIcosahedron (double radius=1.0) |
static std::shared_ptr< TriangleMesh > | CreateBox (double width=1.0, double height=1.0, double depth=1.0) |
static std::shared_ptr< TriangleMesh > | CreateSphere (double radius=1.0, int resolution=20) |
static std::shared_ptr< TriangleMesh > | CreateCylinder (double radius=1.0, double height=2.0, int resolution=20, int split=4) |
static std::shared_ptr< TriangleMesh > | CreateCone (double radius=1.0, double height=2.0, int resolution=20, int split=1) |
static std::shared_ptr< TriangleMesh > | CreateTorus (double torus_radius=1.0, double tube_radius=0.5, int radial_resolution=30, int tubular_resolution=20) |
static std::shared_ptr< TriangleMesh > | CreateArrow (double cylinder_radius=1.0, double cone_radius=1.5, double cylinder_height=5.0, double cone_height=4.0, int resolution=20, int cylinder_split=4, int cone_split=1) |
static std::shared_ptr< TriangleMesh > | CreateCoordinateFrame (double size=1.0, const Eigen::Vector3d &origin=Eigen::Vector3d(0.0, 0.0, 0.0)) |
static std::shared_ptr< TriangleMesh > | CreateMoebius (int length_split=70, int width_split=15, int twists=1, double radius=1, double flatness=1, double width=1, double scale=1) |
![]() | |
static Eigen::Matrix3d | GetRotationMatrixFromXYZ (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from XYZ RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromYZX (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from YZX RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromZXY (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from ZXY RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromXZY (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from XZY RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromZYX (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from ZYX RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromYXZ (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from YXZ RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromAxisAngle (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from AxisAngle RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromQuaternion (const Eigen::Vector4d &rotation) |
Get Rotation Matrix from Quaternion. More... | |
Data Fields | |
std::vector< Eigen::Vector3i > | triangles_ |
std::vector< Eigen::Vector3d > | triangle_normals_ |
std::vector< std::unordered_set< int > > | adjacency_list_ |
std::vector< Eigen::Vector2d > | triangle_uvs_ |
Image | texture_ |
![]() | |
std::vector< Eigen::Vector3d > | vertices_ |
std::vector< Eigen::Vector3d > | vertex_normals_ |
std::vector< Eigen::Vector3d > | vertex_colors_ |
Protected Member Functions | |
TriangleMesh (Geometry::GeometryType type) | |
void | FilterSmoothLaplacianHelper (std::shared_ptr< TriangleMesh > &mesh, const std::vector< Eigen::Vector3d > &prev_vertices, const std::vector< Eigen::Vector3d > &prev_vertex_normals, const std::vector< Eigen::Vector3d > &prev_vertex_colors, const std::vector< std::unordered_set< int >> &adjacency_list, double lambda, bool filter_vertex, bool filter_normal, bool filter_color) const |
std::unordered_map< Eigen::Vector2i, double, utility::hash_eigen::hash< Eigen::Vector2i > > | ComputeEdgeWeightsCot (const std::unordered_map< Eigen::Vector2i, std::vector< int >, utility::hash_eigen::hash< Eigen::Vector2i >> &edges_to_vertices, double min_weight=std::numeric_limits< double >::lowest()) const |
Function that computes for each edge in the triangle mesh and passed as parameter edges_to_vertices the cot weight. More... | |
![]() | |
MeshBase (Geometry::GeometryType type) | |
MeshBase (Geometry::GeometryType type, const std::vector< Eigen::Vector3d > &vertices) | |
![]() | |
Geometry3D (GeometryType type) | |
Parameterized Constructor. More... | |
Eigen::Vector3d | ComputeMinBound (const std::vector< Eigen::Vector3d > &points) const |
Compute min bound of a list points. More... | |
Eigen::Vector3d | ComputeMaxBound (const std::vector< Eigen::Vector3d > &points) const |
Compute max bound of a list points. More... | |
Eigen::Vector3d | ComputeCenter (const std::vector< Eigen::Vector3d > &points) const |
Computer center of a list of points. More... | |
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. More... | |
void | TransformPoints (const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &points) const |
Transforms all points with the transformation matrix. More... | |
void | TransformNormals (const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &normals) const |
Transforms the normals with the transformation matrix. More... | |
void | TranslatePoints (const Eigen::Vector3d &translation, std::vector< Eigen::Vector3d > &points, bool relative) const |
Apply translation to the geometry coordinates. More... | |
void | ScalePoints (const double scale, std::vector< Eigen::Vector3d > &points, bool center) const |
Scale the coordinates of all points by the scaling factor scale . More... | |
void | RotatePoints (const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &points, bool center) const |
Rotate all points with the rotation matrix R . More... | |
void | RotateNormals (const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &normals, bool center) const |
Rotate all normals with the rotation matrix R . More... | |
![]() | |
Geometry (GeometryType type, int dimension) | |
Parameterized Constructor. More... | |
Additional Inherited Members | |
![]() | |
enum | SimplificationContraction { SimplificationContraction::Average, SimplificationContraction::Quadric } |
enum | FilterScope { FilterScope::All, FilterScope::Color, FilterScope::Normal, FilterScope::Vertex } |
![]() | |
enum | GeometryType { GeometryType::Unspecified = 0, GeometryType::PointCloud = 1, GeometryType::VoxelGrid = 2, GeometryType::Octree = 3, GeometryType::LineSet = 4, GeometryType::MeshBase = 5, GeometryType::TriangleMesh = 6, GeometryType::HalfEdgeTriangleMesh = 7, GeometryType::Image = 8, GeometryType::RGBDImage = 9, GeometryType::TetraMesh = 10, GeometryType::OrientedBoundingBox = 11, GeometryType::AxisAlignedBoundingBox = 12 } |
Specifies possible geometry types. More... | |
|
inline |
|
inline |
|
inlineoverride |
|
inlineprotected |
|
overridevirtual |
Clear all elements in the geometry.
Reimplemented from open3d::geometry::MeshBase.
std::tuple< std::vector< int >, std::vector< size_t >, std::vector< double > > open3d::geometry::TriangleMesh::ClusterConnectedTriangles | ( | ) | const |
/brief Function that clusters connected triangles, i.e., triangles that are connected via edges are assigned the same cluster index.
TriangleMesh & open3d::geometry::TriangleMesh::ComputeAdjacencyList | ( | ) |
Function to compute adjacency list, call before adjacency list is needed.
|
protected |
Function that computes for each edge in the triangle mesh and passed as parameter edges_to_vertices the cot weight.
edges_to_vertices | map from edge to vector of neighbouring vertices. |
min_weight | minimum weight returned. Weights smaller than this get clamped. |
|
static |
Function that computes the area of a mesh triangle.
TriangleMesh & open3d::geometry::TriangleMesh::ComputeTriangleNormals | ( | bool | normalized = true | ) |
Function to compute triangle normals, usually called before rendering.
|
static |
Function that computes the plane equation from the three points. If the three points are co-linear, then this function returns the invalid plane (0, 0, 0, 0).
TriangleMesh & open3d::geometry::TriangleMesh::ComputeVertexNormals | ( | bool | normalized = true | ) |
Function to compute vertex normals, usually called before rendering.
|
static |
Factory function to create an arrow mesh (TriangleMeshFactory.cpp) The axis of the cone with
cone_radius | will be along the z-axis. The cylinder with |
cylinder_radius | is from (0, 0, 0) to (0, 0, cylinder_height), and the cone is from (0, 0, cylinder_height) to (0, 0, cylinder_height + cone_height). The cone will be split into |
resolution | segments. The |
cylinder_height | will be split into |
cylinder_split | segments. The |
cone_height | will be split into |
cone_split | segments. |
|
static |
Factory function to create a box mesh (TriangleMeshFactory.cpp) The left bottom corner on the front will be placed at (0, 0, 0). The
width | is x-directional length, and |
height | and |
depth | are y- and z-directional lengths respectively. |
|
static |
Factory function to create a cone mesh (TriangleMeshFactory.cpp) The axis of the cone will be from (0, 0, 0) to (0, 0,
height). | The circle with |
radius | will be split into |
resolution | segments. The height will be split into |
split | segments. |
|
static |
Factory function to create a coordinate frame mesh (TriangleMeshFactory.cpp) The coordinate frame will be centered at
origin | The x, y, z axis will be rendered as red, green, and blue arrows respectively. |
size | is the length of the axes. |
|
static |
Factory function to create a cylinder mesh (TriangleMeshFactory.cpp) The axis of the cylinder will be from (0, 0, -height/2) to (0, 0, height/2). The circle with
radius | will be split into |
resolution | segments. The |
height | will be split into |
split | segments. |
|
static |
Alpha shapes are a generalization of the convex hull. With decreasing alpha value the shape schrinks and creates cavities. See Edelsbrunner and Muecke, "Three-Dimensional Alpha Shapes", 1994.
pcd | PointCloud for what the alpha shape should be computed. |
alpha | parameter to controll the shape. A very big value will give a shape close to the convex hull. |
tetra_mesh | If not a nullptr, than uses this to construct the alpha shape. Otherwise, ComputeDelaunayTetrahedralization is called. |
pt_map | Optional map from tetra_mesh vertex indices to pcd points. |
|
static |
Function that computes a triangle mesh from a oriented PointCloud
pcd. | This implements the Ball Pivoting algorithm proposed in F. Bernardini et al., "The ball-pivoting algorithm for surface reconstruction", 1999. The implementation is also based on the algorithms outlined in Digne, "An Analysis and Implementation of a Parallel Ball Pivoting Algorithm", 2014. The surface reconstruction is done by rolling a ball with a given radius (cf. |
radii) | over the point cloud, whenever the ball touches three points a triangle is created. |
|
static |
Function that computes a triangle mesh from a oriented PointCloud pcd. This implements the Screened Poisson Reconstruction proposed in Kazhdan and Hoppe, "Screened Poisson Surface Reconstruction", 2013. This function uses the original implementation by Kazhdan. See https://github.com/mkazhdan/PoissonRecon.
pcd | PointCloud with normals and optionally colors. |
depth | Maximum depth of the tree that will be used for surface reconstruction. Running at depth d corresponds to solving on a grid whose resolution is no larger than 2^d x 2^d x 2^d. Note that since the reconstructor adapts the octree to the sampling density, the specified reconstruction depth is only an upper bound. |
width | Specifies the target width of the finest level octree cells. This parameter is ignored if depth is specified. |
scale | Specifies the ratio between the diameter of the cube used for reconstruction and the diameter of the samples' bounding cube. |
linear_fit | If true, the reconstructor use linear interpolation to estimate the positions of iso-vertices. |
|
static |
Factory function to create an icosahedron mesh (trianglemeshfactory.cpp). the mesh centroid will be at (0,0,0) and
radius | defines the distance from the center to the mesh vertices. |
|
static |
Factory function to create a Moebius strip.
length_split | defines the number of segments along the Moebius strip, |
width_split | defines the number of segments along the width of the Moebius strip, |
twists | defines the number of twists of the strip, |
radius | defines the radius of the Moebius strip, |
flatness | controls the height of the strip, |
width | controls the width of the Moebius strip and |
scale | is used to scale the entire Moebius strip. |
|
static |
Factory function to create an octahedron mesh (trianglemeshfactory.cpp). the mesh centroid will be at (0,0,0) and
radius | defines the distance from the center to the mesh vertices. |
|
static |
Factory function to create a sphere mesh (TriangleMeshFactory.cpp) The sphere with
radius | will be centered at (0, 0, 0). Its axis is aligned with z-axis. The longitudes will be split into |
resolution | segments. The latitudes will be split into |
resolution | * 2 segments. |
|
static |
Factory function to create a tetrahedron mesh (trianglemeshfactory.cpp). the mesh centroid will be at (0,0,0) and
radius | defines the distance from the center to the mesh vertices. |
|
static |
Factory function to create a torus mesh (TriangleMeshFactory.cpp) The torus will be centered at (0, 0, 0) and a radius of
torus_radius. | The tube of the torus will have a radius of |
tube_radius. | The number of segments in radial and tubular direction are |
radial_resolution | and |
tubular_resolution | respectively. |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::Crop | ( | const AxisAlignedBoundingBox & | bbox | ) | const |
Function to crop pointcloud into output pointcloud All points with coordinates outside the bounding box
bbox | are clipped. |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::Crop | ( | const OrientedBoundingBox & | bbox | ) | const |
Function to crop pointcloud into output pointcloud All points with coordinates outside the bounding box
bbox | are clipped. |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::DeformAsRigidAsPossible | ( | const std::vector< int > & | constraint_vertex_indices, |
const std::vector< Eigen::Vector3d > & | constraint_vertex_positions, | ||
size_t | max_iter | ||
) | const |
This function deforms the mesh using the method by Sorkine and Alexa, "As-Rigid-As-Possible Surface Modeling", 2007.
constraint_vertex_indices | Indices of the triangle vertices that should be constrained by the vertex positions in constraint_vertex_positions. |
constraint_vertex_positions | Vertex positions used for the constraints. |
max_iter | maximum number of iterations to minimize energy functional. |
int open3d::geometry::TriangleMesh::EulerPoincareCharacteristic | ( | ) | const |
Function that computes the Euler-Poincaré characteristic, i.e., V + F - E, where V is the number of vertices, F is the number of triangles, and E is the number of edges.
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::FilterSharpen | ( | int | number_of_iterations, |
double | strength, | ||
FilterScope | scope = FilterScope::All |
||
) | const |
Function to sharpen triangle mesh. The output value ($v_o$) is the input value ($v_i$) plus
strength | times the input value minus the sum of he adjacent values. $v_o = v_i x strength (v_i * |N| - {n N} v_n)$. |
number_of_iterations | defines the number of repetitions of this operation. |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::FilterSmoothLaplacian | ( | int | number_of_iterations, |
double | lambda, | ||
FilterScope | scope = FilterScope::All |
||
) | const |
Function to smooth triangle mesh using Laplacian. $v_o = v_i (sum_{n N} w_n v_n - v_i)$, with $v_i$ being the input value, $v_o$ the output value, $N$ is the set of adjacent neighbours, $w_n$ is the weighting of the neighbour based on the inverse distance (closer neighbours have higher weight), and
lambda | is the smoothing parameter. |
number_of_iterations | defines the number of repetitions of this operation. |
|
protected |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::FilterSmoothSimple | ( | int | number_of_iterations, |
FilterScope | scope = FilterScope::All |
||
) | const |
Function to smooth triangle mesh with simple neighbour average. $v_o = {v_i + {n N} v_n)}{|N| + 1}$, with $v_i$ being the input value, $v_o$ the output value, and $N$ is the set of adjacent neighbours.
number_of_iterations | defines the number of repetitions of this operation. |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::FilterSmoothTaubin | ( | int | number_of_iterations, |
double | lambda = 0.5 , |
||
double | mu = -0.53 , |
||
FilterScope | scope = FilterScope::All |
||
) | const |
Function to smooth triangle mesh using method of Taubin, "Curve and Surface Smoothing Without Shrinkage", 1995. Applies in each iteration two times FilterSmoothLaplacian, first with
lambda | and second with |
mu | as smoothing parameter. This method avoids shrinkage of the triangle mesh. |
number_of_iterations | defines the number of repetitions of this operation. |
std::unordered_map< Eigen::Vector2i, std::vector< int >, utility::hash_eigen::hash< Eigen::Vector2i > > open3d::geometry::TriangleMesh::GetEdgeToTrianglesMap | ( | ) | const |
Function that returns a map from edges (vertex0, vertex1) to the triangle indices the given edge belongs to.
std::unordered_map< Eigen::Vector2i, std::vector< int >, utility::hash_eigen::hash< Eigen::Vector2i > > open3d::geometry::TriangleMesh::GetEdgeToVerticesMap | ( | ) | const |
Function that returns a map from edges (vertex0, vertex1) to the vertex (vertex2) indices the given edge belongs to.
std::vector< Eigen::Vector2i > open3d::geometry::TriangleMesh::GetNonManifoldEdges | ( | bool | allow_boundary_edges = true | ) | const |
Function that returns the non-manifold edges of the triangle mesh. If
allow_boundary_edges | is set to false, than also boundary edges are returned |
std::vector< int > open3d::geometry::TriangleMesh::GetNonManifoldVertices | ( | ) | const |
Function that returns a list of non-manifold vertex indices. A vertex is manifold if its star is edge‐manifold and edge‐connected. (Two or more faces connected only by a vertex and not by an edge.)
|
inlinestatic |
Helper function to get an edge with ordered vertex indices.
|
inlinestatic |
std::vector< Eigen::Vector2i > open3d::geometry::TriangleMesh::GetSelfIntersectingTriangles | ( | ) | const |
Function that returns a list of triangles that are intersecting the mesh.
double open3d::geometry::TriangleMesh::GetSurfaceArea | ( | ) | const |
Function that computes the surface area of the mesh, i.e. the sum of the individual triangle surfaces.
double open3d::geometry::TriangleMesh::GetSurfaceArea | ( | std::vector< double > & | triangle_areas | ) | const |
Function that computes the surface area of the mesh, i.e. the sum of the individual triangle surfaces.
double open3d::geometry::TriangleMesh::GetTriangleArea | ( | size_t | triangle_idx | ) | const |
Function that computes the area of a mesh triangle identified by the triangle index
Eigen::Vector4d open3d::geometry::TriangleMesh::GetTrianglePlane | ( | size_t | triangle_idx | ) | const |
Function that computes the plane equation of a mesh triangle identified by the triangle index.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
bool open3d::geometry::TriangleMesh::IsBoundingBoxIntersecting | ( | const TriangleMesh & | other | ) | const |
Function that tests if the bounding boxes of the triangle meshes are intersecting.
bool open3d::geometry::TriangleMesh::IsEdgeManifold | ( | bool | allow_boundary_edges = true | ) | const |
Function that checks if the given triangle mesh is edge-manifold. A mesh is edge-manifold if each edge is bounding either one or two triangles. If allow_boundary_edges is set to false, then this function returns false if there exists boundary edges.
bool open3d::geometry::TriangleMesh::IsIntersecting | ( | const TriangleMesh & | other | ) | const |
Function that tests if the triangle mesh intersects another triangle mesh. Tests each triangle against each other triangle.
bool open3d::geometry::TriangleMesh::IsOrientable | ( | ) | const |
Function that tests if the given triangle mesh is orientable, i.e. the triangles can oriented in such a way that all normals point towards the outside.
bool open3d::geometry::TriangleMesh::IsSelfIntersecting | ( | ) | const |
Function that tests if the triangle mesh is self-intersecting. Tests each triangle pair for intersection.
bool open3d::geometry::TriangleMesh::IsVertexManifold | ( | ) | const |
Function that checks if all vertices in the triangle mesh are manifold. A vertex is manifold if its star is edge‐manifold and edge‐connected. (Two or more faces connected only by a vertex and not by an edge.)
bool open3d::geometry::TriangleMesh::IsWatertight | ( | ) | const |
Function that tests if the given triangle mesh is watertight by checking if it is vertex manifold and edge-manifold with no boundary edges, but not self-intersecting.
TriangleMesh & open3d::geometry::TriangleMesh::MergeCloseVertices | ( | double | eps | ) |
Function that will merge close by vertices to a single one. The vertex position, normal and color will be the average of the vertices. The parameter
eps | defines the maximum distance of close by vertices. This function might help to close triangle soups. |
|
inline |
TriangleMesh open3d::geometry::TriangleMesh::operator+ | ( | const TriangleMesh & | mesh | ) | const |
TriangleMesh & open3d::geometry::TriangleMesh::operator+= | ( | const TriangleMesh & | mesh | ) |
bool open3d::geometry::TriangleMesh::OrientTriangles | ( | ) |
If the mesh is orientable then this function rearranges the triangles such that all normals point towards the outside/inside.
TriangleMesh & open3d::geometry::TriangleMesh::RemoveDegenerateTriangles | ( | ) |
Function that removes degenerate triangles, i.e., triangles that reference a single vertex multiple times in a single triangle. They are usually the product of removing duplicated vertices.
TriangleMesh & open3d::geometry::TriangleMesh::RemoveDuplicatedTriangles | ( | ) |
Function that removes duplicated triangles, i.e., removes triangles that reference the same three vertices, independent of their order.
TriangleMesh & open3d::geometry::TriangleMesh::RemoveDuplicatedVertices | ( | ) |
Function that removes duplicated verties, i.e., vertices that have identical coordinates.
TriangleMesh & open3d::geometry::TriangleMesh::RemoveNonManifoldEdges | ( | ) |
Function that removes all non-manifold edges, by successively deleting triangles with the smallest surface area adjacent to the non-manifold edge until the number of adjacent triangles to the edge is <= 2
.
void open3d::geometry::TriangleMesh::RemoveTrianglesByIndex | ( | const std::vector< size_t > & | triangle_indices | ) |
This function removes the triangles with index in triangle_indices
. Call RemoveUnreferencedVertices to clean up vertices afterwards.
triangle_indices | Indices of the triangles that should be removed. |
void open3d::geometry::TriangleMesh::RemoveTrianglesByMask | ( | const std::vector< bool > & | triangle_mask | ) |
This function removes the triangles that are masked in triangle_mask
. Call RemoveUnreferencedVertices to clean up vertices afterwards.
triangle_mask | Mask of triangles that should be removed. Should have same size as triangles_. |
TriangleMesh & open3d::geometry::TriangleMesh::RemoveUnreferencedVertices | ( | ) |
This function removes vertices from the triangle mesh that are not referenced in any triangle of the mesh.
void open3d::geometry::TriangleMesh::RemoveVerticesByIndex | ( | const std::vector< size_t > & | vertex_indices | ) |
This function removes the vertices with index in vertex_indices
. Note that also all triangles associated with the vertices are removeds.
triangle_indices | Indices of the triangles that should be removed. |
void open3d::geometry::TriangleMesh::RemoveVerticesByMask | ( | const std::vector< bool > & | vertex_mask | ) |
This function removes the vertices that are masked in vertex_mask
. Note that also all triangles associated with the vertices are removed..
vertex_mask | Mask of vertices that should be removed. Should have same size as vertices_. |
|
overridevirtual |
Apply rotation to the geometry coordinates and normals.
R | A 3D vector that either defines the three angles for Euler rotation, or in the axis-angle representation the normalized vector defines the axis of rotation and the norm the angle around this axis. |
center | If true , the rotation is applied relative to the center of the geometry. Otherwise, the rotation is directly applied to the geometry, i.e. relative to the origin. |
Reimplemented from open3d::geometry::MeshBase.
std::shared_ptr< PointCloud > open3d::geometry::TriangleMesh::SamplePointsPoissonDisk | ( | size_t | number_of_points, |
double | init_factor = 5 , |
||
const std::shared_ptr< PointCloud > | pcl_init = nullptr |
||
) | const |
Function to sample
number_of_points | points (blue noise). Based on the method presented in Yuksel, "Sample Elimination for Generating Poisson Disk Sample Sets", EUROGRAPHICS, 2015 The PointCloud |
pcl_init | is used for sample elimination if given, otherwise a PointCloud is first uniformly sampled with |
init_number_of_points | x |
number_of_points | number of points. |
std::shared_ptr< PointCloud > open3d::geometry::TriangleMesh::SamplePointsUniformly | ( | size_t | number_of_points | ) | const |
Function to sample
number_of_points | points uniformly from the mesh |
std::shared_ptr< PointCloud > open3d::geometry::TriangleMesh::SamplePointsUniformlyImpl | ( | size_t | number_of_points, |
std::vector< double > & | triangle_areas, | ||
double | surface_area | ||
) | const |
Function to sample
number_of_points | points uniformly from the mesh |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::SelectDownSample | ( | const std::vector< size_t > & | indices | ) | const |
Function to select points from
input | TriangleMesh into |
indices | are selected. |
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::SimplifyQuadricDecimation | ( | int | target_number_of_triangles | ) | const |
Function to simplify mesh using Quadric Error Metric Decimation by Garland and Heckbert.
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::SimplifyVertexClustering | ( | double | voxel_size, |
SimplificationContraction | contraction = SimplificationContraction::Average |
||
) | const |
Function to simplify mesh using Vertex Clustering. The result can be a non-manifold mesh.
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::SubdivideLoop | ( | int | number_of_iterations | ) | const |
Function to subdivide triangle mesh using Loop's scheme. Cf. Charles T. Loop, "Smooth subdivision surfaces based on triangles",
std::shared_ptr< TriangleMesh > open3d::geometry::TriangleMesh::SubdivideMidpoint | ( | int | number_of_iterations | ) | const |
Function to subdivide triangle mesh using the simple midpoint algorithm. Each triangle is subdivided into four triangles per iteration and the new vertices lie on the midpoint of the triangle edges.
|
overridevirtual |
Apply transformation (4x4 matrix) to the geometry coordinates.
Reimplemented from open3d::geometry::MeshBase.
std::vector<std::unordered_set<int> > open3d::geometry::TriangleMesh::adjacency_list_ |
Image open3d::geometry::TriangleMesh::texture_ |
std::vector<Eigen::Vector3d> open3d::geometry::TriangleMesh::triangle_normals_ |
std::vector<Eigen::Vector2d> open3d::geometry::TriangleMesh::triangle_uvs_ |
std::vector<Eigen::Vector3i> open3d::geometry::TriangleMesh::triangles_ |