The following consists mostly out of excerpts of my diploma thesis so read that instead if you want to go a bit deeper.

I developed this in 2017 independently from [Ben Eadie]'s very similar Idea shared on Hackaday in may 2022.

Ouroboros is open source and you can get it here.


the issue to solve:

The major issue with printing with big nozzles is that at some point the stringing can not be handled by tuning the retraction and temperature settings anymore. This results in messy surfaces with spikes and holes.

Combing can only mitigate the problems and results in even longer travel times. But, didn’t we buy our printers to print and not to travel? And didn’t we choose the 1 mm Nozzle to print big parts crazily fast?

That is why I became obsessed with creating 3D-prints that can be printed in one go without traveling at all.

When your slicer slices an object it generates a set of curves at the intersection of an XY-plane and the object for each layer. These are offset to compensate for the extrusion width. Usually you have no control over the start and the end of the curves, and the slicer wants to print each curve completely before going to the next. This means that even touching curves have travels between them.

I was not willing to accept that.

the theory behind my solution:

What if you could tell the slicer to print one curve to a specific point, switch to another touching curve, print that first and then to continue with the first one? If you could stitch all the curves into one big curve? If you now could also align the end points, preferably to somewhere out of sight, the only travel movements that are left are the layer changes. You can do all of that! I call it stitching and this is how to do it.

Quick Grasshopper introduction:

Grasshopper is a visual scripting interface for Rhino, a Computer Aided Design (CAD) application developed by McNeel & Associates. It has a work flow similar to modular audio synthesizers which allows the creation of parametric geometry by connecting components with “cables”.

A network of Grasshopper components as shown above is called a definition. They have inputs on the left and outputs on the right. The data is organized in so-called data trees which can be thought of as nested lists.

Like variables in programming languages, parameters contain data. They can reference Rhino geometry or contain data that is generated by Grasshopper components. In addition to the Point and Curve parameters you can see in the example, there are a lot of other data types. For example, Boundary Representations (Breps) which can contain surfaces and solids.

There are components for all kinds of operations, for example geometry, manipulating the data tree and mathematics.

Grasshopper has a very active community that provides a multitude of mostly free plug-ins that contain additional components. They can be pre-compiled from C# or contain user editable Grasshopper definitions called "User Objects".

A few words on Xylinus:

Xylinus is a set of Grasshopper User Objects developed by [Ryan Hoover]. It can generate G-code directly from Rhino and Grasshopper geometry.

It works with FDM printers, syringe printers and resin printers.

Ryan Hoover created Xylinus to control bioprinters and other experimental 3D printers he has developed at the Baltimore Under Ground Science Space and the Maryland Institute College of Art.

Within the scope of my diploma project I made quite a few contributions to Xylinus that will be part of the next release. I covered my contributions in my diploma thesis in detail.

Finaly we come to Ouroboros:

The Ouroboros logo
The Ouroboros logo

Ouroboros is the Greek name of the serpent devouring its own tail. Originally The symbol is from Egypt and is found in the mythology of many other ancient peoples. It is interpreted as the eternal cycle of life, death and rebirth and the oneness of everything.

By unifying curves and always returning to the starting...

Read more »