MeshLib Documentation
Loading...
Searching...
No Matches
MRMesh/MRMeshTriPoint.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRId.h"
4#include "MRTriPoint.h"
5#include "MREdgePoint.h"
6
7namespace MR
8{
9
11{
12 VertId v;
13 float weight = 0;
14};
15
23{
24 EdgeId e;
29 TriPointf bary;
30
31 [[nodiscard]] MeshTriPoint() = default;
32 [[nodiscard]] MeshTriPoint( NoInit ) : e( noInit ), bary( noInit ) { }
33 [[nodiscard]] MeshTriPoint( EdgeId e, TriPointf bary ) : e( e ), bary( bary ) { }
34 [[nodiscard]] MeshTriPoint( const MeshEdgePoint & ep ) : e( ep.e ), bary( ep.a, 0 ) { }
35 [[nodiscard]] MeshTriPoint( const MeshTopology & topology, VertId v ) : MeshTriPoint( MeshEdgePoint( topology, v ) ) { }
36
38 template< typename T >
39 [[nodiscard]] MeshTriPoint( EdgeId e, const Vector3<T> & p, const Vector3<T> & v0, const Vector3<T> & v1, const Vector3<T> & v2 ) : e( e ), bary( p, v0, v1, v2 ) { }
40
42 [[nodiscard]] MRMESH_API VertId inVertex( const MeshTopology & topology ) const;
43
45 [[nodiscard]] bool inVertex() const { return bary.inVertex() >= 0; }
46
49 [[nodiscard]] MRMESH_API MeshEdgePoint onEdge( const MeshTopology & topology ) const;
50
52 [[nodiscard]] MRMESH_API bool isBd( const MeshTopology & topology, const FaceBitSet * region = nullptr ) const;
53
55 [[nodiscard]] MRMESH_API bool fromTriangle( const MeshTopology & topology, FaceId f ) const;
56
58 [[nodiscard]] bool valid() const { return e.valid(); }
59 [[nodiscard]] explicit operator bool() const { return e.valid(); }
60
62 [[nodiscard]] MRMESH_API MeshTriPoint lnext( const MeshTopology & topology ) const;
63
65 [[nodiscard]] MRMESH_API MeshTriPoint canonical( const MeshTopology & topology ) const;
66
68 [[nodiscard]] MRMESH_API std::array<WeightedVertex, 3> getWeightedVerts( const MeshTopology & topology ) const;
69
71 [[nodiscard]] bool operator==( const MeshTriPoint& rhs ) const = default;
72};
73
76
78[[nodiscard]] MRMESH_API bool same( const MeshTopology & topology, const MeshTriPoint& lhs, const MeshTriPoint & rhs );
79
82[[nodiscard]] MRMESH_API bool fromSameTriangle( const MeshTopology & topology, MeshTriPoint & a, MeshTriPoint & b );
83
86[[nodiscard]] inline bool fromSameTriangle( const MeshTopology & topology, MeshTriPoint && a, MeshTriPoint && b ) { return fromSameTriangle( topology, a, b ); }
87
89[[nodiscard]] MRMESH_API MeshTriPoint getVertexAsMeshTriPoint( const MeshTopology & topology, EdgeId e, VertId v );
90
92
93} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:46
Definition MRMesh/MRMeshTopology.h:18
Definition MRCameraOrientationPlugin.h:8
constexpr NoInit noInit
Definition MRMesh/MRMeshFwd.h:57
encodes a point on an edge of mesh or of polyline
Definition MREdgePoint.h:11
Definition MRMesh/MRMeshTriPoint.h:23
MeshTriPoint()=default
MRMESH_API MeshTriPoint lnext(const MeshTopology &topology) const
represents the same point relative to next edge in the same triangle
MRMESH_API bool fromSameTriangle(const MeshTopology &topology, MeshTriPoint &a, MeshTriPoint &b)
MRMESH_API MeshEdgePoint onEdge(const MeshTopology &topology) const
bool valid() const
consider this valid if the edge ID is valid
Definition MRMesh/MRMeshTriPoint.h:58
MeshTriPoint(NoInit)
Definition MRMesh/MRMeshTriPoint.h:32
bool fromSameTriangle(const MeshTopology &topology, MeshTriPoint &&a, MeshTriPoint &&b)
Definition MRMesh/MRMeshTriPoint.h:86
MRMESH_API MeshTriPoint getVertexAsMeshTriPoint(const MeshTopology &topology, EdgeId e, VertId v)
returns MeshTriPoint representation of given vertex with given edge field; or invalid MeshTriPoint if...
bool inVertex() const
returns true if the point is in a vertex
Definition MRMesh/MRMeshTriPoint.h:45
MRMESH_API bool fromTriangle(const MeshTopology &topology, FaceId f) const
returns true if the point is inside or on the boundary of given triangular face
MeshTriPoint(EdgeId e, TriPointf bary)
Definition MRMesh/MRMeshTriPoint.h:33
TriPointf bary
Definition MRMesh/MRMeshTriPoint.h:29
MRMESH_API bool isBd(const MeshTopology &topology, const FaceBitSet *region=nullptr) const
returns true if the point is in vertex or on edge, and that location is on the boundary of the region
MRMESH_API std::array< WeightedVertex, 3 > getWeightedVerts(const MeshTopology &topology) const
returns three weighted triangle's vertices with the sum of not-negative weights equal to 1,...
MRMESH_API bool same(const MeshTopology &topology, const MeshTriPoint &lhs, const MeshTriPoint &rhs)
returns true if two points are equal considering different representations
MeshTriPoint(const MeshTopology &topology, VertId v)
Definition MRMesh/MRMeshTriPoint.h:35
MRMESH_API VertId inVertex(const MeshTopology &topology) const
returns valid vertex id if the point is in vertex, otherwise returns invalid id
MeshTriPoint(EdgeId e, const Vector3< T > &p, const Vector3< T > &v0, const Vector3< T > &v1, const Vector3< T > &v2)
given a point coordinates computes its barycentric coordinates
Definition MRMesh/MRMeshTriPoint.h:39
MeshTriPoint(const MeshEdgePoint &ep)
Definition MRMesh/MRMeshTriPoint.h:34
bool operator==(const MeshTriPoint &rhs) const =default
returns true if two points are equal including equal not-unique representation
MRMESH_API MeshTriPoint canonical(const MeshTopology &topology) const
represents the same point relative to the topology.edgeWithLeft( topology.left( e ) )
EdgeId e
Definition MRMesh/MRMeshTriPoint.h:24
Definition MRMesh/MRMeshFwd.h:56
Definition MRMesh/MRVector3.h:19
Definition MRMesh/MRMeshTriPoint.h:11
float weight
Definition MRMesh/MRMeshTriPoint.h:13
VertId v
Definition MRMesh/MRMeshTriPoint.h:12