Skip to main content

Helix

Helix creates a helical wire — the curve that springs, threads and coils are built from. On its own it renders as a wire; sweep a profile along it to make material.

In the viewport

  1. Click Helix on the toolbar.
  2. Fill in the dialog. The wire previews as you type.
  3. Click Apply. The wire appears in the viewport and the timeline; a sweep can then pick it as its path.
The Helix dialog with the world Z axis, a radius, a pitch and a turn count
  1. 1
    From axis / From face
    Where the coil gets its frame. From axis takes an axis you click — a world axis in the viewport, an axis() feature, or a straight edge. From face reads the axis, radius and height off a cylindrical or conical face instead.
  2. 2
    Axis
    The line the helix winds around. It opens on world Z; click another axis or a straight edge to change it.
  3. 3
    Radius / End radius
    The radius of the coil, and — if you fill in End radius — the radius it tapers to, which makes a conical helix. Both are ignored when the source is a face or a circular edge, where the geometry sets them.
  4. 4
    Coil by
    Turns or Pitch: which of the two you type. Turns is the number of revolutions, Pitch the axial rise per revolution.
  5. 5
    Height
    Total axial extent. Any two of pitch, turns and height determine the third, so leaving this on auto lets the other two set it.
  6. 6
    Start / end offset
    Run the ends past the source along the axis, in axial units — how a real thread runs off the end of its stock instead of stopping flush.
  7. 7
    Apply
    Writes the statement and adds the timeline row; Exit writes nothing.

The wire, and what it is for

On its own a helix is just a curve. It becomes material when a sweep carries a profile along it:

The helixThe helix modehelix("z")

A wire coiling around the Z axis. Nothing solid — no faces, no volume.

SweptSwept modesweep(h, profile)

A small circle swept along that wire: a spring. The profile is placed at the path start automatically.

The helix
coil.part.js
import { helix } from 'fluidcad/core';

// A helical wire around the Z axis: radius 15, rising 10 per turn, 4 turns
// (so 40 tall). On its own it is a curve; sweep a profile along it for material.
helix("z").radius(15).pitch(10).turns(4);

The argument is the axis to coil around — a named axis like "z", anything axis-like, or an existing scene object (see deriving from geometry).

Sizing

Three chained methods control the proportions, and any two determine the third:

helix("z").pitch(10).turns(4) // height = 40
helix("z").pitch(10).height(40) // turns = 4
helix("z").turns(4).height(40) // pitch = 10
MethodMeaningDefault
.pitch(p)Axial rise per full revolutionheight / turns
.turns(n)Number of revolutions; fractions are fine1
.height(h)Total axial extent50, or pitch × turns
.radius(r)Radius of the coil20

Winding is clockwise (left-handed) by default; .ccw() gives a right-handed helix.

Springs

The spring above is the whole recipe: a helix for the path, a small circle for the wire section, and a sweep to join them.

The code behind it
spring.part.js
import { sketch, circle, helix, sweep } from 'fluidcad/core';

const path = helix("z").radius(15).pitch(10).turns(5);

const profile = sketch("left", () => {
circle([15, 0], 2);
});

sweep(path, profile);

Deriving from geometry

With From face in the dialog — or a scene object as the argument in code — the helix takes its frame from the geometry:

  • Cylindrical face — axis, radius and height come from the face.
  • Conical face — the helix follows the cone's taper; radii are derived from the face (.radius() / .endRadius() are ignored).
  • Line edge — the line becomes the axis, its length the height.
  • Circular edge — the circle's normal becomes the axis, its radius the helix radius.

Helix from a cylindrical face

The code behind it
import { cylinder, select, helix } from 'fluidcad/core';
import { face } from 'fluidcad/filters';

cylinder(15, 60);

helix(select(face().cylinder())).turns(6);

Use select(...) to narrow a body down to the single face or edge the helix should read from.

Threads and grooves

A helix at the surface of a cylinder is the spine of a thread. Sweep a profile along it and the result fuses with the cylinder (the Add tab):

Helical thread

The code behind it
import { cylinder, sketch, circle, helix, sweep } from 'fluidcad/core';

cylinder(15, 50);

const path = helix("z").height(50).radius(15).pitch(5)
.startOffset(-5).endOffset(5);

const profile = sketch("left", () => {
circle([15, 0], 3);
});

sweep(path, profile);

The sweep's Remove tab carves a groove instead:

Helical groove

The code behind it
import { cylinder, sketch, circle, helix, sweep } from 'fluidcad/core';

cylinder(15, 50);

const path = helix("z").height(50).radius(15).pitch(5)
.startOffset(-5).endOffset(5);

const profile = sketch("left", () => {
circle([15, 0], 3);
});

sweep(path, profile).remove();

Running past the ends

Real threads run off the ends of the stock rather than stopping flush. start offset and end offset shift the helix ends along the axis, in axial units:

helix("z").height(50).startOffset(-5).endOffset(5) // 5 units overshoot each side

A negative start offset extends the start; a positive end offset extends the end (and vice versa to trim). On a conical face the extension follows the cone's natural taper.

Tapered helixes

When end radius differs from Radius, the radius blends linearly along the height — a conical helix:

Tapered helix spring

The code behind it
import { sketch, circle, helix, sweep } from 'fluidcad/core';

const path = helix("z").height(60).pitch(10).radius(25).endRadius(10);

const profile = sketch("left", () => {
circle([25, 0], 2);
});

sweep(path, profile);

The same shape falls out automatically when the source is a conical face. .endRadius() is ignored for face and circular-edge sources, where the radii come from the geometry.

Limitations

  • Turns must be positive and the pitch non-zero; a tapered helix must keep its end radius above zero.
  • A face source must be cylindrical or conical; an edge source must be a line or a circle. Multi-shape sources need a select(...) to single out one face or edge.