slic3r / Slic3r

Open Source toolpath generator for 3D printers
https://slic3r.org/
GNU Affero General Public License v3.0
3.35k stars 1.29k forks source link

foreach layer, print each island completely before moving to the next #278

Closed clemtaylor closed 11 years ago

clemtaylor commented 12 years ago

One big problem I have with slic3r is stringing. I've tried to get retract to work and it does with thick layers, but with thin layers (0.1mm) and extrusions (0.45mm) it always results in stripping the filament in time. I had one print where >15mm of filament had strip marks before it finally lost grip. With slow feed rates from using thin layers and small extrusions all the retracts can easily stack up and chew up the filament by moving back and forth over the same area.

The problem is that slic3r retracts far too often. It doesn't seem to honour the min travel distance after retract. It likes to retract when doing infill and only moving a short distance. There should be an option to only retract when leaving islands and not retract when doing infill or moving from perimeters to infill while still inside the same island.

An easy first fix would be to just completely print each island before moving to the next to minimize the number of travels between islands. Adding support for fully printing islands would also make it possible to add support for printing towers, which I often do with SF when printing objects with a large number of islands.

alranel commented 12 years ago

You write:

It doesn't seem to honour the min travel distance after retract

If so, that's a bug and you should provide details (STL file and config.ini) about how to reproduce it (in a separate GitHub issue please).

QuantumConcepts commented 12 years ago

I like the idea of finishing a section before leaving it. +1

alranel commented 12 years ago

When an object is duplicated, Slic3r already completes each one (for each layer) before moving onto the next one. Also, the same happens when multiple objects are composed in a single print using the current git dev version.

kefir- commented 11 years ago

As I mentioned in issue #946, I think slic3r could be less rigid when it comes to print order, if it's able to detect disjoint details in a layer. When a part has layers where details are completely disjoint, each of these should be finished individually. For example, instead of doing like slic3r currently does (0.9.8):

perimeter - travel - perimeter - infill - travel - infill

it would be better to do:

perimeter - infill - travel - perimeter - infill

Even in this simple example, one travel is saved, and for more complex parts, a lot of time (and strings from imperfect retraction settings) can be spared.

brandonheller commented 11 years ago

You really notice this one when printing grids of parts that have some separation. Like kefir mentioned, Slic3r 0.9.8 will travel from part to part to part printing perimeters, then do a bunch of extra travels to do each infill inside each perimeter. This wastes time and causes extra stringing. I've attached a pic to show an example.

+1 to this feature request, and thanks alexrj for all the work you've done on Slic3r so far! extra_moves

alranel commented 11 years ago

Implemented. Rather than adding a new option for it, I included it automatically as part of avoid_crossing_perimeters.

kefir- commented 11 years ago

Nice, thank you! I think print times will be significantly lower for some prints as a result of this.

kefir- commented 11 years ago

By the way, out of curiosity - what are the drawbacks to avoid_crossing_perimeters, since you've added it as an option rather than just implementing it for all cases? Longer moves made to avoid perimeter details like holes and slots?