diff --git a/src/libvgcode/include/PathVertex.hpp b/src/libvgcode/include/PathVertex.hpp index 5010ce8645..f1f871d1f8 100644 --- a/src/libvgcode/include/PathVertex.hpp +++ b/src/libvgcode/include/PathVertex.hpp @@ -37,6 +37,10 @@ struct PathVertex // Segment actual speed // float actual_feedrate{ 0.0f }; + // + // Segment mm3_per_mm + // + float mm3_per_mm{ 0.0f }; #endif // VGCODE_ENABLE_ET_SPE1872 // // Segment fan speed @@ -46,16 +50,12 @@ struct PathVertex // Segment temperature // float temperature{ 0.0f }; +#if !VGCODE_ENABLE_ET_SPE1872 // // Segment volumetric rate // float volumetric_rate{ 0.0f }; -#if VGCODE_ENABLE_ET_SPE1872 - // - // Segment actual volumetric rate - // - float actual_volumetric_rate{ 0.0f }; -#endif // VGCODE_ENABLE_ET_SPE1872 +#endif // !VGCODE_ENABLE_ET_SPE1872 #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS // // Segment weight @@ -112,6 +112,16 @@ struct PathVertex // Return true if the segment was generated by custom gcode // bool is_custom_gcode() const; +#if VGCODE_ENABLE_ET_SPE1872 + // + // Return the volumetric flow rate of the segment + // + float volumetric_rate() const { return feedrate * mm3_per_mm; } + // + // Return the acutal volumetric flow rate of the segment + // + float actual_volumetric_rate() const { return actual_feedrate * mm3_per_mm; } +#endif // VGCODE_ENABLE_ET_SPE1872 static const PathVertex DUMMY_PATH_VERTEX; }; diff --git a/src/libvgcode/src/ViewerImpl.cpp b/src/libvgcode/src/ViewerImpl.cpp index 9c5bb57096..69abd0dbc2 100644 --- a/src/libvgcode/src/ViewerImpl.cpp +++ b/src/libvgcode/src/ViewerImpl.cpp @@ -985,12 +985,16 @@ Color ViewerImpl::get_vertex_color(const PathVertex& v) const } case EViewType::VolumetricFlowRate: { +#if VGCODE_ENABLE_ET_SPE1872 + return v.is_travel() ? get_option_color(move_type_to_option(v.type)) : m_volumetric_rate_range.get_color_at(v.volumetric_rate()); +#else return v.is_travel() ? get_option_color(move_type_to_option(v.type)) : m_volumetric_rate_range.get_color_at(v.volumetric_rate); +#endif // VGCODE_ENABLE_ET_SPE1872 } #if VGCODE_ENABLE_ET_SPE1872 case EViewType::ActualVolumetricFlowRate: { - return v.is_travel() ? get_option_color(move_type_to_option(v.type)) : m_actual_volumetric_rate_range.get_color_at(v.actual_volumetric_rate); + return v.is_travel() ? get_option_color(move_type_to_option(v.type)) : m_actual_volumetric_rate_range.get_color_at(v.actual_volumetric_rate()); } #endif // VGCODE_ENABLE_ET_SPE1872 case EViewType::LayerTimeLinear: @@ -1302,9 +1306,11 @@ void ViewerImpl::update_color_ranges() m_height_range.update(round_to_bin(v.height)); if (!v.is_custom_gcode() || m_settings.extrusion_roles_visibility.at(EGCodeExtrusionRole::Custom)) { m_width_range.update(round_to_bin(v.width)); - m_volumetric_rate_range.update(round_to_bin(v.volumetric_rate)); #if VGCODE_ENABLE_ET_SPE1872 - m_actual_volumetric_rate_range.update(round_to_bin(v.actual_volumetric_rate)); + m_volumetric_rate_range.update(round_to_bin(v.volumetric_rate())); + m_actual_volumetric_rate_range.update(round_to_bin(v.actual_volumetric_rate())); +#else + m_volumetric_rate_range.update(round_to_bin(v.volumetric_rate)); #endif // VGCODE_ENABLE_ET_SPE1872 } m_fan_speed_range.update(v.fan_speed); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 272efc51c7..090c458184 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1148,102 +1148,102 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const // convert data from PrusaSlicer format to libvgcode format libvgcode::GCodeInputData data = libvgcode::convert(gcode_result, str_tool_colors, str_color_print_colors, m_viewer); -//#define ENABLE_DATA_EXPORT 1 -//#if ENABLE_DATA_EXPORT -// auto extrusion_role_to_string = [](libvgcode::EGCodeExtrusionRole role) { -// switch (role) { -// case libvgcode::EGCodeExtrusionRole::None: { return "EGCodeExtrusionRole::None"; } -// case libvgcode::EGCodeExtrusionRole::Perimeter: { return "EGCodeExtrusionRole::Perimeter"; } -// case libvgcode::EGCodeExtrusionRole::ExternalPerimeter: { return "EGCodeExtrusionRole::ExternalPerimeter"; } -// case libvgcode::EGCodeExtrusionRole::OverhangPerimeter: { return "EGCodeExtrusionRole::OverhangPerimeter"; } -// case libvgcode::EGCodeExtrusionRole::InternalInfill: { return "EGCodeExtrusionRole::InternalInfill"; } -// case libvgcode::EGCodeExtrusionRole::SolidInfill: { return "EGCodeExtrusionRole::SolidInfill"; } -// case libvgcode::EGCodeExtrusionRole::TopSolidInfill: { return "EGCodeExtrusionRole::TopSolidInfill"; } -// case libvgcode::EGCodeExtrusionRole::Ironing: { return "EGCodeExtrusionRole::Ironing"; } -// case libvgcode::EGCodeExtrusionRole::BridgeInfill: { return "EGCodeExtrusionRole::BridgeInfill"; } -// case libvgcode::EGCodeExtrusionRole::GapFill: { return "EGCodeExtrusionRole::GapFill"; } -// case libvgcode::EGCodeExtrusionRole::Skirt: { return "EGCodeExtrusionRole::Skirt"; } -// case libvgcode::EGCodeExtrusionRole::SupportMaterial: { return "EGCodeExtrusionRole::SupportMaterial"; } -// case libvgcode::EGCodeExtrusionRole::SupportMaterialInterface: { return "EGCodeExtrusionRole::SupportMaterialInterface"; } -// case libvgcode::EGCodeExtrusionRole::WipeTower: { return "EGCodeExtrusionRole::WipeTower"; } -// case libvgcode::EGCodeExtrusionRole::Custom: { return "EGCodeExtrusionRole::Custom"; } -// case libvgcode::EGCodeExtrusionRole::COUNT: { return "EGCodeExtrusionRole::COUNT"; } -// } -// }; -// -// auto move_type_to_string = [](libvgcode::EMoveType type) { -// switch (type) { -// case libvgcode::EMoveType::Noop: { return "EMoveType::Noop"; } -// case libvgcode::EMoveType::Retract: { return "EMoveType::Retract"; } -// case libvgcode::EMoveType::Unretract: { return "EMoveType::Unretract"; } -// case libvgcode::EMoveType::Seam: { return "EMoveType::Seam"; } -// case libvgcode::EMoveType::ToolChange: { return "EMoveType::ToolChange"; } -// case libvgcode::EMoveType::ColorChange: { return "EMoveType::ColorChange"; } -// case libvgcode::EMoveType::PausePrint: { return "EMoveType::PausePrint"; } -// case libvgcode::EMoveType::CustomGCode: { return "EMoveType::CustomGCode"; } -// case libvgcode::EMoveType::Travel: { return "EMoveType::Travel"; } -// case libvgcode::EMoveType::Wipe: { return "EMoveType::Wipe"; } -// case libvgcode::EMoveType::Extrude: { return "EMoveType::Extrude"; } -// case libvgcode::EMoveType::COUNT: { return "EMoveType::COUNT"; } -// } -// }; -// -// FilePtr out{ boost::nowide::fopen("C:/prusa/slicer/test_output/spe1872/test.data", "wb") }; -// if (out.f != nullptr) { -// const size_t vertices_count = data.vertices.size(); -// fwrite((void*)&vertices_count, 1, sizeof(size_t), out.f); -// for (const libvgcode::PathVertex& v : data.vertices) { -// fwrite((void*)&v.position[0], 1, sizeof(float), out.f); -// fwrite((void*)&v.position[1], 1, sizeof(float), out.f); -// fwrite((void*)&v.position[2], 1, sizeof(float), out.f); -// fwrite((void*)&v.height, 1, sizeof(float), out.f); -// fwrite((void*)&v.width, 1, sizeof(float), out.f); -// fwrite((void*)&v.feedrate, 1, sizeof(float), out.f); -//#if ENABLE_ET_SPE1872 -// fwrite((void*)&v.actual_feedrate, 1, sizeof(float), out.f); -//#endif // ENABLE_ET_SPE1872 -// fwrite((void*)&v.fan_speed, 1, sizeof(float), out.f); -// fwrite((void*)&v.temperature, 1, sizeof(float), out.f); -// fwrite((void*)&v.volumetric_rate, 1, sizeof(float), out.f); -//#if ENABLE_ET_SPE1872 -// fwrite((void*)&v.actual_volumetric_rate, 1, sizeof(float), out.f); -//#endif // ENABLE_ET_SPE1872 -// fwrite((void*)&v.role, 1, sizeof(uint8_t), out.f); -// fwrite((void*)&v.type, 1, sizeof(uint8_t), out.f); -// fwrite((void*)&v.gcode_id, 1, sizeof(uint32_t), out.f); -// fwrite((void*)&v.layer_id, 1, sizeof(uint32_t), out.f); -// fwrite((void*)&v.extruder_id, 1, sizeof(uint32_t), out.f); -// fwrite((void*)&v.color_id, 1, sizeof(uint32_t), out.f); -// fwrite((void*)&v.times[0], 1, sizeof(float), out.f); -// fwrite((void*)&v.times[1], 1, sizeof(float), out.f); -//#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS -// const float weight = v.weight; -//#else -// const float weight = 0.0f; -//#endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS -// fwrite((void*)&weight, 1, sizeof(float), out.f); -// } -// -// const uint8_t spiral_vase_mode = data.spiral_vase_mode ? 1 : 0; -// fwrite((void*)&spiral_vase_mode, 1, sizeof(uint8_t), out.f); -// -// const size_t tool_colors_count = data.tools_colors.size(); -// fwrite((void*)&tool_colors_count, 1, sizeof(size_t), out.f); -// for (const libvgcode::Color& c : data.tools_colors) { -// fwrite((void*)&c[0], 1, sizeof(uint8_t), out.f); -// fwrite((void*)&c[1], 1, sizeof(uint8_t), out.f); -// fwrite((void*)&c[2], 1, sizeof(uint8_t), out.f); -// } -// -// const size_t color_print_colors_count = data.color_print_colors.size(); -// fwrite((void*)&color_print_colors_count, 1, sizeof(size_t), out.f); -// for (const libvgcode::Color& c : data.color_print_colors) { -// fwrite((void*)&c[0], 1, sizeof(uint8_t), out.f); -// fwrite((void*)&c[1], 1, sizeof(uint8_t), out.f); -// fwrite((void*)&c[2], 1, sizeof(uint8_t), out.f); -// } -// } -//#endif // ENABLE_DATA_EXPORT +#define ENABLE_DATA_EXPORT 1 +#if ENABLE_DATA_EXPORT + auto extrusion_role_to_string = [](libvgcode::EGCodeExtrusionRole role) { + switch (role) { + case libvgcode::EGCodeExtrusionRole::None: { return "EGCodeExtrusionRole::None"; } + case libvgcode::EGCodeExtrusionRole::Perimeter: { return "EGCodeExtrusionRole::Perimeter"; } + case libvgcode::EGCodeExtrusionRole::ExternalPerimeter: { return "EGCodeExtrusionRole::ExternalPerimeter"; } + case libvgcode::EGCodeExtrusionRole::OverhangPerimeter: { return "EGCodeExtrusionRole::OverhangPerimeter"; } + case libvgcode::EGCodeExtrusionRole::InternalInfill: { return "EGCodeExtrusionRole::InternalInfill"; } + case libvgcode::EGCodeExtrusionRole::SolidInfill: { return "EGCodeExtrusionRole::SolidInfill"; } + case libvgcode::EGCodeExtrusionRole::TopSolidInfill: { return "EGCodeExtrusionRole::TopSolidInfill"; } + case libvgcode::EGCodeExtrusionRole::Ironing: { return "EGCodeExtrusionRole::Ironing"; } + case libvgcode::EGCodeExtrusionRole::BridgeInfill: { return "EGCodeExtrusionRole::BridgeInfill"; } + case libvgcode::EGCodeExtrusionRole::GapFill: { return "EGCodeExtrusionRole::GapFill"; } + case libvgcode::EGCodeExtrusionRole::Skirt: { return "EGCodeExtrusionRole::Skirt"; } + case libvgcode::EGCodeExtrusionRole::SupportMaterial: { return "EGCodeExtrusionRole::SupportMaterial"; } + case libvgcode::EGCodeExtrusionRole::SupportMaterialInterface: { return "EGCodeExtrusionRole::SupportMaterialInterface"; } + case libvgcode::EGCodeExtrusionRole::WipeTower: { return "EGCodeExtrusionRole::WipeTower"; } + case libvgcode::EGCodeExtrusionRole::Custom: { return "EGCodeExtrusionRole::Custom"; } + case libvgcode::EGCodeExtrusionRole::COUNT: { return "EGCodeExtrusionRole::COUNT"; } + } + }; + + auto move_type_to_string = [](libvgcode::EMoveType type) { + switch (type) { + case libvgcode::EMoveType::Noop: { return "EMoveType::Noop"; } + case libvgcode::EMoveType::Retract: { return "EMoveType::Retract"; } + case libvgcode::EMoveType::Unretract: { return "EMoveType::Unretract"; } + case libvgcode::EMoveType::Seam: { return "EMoveType::Seam"; } + case libvgcode::EMoveType::ToolChange: { return "EMoveType::ToolChange"; } + case libvgcode::EMoveType::ColorChange: { return "EMoveType::ColorChange"; } + case libvgcode::EMoveType::PausePrint: { return "EMoveType::PausePrint"; } + case libvgcode::EMoveType::CustomGCode: { return "EMoveType::CustomGCode"; } + case libvgcode::EMoveType::Travel: { return "EMoveType::Travel"; } + case libvgcode::EMoveType::Wipe: { return "EMoveType::Wipe"; } + case libvgcode::EMoveType::Extrude: { return "EMoveType::Extrude"; } + case libvgcode::EMoveType::COUNT: { return "EMoveType::COUNT"; } + } + }; + + FilePtr out{ boost::nowide::fopen("C:/prusa/slicer/test_output/spe1872/test.data", "wb") }; + if (out.f != nullptr) { + const size_t vertices_count = data.vertices.size(); + fwrite((void*)&vertices_count, 1, sizeof(size_t), out.f); + for (const libvgcode::PathVertex& v : data.vertices) { + fwrite((void*)&v.position[0], 1, sizeof(float), out.f); + fwrite((void*)&v.position[1], 1, sizeof(float), out.f); + fwrite((void*)&v.position[2], 1, sizeof(float), out.f); + fwrite((void*)&v.height, 1, sizeof(float), out.f); + fwrite((void*)&v.width, 1, sizeof(float), out.f); + fwrite((void*)&v.feedrate, 1, sizeof(float), out.f); +#if ENABLE_ET_SPE1872 + fwrite((void*)&v.actual_feedrate, 1, sizeof(float), out.f); + fwrite((void*)&v.mm3_per_mm, 1, sizeof(float), out.f); +#endif // ENABLE_ET_SPE1872 + fwrite((void*)&v.fan_speed, 1, sizeof(float), out.f); + fwrite((void*)&v.temperature, 1, sizeof(float), out.f); +#if !ENABLE_ET_SPE1872 + fwrite((void*)&v.volumetric_rate, 1, sizeof(float), out.f); +#endif // !ENABLE_ET_SPE1872 + fwrite((void*)&v.role, 1, sizeof(uint8_t), out.f); + fwrite((void*)&v.type, 1, sizeof(uint8_t), out.f); + fwrite((void*)&v.gcode_id, 1, sizeof(uint32_t), out.f); + fwrite((void*)&v.layer_id, 1, sizeof(uint32_t), out.f); + fwrite((void*)&v.extruder_id, 1, sizeof(uint32_t), out.f); + fwrite((void*)&v.color_id, 1, sizeof(uint32_t), out.f); + fwrite((void*)&v.times[0], 1, sizeof(float), out.f); + fwrite((void*)&v.times[1], 1, sizeof(float), out.f); +#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS + const float weight = v.weight; +#else + const float weight = 0.0f; +#endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS + fwrite((void*)&weight, 1, sizeof(float), out.f); + } + + const uint8_t spiral_vase_mode = data.spiral_vase_mode ? 1 : 0; + fwrite((void*)&spiral_vase_mode, 1, sizeof(uint8_t), out.f); + + const size_t tool_colors_count = data.tools_colors.size(); + fwrite((void*)&tool_colors_count, 1, sizeof(size_t), out.f); + for (const libvgcode::Color& c : data.tools_colors) { + fwrite((void*)&c[0], 1, sizeof(uint8_t), out.f); + fwrite((void*)&c[1], 1, sizeof(uint8_t), out.f); + fwrite((void*)&c[2], 1, sizeof(uint8_t), out.f); + } + + const size_t color_print_colors_count = data.color_print_colors.size(); + fwrite((void*)&color_print_colors_count, 1, sizeof(size_t), out.f); + for (const libvgcode::Color& c : data.color_print_colors) { + fwrite((void*)&c[0], 1, sizeof(uint8_t), out.f); + fwrite((void*)&c[1], 1, sizeof(uint8_t), out.f); + fwrite((void*)&c[2], 1, sizeof(uint8_t), out.f); + } + } +#endif // ENABLE_DATA_EXPORT // send data to the viewer m_viewer.reset_default_extrusion_roles_colors(); @@ -1262,7 +1262,11 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const curr.role != libvgcode::EGCodeExtrusionRole::Custom) { const Vec3d curr_pos = libvgcode::convert(curr.position).cast(); const Vec3d prev_pos = libvgcode::convert(m_viewer.get_vertex_at(i - 1).position).cast(); +#if ENABLE_ET_SPE1872 + m_cog.add_segment(curr_pos, prev_pos, gcode_result.filament_densities[curr.extruder_id] * curr.mm3_per_mm * (curr_pos - prev_pos).norm()); +#else 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 // ENABLE_ET_SPE1872 } } #endif // !VGCODE_ENABLE_COG_AND_TOOL_MARKERS diff --git a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp index 08704c6ed6..0cc41c93a2 100644 --- a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp +++ b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp @@ -214,15 +214,15 @@ GCodeInputData convert(const Slic3r::GCodeProcessorResult& result, const std::ve // and the times, which are set to zero #if ENABLE_ET_SPE1872 #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS - const libvgcode::PathVertex vertex = { convert(prev.position), height, width, curr.feedrate, prev.actual_feedrate, - curr.fan_speed, curr.temperature, curr.volumetric_rate(), prev.actual_volumetric_rate(), 0.0f, - convert(curr.extrusion_role), curr_type, static_cast(curr.gcode_id), static_cast(curr.layer_id), - static_cast(curr.extruder_id), static_cast(curr.cp_color_id), { 0.0f, 0.0f } }; + const libvgcode::PathVertex vertex = { convert(prev.position), height, width, curr.feedrate, prev.actual_feedrate, + curr.mm3_per_mm, curr.fan_speed, curr.temperature, 0.0f, convert(curr.extrusion_role), curr_type, + static_cast(curr.gcode_id), static_cast(curr.layer_id), + static_cast(curr.extruder_id), static_cast(curr.cp_color_id), { 0.0f, 0.0f } }; #else - const libvgcode::PathVertex vertex = { convert(prev.position), height, width, curr.feedrate, prev.actual_feedrate, - curr.fan_speed, curr.temperature, curr.volumetric_rate(), prev.actual_volumetric_rate(), convert(curr.extrusion_role), curr_type, - static_cast(curr.gcode_id), static_cast(curr.layer_id), - static_cast(curr.extruder_id), static_cast(curr.cp_color_id), { 0.0f, 0.0f } }; + const libvgcode::PathVertex vertex = { convert(prev.position), height, width, curr.feedrate, prev.actual_feedrate, + curr.mm3_per_mm, curr.fan_speed, curr.temperature, convert(curr.extrusion_role), curr_type, + static_cast(curr.gcode_id), static_cast(curr.layer_id), + static_cast(curr.extruder_id), static_cast(curr.cp_color_id), { 0.0f, 0.0f } }; #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS #else #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS @@ -244,14 +244,14 @@ GCodeInputData convert(const Slic3r::GCodeProcessorResult& result, const std::ve #if ENABLE_ET_SPE1872 #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS const libvgcode::PathVertex vertex = { convert(curr.position), height, width, curr.feedrate, curr.actual_feedrate, - curr.fan_speed, curr.temperature, curr.volumetric_rate(), curr.actual_volumetric_rate(), + curr.mm3_per_mm, curr.fan_speed, curr.temperature, result.filament_densities[curr.extruder_id] * curr.mm3_per_mm * (curr.position - prev.position).norm(), convert(curr.extrusion_role), curr_type, static_cast(curr.gcode_id), static_cast(curr.layer_id), static_cast(curr.extruder_id), static_cast(curr.cp_color_id), curr.time }; #else const libvgcode::PathVertex vertex = { convert(curr.position), height, width, curr.feedrate, curr.actual_feedrate, - curr.fan_speed, curr.temperature, curr.volumetric_rate(), curr.actual_volumetric_rate(), convert(curr.extrusion_role), - curr_type, static_cast(curr.gcode_id), static_cast(curr.layer_id), + curr.mm3_per_mm, curr.fan_speed, curr.temperature, convert(curr.extrusion_role), curr_type, + static_cast(curr.gcode_id), static_cast(curr.layer_id), static_cast(curr.extruder_id), static_cast(curr.cp_color_id), curr.time }; #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS #else @@ -293,11 +293,11 @@ static void convert_lines_to_vertices(const Slic3r::Lines& lines, const std::vec #if ENABLE_ET_SPE1872 #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS libvgcode::PathVertex vertex = { convert(Slic3r::Vec3f(a.x(), a.y(), top_z)), heights[i], widths[i], 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Noop, 0, static_cast(layer_id), + 0.0f, 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Noop, 0, static_cast(layer_id), static_cast(extruder_id), static_cast(color_id), { 0.0f, 0.0f } }; #else libvgcode::PathVertex vertex = { convert(Slic3r::Vec3f(a.x(), a.y(), top_z)), heights[i], widths[i], 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Noop, 0, static_cast(layer_id), + 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Noop, 0, static_cast(layer_id), static_cast(extruder_id), static_cast(color_id), { 0.0f, 0.0f } }; #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS #else @@ -321,11 +321,11 @@ static void convert_lines_to_vertices(const Slic3r::Lines& lines, const std::vec #if ENABLE_ET_SPE1872 #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS const libvgcode::PathVertex vertex = { convert(Slic3r::Vec3f(b.x(), b.y(), top_z)), heights[i], widths[i], 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Extrude, 0, static_cast(layer_id), + 0.0f, 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Extrude, 0, static_cast(layer_id), static_cast(extruder_id), static_cast(color_id), { 0.0f, 0.0f } }; #else const libvgcode::PathVertex vertex = { convert(Slic3r::Vec3f(b.x(), b.y(), top_z)), heights[i], widths[i], 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Extrude, 0, static_cast(layer_id), + 0.0f, 0.0f, 0.0f, extrusion_role, EMoveType::Extrude, 0, static_cast(layer_id), static_cast(extruder_id), static_cast(color_id), { 0.0f, 0.0f } }; #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS #else