Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::VertexFaceIndex Struct Reference

#include <src/libslic3r/TriangleMesh.hpp>

+ Collaboration diagram for Slic3r::VertexFaceIndex:

Public Types

using iterator = std::vector< size_t >::const_iterator
 

Public Member Functions

 VertexFaceIndex (const indexed_triangle_set &its)
 
 VertexFaceIndex ()
 
void create (const indexed_triangle_set &its)
 
void clear ()
 
iterator begin (size_t vertex_id) const throw ()
 
iterator end (size_t vertex_id) const throw ()
 
size_t count (size_t vertex_id) const throw ()
 
const Range< iteratoroperator[] (size_t vertex_id) const
 

Private Attributes

std::vector< size_t > m_vertex_to_face_start
 
std::vector< size_t > m_vertex_faces_all
 

Detailed Description

Member Typedef Documentation

◆ iterator

using Slic3r::VertexFaceIndex::iterator = std::vector<size_t>::const_iterator

Constructor & Destructor Documentation

◆ VertexFaceIndex() [1/2]

Slic3r::VertexFaceIndex::VertexFaceIndex ( const indexed_triangle_set its)
inline
167{ this->create(its); }
void create(const indexed_triangle_set &its)
Definition TriangleMesh.cpp:1495

References create().

+ Here is the call graph for this function:

◆ VertexFaceIndex() [2/2]

Slic3r::VertexFaceIndex::VertexFaceIndex ( )
inline
168{}

Member Function Documentation

◆ begin()

iterator Slic3r::VertexFaceIndex::begin ( size_t  vertex_id) const
throw (
)
inline
174{ return m_vertex_faces_all.begin() + m_vertex_to_face_start[vertex_id]; }
std::vector< size_t > m_vertex_to_face_start
Definition TriangleMesh.hpp:182
std::vector< size_t > m_vertex_faces_all
Definition TriangleMesh.hpp:183

References m_vertex_faces_all, and m_vertex_to_face_start.

Referenced by operator[]().

+ Here is the caller graph for this function:

◆ clear()

void Slic3r::VertexFaceIndex::clear ( )
inline

◆ count()

size_t Slic3r::VertexFaceIndex::count ( size_t  vertex_id) const
throw (
)
inline
177{ return m_vertex_to_face_start[vertex_id + 1] - m_vertex_to_face_start[vertex_id]; }

References m_vertex_to_face_start.

◆ create()

void Slic3r::VertexFaceIndex::create ( const indexed_triangle_set its)
1496{
1497 m_vertex_to_face_start.assign(its.vertices.size() + 1, 0);
1498 // 1) Calculate vertex incidence by scatter.
1499 for (auto &face : its.indices) {
1500 ++ m_vertex_to_face_start[face(0) + 1];
1501 ++ m_vertex_to_face_start[face(1) + 1];
1502 ++ m_vertex_to_face_start[face(2) + 1];
1503 }
1504 // 2) Prefix sum to calculate offsets to m_vertex_faces_all.
1505 for (size_t i = 2; i < m_vertex_to_face_start.size(); ++ i)
1507 // 3) Scatter indices of faces incident to a vertex into m_vertex_faces_all.
1509 for (size_t face_idx = 0; face_idx < its.indices.size(); ++ face_idx) {
1510 auto &face = its.indices[face_idx];
1511 for (int i = 0; i < 3; ++ i)
1512 m_vertex_faces_all[m_vertex_to_face_start[face(i)] ++] = face_idx;
1513 }
1514 // 4) The previous loop modified m_vertex_to_face_start. Revert the change.
1515 for (auto i = int(m_vertex_to_face_start.size()) - 1; i > 0; -- i)
1517 m_vertex_to_face_start.front() = 0;
1518}
std::vector< stl_vertex > vertices
Definition stl.h:165
std::vector< stl_triangle_vertex_indices > indices
Definition stl.h:164

References indexed_triangle_set::indices, and indexed_triangle_set::vertices.

Referenced by VertexFaceIndex().

+ Here is the caller graph for this function:

◆ end()

iterator Slic3r::VertexFaceIndex::end ( size_t  vertex_id) const
throw (
)
inline
175{ return m_vertex_faces_all.begin() + m_vertex_to_face_start[vertex_id + 1]; }

References m_vertex_faces_all, and m_vertex_to_face_start.

Referenced by operator[]().

+ Here is the caller graph for this function:

◆ operator[]()

const Range< iterator > Slic3r::VertexFaceIndex::operator[] ( size_t  vertex_id) const
inline
179{ return {begin(vertex_id), end(vertex_id)}; }
iterator end(size_t vertex_id) const
Definition TriangleMesh.hpp:175
iterator begin(size_t vertex_id) const
Definition TriangleMesh.hpp:174

References begin(), and end().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_vertex_faces_all

std::vector<size_t> Slic3r::VertexFaceIndex::m_vertex_faces_all
private

Referenced by begin(), clear(), and end().

◆ m_vertex_to_face_start

std::vector<size_t> Slic3r::VertexFaceIndex::m_vertex_to_face_start
private

Referenced by begin(), clear(), count(), and end().


The documentation for this struct was generated from the following files: