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