MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMesh/MRPointsToMeshProjector.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRMeshFwd.h"
4#include "MRAffineXf3.h"
5#include <cfloat>
6#include <string>
7
8namespace MR
9{
10
12class IPointsToMeshProjector
13{
14public:
15 virtual ~IPointsToMeshProjector() = default;
17 virtual void updateMeshData( const Mesh* mesh ) = 0;
19 virtual void findProjections( std::vector<MeshProjectionResult>& result, const std::vector<Vector3f>& points,
20 const AffineXf3f* worldXf = nullptr, const AffineXf3f* worldRefXf = nullptr,
21 float upDistLimitSq = FLT_MAX, float loDistLimitSq = 0.0f ) = 0;
22
24 virtual size_t projectionsHeapBytes( size_t numProjections ) const = 0;
25};
26
27struct MeshProjectionParameters
28{
31 float loDistLimitSq = 0;
32
35 float upDistLimitSq = FLT_MAX;
36
38 const AffineXf3f* refXf = nullptr;
39
41 const AffineXf3f* xf = nullptr;
42};
43
48 const Mesh& refMesh,
49 const VertCoords & testPoints, const VertBitSet * validTestPoints = {},
50 const MeshProjectionParameters & params = {},
51 IPointsToMeshProjector * projector = {} );
52
57 const Mesh& refMesh,
58 const Mesh& mesh,
59 const MeshProjectionParameters & params = {},
60 IPointsToMeshProjector * projector = {} );
61
63class MRMESH_CLASS PointsToMeshProjector : public IPointsToMeshProjector
64{
65 const Mesh* mesh_{ nullptr };
66public:
68 MRMESH_API virtual void updateMeshData( const Mesh* mesh ) override;
78 MRMESH_API virtual void findProjections( std::vector<MeshProjectionResult>& result, const std::vector<Vector3f>& points,
79 const AffineXf3f* objXf, const AffineXf3f* refObjXf,
80 float upDistLimitSq, float loDistLimitSq ) override;
81
83 MRMESH_API virtual size_t projectionsHeapBytes( size_t numProjections ) const override;
84};
85
86}
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
unsafe void findProjections(MR.Std.Vector_MRMeshProjectionResult result, MR.Std.Const_Vector_MRVector3f points, MR.AffineXf3f? worldXf=null, MR.AffineXf3f? worldRefXf=null, float? upDistLimitSq=null, float? loDistLimitSq=null)
unsafe void updateMeshData(MR.Const_Mesh? mesh)
Definition MRMesh/MRPointsToMeshProjector.h:28
new unsafe ref float upDistLimitSq
new unsafe ref float loDistLimitSq
new unsafe MR.? ConstBox_AffineXf3f refXf
new unsafe MR.? ConstBox_AffineXf3f xf
Definition MRMesh/MRMesh.h:23
Definition MRCameraOrientationPlugin.h:8
MRMESH_API VertScalars findSignedDistances(const Mesh &refMesh, const VertCoords &testPoints, const VertBitSet *validTestPoints={}, const MeshProjectionParameters &params={}, IPointsToMeshProjector *projector={})
if projector is not given then CPU's computations will be used