SoftFever / OrcaSlicer

G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)
https://discord.gg/P4VE9UY9gJ
GNU Affero General Public License v3.0
7.24k stars 854 forks source link

Make Overhangs printable and printing Multi color adds color all the way down #4559

Closed Aghost917 closed 4 months ago

Aghost917 commented 7 months ago

Is there an existing issue for this problem?

OrcaSlicer Version

2.0.0-Beta

Operating System (OS)

Windows

OS Version

Windows 11 22H2

Additional system information

No response

Printer

Bambu Labs P1S

How to reproduce

Import the STL file, use the paint tool on the STL, and turn on Make Overhangs Printable.

Actual results

For some reason, it just adds color all the way to the build plate instead of starting at the layer height of the color change. image

Expected results

image

Project file & Debug log uploads

Rubber_Duck.zip

Checklist of files to include

Anything else?

No response

okirisx2 commented 7 months ago

Yes. This has been a long-standing bug. I’ve not found a workaround.

github-actions[bot] commented 4 months ago

Orca bot: this issue is stale because it has been open for 90 days with no activity.

github-actions[bot] commented 4 months ago

Orca bot: This issue was closed because it has been inactive for 7 days since being marked as stale.

tomzdotorg commented 2 months ago

I'm unfamiliar with this codebase, but I believe that

this->apply_conical_overhang();

has to be above

apply_mm_segmentation(...

in PrintObjectSlice.cpp

i.e.

    this->apply_conical_overhang();

    // Is any ModelVolume MMU painted?
    if (const auto& volumes = this->model_object()->volumes;
        m_print->config().filament_diameter.size() > 1 && // BBS
        std::find_if(volumes.begin(), volumes.end(), [](const ModelVolume* v) { return !v->mmu_segmentation_facets.empty(); }) != volumes.end()) {

        // If XY Size compensation is also enabled, notify the user that XY Size compensation
        // would not be used because the object is multi-material painted.
        if (m_config.xy_hole_compensation.value != 0.f || m_config.xy_contour_compensation.value != 0.f) {
            this->active_step_add_warning(
                PrintStateBase::WarningLevel::CRITICAL,
                L("An object's XY size compensation will not be used because it is also color-painted.\nXY Size "
                  "compensation can not be combined with color-painting."));
            BOOST_LOG_TRIVIAL(info) << "xy compensation will not work for object " << this->model_object()->name << " for multi filament.";
        }

        BOOST_LOG_TRIVIAL(debug) << "Slicing volumes - MMU segmentation";
        apply_mm_segmentation(*this, [print]() { print->throw_if_canceled(); });
    }

It appears to fix this bug in the few models I've tested so far.

JamieWritesCode commented 1 month ago

@SoftFever Can we get this re-opened and looked at again? This is still an issue as of today.

tomzdotorg commented 1 month ago

This is still an issue as of today.

I believe the fix I posted above was merged in #6896

JamieWritesCode commented 1 month ago

Awesome, great stuff! Apologies for the unnecessary tag. I must have missed that PR when searching.