3#include "MRPch/MRBindingMacros.h"
30 const std::vector<VertId>& fan,
float baseRadius );
66 if ( stable == other.stable )
67 return weight < other.weight;
72 bool isOutdated(
const std::vector<VertId>& neighbors )
const
74 return !neighbors[nextId].valid() || !neighbors[prevId].valid();
82struct TriangulatedFanData
100 MR_BIND_IGNORE std::priority_queue<FanOptimizerQueueElement> queue;
122 const VertBitSet* untrustedNormals =
nullptr;
147 const PointCloud& cloud,
const Settings & settings,
const ProgressCallback & progress = {} );
151 const PointCloud& cloud,
const Settings & settings,
const ProgressCallback & progress = {} );
167 ProgressCallback cb = {} );
#define MRMESH_API
Definition MRMeshFwd.h:80
the class stores some number of smallest elements from a larger number of candidates
Definition MRFewSmallest.h:14
Definition MRMesh/MRPointCloud.h:17
Definition MRPointCloudTriangulationHelpers.h:55
unsafe FanOptimizerQueueElement()
Definition MRPointCloudTriangulationHelpers.h:104
new unsafe ref bool automaticRadiusIncrease
new unsafe MR.? Const_VertCoords orientedNormals
new unsafe ref int maxRemoves
new unsafe ref int numNeis
new unsafe MR.? Const_PointCloud searchNeighbors
new unsafe ref float critAngle
new unsafe MR.Misc.? Box< float > actualRadius
new unsafe ref float radius
new unsafe MR.Std.? Vector_MRVertId allNeighbors
new unsafe ref float boundaryAngle
Definition MRPointCloudTriangulationHelpers.h:83
new unsafe MR.Std.Vector_MRVertId neighbors
new unsafe MR.Std.Vector_StdPairDoubleInt cacheAngleOrder
new unsafe ref MR.VertId border
new unsafe MR.FewSmallest_MRPointsProjectionResult nearesetPoints
MRMESH_API void findNeighborsInBall(const PointCloud &pointCloud, VertId v, float radius, std::vector< VertId > &neighbors)
Finds all neighbors of v in given radius (v excluded)
MRMESH_API float updateNeighborsRadius(const VertCoords &points, VertId v, VertId boundaryV, const std::vector< VertId > &fan, float baseRadius)
Finds max radius of neighbors search, for possible better local triangulation.
MRMESH_API bool isBoundaryPoint(const PointCloud &cloud, VertId v, const Settings &settings, TriangulatedFanData &fanData)
Checks if given vertex is on boundary of the point cloud, by constructing local triangulation around ...
MRMESH_API void filterNeighbors(const VertNormals &orientedNormals, const VertBitSet *untrustedNormals, VertId v, std::vector< VertId > &neighbors)
Filter neighbors with crossing normals.
MRMESH_API float findNumNeighbors(const PointCloud &pointCloud, VertId v, int numNeis, std::vector< VertId > &neighbors, FewSmallest< PointsProjectionResult > &tmp, float upDistLimitSq=FLT_MAX)
Finds at most given number of neighbors of v (v excluded)
MRMESH_API std::optional< std::vector< SomeLocalTriangulations > > buildLocalTriangulations(const PointCloud &cloud, const Settings &settings, const ProgressCallback &progress={})
MRMESH_API std::optional< VertBitSet > findBoundaryPoints(const PointCloud &pointCloud, const Settings &settings, ProgressCallback cb={})
Returns bit set of points that are considered as boundary by calling isBoundaryPoint in each.
MRMESH_API void buildLocalTriangulation(const PointCloud &cloud, VertId v, const Settings &settings, TriangulatedFanData &fanData)
constructs local triangulation around given point
MRMESH_API std::optional< AllLocalTriangulations > buildUnitedLocalTriangulations(const PointCloud &cloud, const Settings &settings, const ProgressCallback &progress={})
Definition MRCameraOrientationPlugin.h:8