Ruled Surfaces with Silkworm


Some tests done with Silkworm based on parametric line geometries generated with a simple  grasshopper definition. The principle is to create a solid structural outer shell which supports inner lines that span between different points of the perimeter. The inner lines define a ruled surface while the outer shell is a prism with an n-sided polygonal base.

Grasshopper Script 01

 Use the definition above to generate uniform ruled surfaces:



Grasshopper Script 02

 For more customization options and to get non-symmetrical shapes, the definition above can be used:


And more examples below using the same technique, printed on a Mendel Max 3d printer in PLA :









Flow, Feed-rates and Stringing



A potentially confusing area when setting up prints with Silkworm is the amount of plastic that needs to be flowing through the extruder in order to get a desired thickness of printed line.  This post is meant to illuminate the principles and calculations involved in this, as well as develop how you can use this understanding to better control the materiality of the printed object.



GCode Illustration-01

Sample G Code

G Code offers an instruction to the printer’s motors to move to a specific coordinate and maybe do something while it is moving.

Movement Illustration-01

The plastic flow of your extrusion refers to the amount of plastic being moved through your extruder over the course of a movement from one point to another.  In Rep Rap G Code, this flow is measured as the millimetre length of plastic filament being pulled into the extruder from your spool (the E value above).  Because of this all the calculation for plastic flow is left to the software or user creating the G Code.

Untitled drawing (1)


In order to calculate the amount of plastic being pushed out of the end of the nozzle, and thus the thickness/ height of the line of plastic being printed, it is important to note the shape of the forces acting on the molten plastic (see illustration below).  These forces cause an irregular shape to be produced.  The calculation to find the amount of plastic needed to produce a given width of printed line needs three parameters, filament diameter, nozzle diameter and layer height of the print.

Cross Sectional Flow forces

This diagram shows the cross section of an extruded line.  A length of plastic filament coming into the extruder assembly (which is the length that the G Code counts) is pulled through the heating element and extrudes through a nozzle which is smaller than the diameter of the filament.  When it comes out of the nozzle there is another set of calculations that can help us understand how the geometry is determined, and how to control the output.

Here are some calculations and principles from Josef Prusa (you can find the explicit calculations in the source code, Ctrl+U):

  • Layer Height (LH) = height of each printed layer above the previous
  • Line Width (LW) = width of extruded line
  • Width Over Height (WOH) = line width/ layer height
  • Free Extrusion Diameter (extDia) = nozzle diameter + 0.08mm
  • Line Width (LW) = LH ×WOH
  • Free extrusion cross section area (freeExt) = (extDia/2)×(extDia/2)×π
  • Extruded line cross section area (extLine) = LW ×LH
  • Suggested bridge flow-rate multiplier = (freeExt*0.7)/extLine


  • WOH smaller than 2.0 can produce weak parts
  • WOH bigger than 3 decreases the detail of printed part, because of thick line
  • Minimal extrusion cross section area for stable extrusion (minExt) = freeExt×0.5

You can reverse engineer some of these calculations to understand a few basic principles.  Basically everything is driven by the choice of layer height and line width.  Layer height primarily affects the smoothness of solid elements and adhesion to plastic beneath (large layer heights will create potentially brittle prints).  Line width can determine the accuracy of detail in solid printing, but it is important to have a thick enough line to adhere to neighbouring lines if a solid surface is to be achieved.  The difference between free extrusion cross section area calculation and extruded line cross section area calculation is that the first is a cross section through the plastic as it is free falling from the nozzle (i.e. a cylinder), and the second is a cross section through the plastic as it is being extruded onto a surface below it (i.e. a squashed cylinder, see diagram above).

To calculate how much ingoing filament is required for a given layer height to achieve a specific line width we need to first do the calculation as areas.  If is the amount of filament going in (which we want to calculate):

Filament cross section = x multiplied by filament diameter

Extruded (squashed) cross section = layer width multiplied by layer height

Ratio of extruded plastic to filament= nozzle diameter divided by filament diameter

Thus we can find that cross section area of = extLine (LW ×LH) multiplied by the above ratio

and will then be that divided by the filament diameter




Movement Illustration-01


The feed-rate (the F value above) of a movement in G Code is the speed (measured in mm/s) that the motors of the printer move all together.   Thus it is the speed at which the printer will move to a coordinate and/or extrude or retract plastic.


As you can see from these two prints; the feed-rate of the movement, which varies as the extruder moves around the curves, when set against a constant flow rate, will stretch the plastic at higher speeds.  This created the effect of very delicate strands of plastic, but because the plastic is a continuous strand, it still retains a certain amount of material strength and springiness.




Taking flow and feed-rates one step further, stringing is the act of creating strands without any plastic flow.  Usually regarded as an error in the print, the diagrams below demonstrate how it is achieved with changes in nozzle chamber pressure:

Delimiter Pressure-01

In Silkworm the chamber pressure of the nozzle, as well as the start and end vectors for a particular movement, can be controlled through the use of Delimiters:


The Delimiter allows complete control over the start and end conditions of a movement, and the connecting, non-extruding movements between extruding movements.  By specifying a different chamber pressure at the beginning or end, it is possible to created specific stringing and warping effects in the material product.


An Example of flow change and stringing used to create irregular patterns in a non-structural print wall.

Silkworm Workshop with AGD in Taipei. Taiwan

Tomorrow I am leaving for Taiwan for a workshop involving Rhino, Grasshopper, Geco, Weaverbird, Karamba, C# and Silkworm. Below is the poster for it. It is organize by Shih-Yuan Wang and the AGD team (Actuating Geometry and Design). I will post some pictures here as it happens.

Here is a picture of the new case I bought to transport my RepRap Prusa Mendel in the plane. You can buy the same from this shop:

Prusa Mendel Case

Defining your Slic3r Settings for Silkworm

What are Slic3r settings and how can you find out if they are right?

The Settings component of Silkworm

First of all what is Slic3r?

Slic3r is a free software that converts a digital 3D model (in STL format) into printing instructions for your 3D printer (in G-Code).


Why are settings important?

Settings are included in the 3D print Gcode and defines many of its parameters such as speeds, layer height or support materials. Silkworm includes these settings within its final G-Code.


Is there any resources out there on Settings?

Here are some blogposts which were really useful for us (we use RepRap Prusa Mendels):

How low can you go:

Slic3r Documentation:



Notes on tuning a slic3r profile:

On Layer Height:

Setting the flow rate:

Some makers share their settings on their blog, have a look at the following ones:


How can I check my G-code:

You can use the Silkworm Viewer (post on this soon).

You can also use the following online G-code viewers:


We also share our Settings:

Download Arthur’s Quality 3D Print Settings.


Important notes:

  • Fill density: from 0 to 1 (0 is less density and 1 is higher). A higher fill density will make your product stronger.
  • Top/Bottom fill pattern: Make sure to have a concentric Top and Bottom pattern, otherwise the cross-hatch will be visible on both sides (see image below).
  • Perimeter: Don’t forget to have at least 1 Perimeter otherwise the infill cross-hatch will be visible on the edge (see image below)

Above: No Top/Bottom concentric pattern so cross-hatch is visible on top and bottom face. No perimeter so cross-hacth visible on edges too

  • Refraction Speed: This is the speed at which your filament retracts when it reached the end of a path. When your edges are not clean (image below), you refraction speed is probably too low.

Above: Blobs on the edges due to a Refraction speed that is too low (5mm/s), aim for 60mm/s

  • Enable cooling: Plastic likes to cool down a little before the next layer is deposited. Slic3r has provisions for cooling built-in, and they are in the “cooling” tab. The first thing to do is check the “enable” box (even if you don’t have a fan.