OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::VertexFaceIndex Struct Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/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< iterator > operator[] (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
177{ this->create(its); }
void create(const indexed_triangle_set &its)
Definition TriangleMesh.cpp:1590

References create().

Here is the call graph for this function:

◆ VertexFaceIndex() [2/2]

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

Member Function Documentation

◆ begin()

iterator Slic3r::VertexFaceIndex::begin ( size_t vertex_id) const
throw ( )
inline
184{ 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:192
std::vector< size_t > m_vertex_faces_all
Definition TriangleMesh.hpp:193

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
187{ 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)
1591{
1592 m_vertex_to_face_start.assign(its.vertices.size() + 1, 0);
1593 // 1) Calculate vertex incidence by scatter.
1594 for (auto &face : its.indices) {
1595 ++ m_vertex_to_face_start[face(0) + 1];
1596 ++ m_vertex_to_face_start[face(1) + 1];
1597 ++ m_vertex_to_face_start[face(2) + 1];
1598 }
1599 // 2) Prefix sum to calculate offsets to m_vertex_faces_all.
1600 for (size_t i = 2; i < m_vertex_to_face_start.size(); ++ i)
1602 // 3) Scatter indices of faces incident to a vertex into m_vertex_faces_all.
1604 for (size_t face_idx = 0; face_idx < its.indices.size(); ++ face_idx) {
1605 auto &face = its.indices[face_idx];
1606 for (int i = 0; i < 3; ++ i)
1607 m_vertex_faces_all[m_vertex_to_face_start[face(i)] ++] = face_idx;
1608 }
1609 // 4) The previous loop modified m_vertex_to_face_start. Revert the change.
1610 for (auto i = int(m_vertex_to_face_start.size()) - 1; i > 0; -- i)
1612 m_vertex_to_face_start.front() = 0;
1613}

References create(), m_vertex_faces_all, and m_vertex_to_face_start.

Referenced by VertexFaceIndex(), and create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ end()

iterator Slic3r::VertexFaceIndex::end ( size_t vertex_id) const
throw ( )
inline
185{ 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
189{ return {begin(vertex_id), end(vertex_id)}; }
iterator end(size_t vertex_id) const
Definition TriangleMesh.hpp:185
iterator begin(size_t vertex_id) const
Definition TriangleMesh.hpp:184

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(), create(), and end().

◆ m_vertex_to_face_start

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

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


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