17using SeparationPointSet = std::array<VertId, size_t( NeighborDir::Count )>;
18using SeparationPointMap = HashMap<size_t, SeparationPointSet>;
21class SeparationPointStorage
42 Block &
getBlock(
size_t blockIndex ) {
return blocks_[blockIndex]; }
49 auto findSeparationPointSet(
size_t voxelId )
const ->
const SeparationPointSet *
51 const auto & map = blocks_[voxelId / blockSize_].smap;
52 auto it = map.find( voxelId );
53 return ( it != map.end() ) ? &it->second :
nullptr;
57 MRMESH_API Triangulation getTriangulation( Vector<VoxelId, FaceId>* outVoxelPerFaceMap =
nullptr )
const;
60 MRMESH_API void getPoints( VertCoords & points )
const;
63 size_t blockSize_ = 0;
64 std::vector<Block> blocks_;
#define MRMESH_API
Definition MRMeshFwd.h:80
unsafe void resize(ulong blockCount, ulong blockSize)
unsafe int makeUniqueVids()
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