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{
15
16
19{
22 VertId border;
23
25 std::uint32_t firstNei;
26
27 FanRecord( VertId b = {}, std::uint32_t fn = 0 ) : border( b ), firstNei( fn ) {}
28 FanRecord( NoInit ) : border( noInit ) {}
29};
30
33{
35 VertId center;
36
37 FanRecordWithCenter( VertId c = {}, VertId b = {}, std::uint32_t fn = 0 ) : FanRecord( b, fn ), center( c ) {}
38 FanRecordWithCenter( NoInit ) : FanRecord( noInit ), center( noInit ) {}
39};
40
43{
44 std::vector<VertId> neighbors;
45 std::vector<FanRecordWithCenter> fanRecords;
46 VertId maxCenterId;
47};
48
55
58[[nodiscard]] MRMESH_API std::optional<AllLocalTriangulations> uniteLocalTriangulations( const std::vector<SomeLocalTriangulations> & in, const ProgressCallback & progress = {} );
59
61[[nodiscard]] MRMESH_API Vector3f computeNormal( const AllLocalTriangulations & triangs, const VertCoords & points, VertId v );
62
64MRMESH_API void orientLocalTriangulations( AllLocalTriangulations & triangs, const VertCoords & coords, const VertBitSet & region, const VertNormals & targetDir );
65MRMESH_API void orientLocalTriangulations( AllLocalTriangulations & triangs, const VertCoords & coords, const VertBitSet & region, const std::function<Vector3f(VertId)> & targetDir );
66
68MRMESH_API bool autoOrientLocalTriangulations( const PointCloud & pointCloud, AllLocalTriangulations & triangs, const VertBitSet & region, ProgressCallback progress = {},
69 Triangulation * outRep3 = nullptr,
70 Triangulation * outRep2 = nullptr );
71
76using TrianglesRepetitions = std::array<int, 4>;
77
80
82[[nodiscard]] MRMESH_API std::vector<UnorientedTriangle> findRepeatedUnorientedTriangles( const AllLocalTriangulations & triangs, int repetitions );
83
85[[nodiscard]] MRMESH_API Triangulation findRepeatedOrientedTriangles( const AllLocalTriangulations & triangs, int repetitions );
86
90 Triangulation * outRep3,
91 Triangulation * outRep2 );
92
93}
std::vector<V>-like container that is 1) resized without initialization of its elements,...
Definition MRBuffer.h:58
std::vector<T>-like container that requires specific indexing type,
Definition MRVector.h:23
FanRecordWithCenter(VertId c={}, VertId b={}, std::uint32_t fn=0)
Definition MRLocalTriangulations.h:37
VertId center
center point in the fan
Definition MRLocalTriangulations.h:35
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
std::vector< FanRecordWithCenter > fanRecords
Definition MRLocalTriangulations.h:45
FanRecord(NoInit)
Definition MRLocalTriangulations.h:28
std::array< int, 4 > TrianglesRepetitions
Definition MRLocalTriangulations.h:76
Buffer< VertId > neighbors
Definition MRLocalTriangulations.h:52
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 [...
Vector< FanRecord, VertId > fanRecords
Definition MRLocalTriangulations.h:53
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
VertId maxCenterId
Definition MRLocalTriangulations.h:46
VertId border
Definition MRLocalTriangulations.h:22
FanRecordWithCenter(NoInit)
Definition MRLocalTriangulations.h:38
std::uint32_t firstNei
the position of first neigbor in LocalTriangulations::neighbours
Definition MRLocalTriangulations.h:25
std::vector< VertId > neighbors
Definition MRLocalTriangulations.h:44
FanRecord(VertId b={}, std::uint32_t fn=0)
Definition MRLocalTriangulations.h:27
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
triangulations for all points, with easy access by VertId
Definition MRLocalTriangulations.h:51
describes one fan of triangles around a point including the point
Definition MRLocalTriangulations.h:33
describes one fan of triangles around a point excluding the point
Definition MRLocalTriangulations.h:19
Definition MRPointCloud.h:17
describes a number of local triangulations of some points (e.g. assigned to a thread)
Definition MRLocalTriangulations.h:43