Skip to content

Subtractive Helix

In one sentence: Sweep a profile sketch along a generated helix path to cut a helical groove, thread, or coil-shaped void into an existing Body.


Overview

Workbench: Part Design · Menu: Part Design → Subtractive Features → Subtractive Helix
Toolbar: Part Design Modeling Features · Shortcut: none

Subtractive Helix sweeps a profile sketch along an internally generated helical path and subtracts the result from the active Body. Unlike Subtractive Pipe, you do not need to draw the path — you specify the helix geometry (pitch, height, turns, angle) through the task panel and FreeCAD builds the path for you. The result is a helical cut such as a screw thread, a worm gear groove, or a spiral coolant channel. It is the subtractive counterpart to Additive Helix, which adds material instead of removing it.

One parameter unique to Subtractive Helix is Outside: when enabled, the tool keeps only the intersection of the helical solid with the existing Body, allowing you to trim away the exterior of a helical shape rather than cut into the interior.


Intuition

Think of a lathe cutting a thread into a rod. The cutting tool (the profile) has a specific tooth shape, and it advances along the rod one pitch per revolution (the helix parameters). The material removed traces a helical groove whose cross-section matches the tool shape exactly.

Subtractive Helix is the digital equivalent. You draw the tooth or groove cross-section as a profile sketch, then describe the helix — how far it advances per turn (pitch), how many turns, and whether it tapers — and FreeCAD computes the path and performs the cut.

Four input modes let you describe the same helix from whichever combination of values you know: pitch and height, pitch and turns, height and turns, or height and turns with radial growth. Only the chosen inputs are editable; the remaining values are computed automatically.


When to use it

  • You need to cut a screw thread, lead-screw groove, or worm-gear tooth into a cylindrical boss.
  • You are machining a helical coolant channel or oil groove into a shaft.
  • You want to cut a spiral ramp or helical slot into a cylindrical or conical surface.
  • You need an Archimedean spiral groove in a flat disc (use a flat-spiral mode with growth).
  • You want to subtract the exterior of a helical solid from a larger body (use Outside mode).

When NOT to use it

  • The path is a custom 3-D curve, not a helix — use Subtractive Pipe with an explicit spine sketch.
  • You need a thread form automatically sized to a standard — consider the Hole tool, which has built-in thread profiles for standard fasteners.
  • You want to add material in a helix — use Additive Helix.
  • The profile must morph shape along the path — use Subtractive Pipe in Multisection mode.

Step-by-step walkthrough

Prerequisites: An active Body with at least one existing solid feature to cut into. You need one profile sketch. The helix axis is derived from the sketch's reference axis (set in the task panel), so the sketch plane determines the starting orientation.

  1. Create the profile sketch. Draw and fully constrain the cross-section of the groove or thread tooth on any plane. The sketch must produce a closed face. Close the Sketcher task panel.

  2. Activate Part Design → Subtractive Features → Subtractive Helix. The task panel opens. FreeCAD proposes initial pitch and height values based on the profile's bounding box to avoid self-intersection.

  3. Set the Axis. In the Axis dropdown, choose the axis around which the helix revolves. You can select the sketch's vertical axis, horizontal axis, normal axis, or any linear edge or datum line in the Body. The Base and Axis properties update automatically.

  4. Choose the Input mode. Select the combination of parameters you want to control directly:

    • Pitch-Height-Angle — specify pitch and height; turns and growth are computed.
    • Pitch-Turns-Angle — specify pitch and turns; height and growth are computed.
    • Height-Turns-Angle — specify height and turns; pitch and growth are computed.
    • Height-Turns-Growth — specify height, turns, and radial growth per turn; pitch and angle are computed.
  5. Set the helix dimensions. Enter values for the input parameters chosen in the previous step. The read-only fields update to show the derived values.

  6. Toggle Left Handed if the helix should wind counter-clockwise when viewed along the axis (default is right-handed / clockwise).

  7. Toggle Outside if you want to intersect the helix solid with the Body (retaining only the overlap) rather than subtracting the helix from the Body. This is hidden when using Additive Helix and only appears for Subtractive Helix.

  8. Click OK. FreeCAD generates the helix path, sweeps the profile along it, and subtracts the result from the Body.

Tip

If FreeCAD reports a self-intersection error, increase the pitch or reduce the profile size. The initial auto-proposed pitch is calculated from the profile bounding box and is usually safe; if you reduced it manually, increase it back toward the proposed value.


Parameters

Parameter Type Default Description
Axis Reference link (dropdown) Sketch normal axis The axis around which the helix revolves. Can be the sketch's own axes, or any linear edge or datum line in the Body.
Mode Dropdown pitch-height-angle Selects which three parameters are the primary inputs. Values: pitch-height-angle, pitch-turns-angle, height-turns-angle, height-turns-growth.
Pitch Length 10.0 mm Axial distance between two consecutive turns. Editable only when Mode includes pitch as a primary input.
Height Length 30.0 mm Total axial length of the helix path. Editable only when Mode includes height as a primary input.
Turns Float 3.0 Number of complete turns. Must be > 0. Editable only when Mode includes turns as a primary input.
Cone Angle Angle 0.0 ° Half-angle of the cone that the helix wraps around. Zero = cylindrical helix. Positive = radius grows; negative = radius shrinks. Range: −89 ° to 89 °. Editable only when Mode includes angle as a primary input.
Growth Distance 0.0 mm Radial growth per turn (for height-turns-growth mode). Positive = expanding spiral; negative = contracting. Editable only when Mode is height-turns-growth.
Left Handed Checkbox Off When on, the helix winds counter-clockwise when viewed along the axis (left-hand thread). Default is right-handed.
Reversed Checkbox Off When on, the helix extends in the opposite direction of the axis vector. Inherited from ProfileBased.
Outside Checkbox Off Subtractive Helix only. When on, the Boolean operation is intersection (Common) rather than cut, keeping only the portion of the Body that overlaps the helical solid.
Tolerance Float 0.1 Fusion tolerance used when merging the helical solid. Increase if the result does not merge cleanly with the Body.

Input modes:

Mode Primary inputs Derived
pitch-height-angle Pitch, Height, Cone Angle Turns, Growth
pitch-turns-angle Pitch, Turns, Cone Angle Height, Growth
height-turns-angle Height, Turns, Cone Angle Pitch, Growth
height-turns-growth Height, Turns, Growth Pitch, Cone Angle

Mode in depth

The Mode dropdown is the first parameter to set. It determines which three of the four numeric helix parameters — Pitch, Height, Turns, and Cone angle (or Radial growth) — are the primary inputs you type in, and which one is derived automatically. The greyed-out field in the task panel is the derived value; changing any primary input recalculates it instantly.

Think of it as choosing which constraints to drive: you always have three degrees of freedom, the mode picks which three.

Pitch-Height-Angle (default)

You enter Pitch and Height; FreeCAD computes Turns. Cone angle is always a separate, independent input for conical helices.

Intuition: "I know the thread pitch (distance between turns) and the total length of the feature. Tell me how many turns that gives."

Use this mode when: - Designing standard screws or threads where pitch and length are specified (e.g. M6×1.0 thread, 20 mm long — pitch and height are the design inputs) - Modelling coil springs where the wire pitch and overall spring length are the known dimensions - The turn count is a consequence, not a requirement

Watch out for: If Height ÷ Pitch is not an integer, the helix terminates mid-turn. The solid ends at a partial spiral face, which may be unexpected. If you need a whole number of turns, switch to Pitch-Turns-Angle instead.

Pitch-Turns-Angle

You enter Pitch and Turns; FreeCAD computes Height.

Intuition: "I need exactly 5 full turns with a 1.5 mm pitch. How long is that?"

Use this mode when: - The number of engaging thread turns is the critical design variable (minimum thread engagement is typically 1.5 × nominal diameter for steel-into-steel) - Designing springs where the coil count is specified (number of active coils) - Fitting a helix into a feature where the turn count, not the length, is fixed

Watch out for: The derived Height is Pitch × Turns. If you later change either primary input and the new Height no longer fits in the available space, the helix will protrude through other geometry without warning.

Height-Turns-Angle

You enter Height and Turns; FreeCAD computes Pitch.

Intuition: "It must fit in a 25 mm pocket and I need at least 8 turns. What pitch does that require?"

Use this mode when: - The axial space is constrained by the design (e.g. a recess of known depth) and a minimum number of turns is required (e.g. minimum thread engagement) - Both height and turn count are specified by a drawing or standard, and pitch is the outcome

Watch out for: The derived Pitch = Height ÷ Turns. This often yields a non-standard pitch value — verify it is achievable in manufacturing before committing. For standard thread pitches, use Pitch-Height-Angle or Pitch-Turns-Angle instead.

Height-Turns-Growth

You enter Height and Turns; FreeCAD computes Pitch. Instead of Cone angle, the radial shape is controlled by Radial growth (the increase in radius per full turn). This mode is designed for Archimedean spirals, not cylindrical or conical helices.

Intuition: "I want a flat scroll spring that grows 3 mm outward each turn and completes 4 turns in a 10 mm axial height." Height ≈ 0 gives a purely flat spiral.

Use this mode when: - Creating scroll springs, decorative spirals, or cam profiles where the radius expands (or contracts) linearly with angle - Setting Height to 0 to produce a flat planar spiral (zero pitch, expanding radius only — requires a small non-zero Tolerance to fuse cleanly) - The Cone angle concept does not apply and radial growth per turn is the natural design input

Watch out for: Cone angle is unavailable in this mode (it is replaced by Radial growth — they are mutually exclusive ways to describe the radial shape). A negative Radial growth produces an inward-contracting spiral; the radius must remain positive at all turns or the helix collapses and fails.


Advanced usage

Conical (tapered) helices

Setting a non-zero Cone Angle turns the helix into a conical spiral — the radius changes along the axis. A positive angle makes the helix flare outward (useful for tapered thread forms); a negative angle makes it converge (useful for conical worm cuts). The angle range is −89 ° to 89 °; values near 90 ° would produce a flat spiral.

Flat Archimedean spirals

To cut a flat spiral groove in a disc (zero height, radially expanding), use Height-Turns-Growth mode, set Height to zero (or a very small value), and set Growth to the desired radial step per turn. Note that a zero height is valid in this mode and is not an error — FreeCAD will not warn about it.

Using Outside mode for helical trimming

The Outside checkbox inverts the Boolean operation from a cut to an intersection. Instead of removing the helical volume from the Body, FreeCAD retains only the material that is inside both the Body and the helical volume. This is rarely needed but is essential for operations like cutting the exterior profile of a helical gear tooth down to size.

Thread modelling considerations

For cosmetic threads or threads that must match a standard, consider whether Subtractive Helix is the right tool. The Hole tool has built-in ISO and UNC/UNF thread options and handles thread depth, chamfer, and counterbore automatically. Reserve Subtractive Helix for custom or non-standard thread profiles, worm-gear grooves, and other helical cuts where you need full control of the profile shape.


Common mistakes and pitfalls

Error: Result is self intersecting

Cause: The pitch is too small relative to the profile's axial extent — consecutive turns overlap each other.
Fix: Increase the pitch. Use the auto-proposed value as a lower bound; it is calculated from the profile bounding box to ensure non-overlapping turns.

Error: There is nothing to subtract

Cause: The Body has no existing solid when Subtractive Helix is activated. Subtractive operations require an existing solid to cut into.
Fix: Add a Pad, Revolution, or Additive feature to the Body before activating Subtractive Helix.

Error: Face must be planar

Cause: The profile sketch resolves to a non-planar face (e.g. a sketch on a curved surface). The helix implementation requires a planar starting face.
Fix: Ensure the profile sketch is attached to a flat plane or datum plane.

Helix does not merge cleanly / jagged result

Cause: The helical path approximation has insufficient numerical precision relative to the part's overall size, causing the fusion to fail or leave artefacts.
Fix: Increase the Tolerance parameter. The default is 0.1; try values between 1 and 10 for very large parts, and values approaching 0.01 for very small parts.

Pitch too small error at zero height

Cause: In pitch-height-angle or pitch-turns-angle mode, both pitch and height must be greater than zero.
Fix: Use Height-Turns-Growth mode for flat spirals where height is zero.


Python API

Minimal example

import FreeCAD as App
import Part
import Sketcher

doc = App.newDocument()

# Create a cylindrical body to cut into
body = doc.addObject("PartDesign::Body", "Body")

base_sk = doc.addObject("Sketcher::SketchObject", "BaseSketch")
body.addObject(base_sk)
base_sk.addGeometry(Part.Circle(App.Vector(0, 0, 0), App.Vector(0, 0, 1), 15), False)
base_sk.addConstraint(Sketcher.Constraint("Coincident", 0, 3, -1, 1))
doc.recompute()

pad = doc.addObject("PartDesign::Pad", "Pad")
body.addObject(pad)
pad.Profile = base_sk
pad.Length = 40.0
doc.recompute()

# Profile sketch: a triangle tooth for the thread groove, on the XZ plane
profile = doc.addObject("Sketcher::SketchObject", "Profile")
body.addObject(profile)
profile.MapMode = "FlatFace"
profile.AttachmentSupport = (doc.XZ_Plane, [""])
doc.recompute()
# Simple triangle profile  # TODO: verify exact sketch geometry setup
profile.addGeometry(
    Part.makePolygon([
        App.Vector(10, 0, 0), App.Vector(12, 0, 1.5), App.Vector(14, 0, 0),
        App.Vector(10, 0, 0),
    ])
)
doc.recompute()

# Create the Subtractive Helix
helix = doc.addObject("PartDesign::SubtractiveHelix", "SubtractiveHelix")
body.addObject(helix)
helix.Profile = profile
helix.Pitch = 5.0     # mm between turns
helix.Height = 30.0   # total axial length
helix.Turns = 6.0     # computed from pitch and height
doc.recompute()

print(f"Helix feature: {helix.Shape.Volume:.2f} mm³ remaining")

Key properties

Property Type Default Description
Profile App::PropertyLinkSub — The profile sketch or sub-element. Inherited from ProfileBased.
ReferenceAxis App::PropertyLinkSub — The axis around which the helix revolves. When set, Base and Axis are derived from it automatically.
Base App::PropertyVector (0, 0, 0) Centre point of the helix start (read-only; derived from ReferenceAxis).
Axis App::PropertyVector (0, 1, 0) Helix direction vector (read-only; derived from ReferenceAxis).
Mode App::PropertyEnumeration "pitch-height-angle" Input mode. Values: "pitch-height-angle", "pitch-turns-angle", "height-turns-angle", "height-turns-growth".
Pitch App::PropertyLength 10.0 Axial distance per turn (mm).
Height App::PropertyLength 30.0 Total helix axial length (mm).
Turns App::PropertyFloatConstraint 3.0 Number of turns. Must be > 0.
Angle App::PropertyAngle 0.0 Cone half-angle (degrees). Range: −89 to 89.
Growth App::PropertyDistance 0.0 Radial growth per turn (mm), for height-turns-growth mode.
LeftHanded App::PropertyBool False Counter-clockwise winding when viewed along axis.
Reversed App::PropertyBool False Extend helix in the opposite direction of Axis. Inherited from ProfileBased.
Outside App::PropertyBool False Use intersection (Common) instead of Cut. Visible only for SubtractiveHelix.
Tolerance App::PropertyFloatConstraint 0.1 Fusion tolerance multiplier. Increase for large parts or if result is jagged.

See also

  • Additive Helix — identical parameters, adds material instead of removing it
  • Subtractive Pipe — removes material swept along a custom spine curve
  • Subtractive Loft — removes material blended through multiple profiles
  • Pocket — simpler straight cut for constant cross-sections
  • Groove — axisymmetric cut around a central axis