June 19, 2020

Vases mode - with holes in the bottom

So it seems like this should be really easy to do. I have a theory that Simplify3D may be able to do it because it has processes that you can apply at different heights... but I don't have access to Simplify3D. First of all though, why is this even a thing. Well, I wanted to print some plant pots and they generally have holes in the bottom to allow for drainage. Sure I could design them to be hollow and design the holes in the base, but when I did this, they took a long time to print, and that z-scar... Vase mode is the answer... but vase mode doesn't handle bases with holes in... Hmm... I could drill holes in the base... or use a soldering iron... but I am an overly minimal post processing kind of guy, and besides, where is the over-engineering in that :D

Before I get into explaining the bane of my life for the last week, I should probably go over a bit of scene-setting, then a general overview, and then specifics about what I did. So, I am a Prusa fanboi. I have an Mk3, an SL1 and now the Mini. This means I use Prusa Slicer (currently 2.2.0+) If you don't have these printers or this slicer then you will need to apply some of the following logic.

  • You really should calibrate your printer for your filament. This means setting the e-steps, extrusion multiplier and linear advance for the extrusion, as well as a PID tuning for the temperature. I won't cover those here as there are lots of resources around, and while it generally makes your prints better, you can get away with it here.
  • You should probably set up a vase mode profile in your slicer. Most slicers have a vase mode option, but they name it differently. Vase mode just means that it prints the outer shell of a solid object with a continuous spiral without sudden changes in the z height (layers) so you don't get scars.
  • You should use multiple bottom layers as this will give you a stronger base with a thickness similar to your perimeters - a nozzle width of 0.4mm for example and a layer height of 0.2 means you should probably have 2 or 3 bottom layers.
  • I use 3 bottom layers because I can set a bottom pattern (Hilbert Curve), have a stabilising middle layer and a top patterned later (Octogram Spiral)
  • If you haven't calibrated your settings specifically for your filament, you can possibly just up the printing temperature a little bit and possibly the extrusion multiplier so that you get great layer adhesion.

That's vase mode covered. What's the magic sauce. Ok, so I use 2 versions of my object. The first is the solid pot I want to print (no holes on the bottom), the second is a 0.6mm slice of that object, with the holes in I want. I won't go into detail as it will depend on your design tool of choice. Here they are in my slicer

The basic process you want to follow is this:
  • Generate the GCODE for the full pot in vase mode (with 3 sold bottom layers)
  • Generate the GCODE for the base (without vase mode)
  • Replace the first 3 layers in the full pot with the 3 layers in the base

Prusa Slicer has a few options to help with this, but this is where I get all Prusa on you, and you'll need to follow the idea rather than the actual process itself. In your print settings under the advanced tab, there are 2 options that you should probably enable anyway: "Verbose G-code" and "Label objects"

When Prusa slicer outputs your GCODE file the last bit before the starting of the first layer is the filament specific GCODE. In mine, I have all of the calibration stuff, but even by default, there is an M900 to set the Linear advance. We will use this to find the beginning of the print. With the verbose output and the labelled prints, we can also use "stop printing" as the end of the layer. Ok, strap yourself in, and let's get dirty.

So as I mentioned above, I have a "Posh Vase" print setting, that has the tweaks mentioned above. I'll summarise the important options here:
  • Layers and perimeters tab: spiral vase enabled, 1 perimeter, zero top layers, 3 bottom layers.
  • Infill tab: zero infill, top infill set to Octogram Spiral, bottom infill set to Hilbert Curve.
  • Output options tab: Verbose output and labelled objects.

Other than a calibrated filament there is nothing else we need to focus on in the slicer but disabling auto-cooling in the filament settings is usually a good thing as things will print significantly faster, even with PLA, but that's up to you. Load your full solid pot into the slicer, slice with the settings above and export that file for looking at later.

Next, load the base into the slicer. You need to tweak the above settings to make things work though, but only in one place:
  • Layers and perimeters tab: spiral vase disabled, 1 top layer and 2 bottom layers.

Slice and export that file, then open both files in a text editor of your choice, put them side by side and find the M900 line in both files.
  • In the base file, delete everything before that line
  • In the pot file, copy everything before that line
  • Back in the base file, paste in the stuff from the pot file

In the base file we need to search for "stop printing", and you need the third one. It will be the last one so you'll see all the shutdown commands after it. Delete everything after this line, select the whole file and copy it.

In the pot file find the third "stop printing" as well. It will be a little easier to spot because it will tell you it's supposed to be 0.8 layer height, but because it's vase mode, the command will start at 0.6mm:

Delete this line and everything before it, then paste the contents of the base file in here.

That's it, we're done. Save the file and print away. If you've done everything outlined above, you should see the thumbnail and print timings of the full pot like you would have, as well as octoprint working without an issue including any plugins processing 2 objects (The base and the vase) and doing everything properly.

Happy Printing!


  1. You can do this easier in cura. It will allow holes in the base natively. You can also use vase mode stacked on top of normal models if you are willing to modify the definition file. https://github.com/Ultimaker/Cura/issues/7893

  2. Thank you, this worked really well, and allowed a grid-based bottom for my vase-mode bin.

  3. Thank you its very info and worked well.'

  4. This comment has been removed by a blog administrator.