From d539540a65292b6ca059cf96934be55d00282bd1 Mon Sep 17 00:00:00 2001 From: Andrew Sun Date: Sat, 20 Sep 2025 15:09:55 -0400 Subject: [PATCH] Add support for Orca-specific extrusion roles --- src/libvgcode/include/Types.hpp | 6 ++++++ src/libvgcode/include/Viewer.hpp | 6 +++++- src/libvgcode/src/Settings.hpp | 7 ++++++- src/libvgcode/src/ViewerImpl.cpp | 11 +++++++++-- src/libvgcode/src/ViewerImpl.hpp | 6 +++++- src/slic3r/GUI/GCodeViewer.cpp | 15 ++++++++++++--- src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp | 12 ++++++++++++ 7 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/libvgcode/include/Types.hpp b/src/libvgcode/include/Types.hpp index a18712f7ba..ee80df2024 100644 --- a/src/libvgcode/include/Types.hpp +++ b/src/libvgcode/include/Types.hpp @@ -140,6 +140,12 @@ enum class EGCodeExtrusionRole : uint8_t SupportMaterialInterface, WipeTower, Custom, + // ORCA + BottomSurface, + InternalBridgeInfill, + Brim, + SupportTransition, + Mixed, COUNT }; diff --git a/src/libvgcode/include/Viewer.hpp b/src/libvgcode/include/Viewer.hpp index a66b88f1a5..45636b465d 100644 --- a/src/libvgcode/include/Viewer.hpp +++ b/src/libvgcode/include/Viewer.hpp @@ -370,7 +370,11 @@ public: EGCodeExtrusionRole::InternalInfill, EGCodeExtrusionRole::SolidInfill, EGCodeExtrusionRole::TopSolidInfill, EGCodeExtrusionRole::Ironing, EGCodeExtrusionRole::BridgeInfill, EGCodeExtrusionRole::GapFill, EGCodeExtrusionRole::Skirt, EGCodeExtrusionRole::SupportMaterial, EGCodeExtrusionRole::SupportMaterialInterface, - EGCodeExtrusionRole::WipeTower, EGCodeExtrusionRole::Custom }) const; + EGCodeExtrusionRole::WipeTower, EGCodeExtrusionRole::Custom, + // ORCA + EGCodeExtrusionRole::BottomSurface, EGCodeExtrusionRole::InternalBridgeInfill, EGCodeExtrusionRole::Brim, + EGCodeExtrusionRole::SupportTransition, EGCodeExtrusionRole::Mixed + }) const; // // Return the size of the used cpu memory, in bytes // diff --git a/src/libvgcode/src/Settings.hpp b/src/libvgcode/src/Settings.hpp index 564af5e492..052e49b342 100644 --- a/src/libvgcode/src/Settings.hpp +++ b/src/libvgcode/src/Settings.hpp @@ -61,7 +61,12 @@ struct Settings true, // SupportMaterial true, // SupportMaterialInterface true, // WipeTower - true // Custom + true, // Custom + // ORCA + true, // BottomSurface + true, // InternalBridgeInfill + true, // Brim + true, // SupportTransition }; }; diff --git a/src/libvgcode/src/ViewerImpl.cpp b/src/libvgcode/src/ViewerImpl.cpp index e2a0093da5..4705f21790 100644 --- a/src/libvgcode/src/ViewerImpl.cpp +++ b/src/libvgcode/src/ViewerImpl.cpp @@ -295,7 +295,12 @@ static const std::array DEFAULT_EXTRU { 0, 255, 0 }, // SupportMaterial { 0, 128, 0 }, // SupportMaterialInterface { 179, 227, 171 }, // WipeTower - { 94, 209, 148 } // Custom + { 94, 209, 148 }, // Custom + // ORCA + { 102, 92, 199 }, // BottomSurface + { 77, 128, 186 }, // InternalBridgeInfill + { 0, 59, 110 }, // Brim + { 0, 64, 0 }, // SupportTransition } }; static const std::array DEFAULT_OPTIONS_COLORS{ { @@ -1019,7 +1024,9 @@ void ViewerImpl::load(GCodeInputData&& gcode_data) v.role != EGCodeExtrusionRole::SupportMaterial && v.role != EGCodeExtrusionRole::SupportMaterialInterface && v.role != EGCodeExtrusionRole::WipeTower && - v.role != EGCodeExtrusionRole::Custom) { + v.role != EGCodeExtrusionRole::Custom && + v.role != EGCodeExtrusionRole::Brim && + v.role != EGCodeExtrusionRole::SupportTransition) { m_cog_marker.update(0.5f * (v.position + m_vertices[i - 1].position), v.weight); } #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS diff --git a/src/libvgcode/src/ViewerImpl.hpp b/src/libvgcode/src/ViewerImpl.hpp index 8e112dcb0a..e506274615 100644 --- a/src/libvgcode/src/ViewerImpl.hpp +++ b/src/libvgcode/src/ViewerImpl.hpp @@ -110,7 +110,11 @@ public: EGCodeExtrusionRole::InternalInfill, EGCodeExtrusionRole::SolidInfill, EGCodeExtrusionRole::TopSolidInfill, EGCodeExtrusionRole::Ironing, EGCodeExtrusionRole::BridgeInfill, EGCodeExtrusionRole::GapFill, EGCodeExtrusionRole::Skirt, EGCodeExtrusionRole::SupportMaterial, EGCodeExtrusionRole::SupportMaterialInterface, - EGCodeExtrusionRole::WipeTower, EGCodeExtrusionRole::Custom }) const; + EGCodeExtrusionRole::WipeTower, EGCodeExtrusionRole::Custom, + // ORCA + EGCodeExtrusionRole::BottomSurface, EGCodeExtrusionRole::InternalBridgeInfill, EGCodeExtrusionRole::Brim, + EGCodeExtrusionRole::SupportTransition, EGCodeExtrusionRole::Mixed + }) const; bool is_option_visible(EOptionType type) const; void toggle_option_visibility(EOptionType type); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 8fbf2ef657..f925c80ed2 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -434,11 +434,17 @@ static std::string to_string(libvgcode::EGCodeExtrusionRole role) case libvgcode::EGCodeExtrusionRole::Ironing: { return _u8L("Ironing"); } case libvgcode::EGCodeExtrusionRole::BridgeInfill: { return _u8L("Bridge infill"); } case libvgcode::EGCodeExtrusionRole::GapFill: { return _u8L("Gap fill"); } - case libvgcode::EGCodeExtrusionRole::Skirt: { return _u8L("Skirt/Brim"); } + case libvgcode::EGCodeExtrusionRole::Skirt: { return _u8L("Skirt"); } // ORCA case libvgcode::EGCodeExtrusionRole::SupportMaterial: { return _u8L("Support material"); } case libvgcode::EGCodeExtrusionRole::SupportMaterialInterface: { return _u8L("Support material interface"); } case libvgcode::EGCodeExtrusionRole::WipeTower: { return _u8L("Wipe tower"); } case libvgcode::EGCodeExtrusionRole::Custom: { return _u8L("Custom"); } + // ORCA + case libvgcode::EGCodeExtrusionRole::BottomSurface: { return _u8L("Bottom surface"); } + case libvgcode::EGCodeExtrusionRole::InternalBridgeInfill: { return _u8L("Internal bridge infill"); } + case libvgcode::EGCodeExtrusionRole::Brim: { return _u8L("Brim"); } + case libvgcode::EGCodeExtrusionRole::SupportTransition: { return _u8L("Support transition"); } + case libvgcode::EGCodeExtrusionRole::Mixed: { return _u8L("Mixed"); } default: { return _u8L("Unknown"); } } } @@ -1182,8 +1188,11 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const libvgcode::EGCodeExtrusionRole::InternalInfill, libvgcode::EGCodeExtrusionRole::SolidInfill, libvgcode::EGCodeExtrusionRole::TopSolidInfill, libvgcode::EGCodeExtrusionRole::Ironing, libvgcode::EGCodeExtrusionRole::BridgeInfill, libvgcode::EGCodeExtrusionRole::GapFill, libvgcode::EGCodeExtrusionRole::Skirt, libvgcode::EGCodeExtrusionRole::SupportMaterial, libvgcode::EGCodeExtrusionRole::SupportMaterialInterface, - libvgcode::EGCodeExtrusionRole::WipeTower - }); + libvgcode::EGCodeExtrusionRole::WipeTower, + // ORCA + libvgcode::EGCodeExtrusionRole::BottomSurface, libvgcode::EGCodeExtrusionRole::InternalBridgeInfill, libvgcode::EGCodeExtrusionRole::Brim, + libvgcode::EGCodeExtrusionRole::SupportTransition, libvgcode::EGCodeExtrusionRole::Mixed + }); m_paths_bounding_box = BoundingBoxf3(libvgcode::convert(bbox[0]).cast(), libvgcode::convert(bbox[1]).cast()); if (wxGetApp().is_editor()) diff --git a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp index b08932ae28..93546538ad 100644 --- a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp +++ b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp @@ -82,6 +82,12 @@ Slic3r::ExtrusionRole convert(EGCodeExtrusionRole role) case EGCodeExtrusionRole::SupportMaterialInterface: { return Slic3r::ExtrusionRole::erSupportMaterialInterface; } case EGCodeExtrusionRole::WipeTower: { return Slic3r::ExtrusionRole::erWipeTower; } case EGCodeExtrusionRole::Custom: { return Slic3r::ExtrusionRole::erCustom; } + // ORCA + case EGCodeExtrusionRole::BottomSurface: { return Slic3r::ExtrusionRole::erBottomSurface; } + case EGCodeExtrusionRole::InternalBridgeInfill: { return Slic3r::ExtrusionRole::erInternalBridgeInfill; } + case EGCodeExtrusionRole::Brim: { return Slic3r::ExtrusionRole::erBrim; } + case EGCodeExtrusionRole::SupportTransition: { return Slic3r::ExtrusionRole::erSupportTransition; } + case EGCodeExtrusionRole::Mixed: { return Slic3r::ExtrusionRole::erMixed; } default: { return Slic3r::ExtrusionRole::erNone; } } } @@ -105,6 +111,12 @@ EGCodeExtrusionRole convert(Slic3r::ExtrusionRole role) case Slic3r::ExtrusionRole::erSupportMaterialInterface: { return EGCodeExtrusionRole::SupportMaterialInterface; } case Slic3r::ExtrusionRole::erWipeTower: { return EGCodeExtrusionRole::WipeTower; } case Slic3r::ExtrusionRole::erCustom: { return EGCodeExtrusionRole::Custom; } + // ORCA + case Slic3r::ExtrusionRole::erBottomSurface: { return EGCodeExtrusionRole::BottomSurface; } + case Slic3r::ExtrusionRole::erInternalBridgeInfill: { return EGCodeExtrusionRole::InternalBridgeInfill; } + case Slic3r::ExtrusionRole::erBrim: { return EGCodeExtrusionRole::Brim; } + case Slic3r::ExtrusionRole::erSupportTransition: { return EGCodeExtrusionRole::SupportTransition; } + case Slic3r::ExtrusionRole::erMixed: { return EGCodeExtrusionRole::Mixed; } default: { return EGCodeExtrusionRole::None; } } }