supermerill / SuperSlicer

G-code generator for 3D printers (Prusa, Voron, Creality, etc.)
4.03k stars 516 forks source link

Decouple Retraction & Wipe (for Wipe only when crossing perimeters) #4293

Open CuredPrusa opened 3 weeks ago

CuredPrusa commented 3 weeks ago

Did I miss something or it's true that checkbox for "Retraction Wipe - Wipe only when crossing perimeters" doesn't work for vast range of SS version, including the latest?

image

I discovered that just recently when I didn't want retraction wipe unless nozzle goes outside the model's wall.

CuredPrusa commented 3 weeks ago

Workaround: Retract only when crossing perimeter =true + Wipe while retracting =true + Retract on layer change =false

That brings similar functionality but disables retractions inside the model. Nevertheless, this checkbox looks dysfunctional.

supermerill commented 3 weeks ago

There was a typo, it needs avoid_crossing_perimeters to be able to be enabled. other than that, it works as expected: with image without image

CuredPrusa commented 3 weeks ago

Yeah, it's a bit awkward. However, I can not get all retractions inside the model and wipe only when crossing perimeter while crossing perimeter is NOT restricted. That's the whole point of wipe - to make crossing perimeter nicer. If I restrict crossing perimeter, I don't need wipe. If I don't restrict crossing perimeter, I actually need wipe. But I don't want it to wipe at every single retraction. I need wipe only when crossing perimeter, while perimeter crossing is not restricted. image image image This combination of check boxes gives me this: image But I want this, with free crossing perimeter: image

When I use a workaround, activate avoid_crossing_perimeters together with avoid_crossing_perimeters_max_detour =1mm, then I get something useful, but I don't understand why last retraction has wipe if last travel doesn't cross perimeter:

image image

CuredPrusa commented 3 weeks ago

You can test this on project which I have already sent you (test4) with this modifier: image

supermerill commented 3 weeks ago

understood, i'll check if the restriction can be lifted without too much work.

supermerill commented 3 weeks ago

The issue is that currently, wipe can only be done with a retraction. To decouple the two, a good amount of work & testing is needed.

CuredPrusa commented 3 weeks ago

Well, wipe should be done with a retraction. But retraction should not be done with wipe ;) I could use a workaround (avoid_crossing_perimeters_max_detour =1mm) . Is it also difficult to disable wipe at last retraction before travel to seam? (last screenshot here) I think that looks like a bug because the command is -wipe only when crossing perimeter- and last travel is not crossing it and there's still a wipe.

supermerill commented 3 weeks ago

if it's the last travel, maybe there is a layer change after, and if the retraction is enforced for the layer change, there will be a wipe?

CuredPrusa commented 2 weeks ago

Yes, true, retraction is enforced before layer change. But wipe is not necessary if it is nor crossing perimeter. Wipe only when crossing perimeter.