MeshLib C++ Docs
Loading...
Searching...
No Matches
MRSeparationPoint.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRId.h"
4#include "MRVector3.h"
5#include "MRVector.h"
6#include "MRphmap.h"
7#include <array>
8
9namespace MR
10{
11
12enum class NeighborDir
13{
14 X, Y, Z, Count
15};
16
17using SeparationPointSet = std::array<VertId, size_t( NeighborDir::Count )>;
18using SeparationPointMap = HashMap<size_t, SeparationPointSet>;
19
21class SeparationPointStorage
22{
23public:
24 struct alignas(64) Block
25 {
26 SeparationPointMap smap;
27 std::vector<Vector3f> coords;
30
32 VertId nextVid() const { return VertId( coords.size() ); }
33
36 };
37
39 MRMESH_API void resize( size_t blockCount, size_t blockSize );
40
42 Block & getBlock( size_t blockIndex ) { return blocks_[blockIndex]; }
43
47
49 auto findSeparationPointSet( size_t voxelId ) const -> const SeparationPointSet *
50 {
51 const auto & map = blocks_[voxelId / blockSize_].smap;
52 auto it = map.find( voxelId );
53 return ( it != map.end() ) ? &it->second : nullptr;
54 }
55
57 MRMESH_API Triangulation getTriangulation( Vector<VoxelId, FaceId>* outVoxelPerFaceMap = nullptr ) const;
58
60 MRMESH_API void getPoints( VertCoords & points ) const;
61
62private:
63 size_t blockSize_ = 0;
64 std::vector<Block> blocks_;
65};
66
67} //namespace MR
#define MRMESH_API
Definition MRMeshFwd.h:80
unsafe void resize(ulong blockCount, ulong blockSize)
unsafe MR.SeparationPointStorage.Block getBlock(ulong blockIndex)
std::vector<T>-like container that requires specific indexing type,
Definition MRVector.h:19
Definition MRCameraOrientationPlugin.h:8
Definition MRSeparationPoint.h:25
SeparationPointMap smap
Definition MRSeparationPoint.h:26
VertId nextVid() const
during filling, it is the id of next valid point;
Definition MRSeparationPoint.h:32
Vector< VoxelId, FaceId > faceMap
Definition MRSeparationPoint.h:35
std::vector< Vector3f > coords
Definition MRSeparationPoint.h:27
Triangulation tris
Definition MRSeparationPoint.h:34
VertId shift
after makeUniqueVids(), it is the unique id of first point in coords
Definition MRSeparationPoint.h:29