mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-18 02:25:55 +08:00
New gcode visualization integration - Fixed center of gravity calculation and rendering
This commit is contained in:
parent
0da174908a
commit
6785e4fefd
@ -1113,6 +1113,8 @@ void GCodeViewer::init()
|
|||||||
void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const Print& print, const std::vector<std::string>& str_tool_colors,
|
void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const Print& print, const std::vector<std::string>& str_tool_colors,
|
||||||
const std::vector<std::string>& str_color_print_colors)
|
const std::vector<std::string>& str_color_print_colors)
|
||||||
{
|
{
|
||||||
|
m_loaded_as_preview = false;
|
||||||
|
|
||||||
const bool current_top_layer_only = m_viewer.is_top_layer_only_view_range();
|
const bool current_top_layer_only = m_viewer.is_top_layer_only_view_range();
|
||||||
const bool required_top_layer_only = get_app_config()->get_bool("seq_top_layer_only");
|
const bool required_top_layer_only = get_app_config()->get_bool("seq_top_layer_only");
|
||||||
if (current_top_layer_only != required_top_layer_only)
|
if (current_top_layer_only != required_top_layer_only)
|
||||||
@ -1163,7 +1165,7 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const
|
|||||||
curr.role != libvgcode::EGCodeExtrusionRole::Custom) {
|
curr.role != libvgcode::EGCodeExtrusionRole::Custom) {
|
||||||
const Vec3d curr_pos = libvgcode::convert(curr.position).cast<double>();
|
const Vec3d curr_pos = libvgcode::convert(curr.position).cast<double>();
|
||||||
const Vec3d prev_pos = libvgcode::convert(m_viewer.get_vertex_at(i - 1).position).cast<double>();
|
const Vec3d prev_pos = libvgcode::convert(m_viewer.get_vertex_at(i - 1).position).cast<double>();
|
||||||
m_cog.add_segment(curr_pos, prev_pos, curr.volumetric_rate / curr.feedrate * (curr_pos - prev_pos).norm());
|
m_cog.add_segment(curr_pos, prev_pos, gcode_result.filament_densities[curr.extruder_id] * curr.volumetric_rate / curr.feedrate * (curr_pos - prev_pos).norm());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // !VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
#endif // !VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
||||||
@ -1297,6 +1299,8 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print & p
|
|||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
void GCodeViewer::load_as_preview(libvgcode::GCodeInputData&& data)
|
void GCodeViewer::load_as_preview(libvgcode::GCodeInputData&& data)
|
||||||
{
|
{
|
||||||
|
m_loaded_as_preview = true;
|
||||||
|
|
||||||
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::Skirt, { 127, 255, 127 });
|
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::Skirt, { 127, 255, 127 });
|
||||||
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::ExternalPerimeter, { 255, 255, 0 });
|
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::ExternalPerimeter, { 255, 255, 0 });
|
||||||
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::SupportMaterial, { 127, 255, 127 });
|
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::SupportMaterial, { 127, 255, 127 });
|
||||||
|
@ -903,6 +903,7 @@ private:
|
|||||||
|
|
||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
libvgcode::Viewer m_viewer;
|
libvgcode::Viewer m_viewer;
|
||||||
|
bool m_loaded_as_preview{ false };
|
||||||
#endif // ENABLE_NEW_GCODE_VIEWER
|
#endif // ENABLE_NEW_GCODE_VIEWER
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -928,9 +929,15 @@ public:
|
|||||||
void render();
|
void render();
|
||||||
#if ENABLE_NEW_GCODE_VIEWER
|
#if ENABLE_NEW_GCODE_VIEWER
|
||||||
#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
||||||
void render_cog() { m_cog.render(m_cog_marker_fixed_screen_size); }
|
void render_cog() {
|
||||||
|
if (!m_loaded_as_preview && m_viewer.get_layers_count() > 0)
|
||||||
|
m_cog.render(m_cog_marker_fixed_screen_size);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
void render_cog() { m_cog.render(); }
|
void render_cog() {
|
||||||
|
if (!m_loaded_as_preview && m_viewer.get_layers_count() > 0)
|
||||||
|
m_cog.render();
|
||||||
|
}
|
||||||
#endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
#endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
||||||
bool has_data() const { return !m_viewer.get_extrusion_roles().empty(); }
|
bool has_data() const { return !m_viewer.get_extrusion_roles().empty(); }
|
||||||
#else
|
#else
|
||||||
|
@ -229,7 +229,7 @@ GCodeInputData convert(const Slic3r::GCodeProcessorResult& result, const std::ve
|
|||||||
|
|
||||||
#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS
|
||||||
const libvgcode::PathVertex vertex = { convert(curr.position), height, width, curr.feedrate, curr.fan_speed,
|
const libvgcode::PathVertex vertex = { convert(curr.position), height, width, curr.feedrate, curr.fan_speed,
|
||||||
curr.temperature, curr.volumetric_rate(), curr.mm3_per_mm * (curr.position - prev.position).norm(),
|
curr.temperature, curr.volumetric_rate(), result.filament_densities[curr.extruder_id] * curr.mm3_per_mm * (curr.position - prev.position).norm(),
|
||||||
convert(curr.extrusion_role), curr_type, static_cast<uint32_t>(curr.gcode_id), static_cast<uint32_t>(curr.layer_id),
|
convert(curr.extrusion_role), curr_type, static_cast<uint32_t>(curr.gcode_id), static_cast<uint32_t>(curr.layer_id),
|
||||||
static_cast<uint8_t>(curr.extruder_id), static_cast<uint8_t>(curr.cp_color_id), curr.time };
|
static_cast<uint8_t>(curr.extruder_id), static_cast<uint8_t>(curr.cp_color_id), curr.time };
|
||||||
#else
|
#else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user