MeshLib C++ Docs
Loading...
Searching...
No Matches
MRIdentifyVertices.h
Go to the documentation of this file.
1#pragma once
2
4#include "MRVector3.h"
5#include "MRVector.h"
6#include "MRphmap.h"
7#include <cstring>
8
9namespace MR
10{
13
14
15namespace MeshBuilder
16{
17
20{
21 bool operator() ( const Vector3f & a, const Vector3f & b ) const
22 {
23 static_assert( sizeof( Vector3f ) == 12 );
24 char ax[12], bx[12];
25 std::memcpy( ax, &a, 12 );
26 std::memcpy( bx, &b, 12 );
27 return std::memcmp( ax, bx, 12 ) == 0;
28 }
29};
30
36{
37public:
39 MRMESH_API void reserve( size_t numTris );
41 MRMESH_API void addTriangles( const std::vector<Triangle3f> & buffer );
43 size_t numTris() const { return t_.size(); }
45 Triangulation takeTriangulation() { return std::move( t_ ); }
47 VertCoords takePoints() { return std::move( points_ ); }
48
49private:
50 using VertInHMap = std::array<VertId*, 3>;
51 std::vector<VertInHMap> vertsInHMap_;
52 using HMap = ParallelHashMap<Vector3f, VertId, phmap::priv::hash_default_hash<Vector3f>, equalVector3f>;
53 HMap hmap_;
54 Triangulation t_;
55 VertCoords points_;
56};
57
58}
59
60}
Definition MRIdentifyVertices.h:36
MRMESH_API void addTriangles(const std::vector< Triangle3f > &buffer)
identifies vertices from a chunk of triangles
Triangulation takeTriangulation()
obtains triangulation with vertex ids
Definition MRIdentifyVertices.h:45
bool operator()(const Vector3f &a, const Vector3f &b) const
Definition MRIdentifyVertices.h:21
VertCoords takePoints()
obtains coordinates of unique points in the order of vertex ids
Definition MRIdentifyVertices.h:47
MRMESH_API void reserve(size_t numTris)
prepare identification of vertices from given this number of triangles
size_t numTris() const
returns the number of triangles added so far
Definition MRIdentifyVertices.h:43
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
this makes bit-wise comparison of two Vector3f's thus making two NaNs equal
Definition MRIdentifyVertices.h:20