mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 07:05:57 +08:00
New gcode visualization integration - Colors
This commit is contained in:
parent
735fc6d107
commit
585bcb78c3
@ -153,10 +153,12 @@ namespace ImGui
|
|||||||
const wchar_t PlugMarker = 0x1C;
|
const wchar_t PlugMarker = 0x1C;
|
||||||
const wchar_t DowelMarker = 0x1D;
|
const wchar_t DowelMarker = 0x1D;
|
||||||
const wchar_t SnapMarker = 0x1E;
|
const wchar_t SnapMarker = 0x1E;
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
const wchar_t HorizontalHide = 0xB0;
|
const wchar_t HorizontalHide = 0xB1;
|
||||||
const wchar_t HorizontalShow = 0xB1;
|
const wchar_t HorizontalShow = 0xB2;
|
||||||
#endif // ENABLE_NEW_GCODE_VIEWER
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
// Do not forget use following letters only in wstring
|
// Do not forget use following letters only in wstring
|
||||||
const wchar_t DocumentationButton = 0x2600;
|
const wchar_t DocumentationButton = 0x2600;
|
||||||
const wchar_t DocumentationHoverButton = 0x2601;
|
const wchar_t DocumentationHoverButton = 0x2601;
|
||||||
|
@ -52,6 +52,22 @@
|
|||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
static ColorRGBA convert(const libvgcode::Color& c)
|
||||||
|
{
|
||||||
|
return { c[0], c[1], c[2], 1.0f };
|
||||||
|
}
|
||||||
|
|
||||||
|
static libvgcode::Color lerp(const libvgcode::Color& c1, const libvgcode::Color& c2, float t)
|
||||||
|
{
|
||||||
|
t = std::clamp(t, 0.0f, 1.0f);
|
||||||
|
const float one_minus_t = 1.0f - t;
|
||||||
|
return { one_minus_t * c1[0] + t * c2[0], one_minus_t * c1[1] + t * c2[1], one_minus_t * c1[2] + t * c2[2] };
|
||||||
|
}
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
static unsigned char buffer_id(EMoveType type) {
|
static unsigned char buffer_id(EMoveType type) {
|
||||||
return static_cast<unsigned char>(type) - static_cast<unsigned char>(EMoveType::Retract);
|
return static_cast<unsigned char>(type) - static_cast<unsigned char>(EMoveType::Retract);
|
||||||
}
|
}
|
||||||
@ -281,8 +297,17 @@ float GCodeViewer::Extrusions::Range::step_size(EType type) const
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
case EType::Linear: { return (max > min) ? (max - min) / (static_cast<float>(libvgcode::Ranges_Colors.size()) - 1.0f) : 0.0f; }
|
||||||
|
case EType::Logarithmic: { return (max > min && min > 0.0f) ? ::log(max / min) / (static_cast<float>(libvgcode::Ranges_Colors.size()) - 1.0f) : 0.0f; }
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
case EType::Linear: { return (max > min) ? (max - min) / (static_cast<float>(Range_Colors.size()) - 1.0f) : 0.0f; }
|
case EType::Linear: { return (max > min) ? (max - min) / (static_cast<float>(Range_Colors.size()) - 1.0f) : 0.0f; }
|
||||||
case EType::Logarithmic: { return (max > min && min > 0.0f) ? ::log(max / min) / (static_cast<float>(Range_Colors.size()) - 1.0f) : 0.0f; }
|
case EType::Logarithmic: { return (max > min && min > 0.0f) ? ::log(max / min) / (static_cast<float>(Range_Colors.size()) - 1.0f) : 0.0f; }
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,14 +325,30 @@ ColorRGBA GCodeViewer::Extrusions::Range::get_color_at(float value, EType type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
const size_t color_max_idx = libvgcode::Ranges_Colors.size() - 1;
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
const size_t color_max_idx = Range_Colors.size() - 1;
|
const size_t color_max_idx = Range_Colors.size() - 1;
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
// Compute the two colors just below (low) and above (high) the input value
|
// Compute the two colors just below (low) and above (high) the input value
|
||||||
const size_t color_low_idx = std::clamp<size_t>(static_cast<size_t>(global_t), 0, color_max_idx);
|
const size_t color_low_idx = std::clamp<size_t>(static_cast<size_t>(global_t), 0, color_max_idx);
|
||||||
const size_t color_high_idx = std::clamp<size_t>(color_low_idx + 1, 0, color_max_idx);
|
const size_t color_high_idx = std::clamp<size_t>(color_low_idx + 1, 0, color_max_idx);
|
||||||
|
|
||||||
// Interpolate between the low and high colors to find exactly which color the input value should get
|
// Interpolate between the low and high colors to find exactly which color the input value should get
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
return convert(lerp(libvgcode::Ranges_Colors[color_low_idx], libvgcode::Ranges_Colors[color_high_idx], global_t - static_cast<float>(color_low_idx)));
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
return lerp(Range_Colors[color_low_idx], Range_Colors[color_high_idx], global_t - static_cast<float>(color_low_idx));
|
return lerp(Range_Colors[color_low_idx], Range_Colors[color_high_idx], global_t - static_cast<float>(color_low_idx));
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
}
|
}
|
||||||
|
|
||||||
GCodeViewer::SequentialRangeCap::~SequentialRangeCap() {
|
GCodeViewer::SequentialRangeCap::~SequentialRangeCap() {
|
||||||
@ -871,6 +912,9 @@ void GCodeViewer::SequentialView::render(float legend_height)
|
|||||||
gcode_window.render(legend_height, bottom, static_cast<uint64_t>(gcode_ids[current.last]));
|
gcode_window.render(legend_height, bottom, static_cast<uint64_t>(gcode_ids[current.last]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if !ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
const std::array<ColorRGBA, static_cast<size_t>(GCodeExtrusionRole::Count)> GCodeViewer::Extrusion_Role_Colors{ {
|
const std::array<ColorRGBA, static_cast<size_t>(GCodeExtrusionRole::Count)> GCodeViewer::Extrusion_Role_Colors{ {
|
||||||
{ 0.90f, 0.70f, 0.70f, 1.0f }, // GCodeExtrusionRole::None
|
{ 0.90f, 0.70f, 0.70f, 1.0f }, // GCodeExtrusionRole::None
|
||||||
{ 1.00f, 0.90f, 0.30f, 1.0f }, // GCodeExtrusionRole::Perimeter
|
{ 1.00f, 0.90f, 0.30f, 1.0f }, // GCodeExtrusionRole::Perimeter
|
||||||
@ -949,6 +993,9 @@ const std::vector<ColorRGBA> GCodeViewer::Range_Colors{ {
|
|||||||
|
|
||||||
const ColorRGBA GCodeViewer::Wipe_Color = ColorRGBA::YELLOW();
|
const ColorRGBA GCodeViewer::Wipe_Color = ColorRGBA::YELLOW();
|
||||||
const ColorRGBA GCodeViewer::Neutral_Color = ColorRGBA::DARK_GRAY();
|
const ColorRGBA GCodeViewer::Neutral_Color = ColorRGBA::DARK_GRAY();
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // !ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
GCodeViewer::GCodeViewer()
|
GCodeViewer::GCodeViewer()
|
||||||
{
|
{
|
||||||
@ -2860,7 +2907,7 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
|
|||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
switch (m_new_viewer.get_view_type())
|
switch (m_new_viewer.get_view_type())
|
||||||
{
|
{
|
||||||
case libvgcode::EViewType::FeatureType: { color = Extrusion_Role_Colors[static_cast<unsigned int>(path.role)]; break; }
|
case libvgcode::EViewType::FeatureType: { color = convert(libvgcode::Extrusion_Roles_Colors[static_cast<unsigned int>(path.role)]); break; }
|
||||||
case libvgcode::EViewType::Height: { color = m_extrusions.ranges.height.get_color_at(path.height); break; }
|
case libvgcode::EViewType::Height: { color = m_extrusions.ranges.height.get_color_at(path.height); break; }
|
||||||
case libvgcode::EViewType::Width: { color = m_extrusions.ranges.width.get_color_at(path.width); break; }
|
case libvgcode::EViewType::Width: { color = m_extrusions.ranges.width.get_color_at(path.width); break; }
|
||||||
case libvgcode::EViewType::Speed: { color = m_extrusions.ranges.feedrate.get_color_at(path.feedrate); break; }
|
case libvgcode::EViewType::Speed: { color = m_extrusions.ranges.feedrate.get_color_at(path.feedrate); break; }
|
||||||
@ -2949,11 +2996,23 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
|
|||||||
return color;
|
return color;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
auto travel_color = [](const Path& path) {
|
||||||
|
return (path.delta_extruder < 0.0f) ? convert(libvgcode::Travels_Colors[2]) /* Retract */ :
|
||||||
|
((path.delta_extruder > 0.0f) ? convert(libvgcode::Travels_Colors[1]) /* Extrude */ :
|
||||||
|
convert(libvgcode::Travels_Colors[0]) /* Move */);
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
auto travel_color = [](const Path& path) {
|
auto travel_color = [](const Path& path) {
|
||||||
return (path.delta_extruder < 0.0f) ? Travel_Colors[2] /* Retract */ :
|
return (path.delta_extruder < 0.0f) ? Travel_Colors[2] /* Retract */ :
|
||||||
((path.delta_extruder > 0.0f) ? Travel_Colors[1] /* Extrude */ :
|
((path.delta_extruder > 0.0f) ? Travel_Colors[1] /* Extrude */ :
|
||||||
Travel_Colors[0] /* Move */);
|
Travel_Colors[0] /* Move */);
|
||||||
};
|
};
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
auto is_in_layers_range = [this](const Path& path, size_t min_id, size_t max_id) {
|
auto is_in_layers_range = [this](const Path& path, size_t min_id, size_t max_id) {
|
||||||
auto in_layers_range = [this, min_id, max_id](size_t id) {
|
auto in_layers_range = [this, min_id, max_id](size_t id) {
|
||||||
@ -3187,7 +3246,15 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
|
|||||||
is_in_layers_range(path, m_layers_z_range[1], m_layers_z_range[1]))
|
is_in_layers_range(path, m_layers_z_range[1], m_layers_z_range[1]))
|
||||||
color = extrusion_color(path);
|
color = extrusion_color(path);
|
||||||
else
|
else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
color = convert(libvgcode::Dummy_Color);
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
color = Neutral_Color;
|
color = Neutral_Color;
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3201,7 +3268,7 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
|
|||||||
extrusion_color(path) : travel_color(path);
|
extrusion_color(path) : travel_color(path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
color = Neutral_Color;
|
color = convert(libvgcode::Dummy_Color);
|
||||||
#else
|
#else
|
||||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
if (!top_layer_only || m_sequential_view.current.last == global_endpoints.last || is_travel_in_layers_range(path_id, m_layers_z_range[1], m_layers_z_range[1]))
|
if (!top_layer_only || m_sequential_view.current.last == global_endpoints.last || is_travel_in_layers_range(path_id, m_layers_z_range[1], m_layers_z_range[1]))
|
||||||
@ -3214,7 +3281,15 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
case EMoveType::Wipe: { color = convert(libvgcode::Wipe_Color); break; }
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
case EMoveType::Wipe: { color = Wipe_Color; break; }
|
case EMoveType::Wipe: { color = Wipe_Color; break; }
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
default: { color = { 0.0f, 0.0f, 0.0f, 1.0f }; break; }
|
default: { color = { 0.0f, 0.0f, 0.0f, 1.0f }; break; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3299,7 +3374,15 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
|
|||||||
buffer.model.instances.render_ranges.ranges.push_back({ 0, 0, 0, buffer.model.color });
|
buffer.model.instances.render_ranges.ranges.push_back({ 0, 0, 0, buffer.model.color });
|
||||||
bool has_second_range = top_layer_only && m_sequential_view.current.last != m_sequential_view.global.last;
|
bool has_second_range = top_layer_only && m_sequential_view.current.last != m_sequential_view.global.last;
|
||||||
if (has_second_range)
|
if (has_second_range)
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
buffer.model.instances.render_ranges.ranges.push_back({ 0, 0, 0, convert(libvgcode::Dummy_Color) });
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
buffer.model.instances.render_ranges.ranges.push_back({ 0, 0, 0, Neutral_Color });
|
buffer.model.instances.render_ranges.ranges.push_back({ 0, 0, 0, Neutral_Color });
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
if (m_sequential_view.current.first <= buffer.model.instances.s_ids.back() && buffer.model.instances.s_ids.front() <= m_sequential_view.current.last) {
|
if (m_sequential_view.current.first <= buffer.model.instances.s_ids.back() && buffer.model.instances.s_ids.front() <= m_sequential_view.current.last) {
|
||||||
for (size_t id : buffer.model.instances.s_ids) {
|
for (size_t id : buffer.model.instances.s_ids) {
|
||||||
@ -4000,7 +4083,15 @@ void GCodeViewer::render_legend(float& legend_height)
|
|||||||
auto append_range_item = [append_item](int i, float value, unsigned int decimals) {
|
auto append_range_item = [append_item](int i, float value, unsigned int decimals) {
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
::sprintf(buf, "%.*f", decimals, value);
|
::sprintf(buf, "%.*f", decimals, value);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
append_item(EItemType::Rect, convert(libvgcode::Ranges_Colors[i]), buf);
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_item(EItemType::Rect, Range_Colors[i], buf);
|
append_item(EItemType::Rect, Range_Colors[i], buf);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
};
|
};
|
||||||
|
|
||||||
if (range.count == 1)
|
if (range.count == 1)
|
||||||
@ -4008,12 +4099,28 @@ void GCodeViewer::render_legend(float& legend_height)
|
|||||||
append_range_item(0, range.min, decimals);
|
append_range_item(0, range.min, decimals);
|
||||||
else if (range.count == 2) {
|
else if (range.count == 2) {
|
||||||
// two items use case
|
// two items use case
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
append_range_item(static_cast<int>(libvgcode::Ranges_Colors.size()) - 1, range.max, decimals);
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_range_item(static_cast<int>(Range_Colors.size()) - 1, range.max, decimals);
|
append_range_item(static_cast<int>(Range_Colors.size()) - 1, range.max, decimals);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_range_item(0, range.min, decimals);
|
append_range_item(0, range.min, decimals);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const float step_size = range.step_size();
|
const float step_size = range.step_size();
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
for (int i = static_cast<int>(libvgcode::Ranges_Colors.size()) - 1; i >= 0; --i) {
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
for (int i = static_cast<int>(Range_Colors.size()) - 1; i >= 0; --i) {
|
for (int i = static_cast<int>(Range_Colors.size()) - 1; i >= 0; --i) {
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_range_item(i, range.min + static_cast<float>(i) * step_size, decimals);
|
append_range_item(i, range.min + static_cast<float>(i) * step_size, decimals);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4024,7 +4131,15 @@ void GCodeViewer::render_legend(float& legend_height)
|
|||||||
std::string str_value = get_time_dhms(value);
|
std::string str_value = get_time_dhms(value);
|
||||||
if (str_value == "0s")
|
if (str_value == "0s")
|
||||||
str_value = "< 1s";
|
str_value = "< 1s";
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
append_item(EItemType::Rect, convert(libvgcode::Ranges_Colors[i]), str_value);
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_item(EItemType::Rect, Range_Colors[i], str_value);
|
append_item(EItemType::Rect, Range_Colors[i], str_value);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
};
|
};
|
||||||
|
|
||||||
if (range.count == 1)
|
if (range.count == 1)
|
||||||
@ -4032,12 +4147,28 @@ void GCodeViewer::render_legend(float& legend_height)
|
|||||||
append_range_item(0, range.min);
|
append_range_item(0, range.min);
|
||||||
else if (range.count == 2) {
|
else if (range.count == 2) {
|
||||||
// two items use case
|
// two items use case
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
append_range_item(static_cast<int>(libvgcode::Ranges_Colors.size()) - 1, range.max);
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_range_item(static_cast<int>(Range_Colors.size()) - 1, range.max);
|
append_range_item(static_cast<int>(Range_Colors.size()) - 1, range.max);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_range_item(0, range.min);
|
append_range_item(0, range.min);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
float step_size = range.step_size(type);
|
float step_size = range.step_size(type);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
for (int i = static_cast<int>(libvgcode::Ranges_Colors.size()) - 1; i >= 0; --i) {
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
for (int i = static_cast<int>(Range_Colors.size()) - 1; i >= 0; --i) {
|
for (int i = static_cast<int>(Range_Colors.size()) - 1; i >= 0; --i) {
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
float value = 0.0f;
|
float value = 0.0f;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
@ -4364,28 +4495,47 @@ void GCodeViewer::render_legend(float& legend_height)
|
|||||||
if (role >= GCodeExtrusionRole::Count)
|
if (role >= GCodeExtrusionRole::Count)
|
||||||
continue;
|
continue;
|
||||||
const bool visible = is_visible(role);
|
const bool visible = is_visible(role);
|
||||||
append_item(EItemType::Rect, Extrusion_Role_Colors[static_cast<unsigned int>(role)], labels[i],
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
visible, times[i], percents[i], max_time_percent, offsets, used_filaments_m[i], used_filaments_g[i], [this, role, visible]() {
|
|
||||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
|
||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
append_item(EItemType::Rect, convert(libvgcode::Extrusion_Roles_Colors[static_cast<unsigned int>(role)]), labels[i],
|
||||||
|
visible, times[i], percents[i], max_time_percent, offsets, used_filaments_m[i], used_filaments_g[i],
|
||||||
|
[this, role, visible]() {
|
||||||
m_new_viewer.toggle_extrusion_role_visibility((libvgcode::EGCodeExtrusionRole)role);
|
m_new_viewer.toggle_extrusion_role_visibility((libvgcode::EGCodeExtrusionRole)role);
|
||||||
#else
|
|
||||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
|
||||||
m_extrusions.role_visibility_flags = visible ? m_extrusions.role_visibility_flags & ~(1 << int(role)) : m_extrusions.role_visibility_flags | (1 << int(role));
|
|
||||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
|
||||||
#endif // ENABLE_NEW_GCODE_VIEWER
|
|
||||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
|
||||||
// update buffers' render paths
|
// update buffers' render paths
|
||||||
refresh_render_paths(false, false);
|
refresh_render_paths(false, false);
|
||||||
wxGetApp().plater()->update_preview_moves_slider();
|
wxGetApp().plater()->update_preview_moves_slider();
|
||||||
wxGetApp().plater()->get_current_canvas3D()->set_as_dirty();
|
wxGetApp().plater()->get_current_canvas3D()->set_as_dirty();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
append_item(EItemType::Rect, Extrusion_Role_Colors[static_cast<unsigned int>(role)], labels[i],
|
||||||
|
visible, times[i], percents[i], max_time_percent, offsets, used_filaments_m[i], used_filaments_g[i],
|
||||||
|
[this, role, visible]() {
|
||||||
|
m_extrusions.role_visibility_flags = visible ? m_extrusions.role_visibility_flags & ~(1 << int(role)) : m_extrusions.role_visibility_flags | (1 << int(role));
|
||||||
|
// update buffers' render paths
|
||||||
|
refresh_render_paths(false, false);
|
||||||
|
wxGetApp().plater()->update_preview_moves_slider();
|
||||||
|
wxGetApp().plater()->get_current_canvas3D()->set_as_dirty();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_buffers[buffer_id(EMoveType::Travel)].visible)
|
if (m_buffers[buffer_id(EMoveType::Travel)].visible)
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
append_item(EItemType::Line, convert(libvgcode::Travels_Colors[0]), _u8L("Travel"), true, short_time_ui(get_time_dhms(time_mode.travel_time)),
|
||||||
|
time_mode.travel_time / time_mode.time, max_time_percent, offsets, 0.0f, 0.0f);
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
append_item(EItemType::Line, Travel_Colors[0], _u8L("Travel"), true, short_time_ui(get_time_dhms(time_mode.travel_time)),
|
append_item(EItemType::Line, Travel_Colors[0], _u8L("Travel"), true, short_time_ui(get_time_dhms(time_mode.travel_time)),
|
||||||
time_mode.travel_time / time_mode.time, max_time_percent, offsets, 0.0f, 0.0f);
|
time_mode.travel_time / time_mode.time, max_time_percent, offsets, 0.0f, 0.0f);
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -5175,6 +5325,17 @@ ColorRGBA GCodeViewer::option_color(EMoveType move_type) const
|
|||||||
{
|
{
|
||||||
switch (move_type)
|
switch (move_type)
|
||||||
{
|
{
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
|
case EMoveType::Tool_change: { return convert(libvgcode::Options_Colors.at(libvgcode::EMoveType::ToolChange)); }
|
||||||
|
case EMoveType::Color_change: { return convert(libvgcode::Options_Colors.at(libvgcode::EMoveType::ColorChange)); }
|
||||||
|
case EMoveType::Pause_Print: { return convert(libvgcode::Options_Colors.at(libvgcode::EMoveType::PausePrint)); }
|
||||||
|
case EMoveType::Custom_GCode: { return convert(libvgcode::Options_Colors.at(libvgcode::EMoveType::CustomGCode)); }
|
||||||
|
case EMoveType::Retract: { return convert(libvgcode::Options_Colors.at(libvgcode::EMoveType::Retract)); }
|
||||||
|
case EMoveType::Unretract: { return convert(libvgcode::Options_Colors.at(libvgcode::EMoveType::Unretract)); }
|
||||||
|
case EMoveType::Seam: { return convert(libvgcode::Options_Colors.at(libvgcode::EMoveType::Seam)); }
|
||||||
|
#else
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
case EMoveType::Tool_change: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::ToolChanges)]; }
|
case EMoveType::Tool_change: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::ToolChanges)]; }
|
||||||
case EMoveType::Color_change: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::ColorChanges)]; }
|
case EMoveType::Color_change: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::ColorChanges)]; }
|
||||||
case EMoveType::Pause_Print: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::PausePrints)]; }
|
case EMoveType::Pause_Print: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::PausePrints)]; }
|
||||||
@ -5182,6 +5343,9 @@ ColorRGBA GCodeViewer::option_color(EMoveType move_type) const
|
|||||||
case EMoveType::Retract: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::Retractions)]; }
|
case EMoveType::Retract: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::Retractions)]; }
|
||||||
case EMoveType::Unretract: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::Unretractions)]; }
|
case EMoveType::Unretract: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::Unretractions)]; }
|
||||||
case EMoveType::Seam: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::Seams)]; }
|
case EMoveType::Seam: { return Options_Colors[static_cast<unsigned int>(EOptionsColors::Seams)]; }
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
default: { return { 0.0f, 0.0f, 0.0f, 1.0f }; }
|
default: { return { 0.0f, 0.0f, 0.0f, 1.0f }; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,9 @@ class GCodeViewer
|
|||||||
using InstanceIdBuffer = std::vector<size_t>;
|
using InstanceIdBuffer = std::vector<size_t>;
|
||||||
using InstancesOffsets = std::vector<Vec3f>;
|
using InstancesOffsets = std::vector<Vec3f>;
|
||||||
|
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#if !ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
static const std::array<ColorRGBA, static_cast<size_t>(GCodeExtrusionRole::Count)> Extrusion_Role_Colors;
|
static const std::array<ColorRGBA, static_cast<size_t>(GCodeExtrusionRole::Count)> Extrusion_Role_Colors;
|
||||||
static const std::vector<ColorRGBA> Options_Colors;
|
static const std::vector<ColorRGBA> Options_Colors;
|
||||||
static const std::vector<ColorRGBA> Travel_Colors;
|
static const std::vector<ColorRGBA> Travel_Colors;
|
||||||
@ -58,6 +61,9 @@ class GCodeViewer
|
|||||||
PausePrints,
|
PausePrints,
|
||||||
CustomGCodes
|
CustomGCodes
|
||||||
};
|
};
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
#endif // !ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
// vbo buffer containing vertices data used to render a specific toolpath type
|
// vbo buffer containing vertices data used to render a specific toolpath type
|
||||||
struct VBuffer
|
struct VBuffer
|
||||||
|
@ -73,10 +73,12 @@ static const std::map<const wchar_t, std::string> font_icons = {
|
|||||||
{ImGui::PlugMarker , "plug" },
|
{ImGui::PlugMarker , "plug" },
|
||||||
{ImGui::DowelMarker , "dowel" },
|
{ImGui::DowelMarker , "dowel" },
|
||||||
{ImGui::SnapMarker , "snap" },
|
{ImGui::SnapMarker , "snap" },
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
{ImGui::HorizontalHide , "horizontal_hide" },
|
{ImGui::HorizontalHide , "horizontal_hide" },
|
||||||
{ImGui::HorizontalShow , "horizontal_show" },
|
{ImGui::HorizontalShow , "horizontal_show" },
|
||||||
#endif // ENABLE_NEW_GCODE_VIEWER
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
};
|
};
|
||||||
|
|
||||||
static const std::map<const wchar_t, std::string> font_icons_large = {
|
static const std::map<const wchar_t, std::string> font_icons_large = {
|
||||||
|
@ -14,26 +14,11 @@
|
|||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
//################################################################################################################################
|
//################################################################################################################################
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
namespace libvgcode {
|
namespace libvgcode {
|
||||||
|
|
||||||
static const std::vector<Color> Ranges_Colors{ {
|
|
||||||
{ 0.043f, 0.173f, 0.478f }, // bluish
|
|
||||||
{ 0.075f, 0.349f, 0.522f },
|
|
||||||
{ 0.110f, 0.533f, 0.569f },
|
|
||||||
{ 0.016f, 0.839f, 0.059f },
|
|
||||||
{ 0.667f, 0.949f, 0.000f },
|
|
||||||
{ 0.988f, 0.975f, 0.012f },
|
|
||||||
{ 0.961f, 0.808f, 0.039f },
|
|
||||||
{ 0.890f, 0.533f, 0.125f },
|
|
||||||
{ 0.820f, 0.408f, 0.188f },
|
|
||||||
{ 0.761f, 0.322f, 0.235f },
|
|
||||||
{ 0.581f, 0.149f, 0.087f } // reddish
|
|
||||||
} };
|
|
||||||
|
|
||||||
ColorRange::ColorRange(EType type)
|
ColorRange::ColorRange(EType type)
|
||||||
: m_type(type)
|
: m_type(type)
|
||||||
{
|
{
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
//################################################################################################################################
|
//################################################################################################################################
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <vector>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
namespace libvgcode {
|
namespace libvgcode {
|
||||||
@ -117,6 +118,73 @@ enum class ETimeMode : uint8_t
|
|||||||
COUNT
|
COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Predefined colors
|
||||||
|
//
|
||||||
|
static const Color Dummy_Color{ 0.25f, 0.25f, 0.25f };
|
||||||
|
static const Color Wipe_Color{ 1.0f, 1.0f, 0.0f };
|
||||||
|
static const Color Default_Tool_Color{ 1.0f, 0.502f, 0.0f };
|
||||||
|
|
||||||
|
//
|
||||||
|
// Palette used to render moves by ranges
|
||||||
|
//
|
||||||
|
static const std::vector<Color> Ranges_Colors{ {
|
||||||
|
{ 0.043f, 0.173f, 0.478f }, // bluish
|
||||||
|
{ 0.075f, 0.349f, 0.522f },
|
||||||
|
{ 0.110f, 0.533f, 0.569f },
|
||||||
|
{ 0.016f, 0.839f, 0.059f },
|
||||||
|
{ 0.667f, 0.949f, 0.000f },
|
||||||
|
{ 0.988f, 0.975f, 0.012f },
|
||||||
|
{ 0.961f, 0.808f, 0.039f },
|
||||||
|
{ 0.890f, 0.533f, 0.125f },
|
||||||
|
{ 0.820f, 0.408f, 0.188f },
|
||||||
|
{ 0.761f, 0.322f, 0.235f },
|
||||||
|
{ 0.581f, 0.149f, 0.087f } // reddish
|
||||||
|
} };
|
||||||
|
|
||||||
|
//
|
||||||
|
// Palette used to render extrusion moves by extrusion roles
|
||||||
|
//
|
||||||
|
static const std::vector<Color> Extrusion_Roles_Colors{ {
|
||||||
|
{ 0.90f, 0.70f, 0.70f }, // None
|
||||||
|
{ 1.00f, 0.90f, 0.30f }, // Perimeter
|
||||||
|
{ 1.00f, 0.49f, 0.22f }, // ExternalPerimeter
|
||||||
|
{ 0.12f, 0.12f, 1.00f }, // OverhangPerimeter
|
||||||
|
{ 0.69f, 0.19f, 0.16f }, // InternalInfill
|
||||||
|
{ 0.59f, 0.33f, 0.80f }, // SolidInfill
|
||||||
|
{ 0.94f, 0.25f, 0.25f }, // TopSolidInfill
|
||||||
|
{ 1.00f, 0.55f, 0.41f }, // Ironing
|
||||||
|
{ 0.30f, 0.50f, 0.73f }, // BridgeInfill
|
||||||
|
{ 1.00f, 1.00f, 1.00f }, // GapFill
|
||||||
|
{ 0.00f, 0.53f, 0.43f }, // Skirt
|
||||||
|
{ 0.00f, 1.00f, 0.00f }, // SupportMaterial
|
||||||
|
{ 0.00f, 0.50f, 0.00f }, // SupportMaterialInterface
|
||||||
|
{ 0.70f, 0.89f, 0.67f }, // WipeTower
|
||||||
|
{ 0.37f, 0.82f, 0.58f }, // Custom
|
||||||
|
} };
|
||||||
|
|
||||||
|
//
|
||||||
|
// Palette used to render travel moves
|
||||||
|
//
|
||||||
|
static const std::vector<Color> Travels_Colors{ {
|
||||||
|
{ 0.219f, 0.282f, 0.609f }, // Move
|
||||||
|
{ 0.112f, 0.422f, 0.103f }, // Extrude
|
||||||
|
{ 0.505f, 0.064f, 0.028f } // Retract
|
||||||
|
} };
|
||||||
|
|
||||||
|
//
|
||||||
|
// Palette used to render option moves
|
||||||
|
//
|
||||||
|
static const std::map<EMoveType, Color> Options_Colors{ {
|
||||||
|
{ EMoveType::Retract, { 0.803f, 0.135f, 0.839f } },
|
||||||
|
{ EMoveType::Unretract, { 0.287f, 0.679f, 0.810f } },
|
||||||
|
{ EMoveType::Seam, { 0.900f, 0.900f, 0.900f } },
|
||||||
|
{ EMoveType::ToolChange, { 0.758f, 0.744f, 0.389f } },
|
||||||
|
{ EMoveType::ColorChange, { 0.856f, 0.582f, 0.546f } },
|
||||||
|
{ EMoveType::PausePrint, { 0.322f, 0.942f, 0.512f } },
|
||||||
|
{ EMoveType::CustomGCode, { 0.886f, 0.825f, 0.262f } }
|
||||||
|
} };
|
||||||
|
|
||||||
} // namespace libvgcode
|
} // namespace libvgcode
|
||||||
|
|
||||||
//################################################################################################################################
|
//################################################################################################################################
|
||||||
|
@ -48,45 +48,6 @@ static Vec3f toVec3f(const Eigen::Matrix<float, 3, 1, Eigen::DontAlign>& v)
|
|||||||
}
|
}
|
||||||
//################################################################################################################################
|
//################################################################################################################################
|
||||||
|
|
||||||
static const Color Dummy_Color{ 0.25f, 0.25f, 0.25f };
|
|
||||||
static const Color Default_Tool_Color{ 1.0f, 0.502f, 0.0f };
|
|
||||||
|
|
||||||
static const std::map<EMoveType, Color> Options_Colors{ {
|
|
||||||
{ EMoveType::Retract, { 0.803f, 0.135f, 0.839f } },
|
|
||||||
{ EMoveType::Unretract, { 0.287f, 0.679f, 0.810f } },
|
|
||||||
{ EMoveType::Seam, { 0.900f, 0.900f, 0.900f } },
|
|
||||||
{ EMoveType::ToolChange, { 0.758f, 0.744f, 0.389f } },
|
|
||||||
{ EMoveType::ColorChange, { 0.856f, 0.582f, 0.546f } },
|
|
||||||
{ EMoveType::PausePrint, { 0.322f, 0.942f, 0.512f } },
|
|
||||||
{ EMoveType::CustomGCode, { 0.886f, 0.825f, 0.262f } }
|
|
||||||
} };
|
|
||||||
|
|
||||||
static const std::vector<Color> Extrusion_Roles_Colors{ {
|
|
||||||
{ 0.90f, 0.70f, 0.70f }, // None
|
|
||||||
{ 1.00f, 0.90f, 0.30f }, // Perimeter
|
|
||||||
{ 1.00f, 0.49f, 0.22f }, // ExternalPerimeter
|
|
||||||
{ 0.12f, 0.12f, 1.00f }, // OverhangPerimeter
|
|
||||||
{ 0.69f, 0.19f, 0.16f }, // InternalInfill
|
|
||||||
{ 0.59f, 0.33f, 0.80f }, // SolidInfill
|
|
||||||
{ 0.94f, 0.25f, 0.25f }, // TopSolidInfill
|
|
||||||
{ 1.00f, 0.55f, 0.41f }, // Ironing
|
|
||||||
{ 0.30f, 0.50f, 0.73f }, // BridgeInfill
|
|
||||||
{ 1.00f, 1.00f, 1.00f }, // GapFill
|
|
||||||
{ 0.00f, 0.53f, 0.43f }, // Skirt
|
|
||||||
{ 0.00f, 1.00f, 0.00f }, // SupportMaterial
|
|
||||||
{ 0.00f, 0.50f, 0.00f }, // SupportMaterialInterface
|
|
||||||
{ 0.70f, 0.89f, 0.67f }, // WipeTower
|
|
||||||
{ 0.37f, 0.82f, 0.58f }, // Custom
|
|
||||||
} };
|
|
||||||
|
|
||||||
static const std::vector<Color> Travels_Colors{ {
|
|
||||||
{ 0.219f, 0.282f, 0.609f }, // Move
|
|
||||||
{ 0.112f, 0.422f, 0.103f }, // Extrude
|
|
||||||
{ 0.505f, 0.064f, 0.028f } // Retract
|
|
||||||
} };
|
|
||||||
|
|
||||||
static const Color Wipe_Color{ 1.0f, 1.0f, 0.0f };
|
|
||||||
|
|
||||||
static const float TRAVEL_RADIUS = 0.05f;
|
static const float TRAVEL_RADIUS = 0.05f;
|
||||||
static const float WIPE_RADIUS = 0.05f;
|
static const float WIPE_RADIUS = 0.05f;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user