Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slic3r prints tilted, raised islands in mid-air #2072

Open
hyperair opened this issue Jun 3, 2014 · 10 comments
Open

Slic3r prints tilted, raised islands in mid-air #2072

hyperair opened this issue Jun 3, 2014 · 10 comments

Comments

@hyperair
Copy link
Contributor

hyperair commented Jun 3, 2014

With a gear (http://www.thingiverse.com/thing:343602) printed at 45°, Slic3r generates G-Code that prints some of the teeth in mid-air. It still turns out somehow or other in the end, but with those teeth deformed.

Here's a screenshot of what it looks like in gcode.ws:
screenshot3

And here's the G-Code: https://gist.github.com/hyperair/7c8595a672df2f40e6e4

@alranel
Copy link
Member

alranel commented Jun 3, 2014

Oh wow. How do the supported teeth look like? Do they print well? Do you have a picture?

@alranel
Copy link
Member

alranel commented Jun 3, 2014

A rendering of the OP G-code:
schermata 2014-06-04 alle 00 12 54

@hyperair
Copy link
Contributor Author

hyperair commented Jun 4, 2014

I think I have two gears around printed with bad support -- one with red PLA and one with black ABS. I'll need to look for them. The teeth were kind of loose, but the upper layers printed out fine after the initial mid-air print.

I was watching as they printed -- basically it would just start extruding stuff in mid-air, and the bit of filament would tumble around, eventually harden, maybe latching onto some adjacent material or the print bed itself, and then things would print on top of that.

EDIT: The supported teeth actually turned out pretty good. I raised the support-material-enforce-layers option to 20, and it printed a very nice gear in black ABS. It's in the shredder now, so I'll have to dismantle it later to get a picture. The PLA gear I printed yesterday was bound pretty hard to the support material though. I couldn't get it off cleanly.

@hyperair
Copy link
Contributor Author

hyperair commented Jun 4, 2014

Here you go -- pictures of the red PLA printed with some teeth supported and some not:
2014-06-04 20 29 18
2014-06-04 20 29 26
2014-06-04 20 29 43
2014-06-04 20 51 37

I just realized I have a misconfigured extrusion multiplier for this filament, so there might be other errors.

@hyperair hyperair changed the title Slic3r prints some islands in mid-air Slic3r prints tilted, raised islands in mid-air Jun 9, 2014
@hyperair
Copy link
Contributor Author

hyperair commented Jun 9, 2014

I just tested with the following OpenSCAD model:

rotate ([45, 0, 0])
union () {
    cube ([10, 10, 20]);

    translate ([20, 0, 10])
    cube ([10, 10, 10]);

    translate ([0, 0, 19.9])
    cube ([30, 10, 10.1]);
}

If the rotation is removed, support material is generated correctly for the raised leg. However, if the model is tilted, Slic3r generates no support material at all.

@whosawhatsis
Copy link

This is a common problem. The root cause is that there are no surfaces that exceed the overhang threshold, despite the fact that there are edges with nothing at all below them. It will require some rewriting of the overhang detection to recognize when such an edge borders two faces that don't need support on their own, but the edge itself needs support. In this case, there should be a margin around the edge on either side (not just the one that's up in the air, but the other two bottom edges that are parallel to the platform as well) where support is added to keep the part in place. I'm not sure how such an area would be detected or the size of the margin would be specified, but it would probably share some code with the feature discussed here: #1316

@alranel
Copy link
Member

alranel commented Jun 9, 2014

The problem is that very small overhangs are filtered so that support is not generated for very small, insignificant overhanging perimeters. Sometimes there's no benefit in building an entire scaffolding just to support a little pointy extrusion. But sometimes, like here, such filtering should be way less tolerant.

@hyperair
Copy link
Contributor Author

On Mon, Jun 09, 2014 at 08:05:47AM -0700, Alessandro Ranellucci wrote:

The problem is that very small overhangs are filtered so that support is not
generated for very small, insignificant overhanging perimeters. Sometimes
there's no benefit in building an entire scaffolding just to support a little
pointy extrusion. But sometimes, like here, such filtering should be way less
tolerant.

I tried commenting out this bit from Slic3r/SupportMaterial.pm as a workaround
for the issue, and it seems to work:

                # collapse very tiny spots
                $diff = offset2($diff, -$fw/10, +$fw/10);

I think it'll probably cause more support material to be generated for the tiny
insignificant overhangs, but better than printing islands in mid-air in my
opinion.

I reckon a fix for this issue would be to only do this offset if this region is
thicker than $fw. If I'm understanding this correctly, anything thinner than $fw
should already yield a null $diff if supported by an underlying layer.

Kind regards,
Loong Jin

@hyperair
Copy link
Contributor Author

On Tue, Jun 10, 2014 at 10:56:36AM +0800, Chow Loong Jin wrote:

On Mon, Jun 09, 2014 at 08:05:47AM -0700, Alessandro Ranellucci wrote:

The problem is that very small overhangs are filtered so that support is not
generated for very small, insignificant overhanging perimeters. Sometimes
there's no benefit in building an entire scaffolding just to support a little
pointy extrusion. But sometimes, like here, such filtering should be way less
tolerant.

I tried commenting out this bit from Slic3r/SupportMaterial.pm as a workaround
for the issue, and it seems to work:

                # collapse very tiny spots
                $diff = offset2($diff, -$fw/10, +$fw/10);

I think it'll probably cause more support material to be generated for the tiny
insignificant overhangs, but better than printing islands in mid-air in my
opinion.

I reckon a fix for this issue would be to only do this offset if this region is
thicker than $fw. If I'm understanding this correctly, anything thinner than $fw
should already yield a null $diff if supported by an underlying layer.

The missing support also happens with $overhold_threshold != 0, but I'm not sure
what goes wrong in that codepath.

Kind regards,
Loong Jin

@whosawhatsis
Copy link

The code determining whether a small overhang should have support should also take into account how much of the connected area is not overhanging. A thin overhang attached to a very thin tower needs support more than one that is connected to a large, solid block.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants