Bearings, keys, retaining rings and springs
These are the parts a shaft carries: a bearing it turns in, a key that drives a gear or a pulley on it, a retaining ring that keeps things from sliding off, and the springs beside them. Standard parts explains the standards, units, frames and roles they share, and machining cuts the keyways and grooves they sit in.
A shaft fitted out
Here a 20 millimetre shaft gets a keyway with its key, a groove with its retaining ring, and a ball bearing:
- Rete
- Blockly
- TypeScript
{
"id": "rete-v2-json",
"nodes": {
"bar": {
"id": "bar",
"name": "bitbybit.occt.shapes.solid.createCylinder",
"customName": "cylinder",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"radius": 10,
"height": 60,
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
],
"angle": 360,
"originOnCenter": false
},
"inputs": {},
"position": [
40,
40
]
},
"keywayStart": {
"id": "keywayStart",
"name": "bitbybit.frame.create",
"customName": "frame",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"origin": [
0,
30,
0
],
"normal": [
0,
1,
0
],
"direction": [
1,
0,
0
]
},
"inputs": {},
"position": [
40,
460
]
},
"keyed": {
"id": "keyed",
"name": "bitbybit.occt.parts.mechanical.machining.din.keyway",
"customName": "keyway",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"diameter": 20,
"length": 20,
"inHub": false,
"unit": "mm"
},
"inputs": {
"shape": {
"connections": [
{
"node": "bar",
"output": "result",
"data": {}
}
]
},
"frame": {
"connections": [
{
"node": "keywayStart",
"output": "result",
"data": {}
}
]
}
},
"position": [
460,
40
]
},
"grooveStart": {
"id": "grooveStart",
"name": "bitbybit.frame.create",
"customName": "frame",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"origin": [
0,
55,
0
],
"normal": [
0,
1,
0
],
"direction": [
1,
0,
0
]
},
"inputs": {},
"position": [
460,
460
]
},
"shaft": {
"id": "shaft",
"name": "bitbybit.occt.parts.mechanical.machining.din.ringGroove",
"customName": "ring groove",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"kind": "shaft",
"diameter": 20,
"unit": "mm"
},
"inputs": {
"shape": {
"connections": [
{
"node": "keyed",
"output": "result",
"data": {}
}
]
},
"frame": {
"connections": [
{
"node": "grooveStart",
"output": "result",
"data": {}
}
]
}
},
"position": [
880,
40
]
},
"ring": {
"id": "ring",
"name": "bitbybit.occt.parts.mechanical.retainingRings.din.retainingRing",
"customName": "retaining ring",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"kind": "shaft",
"diameter": 20,
"unit": "mm"
},
"inputs": {
"frame": {
"connections": [
{
"node": "grooveStart",
"output": "result",
"data": {}
}
]
}
},
"position": [
880,
460
]
},
"keySizes": {
"id": "keySizes",
"name": "bitbybit.engineering.mechanical.keys.din.parallelKeySizes",
"customName": "parallel key sizes",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"shaftDiameter": 20,
"unit": "mm"
},
"inputs": {},
"position": [
40,
900
]
},
"depth": {
"id": "depth",
"name": "bitbybit.json.getValueOnProp",
"customName": "get value on prop",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"property": "shaftDepth"
},
"inputs": {
"json": {
"connections": [
{
"node": "keySizes",
"output": "result",
"data": {}
}
]
}
},
"position": [
460,
900
]
},
"keyFloor": {
"id": "keyFloor",
"name": "bitbybit.math.subtract",
"customName": "subtract",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"first": 10,
"second": 2
},
"inputs": {
"second": {
"connections": [
{
"node": "depth",
"output": "result",
"data": {}
}
]
}
},
"position": [
880,
900
]
},
"keyOrigin": {
"id": "keyOrigin",
"name": "bitbybit.vector.vectorXYZ",
"customName": "vector xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 40,
"z": 0
},
"inputs": {
"x": {
"connections": [
{
"node": "keyFloor",
"output": "result",
"data": {}
}
]
}
},
"position": [
1300,
900
]
},
"keyFrame": {
"id": "keyFrame",
"name": "bitbybit.frame.create",
"customName": "frame",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"origin": [
0,
0,
0
],
"normal": [
1,
0,
0
],
"direction": [
0,
1,
0
]
},
"inputs": {
"origin": {
"connections": [
{
"node": "keyOrigin",
"output": "result",
"data": {}
}
]
}
},
"position": [
1720,
900
]
},
"key": {
"id": "key",
"name": "bitbybit.occt.parts.mechanical.keys.din.parallelKey",
"customName": "parallel key",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"shaftDiameter": 20,
"length": 20,
"unit": "mm"
},
"inputs": {
"frame": {
"connections": [
{
"node": "keyFrame",
"output": "result",
"data": {}
}
]
}
},
"position": [
2140,
900
]
},
"bearingSide": {
"id": "bearingSide",
"name": "bitbybit.frame.create",
"customName": "frame",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"origin": [
0,
5,
0
],
"normal": [
0,
1,
0
],
"direction": [
1,
0,
0
]
},
"inputs": {},
"position": [
40,
1340
]
},
"bearing": {
"id": "bearing",
"name": "bitbybit.occt.parts.mechanical.bearings.iso.ballBearing",
"customName": "ball bearing",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"designation": "6004",
"shields": false,
"unit": "mm"
},
"inputs": {
"frame": {
"connections": [
{
"node": "bearingSide",
"output": "result",
"data": {}
}
]
}
},
"position": [
460,
1340
]
},
"view": {
"id": "view",
"name": "bitbybit.babylon.scene.adjustActiveArcRotateCamera",
"customName": "adjust active arc rotate camera",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"position": [
65,
70,
-65
],
"lookAt": [
0,
30,
0
],
"lowerBetaLimit": 1,
"upperBetaLimit": 179,
"angularSensibilityX": 1000,
"angularSensibilityY": 1000,
"maxZ": 1000,
"panningSensibility": 1000,
"wheelPrecision": 3
},
"inputs": {},
"position": [
880,
1340
]
}
},
"modules": {}
}
<xml xmlns="https://developers.google.com/blockly/xml"><block type="bitbybit.point.pointXYZ" x="0" y="0"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block><block type="math_number" x="0" y="0"><field name="NUM">0</field></block><block type="math_number" x="0" y="0"><field name="NUM">2</field></block><block type="bitbybit.draw.drawAnyAsyncNoReturn" x="40" y="40"><value name="Entity"><block type="bitbybit.occt.parts.mechanical.machining.din.ringGroove"><value name="Kind"><block type="bitbybit.engineering.enums.retainingRingKindEnum"><field name="bitbybit.engineering.enums.retainingRingKindEnum">'shaft'</field></block></value><value name="Diameter"><block type="math_number"><field name="NUM">20</field></block></value><value name="Unit"><block type="bitbybit.base.enums.unitOfLengthEnum"><field name="bitbybit.base.enums.unitOfLengthEnum">'mm'</field></block></value><value name="Frame"><block type="bitbybit.frame.create"><value name="Origin"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">55</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Normal"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">1</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">1</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value></block></value><value name="Shape"><block type="bitbybit.occt.parts.mechanical.machining.din.keyway"><value name="Diameter"><block type="math_number"><field name="NUM">20</field></block></value><value name="Length"><block type="math_number"><field name="NUM">20</field></block></value><value name="InHub"><block type="logic_boolean"><field name="BOOL">FALSE</field></block></value><value name="Unit"><block type="bitbybit.base.enums.unitOfLengthEnum"><field name="bitbybit.base.enums.unitOfLengthEnum">'mm'</field></block></value><value name="Frame"><block type="bitbybit.frame.create"><value name="Origin"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">30</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Normal"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">1</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">1</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value></block></value><value name="Shape"><block type="bitbybit.occt.shapes.solid.createCylinder"><value name="Radius"><block type="math_number"><field name="NUM">10</field></block></value><value name="Height"><block type="math_number"><field name="NUM">60</field></block></value><value name="Center"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">1</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Angle"><block type="math_number"><field name="NUM">360</field></block></value><value name="OriginOnCenter"><block type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></value></block></value></block></value><next><block type="bitbybit.draw.drawAnyAsyncNoReturn"><value name="Entity"><block type="bitbybit.occt.parts.mechanical.keys.din.parallelKey"><value name="ShaftDiameter"><block type="math_number"><field name="NUM">20</field></block></value><value name="Length"><block type="math_number"><field name="NUM">20</field></block></value><value name="Unit"><block type="bitbybit.base.enums.unitOfLengthEnum"><field name="bitbybit.base.enums.unitOfLengthEnum">'mm'</field></block></value><value name="Frame"><block type="bitbybit.frame.create"><value name="Origin"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="bitbybit.math.subtract"><value name="First"><block type="math_number"><field name="NUM">10</field></block></value><value name="Second"><block type="bitbybit.json.getValueOnProp"><value name="Json"><block type="bitbybit.engineering.mechanical.keys.din.parallelKeySizes"><value name="ShaftDiameter"><block type="math_number"><field name="NUM">20</field></block></value><value name="Unit"><block type="bitbybit.base.enums.unitOfLengthEnum"><field name="bitbybit.base.enums.unitOfLengthEnum">'mm'</field></block></value></block></value><value name="Property"><block type="text"><field name="TEXT">shaftDepth</field></block></value></block></value></block></value><value name="Y"><block type="math_number"><field name="NUM">40</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Normal"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">1</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">1</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value></block></value></block></value><next><block type="bitbybit.draw.drawAnyAsyncNoReturn"><value name="Entity"><block type="bitbybit.occt.parts.mechanical.retainingRings.din.retainingRing"><value name="Kind"><block type="bitbybit.engineering.enums.retainingRingKindEnum"><field name="bitbybit.engineering.enums.retainingRingKindEnum">'shaft'</field></block></value><value name="Diameter"><block type="math_number"><field name="NUM">20</field></block></value><value name="Unit"><block type="bitbybit.base.enums.unitOfLengthEnum"><field name="bitbybit.base.enums.unitOfLengthEnum">'mm'</field></block></value><value name="Frame"><block type="bitbybit.frame.create"><value name="Origin"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">55</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Normal"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">1</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">1</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value></block></value></block></value><next><block type="bitbybit.draw.drawAnyAsyncNoReturn"><value name="Entity"><block type="bitbybit.occt.parts.mechanical.bearings.iso.ballBearing"><value name="Designation"><block type="bitbybit.engineering.enums.isoBallBearingEnum"><field name="bitbybit.engineering.enums.isoBallBearingEnum">'6004'</field></block></value><value name="Shields"><block type="logic_boolean"><field name="BOOL">FALSE</field></block></value><value name="Unit"><block type="bitbybit.base.enums.unitOfLengthEnum"><field name="bitbybit.base.enums.unitOfLengthEnum">'mm'</field></block></value><value name="Frame"><block type="bitbybit.frame.create"><value name="Origin"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">5</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Normal"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">1</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ"><value name="X"><block type="math_number"><field name="NUM">1</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value></block></value></block></value><next><block type="bitbybit.babylon.scene.adjustActiveArcRotateCamera"><value name="Position"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">65</field></block></value><value name="Y"><block type="math_number"><field name="NUM">70</field></block></value><value name="Z"><block type="math_number"><field name="NUM">-65</field></block></value></block></value><value name="LookAt"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">30</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value><value name="LowerBetaLimit"><block type="math_number"><field name="NUM">1</field></block></value><value name="UpperBetaLimit"><block type="math_number"><field name="NUM">179</field></block></value><value name="AngularSensibilityX"><block type="math_number"><field name="NUM">1000</field></block></value><value name="AngularSensibilityY"><block type="math_number"><field name="NUM">1000</field></block></value><value name="MaxZ"><block type="math_number"><field name="NUM">1000</field></block></value><value name="PanningSensibility"><block type="math_number"><field name="NUM">1000</field></block></value><value name="WheelPrecision"><block type="math_number"><field name="NUM">3</field></block></value></block></next></block></next></block></next></block></next></block></xml>
const up = (y: number): Bit.Inputs.Base.Frame => ({ origin: [0, y, 0], normal: [0, 1, 0], direction: [1, 0, 0] });
const keySizes = bitbybit.engineering.mechanical.keys.din.parallelKeySizes({ shaftDiameter: 20 });
let shaft = await bitbybit.occt.shapes.solid.createCylinder({ radius: 10, height: 60, center: [0, 0, 0], direction: [0, 1, 0] });
shaft = await bitbybit.occt.parts.mechanical.machining.din.keyway({ shape: shaft, diameter: 20, length: 20, frame: up(30) });
shaft = await bitbybit.occt.parts.mechanical.machining.din.ringGroove({ shape: shaft, diameter: 20, frame: up(55) });
const key = await bitbybit.occt.parts.mechanical.keys.din.parallelKey({
shaftDiameter: 20, length: 20,
frame: { origin: [10 - keySizes.shaftDepth, 40, 0], normal: [1, 0, 0], direction: [0, 1, 0] },
});
const ring = await bitbybit.occt.parts.mechanical.retainingRings.din.retainingRing({ diameter: 20, frame: up(55) });
const bearing = await bitbybit.occt.parts.mechanical.bearings.iso.ballBearing({ designation: Bit.Inputs.Engineering.isoBallBearingEnum.b6004, frame: up(5) });
await bitbybit.draw.drawAnyAsync({ entity: [shaft, key, ring, bearing] });
bitbybit.babylon.scene.adjustActiveArcRotateCamera({ position: [65, 70, -65], lookAt: [0, 30, 0] });
- The keyway starts on the axis 30 up the shaft and runs 20 along its frame's normal, facing the frame's direction, +X.
- A DIN 6885 key for a 20 millimetre shaft is 6 by 6, and
parallelKeySizessays it sits 3.5 deep in the shaft. The key lies with its bottom face's centre on its frame's origin, its height along the normal and its length along the direction, so its frame stands on the keyway's floor, 3.5 in from the shaft's surface, its normal pointing out of the shaft and its direction along it, halfway along the keyway. - The retaining ring takes the same frame as its groove and sits in it.
- A 6004 bearing has a 20 millimetre bore. One side lies on its frame's origin, 5 up the shaft, and its axis runs along the normal.
Every part touches the shaft where it should and overlaps it nowhere.
Ball bearings
bitbybit.occt.parts.mechanical.bearings.iso.ballBearing makes a metric deep groove ball bearing by its designation, such as 608 or 6204, and bitbybit.occt.parts.mechanical.bearings.ansi.ballBearing an inch R-series bearing, such as R8. Each is a compound of the inner and outer rings with their raceways, the balls and the cage, and with shields on, a shield closing each side between the rings, as on a 2Z bearing. One side lies on the frame's origin and the axis runs along the normal.
ballBearingWithRoles, in both standards, names the bore, the outside, the rings' sides innerStart, innerEnd, outerStart and outerEnd, the innerRing, outerRing, race, ball, cage and shield faces across the compound, with an axis frame that is the frame you gave.
bitbybit.engineering.mechanical.bearings.iso.ballBearingSizes gives a bearing's bore, outside diameter and width (608 is 8 by 22 by 7 millimetres), and bitbybit.engineering.mechanical.bearings.ansi.ballBearingSizes an R-series bearing's, open or shielded, since several are wider shielded: R8 is 1/2 inch bore, 1-1/8 outside, 1/4 wide open and 5/16 shielded. iso.designations and ansi.designations list the bearings each table holds.
Parallel keys
bitbybit.occt.parts.mechanical.keys.din.parallelKey makes a DIN 6885 form A key and bitbybit.occt.parts.mechanical.keys.ansi.parallelKey an ANSI B17.1 square key: a bar with round ends, as wide and high as the standard gives for a shaft of shaftDiameter, length from end to end. DIN keys cover shafts over 6 and up to 65 millimetres, the ANSI square keys shafts over 5/16 and up to 6-1/2 inches. Sunk the keyway's depth below the shaft's surface, a key is also the tool that cuts its keyway.
parallelKeyWithRoles names a key's bottom, top, side and end (the round ends), with a bottom frame that is the frame you gave.
bitbybit.engineering.mechanical.keys.din.parallelKeySizes gives a key's width and height and how deep its keyway goes into the shaft and into the hub: a 20 millimetre shaft takes a 6 by 6 key, 3.5 deep in the shaft and 2.8 in the hub. bitbybit.engineering.mechanical.keys.ansi.parallelKeySizes does the same for inch shafts, its depths measured from the top of the round with half the key standing at each keyseat's side: a 1 inch shaft takes a 1/4 inch square key, 0.141 deep in the shaft.
Retaining rings
bitbybit.occt.parts.mechanical.retainingRings.din.retainingRing makes a DIN 471 ring for a shaft or a DIN 472 ring for a bore, by kind, and bitbybit.occt.parts.mechanical.retainingRings.ansi.retainingRing an inch tapered ring, each fitted in its groove. Its centre lies on the frame's origin, one side on the frame's plane, it rises along the normal and its lugs point along the direction. DIN rings come for shafts from 3 to 100 millimetres and bores from 8 to 100; the inch rings for shafts from 1/8 to 2 inches and bores from 1/4 to 2.
retainingRingWithRoles names a ring's seat (the face in the groove), rim, start, end, gap and lug (the holes for the pliers), with a centre frame that is the frame you gave.
bitbybit.engineering.mechanical.retainingRings.din.retainingRingSizes gives the ring and its groove: the ring's thickness, free diameter, lugs and lug holes, and the groove's diameter, width and least distance from the shaft's end. A 20 millimetre shaft takes a ring 1.2 thick in a groove 19 across and 1.3 wide. bitbybit.engineering.mechanical.retainingRings.ansi.retainingRingSizes does the same in inches, a diameter within a thousandth of an inch of a listed one taking that one: a 3/4 inch shaft takes a groove 0.704 across. din.diameters and ansi.diameters list the diameters each table holds.
Compression springs
bitbybit.occt.parts.mechanical.springs.compressionSpring makes a compression spring with closed and ground ends: a wire of wireDiameter coiled to an outside diameter, more than three times the wire's, with activeCoils springing between the closed coil at each end, standing on the frame's origin and coiled about its normal. length runs from one ground end to the other: the active coils share what the end coils leave, so a shorter length is the spring compressed, and one shorter than its solid length, every coil touching, is refused.
compressionSpringWithRoles names the bottom and top, its ground ends, and the coil; its bottom frame is the frame you gave and its top frame lies length along the normal.
bitbybit.occt.parts.mechanical.springs.compressionSpringPath gives the centre line of the wire as the spring coils it, to sweep a wire of another section along. It runs three quarters of a coil past the frame's origin and past length, so cut the swept solid flat at both ends to grind them. bitbybit.engineering.mechanical.springs.compressionSpringPath works out the same centre line as points up +Z, with the active coils' pitch and the spring's solid length.
| Function | What it does |
|---|---|
ansi.ballBearing | Makes a deep groove ball bearing as a compound of its inner and outer rings with their raceways, its balls, its cage and, when shields is true, a shield on each side. |
ansi.ballBearingWithRoles | Makes a ball bearing as ballBearing does and names the role each face plays. |
iso.ballBearing | Makes a deep groove ball bearing as a compound of its inner and outer rings with their raceways, its balls, its cage and, when shields is true, a shield on each side. |
iso.ballBearingWithRoles | Makes a ball bearing as ballBearing does and names the role each face plays. |
| Function | What it does |
|---|---|
ansi.parallelKey | Makes an ANSI B17.1 square parallel key: a bar with round ends, as wide and high as the standard gives for a shaft of shaftDiameter, lying along the frame's direction on its origin. |
ansi.parallelKeyWithRoles | Makes a parallel key as parallelKey does and names the role each face plays. |
din.parallelKey | Makes a DIN 6885 form A parallel key: a bar with round ends, as wide and high as the standard gives for a shaft of shaftDiameter, lying along the frame's direction on its origin. |
din.parallelKeyWithRoles | Makes a parallel key as parallelKey does and names the role each face plays. |
| Function | What it does |
|---|---|
ansi.retainingRing | Makes an inch tapered retaining ring, external for a shaft or internal for a bore, fitted in its groove. |
ansi.retainingRingWithRoles | Makes a retaining ring as retainingRing does and names the role each face plays. |
din.retainingRing | Makes a DIN 471 retaining ring for a shaft or a DIN 472 ring for a bore, fitted in its groove. |
din.retainingRingWithRoles | Makes a retaining ring as retainingRing does and names the role each face plays. |
| Function | What it does |
|---|---|
compressionSpring | Makes a compression spring with closed and ground ends: a round wire coiled about the frame's normal, its end coils closed onto the next and ground flat, standing on the frame's origin. |
compressionSpringPath | Makes the centre line of a compression spring's wire, coiled about the frame's normal as compressionSpring coils it, to sweep a wire of another section along. |
compressionSpringWithRoles | Makes a compression spring as compressionSpring does and names the role each face plays. |
| Function | What it does |
|---|---|
ansi.ballBearingSizes | Gives an R-series ball bearing by its designation: its bore, its outside diameter and its width, open or shielded. |
ansi.designations | Lists the designations of the R-series ball bearings the tables hold. |
iso.ballBearingSizes | Gives a deep groove ball bearing by its designation: its bore, its outside diameter and its width. |
iso.designations | Lists the designations of the metric ball bearings the tables hold. |
| Function | What it does |
|---|---|
ansi.parallelKeySizes | Gives the ANSI B17.1 square key for a shaft: the key's width and height, and how deep its keyseat goes into the shaft and into the hub. |
din.parallelKeySizes | Gives the DIN 6885 parallel key for a shaft: the key's width and height, and how deep its keyway goes into the shaft and into the hub. |
| Function | What it does |
|---|---|
ansi.diameters | Lists the shaft or bore diameters the inch rings come for. |
ansi.retainingRingSizes | Gives the inch ring for a shaft or a bore, with its groove: the ring's thickness, free diameter, lugs and lug holes, and the groove's diameter, width and least distance from the end. |
din.diameters | Lists the shaft or bore diameters DIN 471 or DIN 472 gives a ring for. |
din.retainingRingSizes | Gives the DIN 471 ring for a shaft or the DIN 472 ring for a bore, with its groove: the ring's thickness, free diameter, lugs and lug holes, and the groove's diameter, width and least distance from the end. |
| Function | What it does |
|---|---|
compressionSpringPath | Works out the centre line of a compression spring's wire up +Z, with a closed coil at each end, the active coils' pitch and the solid length, where every coil touches the next. |



