3dSynth

Tutorials / Custom G-code

Open in the interactive tutorials reader

---
title: Tutorial 31 Continuous Flow Sculpting
description: Designing for the nozzle's limitations.
---

Tutorial 31 Continuous Flow Sculpting

1. Lesson Header

2. Concept Introduction

The Perfect Print.
The ideal FDM print is one continuous line of plastic.
- No Stops (Blobs).
- No Retractions (Stringing).
- No Travel Moves (Scars).
- No Layer Changes (Z-scars).

This requires designing the object around the toolpath.
Instead of "Model -> Slice -> G-code", we do "Path -> G-code -> Model".

3. Machine State Explanation

Topology.
To be printed in one continuous line, an object must be topologically equivalent to a Line (or a Circle if looped).
It cannot have holes, branches, or islands.
It must be a single, self-avoiding walk.

4. Command Breakdown

5. Minimal Working Example

The Hilbert Curve (Again).
A space-filling curve is the ultimate continuous flow sculpture.
It fills a 2D square completely with one line.
If we stack them in Z, we get a solid cube printed with zero retractions.

6. Visual Representation

Interactive preview is available in the interactive reader.

7. Build Exercise

Task: Create a "Noise Vase".
Use Perlin Noise (or random sine waves) to perturb a circle.
But ensure the perturbation is smooth so the nozzle doesn't accelerate too hard.
R = Base + Noise(angle, z).
Z increases continuously (Spiral).

Python Generator:

import math
import random

def noise(x):
    return math.sin(x) * math.sin(x * 2.5) # Fake noise

with open("sculpture.gcode", "w") as f:
    f.write("G28\nG1 Z0.2\n")
    
    radius = 20
    layers = 100
    steps = 100
    
    for layer in range(layers):
        for step in range(steps):
            angle = (step / steps) * 2 * math.pi
            # Modulate radius with Z and Angle
            r = radius + 5 * noise(angle * 3 + layer * 0.1)
            
            x = r * math.cos(angle)
            y = r * math.sin(angle)
            z = (layer + step/steps) * 0.2
            
            f.write(f"G1 X{x:.3f} Y{y:.3f} Z{z:.3f} E...\n")

8. Deep Insight Section

Overhang Limitations.
In continuous sculpting, you can't use supports.
You are limited by the Overhang Angle (approx 45 degrees).
If your noise function pushes the radius out too fast (dR/dZ > tan(45)), the loop will fall.
You must clamp the derivative of your noise function.

9. Common Failure Modes

  1. Self-Intersection: If the noise is too high frequency, the wall might fold over itself. The nozzle will crash into the previous loop.
  2. Too Fast: Complex curves have high detail. If you print fast, the printer will stutter (buffer underrun) trying to process thousands of tiny segments.

10. Real-World Application

Ceramic 3D Printing (Clay).
Clay printers cannot retract (air bubbles explode in the kiln).
Every clay print MUST be a continuous flow sculpture.
Designers use this technique exclusively for pottery.

11. Final Clean Version

The Vase Generator:
(See Python snippet above).
Key is ensuring E is proportional to the 3D distance of each segment, not just the XY distance.
dist_3d = sqrt(dx^2 + dy^2 + dz^2)
E += dist_3d * 0.05

12. Stretch Challenge

Challenge: Write a "Branching" simulation.
Start with one circle.
Pinch it in the middle until it touches.
Then split into two separate circles (requires a tiny travel/retraction jump or a "crossover" move).
True continuous flow can't branch, but you can cheat by moving very fast between islands (Travel) or by merging them.
Try to make a "Y" shape pipe.