New gcode visualization: render in gray color layers containing pause print or custom gcode options when in Color Print view

This commit is contained in:
enricoturri1966 2023-11-09 12:38:26 +01:00 committed by Lukas Matena
parent e484726a98
commit 0764d9ffda
4 changed files with 47 additions and 21 deletions

View File

@ -969,7 +969,7 @@ private:
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#if ENABLE_NEW_GCODE_VIEWER
libvgcode::Viewer m_new_viewer;
bool m_use_new_viewer{ false };
bool m_use_new_viewer{ true };
#endif // ENABLE_NEW_GCODE_VIEWER
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

View File

@ -9,6 +9,8 @@
///|/
#include "Layers.hpp"
#include "PathVertex.hpp"
//################################################################################################################################
// PrusaSlicer development only -> !!!TO BE REMOVED!!!
#if ENABLE_NEW_GCODE_VIEWER
@ -18,33 +20,46 @@
namespace libvgcode {
void Layers::update(uint32_t layer_id, uint32_t vertex_id)
static bool is_colorprint_option(const PathVertex& v)
{
if (m_ranges.empty() || layer_id == m_ranges.size()) {
return v.type == EMoveType::PausePrint || v.type == EMoveType::CustomGCode;
}
void Layers::update(const PathVertex& vertex, uint32_t vertex_id)
{
if (m_items.empty() || vertex.layer_id == m_items.size()) {
// this code assumes that gcode paths are sent sequentially, one layer after the other
assert(layer_id == static_cast<uint32_t>(m_ranges.size()));
Range& range = m_ranges.emplace_back(Range());
range.set(vertex_id, vertex_id);
assert(vertex.layer_id == static_cast<uint32_t>(m_items.size()));
Item& item = m_items.emplace_back(Item());
item.range.set(vertex_id, vertex_id);
item.contains_colorprint_options |= is_colorprint_option(vertex);
}
else {
Range& range = m_ranges.back();
range.set(range.get()[0], vertex_id);
Item& item = m_items.back();
item.range.set(item.range.get()[0], vertex_id);
item.contains_colorprint_options |= is_colorprint_option(vertex);
}
}
void Layers::reset()
{
m_ranges.clear();
m_items.clear();
}
bool Layers::empty() const
{
return m_ranges.empty();
return m_items.empty();
}
size_t Layers::size() const
size_t Layers::get_layers_count() const
{
return m_ranges.size();
return m_items.size();
}
bool Layers::layer_contains_colorprint_options(uint32_t layer_id) const
{
return (layer_id < static_cast<uint32_t>(m_items.size())) ? m_items[layer_id].contains_colorprint_options : false;
}
} // namespace libvgcode

View File

@ -16,17 +16,29 @@
namespace libvgcode {
struct PathVertex;
class Layers
{
public:
void update(uint32_t layer_id, uint32_t vertex_id);
void update(const PathVertex& vertex, uint32_t vertex_id);
void reset();
bool empty() const;
size_t size() const;
size_t get_layers_count() const;
bool layer_contains_colorprint_options(uint32_t layer_id) const;
private:
std::vector<Range> m_ranges;
struct Item
{
Range range;
bool contains_colorprint_options{ false };
Item() = default;
};
std::vector<Item> m_items;
};
} // namespace libvgcode

View File

@ -607,7 +607,7 @@ void ViewerImpl::load(const Slic3r::GCodeProcessorResult& gcode_result, const GC
static_cast<uint32_t>(curr.layer_id) };
m_vertices_map.emplace_back(static_cast<uint32_t>(i) - seams_count);
m_vertices.emplace_back(vertex);
m_layers.update(static_cast<uint32_t>(curr.layer_id), static_cast<uint32_t>(m_vertices.size()));
m_layers.update(vertex, static_cast<uint32_t>(m_vertices.size()));
}
}
@ -616,7 +616,7 @@ void ViewerImpl::load(const Slic3r::GCodeProcessorResult& gcode_result, const GC
static_cast<uint8_t>(curr.cp_color_id), static_cast<uint32_t>(curr.layer_id) };
m_vertices_map.emplace_back(static_cast<uint32_t>(i) - seams_count);
m_vertices.emplace_back(vertex);
m_layers.update(static_cast<uint32_t>(curr.layer_id), static_cast<uint32_t>(m_vertices.size()));
m_layers.update(vertex, static_cast<uint32_t>(m_vertices.size()));
#if !ENABLE_NEW_GCODE_NO_COG_AND_TOOL_MARKERS
// updates calculation for center of gravity
@ -738,7 +738,7 @@ void ViewerImpl::load(const Slic3r::GCodeProcessorResult& gcode_result, const GC
}
if (!m_layers.empty())
set_layers_range(0, static_cast<uint32_t>(m_layers.size() - 1));
set_layers_range(0, static_cast<uint32_t>(m_layers.get_layers_count() - 1));
update_view_global_range();
m_settings.update_colors = true;
}
@ -833,8 +833,7 @@ void ViewerImpl::update_colors()
const uint32_t top_layer_id = m_settings.top_layer_only_view ? m_layers_range.get()[1] : 0;
std::vector<float> colors(m_vertices.size());
for (size_t i = 0; i < m_vertices.size(); i++) {
colors[i] = (m_vertices[i].layer_id < top_layer_id) ?
encode_color(Dummy_Color) : encode_color(select_color(m_vertices[i]));
colors[i] = (m_vertices[i].layer_id < top_layer_id) ? encode_color(Dummy_Color) : encode_color(select_color(m_vertices[i]));
}
// update gpu buffer for colors
@ -1332,7 +1331,7 @@ Color ViewerImpl::select_color(const PathVertex& v) const
}
case EViewType::ColorPrint:
{
return m_tool_colors[v.color_id % m_tool_colors.size()];
return m_layers.layer_contains_colorprint_options(v.layer_id) ? Dummy_Color : m_tool_colors[v.color_id % m_tool_colors.size()];
}
default: { break; }
}