OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
libvgcode::Layers Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libvgcode/src/Layers.hpp>

Collaboration diagram for libvgcode::Layers:

Classes

struct  Item

Public Member Functions

void update (const PathVertex &vertex, uint32_t vertex_id)
void reset ()
bool empty () const
std::size_t count () const
std::vector< float > get_times (ETimeMode mode) const
std::vector< float > get_zs () const
float get_layer_time (ETimeMode mode, std::size_t layer_id) const
float get_layer_z (std::size_t layer_id) const
std::size_t get_layer_id_at (float z) const
const Interval & get_view_range () const
void set_view_range (const Interval &range)
void set_view_range (Interval::value_type min, Interval::value_type max)
bool layer_contains_colorprint_options (std::size_t layer_id) const
std::size_t size_in_bytes_cpu () const

Private Attributes

std::vector< Item > m_items
Range m_view_range

Detailed Description


Class Documentation

◆ libvgcode::Layers::Item

struct libvgcode::Layers::Item
Collaboration diagram for libvgcode::Layers::Item:
Class Members
bool contains_colorprint_options { false }
Range range
array< float, TIME_MODES_COUNT > times { 0.0f, 0.0f }
float z { 0.0f }

Member Function Documentation

◆ count()

std::size_t libvgcode::Layers::count ( ) const
inline
26{ return m_items.size(); }
std::vector< Item > m_items
Definition Layers.hpp:59

References m_items.

◆ empty()

bool libvgcode::Layers::empty ( ) const
inline
25{ return m_items.empty(); }

References m_items.

◆ get_layer_id_at()

size_t libvgcode::Layers::get_layer_id_at ( float z) const
77{
78 auto iter = std::upper_bound(m_items.begin(), m_items.end(), z, [](float z, const Item& item) { return item.z > z; });
79 return std::distance(m_items.begin(), iter);
80}
Definition Layers.hpp:52

References m_items.

◆ get_layer_time()

float libvgcode::Layers::get_layer_time ( ETimeMode mode,
std::size_t layer_id ) const
inline
31 {
32 return (mode < ETimeMode::COUNT&& layer_id < m_items.size()) ?
33 m_items[layer_id].times[static_cast<std::size_t>(mode)] : 0.0f;
34 }
@ COUNT
Definition Types.hpp:203

References libvgcode::COUNT, and m_items.

◆ get_layer_z()

float libvgcode::Layers::get_layer_z ( std::size_t layer_id) const
inline
35 {
36 return (layer_id < m_items.size()) ? m_items[layer_id].z : 0.0f;
37 }

References m_items.

◆ get_times()

std::vector< float > libvgcode::Layers::get_times ( ETimeMode mode) const
56{
57 std::vector<float> ret;
58 if (mode < ETimeMode::COUNT) {
59 for (const Item& item : m_items) {
60 ret.emplace_back(item.times[static_cast<size_t>(mode)]);
61 }
62 }
63 return ret;
64}

References libvgcode::COUNT, and m_items.

◆ get_view_range()

const Interval & libvgcode::Layers::get_view_range ( ) const
inline
40{ return m_view_range.get(); }
Range m_view_range
Definition Layers.hpp:60

References m_view_range.

◆ get_zs()

std::vector< float > libvgcode::Layers::get_zs ( ) const
67{
68 std::vector<float> ret;
69 ret.reserve(m_items.size());
70 for (const Item& item : m_items) {
71 ret.emplace_back(item.z);
72 }
73 return ret;
74}

References m_items.

◆ layer_contains_colorprint_options()

bool libvgcode::Layers::layer_contains_colorprint_options ( std::size_t layer_id) const
inline
44 {
45 return (layer_id < m_items.size()) ? m_items[layer_id].contains_colorprint_options : false;
46 }

References m_items.

◆ reset()

void libvgcode::Layers::reset ( )
50{
51 m_items.clear();
52 m_view_range.reset();
53}

References m_items, and m_view_range.

◆ set_view_range() [1/2]

void libvgcode::Layers::set_view_range ( const Interval & range)
inline
41{ set_view_range(range[0], range[1]); }
void set_view_range(const Interval &range)
Definition Layers.hpp:41

References set_view_range().

Referenced by set_view_range().

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

◆ set_view_range() [2/2]

void libvgcode::Layers::set_view_range ( Interval::value_type min,
Interval::value_type max )
inline
42{ m_view_range.set(min, max); }

References m_view_range.

◆ size_in_bytes_cpu()

size_t libvgcode::Layers::size_in_bytes_cpu ( ) const
83{
84 size_t ret = STDVEC_MEMSIZE(m_items, Item);
85 return ret;
86}
#define STDVEC_MEMSIZE(NAME, TYPE)
|/ Copyright (c) Prusa Research 2023 Enrico Turri @enricoturri1966 |/ |/ libvgcode is released under ...
Definition Utils.hpp:15

References m_items, and STDVEC_MEMSIZE.

◆ update()

void libvgcode::Layers::update ( const PathVertex & vertex,
uint32_t vertex_id )
26{
27 if (m_items.empty() || vertex.layer_id == m_items.size()) {
28 // this code assumes that gcode paths are sent sequentially, one layer after the other
29 assert(vertex.layer_id == static_cast<uint32_t>(m_items.size()));
30 Item& item = m_items.emplace_back(Item());
31 if (vertex.type == EMoveType::Extrude && vertex.role != EGCodeExtrusionRole::Custom)
32 item.z = vertex.position[2];
33 item.range.set(vertex_id, vertex_id);
34 item.times = vertex.times;
35 item.contains_colorprint_options |= is_colorprint_option(vertex);
36 }
37 else {
38 Item& item = m_items.back();
39 if (vertex.type == EMoveType::Extrude && vertex.role != EGCodeExtrusionRole::Custom && item.z != vertex.position[2])
40 item.z = vertex.position[2];
41 item.range.set_max(vertex_id);
42 for (size_t i = 0; i < TIME_MODES_COUNT; ++i) {
43 item.times[i] += vertex.times[i];
44 }
45 item.contains_colorprint_options |= is_colorprint_option(vertex);
46 }
47}
@ Extrude
Definition Types.hpp:132
@ Custom
Definition Types.hpp:159
static constexpr std::size_t TIME_MODES_COUNT
Definition Types.hpp:206
static bool is_colorprint_option(const PathVertex &v)
Definition Layers.cpp:20

References libvgcode::Layers::Item::contains_colorprint_options, libvgcode::Custom, libvgcode::Extrude, libvgcode::is_colorprint_option(), libvgcode::PathVertex::layer_id, m_items, libvgcode::PathVertex::position, libvgcode::Layers::Item::range, libvgcode::PathVertex::role, libvgcode::Range::set(), libvgcode::Range::set_max(), libvgcode::TIME_MODES_COUNT, libvgcode::Layers::Item::times, libvgcode::PathVertex::times, libvgcode::PathVertex::type, and libvgcode::Layers::Item::z.

Here is the call graph for this function:

Member Data Documentation

◆ m_items

◆ m_view_range

Range libvgcode::Layers::m_view_range
private

The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libvgcode/src/Layers.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libvgcode/src/Layers.cpp