Purpose
To design 3-D objects and generate the G-code to print the object. Currently the objects are restricted to shells with no solid layers or infill.
Motivation
I now have a clay printer, a Eazao Zero. My previous work has been based on
OpenSCAD to STL to Gcode but I'm aware that printing in clay requires more control
over the generated G-code as well as offering more freedom than the route via STL can
provide. Since my interest is in mathematically defined shapes, I was keen to
see if I could generate the G-code directly from functions. Hence the name: Fottery is short for Functions to Pottery. Whilst testing the tool
with PLA on my current printer, I realised that objects created with a single
continuous filament have a strength and integrity which would be useful for plastic
objects as well.
It has now been sucessfully used to created designs in clay - more in
my blog.
Help
Help is available on each of the inputs to the design on the
Help and explanations here. icons.
Usage
- The Sample designs tab provides some basic designs which illustrate some of the possibilities. Modifying one of these is a good way to start using the tool.
- Click Object to define the properties of the whole 3-D object and
generate G-code for a 3-D printed form.
- Controls here set the way that interpolation between bottom and top paths are computed, which by default is linear.
- The Modulation control allows the surface of the object to be textured in a limited way.
- Object designs can be saved and loaded from local files.
- Click Layers to create curves to define the bottom and top layers
of the object. Curves can be created by mathematical functions, from a sequence of
points or from the Fourier spectrum of the curve. Curves can be open or closed.
- The sliders adjust the parameters of the curve. You can also enter values in the
value fields directly to override the sliders.
- The resolution of the computed curve can be adjusted with the Step size
parameter.
- Other controls allow the curve to be scaled, moved, rotated, smoothed (with Fourier smoothing), aligned (moving the start point), converted to an open path, and restructured into equal length steps,
- To generate the code, on the Object tab, click Generate G-code which shows the Gcode
(minus the prologue and epilogue ) on the screen. A summary of the print such as length of filament and time to print is provided. If it looks ok, click
Download G-code to save the complete G-code file which can then be loaded
into a printer controller such as Prontoface or saved to an SD card.
- Click Printer to set properties such as filament
characteristics, layer height, wall construction, skirt etc.
- Print Properties can also be saved and loaded from local files. The default set are for PLA on my Prusa
Creating Perimeters
Fottery and supporting programs provide a number of ways of generation paths for perimeters in addition to the mathematical functions supported directly.
- From SVG - use the SVG tab to import SVG and sample an SVG path (there may be more than one) to get a sequence of (x,y) points. Copy these into a layer.
- Use Fractal curves to generate a path (open or closed)
- Use Special Points Generator to generate various Eulerian paths for continuous extrusion.
- Use Turtle to use Turtle language expanded to draw arcs.
Limitations
- To visualise the object, you need to generate and load the gcode into another tool like Prontoface or Repetier. It would be nice if this visualisation was part of this program.
- The shape of the profiles are not displayed
- The range of profile and modulation functions is limited
- It doesn't make in-fill, even to make the base. For clay the advice seems to be that it's better to make a solid clay base to print the perimeters on.
- It's not been tested by anyone but me.
- The code has grown to nearly 2500 lines of JavaScript and certainly is buggy.
- Some control interactions are awkward.
- There are few facilities for adding texture to the object.
- Only a single spiral path is generated. Multi-walled objects were hard to create without seams and an easier and faster way to get a thicker wall is to use a bigger nozzle.
Improvements
I've no desire to make a general slicer but there are a few additions I want to make:
- The vertical profile of the object can be varied by the Profile functions which determine the interpolation between layers and this can be expanded.
It should be possible to use a more general profile, derived from an arbitary path.
- More functions for surface textures.
- Only top and bottom layers are definable. Multiple key layers would provide more possibilities.
- I'd love to be able to slice a polyhedron defined by vertices and faces.
- More functions to modify the path defining a layer are possible. These need to be selected, configured and assembled into a pipeline of transformation rather than the fixed and limnited control.
Development