diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index cfdcf6d1e..7025cc2f7 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -798,7 +798,8 @@ const std::vector> GCodeProces { EProducer::Simplify3D, "G-Code generated by Simplify3D(R)" }, { EProducer::CraftWare, "CraftWare" }, { EProducer::ideaMaker, "ideaMaker" }, - { EProducer::KissSlicer, "KISSlicer" } + { EProducer::KissSlicer, "KISSlicer" }, + { EProducer::BambuStudio, "BambuStudio" } }; unsigned int GCodeProcessor::s_result_id = 0; @@ -2054,6 +2055,7 @@ bool GCodeProcessor::process_producers_tags(const std::string_view comment) case EProducer::CraftWare: { return process_craftware_tags(comment); } case EProducer::ideaMaker: { return process_ideamaker_tags(comment); } case EProducer::KissSlicer: { return process_kissslicer_tags(comment); } + case EProducer::BambuStudio: { return process_bambustudio_tags(comment); } default: { return false; } } } @@ -2498,6 +2500,62 @@ bool GCodeProcessor::process_kissslicer_tags(const std::string_view comment) return false; } +bool GCodeProcessor::process_bambustudio_tags(const std::string_view comment) +{ + // extrusion roles + + std::string tag = "FEATURE: "; + size_t pos = comment.find(tag); + if (pos != comment.npos) { + const std::string_view type = comment.substr(pos + tag.length()); + if (type == "Custom") + set_extrusion_role(erCustom); + else if (type == "Inner wall") + set_extrusion_role(erPerimeter); + else if (type == "Outer wall") + set_extrusion_role(erExternalPerimeter); + else if (type == "Overhang wall") + set_extrusion_role(erOverhangPerimeter); + else if (type == "Gap infill") + set_extrusion_role(erGapFill); + else if (type == "Bridge") + set_extrusion_role(erBridgeInfill); + else if (type == "Sparse infill") + set_extrusion_role(erInternalInfill); + else if (type == "Internal solid infill") + set_extrusion_role(erSolidInfill); + else if (type == "Top surface") + set_extrusion_role(erTopSolidInfill); + else if (type == "Bottom surface") + set_extrusion_role(erNone); + else if (type == "Ironing") + set_extrusion_role(erIroning); + else if (type == "Skirt") + set_extrusion_role(erSkirt); + else if (type == "Brim") + set_extrusion_role(erSkirt); + else if (type == "Support") + set_extrusion_role(erSupportMaterial); + else if (type == "Support interface") + set_extrusion_role(erSupportMaterialInterface); + else if (type == "Support transition") + set_extrusion_role(erNone); + else if (type == "Prime tower") + set_extrusion_role(erWipeTower); + else { + set_extrusion_role(erNone); + BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type; + } + + if (m_extrusion_role == erExternalPerimeter) + m_seams_detector.activate(true); + + return true; + } + + return false; +} + bool GCodeProcessor::detect_producer(const std::string_view comment) { for (const auto& [id, search_string] : Producers) { diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 71388866e..3edea61f4 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -590,7 +590,8 @@ namespace Slic3r { Simplify3D, CraftWare, ideaMaker, - KissSlicer + KissSlicer, + BambuStudio }; static const std::vector> Producers; @@ -658,6 +659,7 @@ namespace Slic3r { bool process_craftware_tags(const std::string_view comment); bool process_ideamaker_tags(const std::string_view comment); bool process_kissslicer_tags(const std::string_view comment); + bool process_bambustudio_tags(const std::string_view comment); bool detect_producer(const std::string_view comment);