Skip to main content

Fillet

Fillet rounds edges with a given radius, replacing the sharp edge with a smooth transition between its two faces.

In the viewport

  1. Click Fillet on the toolbar. A small panel opens beside the model.
  2. Click the edges to round. Hold Ctrl or Shift to add edges one by one, double-click an edge to take the whole bucket it belongs to, or right-click a pick for the multi-select menu: the tangent chain the edge belongs to, edges of the same type or equal length, the producing feature's buckets (Extrude End Edges, Side Edges …) and Select other. Hovering a menu item previews what it would select.
  3. Type the radius and click Apply.
The Fillet panel with four edges picked and a radius of 5
  1. 1
    Selection
    The edges to round, numbered in pick order. The count beside the label is how many you have; the ✕ on a chip drops that pick, and clicking a picked edge again drops it too.
  2. 2
    The chips
    One per edge. What gets written depends on what they add up to: a whole bucket of one feature becomes an accessor like e.endEdges(), a subset becomes e.endEdges(0, 2), and anything else becomes a select() with an edge filter.
  3. 3
    Radius
    The rounding radius, as a number, an expression or a parameter name. Too large a radius for the surrounding faces makes the feature fail — the timeline row reports it.
  4. 4
    Apply
    Writes the statement and adds the timeline row; Exit writes nothing.

From sharp to rounded

The same plate before and after two fillets:

BeforeBefore modeextrude(30)

A 100 × 60 × 30 plate straight out of the extrude. Every edge is sharp.

AfterAfter modefillet(5, …)

Radius 5 on the four top edges and radius 3 on the four bottom ones — two fillet statements, each aimed at one bucket of the extrude.

The plate
box.part.js
import { sketch, extrude, line } from 'fluidcad/core';
import { coincident, distance, fix, horizontal, vertical } from "fluidcad/constraints";

// The plate before any rounding: every edge is sharp.
sketch("xy", () => {
const sg1 = line([-50, -30], [50, -30]);
const sg2 = line([50, -30], [50, 30]);
const sg3 = line([50, 30], [-50, 30]);
const sg4 = line([-50, 30], [-50, -30]);
coincident(sg1.end(), sg2.start());
coincident(sg2.end(), sg3.start());
coincident(sg3.end(), sg4.start());
coincident(sg4.end(), sg1.start());
horizontal(sg1);
vertical(sg2);
horizontal(sg3);
vertical(sg4);
fix(sg1.start(), [-50, -30]);
distance(sg1.start(), sg1.end(), 100);
distance(sg2.start(), sg2.end(), 60);
})

const e = extrude(30)
The complete file
import { sketch, extrude, fillet } from 'fluidcad/core';
import { line } from 'fluidcad/core';
import { coincident, distance, fix, horizontal, vertical } from "fluidcad/constraints";

sketch("xy", () => {
// Four lines drawn at their intended positions — the coordinates are
// guesses the constraints below turn into an exact 100 x 60 rectangle.
const sg1 = line([-50, -30], [50, -30]);
const sg2 = line([50, -30], [50, 30]);
const sg3 = line([50, 30], [-50, 30]);
const sg4 = line([-50, 30], [-50, -30]);
// Coincident joins the corners into a closed loop
coincident(sg1.end(), sg2.start());
coincident(sg2.end(), sg3.start());
coincident(sg3.end(), sg4.start());
coincident(sg4.end(), sg1.start());
// Horizontal / vertical square the sides up
horizontal(sg1);
vertical(sg2);
horizontal(sg3);
vertical(sg4);
// Fix pins one corner so the profile cannot slide; the two distances
// set the width and height. The sketch is now fully constrained.
fix(sg1.start(), [-50, -30]);
distance(sg1.start(), sg1.end(), 100);
distance(sg2.start(), sg2.end(), 60);
})

// The plate to round. `e` keeps the extrude so its edges can be named.
const e = extrude(30)
// Radius 5 on the four top edges — what the Fillet tool writes when the
// picks cover a whole bucket of the extrude.
fillet(5, e.endEdges())
// A smaller radius on the bottom edges.
fillet(3, e.startEdges())

Targeting edges in code

Pass the edges after the radius:

fillet(5, e.endEdges()) // top edges of the extrude
fillet(3, e.sideEdges()) // side edges
fillet(2, c.internalEdges()) // internal edges from a cut

Or leave them out and fillet the last select() result:

import { select } from 'fluidcad/core';
import { edge } from 'fluidcad/filters';

select(edge().verticalTo("xy"))
fillet(5) // fillets the selected vertical edges

See Selection and filters for the filters.

Rounding a sketch corner instead

This page is about rounding the edges of a solid. To round a corner inside a sketch — trimming two lines and inserting a tangent arc before anything is extruded — use the sketcher's own tool, described on the sketch Fillet tool page.