Read this model as text
A complete car wheel: the parametric tyre wrapped around the car rim, with metric hex bolts seated in the lug holes. A remix of mick/parametric-tyre, mick/parametric-rim and remixcad/metric-bolt in one assembly.
The image shows the solid OpenSCAD renders at outer_diameter 60 · rim_diameter 34 · width 22 · tread_blocks 24 · tread_depth 1.8 · tread_angle 18 · tread_gap 0.38 · shoulder 0.55 · face_thickness 4 · bore_diameter 8 · lug_count 5 · lug_circle 18 · vent_count 5 · vent_diameter 5 · bolt_size 4 · bolt_length 12 · show_bolts true · wall 2.4 · flange 1.2 · smoothness 96 · color_tyre DimGray · color_rim Silver · color_bolts Gainsboro.
Parametric car wheel
mick/parametric-wheel@1.0.1
Report
For a legal or policy problem: a license violation, personal data, somebody else’s work republished as their own. A model that prints badly is a comment, not a report.
Parameters
from sourceDescription
What is this
A complete car wheel: the parametric tyre wrapped around the car rim, with metric hex bolts seated in the lug holes. A remix of mick/parametric-tyre, mick/parametric-rim and remixcad/metric-bolt in one assembly.
What you use it for
Wheels for RC cars, robot chassis and model vehicles where you want the whole thing in one print, or as a preview assembly before printing the tyre in flexible filament and the rim in rigid separately. Turn show_bolts off to print the wheel and drop real fasteners in later.
Design notes
The tyre and rim share rim_diameter and width, so one pair of numbers keeps them mated at any size. The lug holes are cut to the bolt size plus clearance, and the bolts are placed head out, half a millimetre proud of the face, the way a wheel is actually bolted up.
The tyre carcass and the rim come from their parents unchanged in shape; what this remix adds is the shared sizing, the bolt seating and the assembly.
Tyre, rim and bolts each carry their own colour, so an assembly reads as three parts instead of one lump of plastic. Colour is display only and changes nothing about the shape or the STL.
Parameters
outer_diameter, rim_diameter and width size the wheel. The tread group shapes the tyre, the face group shapes the rim. bolt_size and bolt_length pick the lug bolts and show_bolts removes them. smoothness trades facets for render time. color_tyre, color_rim and color_bolts pick the colour of each part.
Use with your agent
{
"mcpServers": {
"remixcad": {
"type": "http",
"url": "https://remix-cad.vercel.app/api/mcp"
}
}
}get_model("mick/parametric-wheel@1.0.1")Returns the manifest, the source, the import closure and the license obligations. Full MCP setup.
Parameter table
Parsed from the Customizer annotations in main.scad| Name | Default | Range | Unit | Description |
|---|---|---|---|---|
| outer_diameter | 60 | 20 to 200 step 1 | ||
| rim_diameter | 34 | 10 to 160 step 1 | ||
| width | 22 | 4 to 80 step 1 | ||
| tread_blocks | 24 | 0 to 80 step 1 | ||
| tread_depth | 1.8 | 0 to 6 step 0.1 | ||
| tread_angle | 18 | 0 to 60 step 1 | ||
| tread_gap | 0.38 | 0.1 to 0.7 step 0.01 | ||
| shoulder | 0.55 | 0 to 1 step 0.05 | ||
| face_thickness | 4 | 2 to 10 step 0.5 | ||
| bore_diameter | 8 | 2 to 40 step 1 | ||
| lug_count | 5 | 0 to 10 step 1 | ||
| lug_circle | 18 | 6 to 120 step 1 | ||
| vent_count | 5 | 0 to 16 step 1 | ||
| vent_diameter | 5 | 0 to 30 step 0.5 | ||
| bolt_size | 4 | 3 to 8 step 1 | ||
| bolt_length | 12 | 6 to 30 step 1 | ||
| show_bolts | true | |||
| wall | 2.4 | 1 to 6 step 0.1 | ||
| flange | 1.2 | 0 to 4 step 0.1 | ||
| smoothness | 96 | 24 to 192 step 8 | ||
| color_tyre | "DimGray" | DimGray, Black, SlateGray, Silver, Gainsboro, White, FireBrick, SteelBlue, ForestGreen, Goldenrod | ||
| color_rim | "Silver" | Silver, Gainsboro, White, DimGray, Black, SlateGray, FireBrick, SteelBlue, ForestGreen, Goldenrod | ||
| color_bolts | "Gainsboro" | Gainsboro, Silver, White, DimGray, Black, SlateGray, FireBrick, SteelBlue, ForestGreen, Goldenrod |
Lineage
1 model depends on this oneOnly what this model came from and what came from it.
License
Whoever downloads this takes these obligations along- mick/parametric-wheel@1.0.1 is MIT
- remixcad/threads@1.0.0 is CC0
Source
main.scad is the entrypointmain.scad
// A complete car wheel: tyre around rim, with hex bolts in the lug holes.
// Remix of mick/parametric-tyre, mick/parametric-rim and remixcad/metric-bolt.
// Uses threads.scad by Ryan A. Colyer, released with CC0 into the public domain.
// Published on RemixCAD as remixcad/threads.
use <remixcad/threads/threads.scad>
/* [Size] */
// Diameter measured over the tread, the outside of the wheel.
outer_diameter = 60; // [20:1:200]
// Diameter where tyre meets rim.
rim_diameter = 34; // [10:1:160]
// Width across the wheel, bead to bead.
width = 22; // [4:1:80]
/* [Tread] */
// Blocks around the tyre. Zero leaves a slick.
tread_blocks = 24; // [0:1:80]
// How deep each groove is cut into the crown.
tread_depth = 1.8; // [0:0.1:6]
// How far the blocks lean across the tread, in degrees.
tread_angle = 18; // [0:1:60]
// Groove width as a share of the space between blocks.
tread_gap = 0.38; // [0.1:0.01:0.7]
// How round the tyre shoulders are.
shoulder = 0.55; // [0:0.05:1]
/* [Face] */
// Thickness of the closed face disc.
face_thickness = 4; // [2:0.5:10]
// Centre bore for the axle.
bore_diameter = 8; // [2:1:40]
// Lug bolts around the bore.
lug_count = 5; // [0:1:10]
// Bolt circle diameter the lugs sit on.
lug_circle = 18; // [6:1:120]
// Round vents in the face. Zero closes the face.
vent_count = 5; // [0:1:16]
// Diameter of each vent.
vent_diameter = 5; // [0:0.5:30]
/* [Bolts] */
// Nominal metric size of the lug bolts, so 4 is an M4.
bolt_size = 4; // [3:1:8]
// Bolt length under the head.
bolt_length = 12; // [6:1:30]
// Show the bolts, or leave the holes open for real fasteners.
show_bolts = true;
/* [Shape] */
// Wall thickness of the rim barrel.
wall = 2.4; // [1:0.1:6]
// How far the rim flanges stand proud of the barrel.
flange = 1.2; // [0:0.1:4]
// Facets around the wheel. More is smoother and slower.
smoothness = 96; // [24:8:192]
/* [Colour] */
// Colour the tyre is shown in. Display only, the STL carries no colour.
color_tyre = "DimGray"; // [DimGray, Black, SlateGray, Silver, Gainsboro, White, FireBrick, SteelBlue, ForestGreen, Goldenrod]
// Colour the rim is shown in.
color_rim = "Silver"; // [Silver, Gainsboro, White, DimGray, Black, SlateGray, FireBrick, SteelBlue, ForestGreen, Goldenrod]
// Colour the lug bolts are shown in.
color_bolts = "Gainsboro"; // [Gainsboro, Silver, White, DimGray, Black, SlateGray, FireBrick, SteelBlue, ForestGreen, Goldenrod]
/* [Hidden] */
outer_radius = outer_diameter / 2;
rim_radius = rim_diameter / 2;
half_width = width / 2;
shoulder_radius = shoulder * min(half_width, outer_radius - rim_radius) * 0.9;
pitch = tread_blocks > 0 ? 360 / tread_blocks : 360;
groove_width = 2 * PI * outer_radius * (pitch / 360) * tread_gap;
flange_height = 1.4;
// The lug hole clears the bolt, and both hole circles stay inside the barrel wall.
lug_hole = bolt_size + 0.6;
lug_radius = min(lug_circle / 2, rim_radius - wall - lug_hole / 2 - 1);
vent_radius_pos = min(rim_radius - wall - vent_diameter / 2 - 0.5,
lug_radius + lug_hole / 2 + vent_diameter / 2 + 0.8);
bolt_head_height = 0.7 * bolt_size;
// ---- Tyre, from mick/parametric-tyre ----
module section() {
hull() {
translate([rim_radius, -half_width]) square([0.01, width]);
translate([outer_radius - shoulder_radius, -half_width + shoulder_radius])
circle(r = shoulder_radius, $fn = 32);
translate([outer_radius - shoulder_radius, half_width - shoulder_radius])
circle(r = shoulder_radius, $fn = 32);
}
}
module carcass() {
rotate_extrude($fn = smoothness) section();
}
module grooves() {
for (index = [0 : max(tread_blocks - 1, 0)]) {
rotate([0, 0, index * pitch])
translate([outer_radius, 0, 0])
rotate([tread_angle, 0, 0])
cube([tread_depth * 2, groove_width, width * 3], center = true);
}
}
module tyre() {
if (tread_blocks > 0 && tread_depth > 0) {
difference() {
carcass();
grooves();
}
} else {
carcass();
}
}
// ---- Rim, from mick/parametric-rim ----
module barrel() {
difference() {
cylinder(h = width, r = rim_radius, center = true, $fn = smoothness);
cylinder(h = width + 1, r = rim_radius - wall, center = true, $fn = smoothness);
}
}
module flanges() {
for (z = [-half_width, half_width - flange_height])
translate([0, 0, z])
difference() {
cylinder(h = flange_height, r = rim_radius + flange, $fn = smoothness);
translate([0, 0, -0.5])
cylinder(h = flange_height + 1, r = rim_radius - wall, $fn = smoothness);
}
}
module face() {
translate([0, 0, half_width - face_thickness])
difference() {
cylinder(h = face_thickness, r = rim_radius - wall / 2, $fn = smoothness);
translate([0, 0, -0.5])
cylinder(h = face_thickness + 1, d = bore_diameter, $fn = smoothness);
if (lug_count > 0)
for (i = [0 : lug_count - 1])
rotate([0, 0, i * 360 / lug_count])
translate([lug_radius, 0, -0.5])
cylinder(h = face_thickness + 1, d = lug_hole, $fn = 32);
if (vent_count > 0 && vent_diameter > 0)
for (i = [0 : vent_count - 1])
rotate([0, 0, (i + 0.5) * 360 / vent_count])
translate([vent_radius_pos, 0, -0.5])
cylinder(h = face_thickness + 1, d = vent_diameter, $fn = 32);
}
}
module rim() {
union() {
barrel();
flanges();
face();
}
}
// ---- Bolts, from remixcad/metric-bolt ----
// Head out, seated just proud of the face, the way a wheel is bolted up.
module bolts() {
if (lug_count > 0)
for (i = [0 : lug_count - 1])
rotate([0, 0, i * 360 / lug_count])
translate([lug_radius, 0, half_width + bolt_head_height + 0.5])
rotate([180, 0, 0])
MetricBolt(bolt_size, bolt_length, 0.4);
}
module wheel() {
color(color_tyre) tyre();
color(color_rim) rim();
if (show_bolts) color(color_bolts) bolts();
}
wheel();
Comments
Context, not a score. Comments never move a model up or down the results.No comments yet
Printed it? A note about your material and the clearance you landed on saves the next person a failed print.
