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.
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.
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?
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
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.
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:
smaller files sizes
“faking”/reconstructing smooth surfaces when the input geometry is a coarse mesh
Further ideas:
Since you can skip meshing in gh, g2 arcs derived from the true nurbs geometry could be possible.
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
Ah, great to see that you got into 3D printing Laurent!
It’s so rewarding to put virtual stuff into the real world
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?
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.
Hello
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.
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.