slic3r / Slic3r

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

feature request: continuous-mode for large nozzles #4552

Open gotthalmseder opened 5 years ago

gotthalmseder commented 5 years ago

I have lots of experience in printing large scale models with large nozzles (1mm, 1,2mm). Outdoor only PET is useabel for large objects because it sticks on the bed, does not shrink and is weather-resistant.

But using large nozzles PET does a lot of stringing and artifacts occour because large nozzles loose filament in empty travel and air comes in. Retraction does not help like it does with fine nozzles.

So we need a slicing mode simular to the vase mode, but applicable to any shape. A mode, that reduces empty travel to a minimum and prints most models in a continuous string. Let us call it "continuous-mode". Continuous mode could allways be combined with 100% filling, because this mode ist most used in printing with large nozzles and there patern-filling is not a good idea.

The pictures show typical artefacts that appear in large-nozzle-prints in layers where lots of empty travel occur. The slicer tells the printer to print the perimeters and then afterwards the infill. The seperate filling after doing the perimeters is no good Idea for printing with large nozzles because filling distant areas leads to a lot of empty travel.

The black and white graphic shows a solution. It shows what I mean with slicing in "continuous mode". This is a feature I miss so badly in any slicer that is on the market!

loesung p9182588 problem zufluss

lordofhyphens commented 5 years ago

Just as a FYI, what you are asking for has the possibility of taking forever to slice on a lot of geometries.

gotthalmseder commented 5 years ago

Yes, it could be something that lets slic3r overrule all other slicers. Because I never had any printing failures in objects with no empty travel. Whatever can be printed in vase mode is fine, even with the largest nozzle.

A continuous mode would be a sort of vase-mode for any geometry. Empty travel should be just necessary when there are more than one areas, for example if you print two objects once. But in each object there should not be any empty travel. That would lead to the best results with large nozzles.

gotthalmseder commented 5 years ago

I spend 400 Dollar for the programmer, who gives me this feature. But it has to be done in an intelligent way, so it does not need too much calculation-time. As I print a lot of geometric objects it would be fine if it copies pathways from the layer below, whereever the shape hasn't changed.

lordofhyphens commented 5 years ago

Vase mode is a hack in Slic3r; it slices normally and then connects the dots.

So the basic requirements you are looking for are the following:

gotthalmseder commented 5 years ago

Yes, vase-mode is a simple thing in relation to a continuous-mode. What about following set of rules:

  1. A nozzlewidth before you close the outside-perimeters of an island, fill it.
  2. An island is closed when a perimeter gets in contact with itself.
  3. By filling an island allways leave a gap along one site of the island, that lets you come out again to the same place you started filling.

These three rules lead to another problem: A three perimeters thick wall could be printed continuous, but not with these rules. To print three parallel perimeters the endposition of each layer would be on the opposite end of the wall. It may be possible to print that wall with four thinner perimeters. Then we can use the shown three rules.

gotthalmseder commented 5 years ago

What is a FYI ?

lordofhyphens commented 5 years ago

@gotthalmseder "For your information"

Islands in Slic3r refer to the area defined by some closed polygon. A cross-section of a pillar is one island.

gotthalmseder commented 5 years ago

Thanks for information. Why do you have that knowledge about the structure of the programm? Do you programm yourself?

About islands: We need to distinguish between filled and unfilled islands. A two perimeter thick wall is an island, but it is unfilled. If the wall has thicker parts, they need to be filled before the perimeters are printed further on. Otherwise you get empty travel in the filling process by rising from one thick part of the wall to another. Thick nozzles then drop out and you get blobs on the thin parts you skip over, as shown in the pictures.

So my definition of a perimeter that gets near to itself is necessary. Near means it has to start a filling process before it closes the island. There has to be a gap left, to leave the filled area.

supermerill commented 5 years ago

idea: Perimeters are loop. We can open-close a loop almost at the same place. We follow the external perimeter. Each time we encounter a more in-depth perimeter, we connect to it and wait for it to return (recursively) before continuing our perimeter. Should be easy enough to program.

sans titre

For the infill, It's a bit more complicated, as it should be an "infinite perimeters" instead of infill, with this method.

There has to be a gap left, to leave the filled area

well, it have to leave the island at the correct side, to not have to hover over it. edit: but it can only leave it where it start.

gotthalmseder commented 5 years ago

Sounds good. Infinite Perimeters are a good solution for the most objects. But it seems we discuss here details without any programmer looking on our ideas.

lordofhyphens commented 5 years ago

@gotthalmseder supermerill is plenty capable.

gotthalmseder commented 5 years ago

Do you know him? Is he a programmer?

supermerill commented 5 years ago

@gotthalmseder : click on my name.

gotthalmseder commented 5 years ago

Thanks for this tipp, Merill. I am new in this forum. Most Forums do not have such member-sites. So you have allready done programms for slic3r. That's fine!

Are you interested in the feature I suggest? As far as I could, I would support the devellopment. I am not a C++ programmer, but I have done programms in Java. So I am able to understand the logic of programming, discuss rules and I would be able to test the feature on different shapes to see if it solves the printing-problems I get by usinig large nozzles. My english is not the best, but it should be sufficient :-)

gotthalmseder commented 5 years ago

But: Not only fillings lead to empty travel. Slic3r also often skips Perimeters of closed islands and travels arround without sense. This for example could be done without any travel, one layer from the left end to the right end, the next layer otherway round. But Slic3r not only does it always in the same direction, it devides the line into two and so it needs travel not only in layerchange but also during each layer. unbenannt-2

I think empty travel is the biggest problem of 3D-printing today.

supermerill commented 5 years ago

It's because you select "thin walls"

edit: progress:

4peri complperi

foreachthing commented 5 years ago

I am a big fan of this "issue" right here! @supermerill: IMHO the outer perimeter should not have an opening. If that gap is just a tiny bit under-filled your part will most likely break (or leak) right there. And, it leaves a visible line from top to bottom (assuming this happens at the same place for each layer).

supermerill commented 5 years ago

i know, just a little bug i corrected today.

edit: or maybe you talked about something else? If i "close" the outer perimeter, it will be over-extruded... unless i use a travel move.

gotthalmseder commented 5 years ago

Sorry, I have not been online this weekend. Merill, this is great! Is it allready testable for a non-programmer?

But I think your algorithm got a problem with walls that thickness is uneven numbered perimeters.

What is the most common object-type that is done in series on 3D-Printers? I guess it is cases. Whoever produces something usefull in low numbers of pieces, needs 3D-printed self designed cases. Cases have openings and thick parts for screws. The ideal width of a case-wall using standard 0.4mm nozzles is 3 perimeters, the ideal width using a 1.2mm nozzle (fast producing) is 1 perimeter. The reason I changed from Cura to Slic3r is that Cura does not like 1 perimeter walls. It does holes. Slic3r prints them fine, but artefacts occour because of too much empty travel.

To print such cases without empty travel you have to start at the end of a wall, do all the screwholes on the way and end on the other end. In the next layer you start at this opposite end of the wall. If you have a 3 perimeters thick wall you should print the outsite-perimeters before the filling-line (red). That leads to cleaner prints. So you should work from outsite to inside. But you need to design the track just the other way round, because you have to design it from one end of the filling line (red) at the end of the wall. But I have no idea how to detect the end of the wall (the ideal starting point). Can't we just tell the programm to start there by a click? Maybe a sign appears in the slicing-progress to click on the immage where the slicing of an island has to start?

I guess after doing the design of the slice you have to turn the timescale to its opposite and print the last designed path (outside perimeters) first. It may not be possible to do it all without empty travel, but the goal is to keep empty travel as short as possible. cases

supermerill commented 5 years ago

filling-line (red)

These are gap-fill. You can enable/disable that, but it can't be merged in a continuous line with the perimeters. It's mathematically impossible (unless for some edge-cases). To remove them, you can also change the wall thickness of your model and/or change the extrusion width.

slic3r print perimeters then infill then gap fill (if i remember well).

Here a test version (win32, i assumed you're on windows):

https://mega.nz/#!8kRhTYIA!ztDNW7gwdXfGDS9Or7_1SWLcE4pd7opsSsRg3cz8m9c It's limited to 20 layers (because it's only to test if it's ok, not a real version). There are a checkbox in the infill category to enable/disable gapfill. It's based on my fork of slic3rpe, so with all my features & changes & the changes of slic3rPE. I will merge it into the mainline slic3R if it's ok (and if i have the reward ;-p )

note: i didn't do a continuous mode for infill as it will takes me an other week to program and you didn't seems interested.

edit: i have a little bug for layers >0, will be corrected soon. done edit2: i need to do a last thing : reduce the extrusion width to 0 for travel from perimeters to holes if it's too long. Also, should i "force-close" the outer perimeter ?

other points

But I have no idea how to detect the end of the wall (the ideal starting point). Can't we just tell the programm to start there by a click?

see https://github.com/prusa3d/Slic3r/pull/728, it's that?

It may not be possible to do it all without empty travel, but the goal is to keep empty travel as short as possible.

https://en.wikipedia.org/wiki/Travelling_salesman_problem it's hard. it's complicated. Currently it's only "the nearest point to the next island my unsorted list" what i use for my closed-perimeter : when multiple childs, i connect the nearest at the nearest point, then next. It may not be the optimum but i think it's close enough.

gotthalmseder commented 5 years ago

Wow, Merill! with the right wall-thickness the feature, as programmed right now, does a significant reduction of travel! Great! You get the reward ;) For this you can reach me in facebook chat (username: Manfred Gotthalmseder) or give me an other option to get in privat contact with you.

image

Right now I use Slic3r Prusa Edition 1.49.1 Win64
But there is no big difference to the version you sent me. Your version even took my settings.

gotthalmseder commented 5 years ago

I tried the feature on a very complex object. But only a part of the hight of the object got sliced. It might not be the new feature that trigger this. I allready had such problems without that feature. I guess it is the older Slic3r-Version that could be the reason. Another problem are these diagonal lines that occur. In this case they just occure if "detect bridging perimeters" is on.

You can download my testfile by clicking on this link: http://www.picsandpixels.at/testing.stl

complex_object

supermerill commented 5 years ago

But only a part of the hight of the object got sliced

It's limited to 20 layers (because it's only to test if it's ok, not a real version).

I will do a proper release.

these diagonal lines

a quirk of my new thin wall /gap fill, already corrected as i encountered it yesterday on one of my piece.

gotthalmseder commented 5 years ago

Oh, I am very happy, looking forward to print complex objects like that without the artefacts I have shown at the start. Seems you are a real good programmer! The labyrinths the programm does look rather complex and it does it fast. The feature right now seems to work so well, that there should be a solution for all my functional parts as long as I draw things in a way that can be done well.

The whole problem of slicing reminds me to a problem I know from my work in Photoshop. Programm-features to cut out objects are also confronted with the problem that there are many possible solutions. For there is no way that a programm finds the ideal solution itself, the features include the help of the user. So you click on areas that are not ok and the programm brings another solution. Maybe this would be an idea for the future of slicing as well. Because there will allways be some areas in an object you wish the programm would have done it different or would have done the seam on another place. But this is an idea for a new reward :-) The "continuous mode" is allready done!

It would be nice to have continuous mode included in the latest version of slic3r. As I told you I use Slic3r Prusa Edition 1.49.1 Win64. Maybe you have good reasons to use an older verison, then just tell me.

supermerill commented 5 years ago

As I told you I use Slic3r Prusa Edition 1.49.1 Win64

latest version of slic3rPE is 1.41.1

gotthalmseder commented 5 years ago

You are right, it was a typing error that I copied further on. My Edition is 1.40.1, so yours is newer. So I think all my questions are answered.

supermerill commented 5 years ago

an other test build: https://mega.nz/#!oxQzHYZT!sS-I4b6SWSQ-upi0wURBrOjiIS0Xsqyjp7WGbElLV5o

This should be the final algorithm. I can't spot any bad crossing of perimeters, and it doesn't extrude when going over infill.

I have to test it irl, but i can't do that for the next weeks (because of a business trip). I will create a pr after some tests.

all changes are in this commit: supermerill/Slic3r@6d63e0dae5e793268a746173c3269848f330f2c7