New FeatureScript: Crush Ribs — Parametric Press-Fit Ribs for Cylindrical Holes

mikey_strauss
mikey_strauss Member Posts: 7 ✭
edited November 2025 in FeatureScript

Hi everyone,

I’ve been taking my first real steps in proper 3D modeling (I came from Tinkercad, so this was a big jump for me 😅), and I wanted to share something useful that came out of that learning process.

I wrote a FeatureScript called Crush Ribs — a fully parametric tool for generating wedge-shaped crush ribs inside cylindrical holes. This is especially handy for 3D-printed press fits, friction-fit inserts, and parts that need just a little extra grip without modifying the hole diameter.

👉 Document link: Crush Ribs FeatureScript

The feature creates wedge-shaped ribs arranged radially inside a hole.
Ribs are automatically aligned to the cylindrical axis and can be trimmed, filleted, and merged cleanly into the surrounding geometry.

crush_ribs.gif

Key capabilities

Geometry Controls

  • Number of ribs (1–100)
  • Rib width (tangential/chord)
  • Rib height (radial intrusion)
  • Rib length (axial depth)
  • Optional axial offset (start ribs deeper inside hole)

Fillets

  • Rib tip fillet — rounds the inner rib edges at the deepest point
  • Head fillet — softens the ring where ribs meet the entry surface

Trimming

  • Optional Trim face selection:
    • planar
    • angled
    • curved
    • counterbore floors
      Ribs extend past the trim face and are cut cleanly.

Comments

  • martin_kopplow
    martin_kopplow Member Posts: 1,630 PRO
    edited November 2025

    That is certainly useful. Are you aware of the published FS called "Tapless 3D-printed thread" by kenn_sebesta167? It appears pretty similar in what it does. There is one thing I miss in both: A simple way to define standard setups. Like, I usually use a certain series of inserts and don't want to enter the same numbers time and again.

  • mikey_strauss
    mikey_strauss Member Posts: 7 ✭

    @martin_kopplow Thanks! I actually wasn’t aware of the “Tapless 3D-printed thread” FeatureScript — just checked it out now. It’s a cool approach, and for some usecases create very similar results, but it’s aimed more at creating a dense toothy pseudo-thread, while mine focuses on traditional crush ribs: simple wedge ribs with custom length and angled hole.

    As for state-full presets: Onshape doesn’t give a custom FeatureScript its own built-in preset storage. The configuration panel can hold multiple presets, but they only apply to features whose parameters are explicitly driven by configuration variables. A new feature instance won’t automatically pick up those presets.

    From FeatureScript you can only read individual config variables via getVariable(context, "Name"), so to pull in a full preset you still need one getVariable per value (rib width, height, length, etc.). There’s no way to grab a whole preset in one call.

    If you have a example or pattern you think can work, i be happy to try and tackle the issue.

    An admittedly non-trivial workaround is to treat a “preset” as a part: apply the feature once to a reference part, then reuse that part in multiple mate locations and combine it with the main geometry using booleans. In that approach, the part effectively stores the state/preset.