Ultimaker / Cura

3D printer / slicing GUI built on top of the Uranium framework
GNU Lesser General Public License v3.0
6.18k stars 2.08k forks source link

Spiral Vase mode start level #7893

Open Cecchellone opened 4 years ago

Cecchellone commented 4 years ago

Hello I was suggesting a way to slice the lower part of an object in "normal" mode, and the top part in "spiral vase" mode. It could be very usefull if the interface could specify a "start height" for the Vase Mode, so it will normally slice the bottom part, and a certain level it will start with the spiral vase mode. Obviously if needed it also needs to make a shell not to leave the infill below visible.

mahtDFR commented 4 years ago

What's the use case for this? ~Can this not already be done using a cutting mesh?~

fieldOfView commented 4 years ago

Can this not already be done using a cutting mesh?

No. Vase mode is not available as a per model setting, so neither can it be used with a cutting mesh.

Cecchellone commented 4 years ago

The only way i found to do this, is to split the object in two parts, slice the lower one with normal settings, slice the higher one in spiral vase mode (but also removing the bottom shell and the adesion settings) and then putting them together via a Python script that lift up the top gcode's Z commands of the bottom gcode's max Z position.

It works but it obviously act strangely in matter of cooling, speed and temperature regulations.

mahtDFR commented 4 years ago

Can you explain more about the application you have in mind here? Is it for practical purposes or is it just for aesthetics? I think this will have an influence on whether it's picked up or not.

Cecchellone commented 4 years ago

It’s kind of both, I think it’s faster if I explain what I was trying to do.

I wanted to print a cylindric “bar equalizer” made of stacked led strips rings. The model I made is made of two parts, an inner one, where the strips sticks to, and the outer one, that has to be made in spiral vase mode to let the leds visible from the outside. Obviously the two parts must stick together, and for that purpose, both parts have a thread, the inner one acts as a screw, and the outer one as a bolt.

But to do this, the outer part needs its bottom section to be printed in “normal” mode, and the above section in spiral mode to let the light visible. I hope I explained myself.

If needed i can provide the 3D models.

mahtDFR commented 4 years ago

Thanks for the request, we discussed this in our stand up and have decided to defer it in favour of other priorities. We're open to pull requests to implement this.

Ghostkeeper commented 4 years ago

This is a bit difficult due to the Smooth Spiralized Contours setting (which most people associate with spiralize), because it has special casing for the first and last layers. It tries to print the first layer ramping up and flattens the last layer.

Generally I'd love something like Simplify3D where you can specify a process for certain layers. However we've also seen that sometimes this is a bit more limiting than it needs to be. We'd rather go for an easier way to change settings in a certain volume.

clfaye commented 3 years ago

I would also like to add this feature. It was possible in Cura 2.5 (and I still use Cura 2.5 for this purpose). I build lighting sculpture and I need a strong conventionally printed base and a 1 layer thick top.

clfaye commented 3 years ago

More accurately, a "vase start level" feature wasn't available in Cura 2.5. However, in Cura 2.5 you were allowed to "spiralize outer contour" as a per model setting. So it was easy to have a solid model on the bottom and put a spiralized model directly on top. After Cura 2.5 this is no longer permitted. To get around this I either use Cura 2.5 (which is not ideal because it is so old) or I slice everything separately and then merge the gcode files making appropriate edits so that everything is seamless. It is very time consuming.

clfaye commented 3 years ago

Hey - we can do this ourselves! If you go into the Cura program folder, resources, definitions and find "fdmprinter.def.json" - you can edit that file. Find "Spiralize Outer Contour" and change "settable_per_mesh" to true. Also change "smooth_spiralized_contours" "settable_per_mesh" to true. Then both of these will show up as "per model settings" the next time you open Cura. I haven't done a print with it yet, but I have sliced a model with a solid base and a spiralized top and it works just as it did in Cura 2.5.

clfaye commented 3 years ago

Nope - doesn't work as expected. It looks like it has spiralized in the slicer, but it really just creates a single walled print. It doesn't smoothly rise the way that it is supposed to. It creates a series of single layers so that the seam is clearly visible. You can find the seam and the travel lines in the slicer preview. So, I'm back to stitching gCode files together.

Ghostkeeper commented 3 years ago

Looking at the code, the walls generation looks into the mesh settings for the spiralize setting (so it makes sense that you get only one wall and 5 in the base), but auxiliary routines look at the global settings for the spiralize setting, making this a global-only setting without modifications to CuraEngine. A couple of things that request the setting in a global context are:

There are also a number of places where we request the setting from the global settings even though per-mesh settings would be available:

And for some things we do actually request it from the per-object settings:

So it seems we were quite consistently requesting it from the global settings, since Spiralize is a global setting. But for about half of those cases we could easily make it a per-object setting. Still, those first 3 cases are the reason why we can't make Spiralize a per-object setting. A solution is probably possible but it'd need some re-thinking to make it per-object.

Cecchellone commented 3 years ago

I didn't really deep dived in the code, so maybe what I'm going to say it's meaningless, but it's worth a shot saying... Could it maybe be simpler to set it up as a per-object setting only if the printing sequence is "one at a time"? I don't even know if it's a conceivable option.

Ghostkeeper commented 3 years ago

If the print sequence is one at a time, you can still print multiple objects at the same time by grouping them, so it's never really going to be a fix for routines that govern things in between models (like the ordering of polygons, or choosing which part gets spiralised). And you can even just have one model that splits into two pieces, like a Y shape standing upright.

ThorsenRune commented 3 years ago

I have a usecase for this. It's like a outer cover for a handle in TPU where the first 5 mm needs to be a solid

shengyan commented 3 years ago

I may just got a solution.

  1. Turn on "Spiralize Outer Contour".
  2. Set "Bottom Layers" to the height of the bottom section.

This is a Planaria trap cap I printed using this technic. Planaria Trap Cap Model Planaria Trap Cap Slicer Preview

ThorsenRune commented 3 years ago

I think it would be good if we could put a modifier so at a certain height it switches from/to spiral to normal mode. I would find it usefull to add a solid top to a spiral mode.

robertpdx commented 1 year ago

In case anyone stumbles across this issue, I was not able to get the method suggested @shengyan to work, however it does work in Prusa 2.6.0-rc1. I merged two models and sliced in spiralized mode, setting the bottom layers to match the height of the ring/holder of a lamp shade. He's a Cura 5.2.2 preview and a 50% scale Prusa preview and Ender 3 Pro print. I understand that these two slicers are sharing a lot of code now. It would be a great feature to see in Cura.

Cura 5.2.2 image

Prusa 2.6.0-rc1 image

Print at 50% scale on an Ender 3 Pro: shade-print

B-Man1 commented 1 year ago

I would love to be able to cap off my vase mode prints

github-actions[bot] commented 2 months ago

Hi 👋, We are cleaning our list of issues to improve our focus. This feature request seems to be older than a year, which is at least three major Cura releases ago. It also received the label Deferred indicating that we did not have time to work on it back then and haven't found time to work on it since.

If this is still something that you think can improve how you and others use Cura, can you please leave a comment? We will have a fresh set of eyes to look at it.

If it has been resolved or don't need it to be improved anymore, you don't have to do anything, and this issue will be automatically closed in 14 days.

B-Man1 commented 2 months ago

This would be a great feature to have and seems easy to implement

ThorsenRune commented 2 months ago

I definitely think that vase mode for a height interval should be available. Preferably by a modifier

Cecchellone commented 2 months ago

Hi, I'm the one who proposed this feature in the first place. I still think this could be a nice addition to Cura.

xX-MrN0b0dy-Xx commented 2 months ago

Just joined the thread, i'd be interested to see this feature implemented too

HeroCod commented 2 months ago

I feel like this would be a very useful feature, especially given how complex right now the slicing process for these geometries, is.

PieTempesti98 commented 2 months ago

I think implementing this feature can be really useful and not so impossible to implement

edofazza commented 2 months ago

I was looking for something like that, it would be nice if implemented. It will simplify a lot many of my ideas. Looking forward for seeing it implemented