mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-16 18:12:10 +00:00
Add Pressure Advance visualization support (#11673)
* Add Pressure Advance visualization support
Signed-off-by: minicx <minicx@disroot.org>
* Port Pressure Advance visualization to libvgcode architecture
Adapt PA visualization (originally in commit e3a77259) to work with
the new libvgcode library introduced by upstream PR #10735.
Changes across the libvgcode stack:
- PathVertex: add pressure_advance field
- Types.hpp: add PressureAdvance to EViewType enum
- ViewerImpl: add ColorRange, color mapping, range updates for PA
- LibVGCodeWrapper: pass pressure_advance from MoveVertex to PathVertex
GCodeViewer UI integration:
- Add "Pressure Advance" to view type dropdown
- Add PA color range in legend (3 decimal places)
- Add PA value display in sequential view marker tooltip
- Add PA row in position properties table
The GCodeProcessor PA parsing (M900, M572, SET_PRESSURE_ADVANCE)
is preserved from the original implementation.
* Tag Pressure Advance visualization changes with ORCA comments
Signed-off-by: minicx <minicx@disroot.org>
---------
Signed-off-by: minicx <minicx@disroot.org>
Co-authored-by: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -86,6 +86,11 @@ struct PathVertex
|
||||
// Layer duration in seconds
|
||||
//
|
||||
float layer_duration{ 0.0f };
|
||||
//
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
// Pressure advance value
|
||||
//
|
||||
float pressure_advance{ 0.0f };
|
||||
|
||||
//
|
||||
// Return true if the segment is an extrusion move
|
||||
|
||||
@@ -92,6 +92,8 @@ enum class EViewType : uint8_t
|
||||
LayerTimeLogarithmic,
|
||||
FanSpeed,
|
||||
Temperature,
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
PressureAdvance,
|
||||
Tool,
|
||||
COUNT
|
||||
};
|
||||
|
||||
@@ -169,6 +169,8 @@ public:
|
||||
// EViewType::ActualSpeed
|
||||
// EViewType::FanSpeed
|
||||
// EViewType::Temperature
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
// EViewType::PressureAdvance
|
||||
// EViewType::VolumetricFlowRate
|
||||
// EViewType::ActualVolumetricFlowRate
|
||||
// EViewType::LayerTimeLinear
|
||||
@@ -185,6 +187,8 @@ public:
|
||||
// EViewType::ActualSpeed
|
||||
// EViewType::FanSpeed
|
||||
// EViewType::Temperature
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
// EViewType::PressureAdvance
|
||||
// EViewType::VolumetricFlowRate
|
||||
// EViewType::ActualVolumetricFlowRate
|
||||
// EViewType::LayerTimeLinear
|
||||
|
||||
@@ -1493,6 +1493,11 @@ Color ViewerImpl::get_vertex_color(const PathVertex& v) const
|
||||
{
|
||||
return v.is_travel() ? get_option_color(move_type_to_option(v.type)) : m_temperature_range.get_color_at(v.temperature);
|
||||
}
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
case EViewType::PressureAdvance:
|
||||
{
|
||||
return v.is_travel() ? get_option_color(move_type_to_option(v.type)) : m_pressure_advance_range.get_color_at(v.pressure_advance);
|
||||
}
|
||||
case EViewType::VolumetricFlowRate:
|
||||
{
|
||||
return v.is_travel() ? get_option_color(move_type_to_option(v.type)) : m_volumetric_rate_range.get_color_at(v.volumetric_rate());
|
||||
@@ -1582,6 +1587,8 @@ const ColorRange& ViewerImpl::get_color_range(EViewType type) const
|
||||
case EViewType::ActualSpeed: { return m_actual_speed_range; }
|
||||
case EViewType::FanSpeed: { return m_fan_speed_range; }
|
||||
case EViewType::Temperature: { return m_temperature_range; }
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
case EViewType::PressureAdvance: { return m_pressure_advance_range; }
|
||||
case EViewType::VolumetricFlowRate: { return m_volumetric_rate_range; }
|
||||
case EViewType::ActualVolumetricFlowRate: { return m_actual_volumetric_rate_range; }
|
||||
case EViewType::LayerTimeLinear: { return m_layer_time_range[0]; }
|
||||
@@ -1600,6 +1607,8 @@ void ViewerImpl::set_color_range_palette(EViewType type, const Palette& palette)
|
||||
case EViewType::ActualSpeed: { m_actual_speed_range.set_palette(palette); break; }
|
||||
case EViewType::FanSpeed: { m_fan_speed_range.set_palette(palette); break; }
|
||||
case EViewType::Temperature: { m_temperature_range.set_palette(palette); break; }
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
case EViewType::PressureAdvance: { m_pressure_advance_range.set_palette(palette); break; }
|
||||
case EViewType::VolumetricFlowRate: { m_volumetric_rate_range.set_palette(palette); break; }
|
||||
case EViewType::ActualVolumetricFlowRate: { m_actual_volumetric_rate_range.set_palette(palette); break; }
|
||||
case EViewType::LayerTimeLinear: { m_layer_time_range[0].set_palette(palette); break; }
|
||||
@@ -1637,6 +1646,8 @@ size_t ViewerImpl::get_used_cpu_memory() const
|
||||
ret += m_actual_speed_range.size_in_bytes_cpu();
|
||||
ret += m_fan_speed_range.size_in_bytes_cpu();
|
||||
ret += m_temperature_range.size_in_bytes_cpu();
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
ret += m_pressure_advance_range.size_in_bytes_cpu();
|
||||
ret += m_volumetric_rate_range.size_in_bytes_cpu();
|
||||
ret += m_actual_volumetric_rate_range.size_in_bytes_cpu();
|
||||
for (size_t i = 0; i < COLOR_RANGE_TYPES_COUNT; ++i) {
|
||||
@@ -1787,6 +1798,8 @@ void ViewerImpl::update_color_ranges()
|
||||
m_actual_speed_range.reset();
|
||||
m_fan_speed_range.reset();
|
||||
m_temperature_range.reset();
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
m_pressure_advance_range.reset();
|
||||
m_volumetric_rate_range.reset();
|
||||
m_actual_volumetric_rate_range.reset();
|
||||
m_layer_time_range[0].reset(); // ColorRange::EType::Linear
|
||||
@@ -1803,6 +1816,9 @@ void ViewerImpl::update_color_ranges()
|
||||
}
|
||||
m_fan_speed_range.update(round_to_bin(v.fan_speed));
|
||||
m_temperature_range.update(round_to_bin(v.temperature));
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
if (v.pressure_advance >= 0.0f)
|
||||
m_pressure_advance_range.update(v.pressure_advance);
|
||||
}
|
||||
if ((v.is_travel() && m_settings.options_visibility[size_t(EOptionType::Travels)]) ||
|
||||
(v.is_wipe() && m_settings.options_visibility[size_t(EOptionType::Wipes)]) ||
|
||||
|
||||
@@ -289,6 +289,8 @@ private:
|
||||
ColorRange m_actual_speed_range;
|
||||
ColorRange m_fan_speed_range;
|
||||
ColorRange m_temperature_range;
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
ColorRange m_pressure_advance_range;
|
||||
ColorRange m_volumetric_rate_range;
|
||||
ColorRange m_actual_volumetric_rate_range;
|
||||
std::array<ColorRange, COLOR_RANGE_TYPES_COUNT> m_layer_time_range{
|
||||
|
||||
Reference in New Issue
Block a user