MeshLib C++ Docs
Loading...
Searching...
No Matches
MRPointOnObject.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRPointOnFace.h"
4#include "MRMeshTriPoint.h"
5#include "MREdgePoint.h"
6#include <optional>
7#include <variant>
8
9namespace MR
10{
11
12// point located on either
13// 1. face of ObjectMesh
14// 2. line of ObjectLines
15// 3. point of ObjectPoints
17{
18 PointOnObject() {} //default ctor is required by Clang
20 Vector3f point;
22 float zBuffer{ 1.0f };
24 union
25 {
26 int primId = -1;
27 FaceId face; //for ObjectMesh
28 UndirectedEdgeId uedge; //for ObjectLines
29 VertId vert; //for ObjectPoints
30 };
31 [[nodiscard]] operator PointOnFace() const { return { .face = face, .point = point }; }
32};
33
34// For long-term storage of picked points on an object, such as point and contour widgets,
35// it is more convenient to use the local coordinates of the object rather than 3D coordinates,
36// which can change depending on the xf of the object.
37// --- MeshTriPoint for ObjectMeshHolder
38// --- EdgePoint for ObjectLinesHolder (polylines)
39// --- VertId for ObjectPointsHolder
40// --- std::monostate means not valid pick (pick in empty space).
41using PickedPoint = std::variant<std::monostate, MeshTriPoint, EdgePoint, VertId>;
42
45
48MRMESH_API std::optional<Vector3f> getPickedPointPosition( const VisualObject& object, const PickedPoint& point );
49
51[[deprecated( "use getPickedPointPosition() instead" )]] MRMESH_API Vector3f pickedPointToVector3( const VisualObject* object, const PickedPoint& point );
52
54[[deprecated( "use getPickedPointPosition() instead" )]] MRMESH_API bool isPickedPointValid( const VisualObject* object, const PickedPoint& point );
55
58MRMESH_API std::optional<Vector3f> getPickedPointNormal( const VisualObject& object, const PickedPoint& point );
59
60} //namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:79
Visual Object.
Definition MRVisualObject.h:121
Definition MRCameraOrientationPlugin.h:8
MRMESH_API std::optional< Vector3f > getPickedPointNormal(const VisualObject &object, const PickedPoint &point)
std::variant< std::monostate, MeshTriPoint, EdgePoint, VertId > PickedPoint
Definition MRPointOnObject.h:41
MRMESH_API Vector3f pickedPointToVector3(const VisualObject *object, const PickedPoint &point)
Converts pickedPoint into local coordinates of its object.
MRMESH_API PickedPoint pointOnObjectToPickedPoint(const VisualObject *object, const PointOnObject &pos)
Converts PointOnObject coordinates depending on the object type to the PickedPoint variant.
MRMESH_API bool isPickedPointValid(const VisualObject *object, const PickedPoint &point)
Checks that the picked point presents in the object's topology.
MRMESH_API std::optional< Vector3f > getPickedPointPosition(const VisualObject &object, const PickedPoint &point)
a point located on some mesh's face
Definition MRMesh/MRPointOnFace.h:11
FaceId face
mesh's face containing the point
Definition MRMesh/MRPointOnFace.h:13
Definition MRPointOnObject.h:17
FaceId face
Definition MRPointOnObject.h:27
int primId
Definition MRPointOnObject.h:26
Vector3f point
3D location on the object in local coordinates
Definition MRPointOnObject.h:20
PointOnObject()
Definition MRPointOnObject.h:18
float zBuffer
z buffer value
Definition MRPointOnObject.h:22
VertId vert
Definition MRPointOnObject.h:29
UndirectedEdgeId uedge
Definition MRPointOnObject.h:28