MeshLib C++ Docs
Loading...
Searching...
No Matches
MRFastWindingNumber.h
Go to the documentation of this file.
1#pragma once
2
4#include "MRExpected.h"
5#include "MRId.h"
6
7namespace MR
8{
11
12
15{
16public:
17 virtual ~IFastWindingNumber() = default;
18
24 virtual Expected<void> calcFromVector( std::vector<float>& res, const std::vector<Vector3f>& points, float beta, FaceId skipFace = {}, const ProgressCallback& cb = {} ) = 0;
25
29 virtual Expected<void> calcSelfIntersections( FaceBitSet& res, float beta, const ProgressCallback& cb = {} ) = 0;
30
36 virtual Expected<void> calcFromGrid( std::vector<float>& res, const Vector3i& dims, const AffineXf3f& gridToMeshXf, float beta, const ProgressCallback& cb = {} ) = 0;
37
42 virtual Expected<void> calcFromGridWithDistances( std::vector<float>& res, const Vector3i& dims, const AffineXf3f& gridToMeshXf, const DistanceToMeshOptions& options, const ProgressCallback& cb ) = 0;
43};
44
50{
51public:
54 [[nodiscard]] MRMESH_API FastWindingNumber( const Mesh & mesh );
55
57 MRMESH_API Expected<void> calcFromVector( std::vector<float>& res, const std::vector<Vector3f>& points, float beta, FaceId skipFace, const ProgressCallback& cb ) override;
58 MRMESH_API Expected<void> calcSelfIntersections( FaceBitSet& res, float beta, const ProgressCallback& cb ) override;
59 MRMESH_API Expected<void> calcFromGrid( std::vector<float>& res, const Vector3i& dims, const AffineXf3f& gridToMeshXf, float beta, const ProgressCallback& cb ) override;
60 MRMESH_API float calcWithDistances( const Vector3f& p, const DistanceToMeshOptions& options );
61 MRMESH_API Expected<void> calcFromGridWithDistances( std::vector<float>& res, const Vector3i& dims, const AffineXf3f& gridToMeshXf, const DistanceToMeshOptions& options, const ProgressCallback& cb ) override;
62
63private:
64 [[nodiscard]] float calc_( const Vector3f & q, float beta, FaceId skipFace = {} ) const;
65
66 const Mesh & mesh_;
67 const AABBTree & tree_;
68 const Dipoles & dipoles_;
69};
70
73{
74public:
75 virtual ~IFastWindingNumberByParts() = default;
76
81 using GridByPartsFunc = std::function<Expected<void> ( std::vector<float>&& data, const Vector3i& dims, int zOffset )>;
82
89 virtual Expected<void> calcFromGridByParts( GridByPartsFunc resFunc, const Vector3i& dims,
90 const AffineXf3f& gridToMeshXf, float beta, int layerOverlap, const ProgressCallback& cb ) = 0;
91
98 virtual Expected<void> calcFromGridWithDistancesByParts( GridByPartsFunc resFunc, const Vector3i& dims,
99 const AffineXf3f& gridToMeshXf, const DistanceToMeshOptions& options, int layerOverlap, const ProgressCallback& cb ) = 0;
100};
101
102}
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
Definition MRAABBTree.h:16
Abstract class that complements IFastWindingNumber with chunked processing variants of its methods.
Definition MRFastWindingNumber.h:73
Abstract class for fast approximate computation of generalized winding number for a mesh (using its A...
Definition MRFastWindingNumber.h:15
std::function< bool(float)> ProgressCallback
Definition MRMeshFwd.h:758
Expected< void > calcFromGridWithDistances(std::vector< float > &res, const Vector3i &dims, const AffineXf3f &gridToMeshXf, const DistanceToMeshOptions &options, const ProgressCallback &cb) override
Expected< void > calcFromGrid(std::vector< float > &res, const Vector3i &dims, const AffineXf3f &gridToMeshXf, float beta, const ProgressCallback &cb) override
virtual Expected< void > calcFromGrid(std::vector< float > &res, const Vector3i &dims, const AffineXf3f &gridToMeshXf, float beta, const ProgressCallback &cb={})=0
virtual Expected< void > calcFromGridByParts(GridByPartsFunc resFunc, const Vector3i &dims, const AffineXf3f &gridToMeshXf, float beta, int layerOverlap, const ProgressCallback &cb)=0
virtual Expected< void > calcFromVector(std::vector< float > &res, const std::vector< Vector3f > &points, float beta, FaceId skipFace={}, const ProgressCallback &cb={})=0
Expected< void > calcFromVector(std::vector< float > &res, const std::vector< Vector3f > &points, float beta, FaceId skipFace, const ProgressCallback &cb) override
see methods' descriptions in IFastWindingNumber
float calcWithDistances(const Vector3f &p, const DistanceToMeshOptions &options)
std::function< Expected< void >(std::vector< float > &&data, const Vector3i &dims, int zOffset)> GridByPartsFunc
Definition MRFastWindingNumber.h:81
tl::expected< T, E > Expected
Definition MRExpected.h:31
FastWindingNumber(const Mesh &mesh)
virtual Expected< void > calcFromGridWithDistancesByParts(GridByPartsFunc resFunc, const Vector3i &dims, const AffineXf3f &gridToMeshXf, const DistanceToMeshOptions &options, int layerOverlap, const ProgressCallback &cb)=0
virtual Expected< void > calcSelfIntersections(FaceBitSet &res, float beta, const ProgressCallback &cb={})=0
Expected< void > calcSelfIntersections(FaceBitSet &res, float beta, const ProgressCallback &cb) override
virtual Expected< void > calcFromGridWithDistances(std::vector< float > &res, const Vector3i &dims, const AffineXf3f &gridToMeshXf, const DistanceToMeshOptions &options, const ProgressCallback &cb)=0
virtual ~IFastWindingNumber()=default
virtual ~IFastWindingNumberByParts()=default
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
options determining computation of distance from a point to a mesh
Definition MRDistanceToMeshOptions.h:14
Definition MRMesh.h:23