MeshLib C++ Docs
Loading...
Searching...
No Matches
MRLocalTriangulations.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRId.h"
4#include "MRVector.h"
5#include "MRBuffer.h"
6#include <array>
7#include <cstdint>
8#include <functional>
9#include <optional>
10
11namespace MR
12{
13
15struct FanRecord
16{
19 VertId border;
20
22 std::uint32_t firstNei;
23
24 FanRecord( VertId b = {}, std::uint32_t fn = 0 ) : border( b ), firstNei( fn ) {}
25 FanRecord( NoInit ) : border( noInit ) {}
26};
27
29struct FanRecordWithCenter : FanRecord
30{
32 VertId center;
33
34 FanRecordWithCenter( VertId c = {}, VertId b = {}, std::uint32_t fn = 0 ) : FanRecord( b, fn ), center( c ) {}
35 FanRecordWithCenter( NoInit ) : FanRecord( noInit ), center( noInit ) {}
36};
37
39struct SomeLocalTriangulations
40{
41 std::vector<VertId> neighbors;
42 std::vector<FanRecordWithCenter> fanRecords;
43 VertId maxCenterId; //in fanRecords
44};
45
47struct AllLocalTriangulations
48{
49 Buffer<VertId> neighbors;
50 Vector<FanRecord, VertId> fanRecords;
51};
52
55[[nodiscard]] MRMESH_API std::optional<AllLocalTriangulations> uniteLocalTriangulations( const std::vector<SomeLocalTriangulations> & in, const ProgressCallback & progress = {} );
56
58[[nodiscard]] MRMESH_API Vector3f computeNormal( const AllLocalTriangulations & triangs, const VertCoords & points, VertId v );
59
61MRMESH_API void orientLocalTriangulations( AllLocalTriangulations & triangs, const VertCoords & coords, const VertBitSet & region, const VertNormals & targetDir );
62MRMESH_API void orientLocalTriangulations( AllLocalTriangulations & triangs, const VertCoords & coords, const VertBitSet & region, const std::function<Vector3f(VertId)> & targetDir );
63
65MRMESH_API bool autoOrientLocalTriangulations( const PointCloud & pointCloud, AllLocalTriangulations & triangs, const VertBitSet & region, ProgressCallback progress = {},
66 Triangulation * outRep3 = nullptr,
67 Triangulation * outRep2 = nullptr );
68
73using TrianglesRepetitions = std::array<int, 4>;
74
76[[nodiscard]] MRMESH_API TrianglesRepetitions computeTrianglesRepetitions( const AllLocalTriangulations & triangs );
77
79[[nodiscard]] MRMESH_API std::vector<UnorientedTriangle> findRepeatedUnorientedTriangles( const AllLocalTriangulations & triangs, int repetitions );
80
82[[nodiscard]] MRMESH_API Triangulation findRepeatedOrientedTriangles( const AllLocalTriangulations & triangs, int repetitions );
83
87 Triangulation * outRep3,
88 Triangulation * outRep2 );
89
90} //namespace MR
#define MRMESH_API
Definition MRMeshFwd.h:80
Definition MRLocalTriangulations.h:48
unsafe FanRecordWithCenter(MR._InOpt_VertId c=default, MR._InOpt_VertId b=default, uint? fn=null)
new unsafe ref MR.VertId center
unsafe FanRecord(MR._InOpt_VertId b=default, uint? fn=null)
new unsafe ref MR.VertId border
new unsafe ref uint firstNei
Definition MRMesh/MRPointCloud.h:17
Definition MRCameraOrientationPlugin.h:8
MRMESH_API TrianglesRepetitions computeTrianglesRepetitions(const AllLocalTriangulations &triangs)
computes statistics about the number of triangle repetitions in local triangulations
MRMESH_API std::optional< AllLocalTriangulations > uniteLocalTriangulations(const std::vector< SomeLocalTriangulations > &in, const ProgressCallback &progress={})
MRMESH_API Triangulation findRepeatedOrientedTriangles(const AllLocalTriangulations &triangs, int repetitions)
from local triangulations returns all oriented triangles with given number of repetitions each in [1,...
MRMESH_API void orientLocalTriangulations(AllLocalTriangulations &triangs, const VertCoords &coords, const VertBitSet &region, const VertNormals &targetDir)
orient neighbors around each point in
MRMESH_API std::vector< UnorientedTriangle > findRepeatedUnorientedTriangles(const AllLocalTriangulations &triangs, int repetitions)
from local triangulations returns all unoriented triangles with given number of repetitions each in [...
MRMESH_API Vector3f computeNormal(const AllLocalTriangulations &triangs, const VertCoords &points, VertId v)
compute normal at point by averaging neighbor triangle normals weighted by triangle's angle at the po...
MRMESH_API bool autoOrientLocalTriangulations(const PointCloud &pointCloud, AllLocalTriangulations &triangs, const VertBitSet &region, ProgressCallback progress={}, Triangulation *outRep3=nullptr, Triangulation *outRep2=nullptr)
orient neighbors around each point in