First journey in 3D printing

Some weeks ago I began my journey in the 3d printing world.
The main job was to generate 3d printer paths from closed curves which represent the intersection between a slice (plane or not) and a solid.

The paths must be a single curve, which means the extruder never stop to extrude during the print.
The results are very similar from what is presented here

and on this paper “Connected Fermat Spirals for Layered Fabrication”

The main tool is Offset from Clipper but there are many optimization in order to take into account

  • the non planar geometry,
  • the speed in order to have a responsive results with geometry with ratio between the extruder diameter and the size of the object that are between 1/200 and 1/1000.
  • the ordering of offsets ended to be more difficult than I first thought.
  • for the bridges (junction between 2 curves) I ended not taking idea from the paper. It is quite good to have random bridges as it will limit overfill between slices.

I added a tool to limit overfilling but it generates underfilling.

I also made a tool to transform the polyline in lines an arcs.See the references

It smoothen the curve and also decrease the size of the GCODE
Polyline with 1911 points

Arcs and lines with 274 points


Arcs en lines

One thing that could be added is a tool which could enable to control the flow or velocity of the extruder in order to limit Under or Over Fill. I have some idea but the subjects seems to be related to the extruder and material and on these subjects I have no competencies.

At the moment the tool is some C# components using a DLL.


Would the next layer be identical just slightly offset from the original curves depending on whether the geometry gets narrower or wider at that slice, or would a completely new Fermat spiral be generated per slice?
I guess the latter could be possible here since filling the entire space so tightly would make bridging easy if the gap between walls isn’t too large and no internal supports would be needed.

I did line into arc fitting for a project maybe two years ago now. Didn’t even know of that description, back then I simply called it “divide_non_uniform”. ;D
I believe it works similarly to your highly sampled polyline example above, but here it looks to being nearly identical to the original curve within a tolerance. It’s purposefully slowed down to show what it does. In reality, it all happens in the blink of an eye.

2022-07-14 08-13-18.2022-07-14 08_17_02

When detecting or fitting arcs, do you simply look for curvature rich portions, and try to fit an arc between delimiting region end points and their tangents?

Have you already tried to print an example?

For each layer a path is calculated, because geometry has variation on many parts and also because it enable a parallel calculation.

For this I used the simple logic described in this link

Take point P1, P2, P3, test if arc/line is possible. If yes test P1, P2, P3, P4 if no arc or no line take previous arc/line. The only improvement that is needed is a better fitting metric. At the moment it is just the max deviation, so it is just positive and doesn’t take into account if the approximation curve is totally on the right or left side of initial curve.

I did this tool for a company. They began to 3D print demonstrator. I hope I will be able to publish more soon.


very nice! Hopefully you can show more of this soon.
my 2cents on arcwelder:
Depending on the mesh settings and printer firmware arcwelder can actually negatively impact print quality. Modern 3D printer firmware eg. klipper can output millions of step pulses/s and overloading the printer micro controller with too many instructions is [mostly] not an issue.

the problem with arcwelder is that

  1. reconstructing an arc from control points doesn’t guarantee that the resulting path is congruent with the input geometry. Not a problem for inflill, but for outer walls this can lead to inconsistencies from layer to layer.

  2. the 3d printer firmware divides the arc again into line segments, typically with a resolution of 1mm. This is done at runtime and presumably with little optimization (code)

Because of this I see only two advantages to arcwelder:

  1. smaller files sizes
  2. “faking”/reconstructing smooth surfaces when the input geometry is a coarse mesh

Further ideas:

  1. Since you can skip meshing in gh, g2 arcs derived from the true nurbs geometry could be possible.
  2. Since all arcs are converted at some point into linear movement, I wonder what the ideal segment length should be. Analogous to golden layer height, where the layer height is set to multiple a full step of the stepper motor, one could split curves into segments of n * full step lengths. This way the motor has possible more torque, since it doesn’t rely on microstepping so much and it might result in more even extrusion
1 Like

Ah, great to see that you got into 3D printing Laurent!
It’s so rewarding to put virtual stuff into the real world :slight_smile:

I fell in love with doing lampshades with that spiralize mode - it’s really cool for that.

Since I use Klipper for my two printers, I no longer use ArcWelder.
Before I had the Raspberry PI though, it did help me get cleaner prints and less stutter.

Cura 5 also did a lot to make things work much better, their new pathing tools are brilliant. Instead of putting tons of tiny micro-paths everywhere to fill gaps, they now vary the width of the lines to fill space more evenly. Probably the best update in 3D printing for me ever!

As for controlling flow and velocity: Klipper does that with the Linear Advance tools. They have a lot of documentation about it, maybe that can be of interest to you?

Looking forward to see more of your work printed!




Working on some new way to fill, it is classical way, some parallel filling but it is still a single path.
The idea is to fill with closed shapes (rectangle cutted by interiors and exterior)
Red curves are the borders and black are path. I choose here to have nice border.

Then link/bridge the shapes, in order to have a single path

No smoothing

Some smoothing

Others patterns

So it is now possible to alternate direction on each layer.

Blue dot is an indication of the starting/ending point. So if there are 2 dots it means 2 curves, good if 2 layers, bad if just one layer !


This is really interesting.
What are the advantages or application for something like this? one continuous path- vasemode that includes infill.

I suppose it might be useful if a fiber is used in combination with a regular FDM process?

Thanks for sharing and good luck with your journey!

I don’t 3d print myself but make some of these tools for a company. What I understood is that single line path allows to not stop the extruder, so less work to clean and also a bit faster. Changing the pattern or its orientation on each layer probably is better for the strength of the 3d print. That’s all I know.

PS. I added a tool to suppress self intersection of curves in order to heal some bad paths. Tool in Nautilus Plugin.


@Joshua_Kennedy above are some nice demands / examples for multi-offset improvements.

similar topic here - about improving multiple offsets:

The advantages of the paths you are creating include not having to cross an existing path (so you don’t have to lift the head , or drop the bed) which avoids filament oozing out of the nozzle when it shouldn’t and avoids potentially scraping over material that has already been printed.

When you heat the toolhead and extrude the filament through it there’s a back pressure so it’s hard to stop the extrusion instantly… A little bit can ooze out when the toolhead is just traversing and these can ruin the quality of the print.