Skip to main content

Fasteners

bitbybit.occt.parts.mechanical.fasteners builds the bolts, screws, nuts and washers that hold a model together, at the sizes their standards give, and bitbybit.engineering.mechanical.fasteners gives the numbers behind them: the hole a bolt passes through, the counterbore a cap screw sinks into, how thick a washer is. Standard parts explains the standards, units, frames and roles they share.

A bolted plate​

Here an M8 bolt passes through a plate, with a washer and a nut underneath. The table gives the clearance hole, so the bolt passes freely, and the washer's thickness, so the nut sits right under it; in Rete and Blockly, bitbybit.json.getValueOnProp reads the thickness out of the table's answer:

Bitbybit Platform

A bolted plate in Rete

rete logoRete
Script Source (rete)
{
"id": "rete-v2-json",
"nodes": {
"top": {
"id": "top",
"name": "bitbybit.frame.create",
"customName": "frame",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"origin": [
0,
10,
0
],
"normal": [
0,
1,
0
],
"direction": [
1,
0,
0
]
},
"inputs": {},
"position": [
40,
40
]
},
"topFrames": {
"id": "topFrames",
"name": "bitbybit.lists.createList",
"customName": "create list",
"async": false,
"drawable": false,
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "top",
"output": "result",
"data": {}
}
]
}
},
"position": [
460,
40
]
},
"hole": {
"id": "hole",
"name": "bitbybit.engineering.mechanical.fasteners.iso.clearanceHole",
"customName": "clearance hole",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"fit": "normal",
"size": "M8",
"unit": "mm"
},
"inputs": {},
"position": [
40,
460
]
},
"box": {
"id": "box",
"name": "bitbybit.occt.shapes.solid.createBox",
"customName": "box",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"width": 40,
"length": 40,
"height": 10,
"center": [
0,
5,
0
],
"originOnCenter": true
},
"inputs": {},
"position": [
40,
860
]
},
"plate": {
"id": "plate",
"name": "bitbybit.occt.features.holes",
"customName": "holes",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"diameter": 1,
"depth": 0,
"tipAngle": 0
},
"inputs": {
"shape": {
"connections": [
{
"node": "box",
"output": "result",
"data": {}
}
]
},
"frames": {
"connections": [
{
"node": "topFrames",
"output": "list",
"data": {}
}
]
},
"diameter": {
"connections": [
{
"node": "hole",
"output": "result",
"data": {}
}
]
}
},
"position": [
880,
460
]
},
"bolt": {
"id": "bolt",
"name": "bitbybit.occt.parts.mechanical.fasteners.iso.hexBolt",
"customName": "hex bolt",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"fullyThreaded": true,
"length": 30,
"modelledThread": false,
"size": "M8",
"unit": "mm"
},
"inputs": {
"frame": {
"connections": [
{
"node": "top",
"output": "result",
"data": {}
}
]
}
},
"position": [
880,
40
]
},
"underneath": {
"id": "underneath",
"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": [
0,
-1,
0
],
"direction": [
1,
0,
0
]
},
"inputs": {},
"position": [
40,
1300
]
},
"washer": {
"id": "washer",
"name": "bitbybit.occt.parts.mechanical.fasteners.iso.washer",
"customName": "washer",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"chamfered": false,
"size": "M8",
"unit": "mm"
},
"inputs": {
"frame": {
"connections": [
{
"node": "underneath",
"output": "result",
"data": {}
}
]
}
},
"position": [
880,
1300
]
},
"washerSizes": {
"id": "washerSizes",
"name": "bitbybit.engineering.mechanical.fasteners.iso.washerSizes",
"customName": "washer sizes",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"size": "M8",
"unit": "mm"
},
"inputs": {},
"position": [
40,
1700
]
},
"thickness": {
"id": "thickness",
"name": "bitbybit.json.getValueOnProp",
"customName": "get value on prop",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"property": "thickness"
},
"inputs": {
"json": {
"connections": [
{
"node": "washerSizes",
"output": "result",
"data": {}
}
]
}
},
"position": [
460,
1700
]
},
"below": {
"id": "below",
"name": "bitbybit.math.negate",
"customName": "negate",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"number": 1
},
"inputs": {
"number": {
"connections": [
{
"node": "thickness",
"output": "result",
"data": {}
}
]
}
},
"position": [
880,
1700
]
},
"nutOrigin": {
"id": "nutOrigin",
"name": "bitbybit.vector.vectorXYZ",
"customName": "vector xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 0,
"z": 0
},
"inputs": {
"y": {
"connections": [
{
"node": "below",
"output": "result",
"data": {}
}
]
}
},
"position": [
1300,
1700
]
},
"underWasher": {
"id": "underWasher",
"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": [
0,
-1,
0
],
"direction": [
1,
0,
0
]
},
"inputs": {
"origin": {
"connections": [
{
"node": "nutOrigin",
"output": "result",
"data": {}
}
]
}
},
"position": [
1720,
1700
]
},
"nut": {
"id": "nut",
"name": "bitbybit.occt.parts.mechanical.fasteners.iso.hexNut",
"customName": "hex nut",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"size": "M8",
"unit": "mm"
},
"inputs": {
"frame": {
"connections": [
{
"node": "underWasher",
"output": "result",
"data": {}
}
]
}
},
"position": [
2140,
1700
]
},
"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": [
30,
12,
-84
],
"lookAt": [
0,
-3,
0
],
"lowerBetaLimit": 1,
"upperBetaLimit": 179,
"angularSensibilityX": 1000,
"angularSensibilityY": 1000,
"maxZ": 1000,
"panningSensibility": 1000,
"wheelPrecision": 3
},
"inputs": {},
"position": [
1300,
40
]
}
},
"modules": {}
}
  • The normal clearance hole for M8 is 9 millimetres, so the 8 millimetre bolt stands clear of the plate.
  • The bolt's frame is the plate's top face, its normal pointing up: the head rises above the plate and the shank runs down through it.
  • The washer and the nut take frames under the plate with their normals pointing down, so each rises away from the plate. The washer is 1.6 millimetres thick, so the nut's frame sits 1.6 below the plate.
  • A nut's hole is the thread's nominal diameter, so the bolt passes through the nut without overlapping it. The parts touch where they bear and overlap nowhere, which bitbybit.occt.analysis.clashes.betweenShapes confirms.

What each standard holds​

The metric parts are in bitbybit.occt.parts.mechanical.fasteners.iso, sized by M1.6 to M24:

  • hexBolt is a hexagon head bolt threaded to the head, ISO 4017, or, with fullyThreaded false, threaded only for the length ISO 4014 gives, leaving a plain shank.
  • socketHeadCapScrew is an ISO 4762 cap screw: a round head with a hexagon recess for a key.
  • hexNut is an ISO 4032 hexagon nut, chamfered on both sides.
  • setScrew is a set screw with a hexagon recess, threaded its whole length, with a point that bears on the part: flat (ISO 4026), cone (ISO 4027), dog (ISO 4028) or cup (ISO 4029).
  • washer is an ISO 7089 plain washer, or with chamfered the ISO 7090 one, chamfered on the outside of the face away from its seat, from M5.

The inch parts are in bitbybit.occt.parts.mechanical.fasteners.ansi, sized by #0 to 1 inch, coarse (UNC) or fine (UNF) by series:

  • hexBolt is an ASME B18.2.1 hex cap screw, threaded for the length the standard gives, or to the head with fullyThreaded.
  • socketHeadCapScrew is an ASME B18.3 cap screw.
  • hexNut is a B18.6.3 machine screw nut up to #12 and a B18.2.2 hex nut from 1/4 inch.
  • setScrew is an ASME B18.3 set screw with a cup, flat, cone, oval or half dog point.
  • washer is a B18.22.1 type A plain washer, narrow or wide by series, from #6.

bitbybit.occt.parts.mechanical.fasteners.dowelPin makes a cylindrical pin of any diameter and length, chamfered at each end after ISO 2338; it starts at its frame's origin and runs along the normal.

The thread is a light face unless you ask for it. A bolt or cap screw shows its threaded length as a face of its own, which draws and builds fast. With modelledThread on, the thread is cut as the machining functions cut one, every face of it named thread, which takes longer to build but is true to the part. A set screw sits with its recessed end on the frame's origin and runs against the normal, into the hole it fills.

Roles​

Each part has a twin that names its faces, as Standard parts describes:

  • bitbybit.occt.parts.mechanical.fasteners.iso.hexBoltWithRoles and bitbybit.occt.parts.mechanical.fasteners.ansi.hexBoltWithRoles name a bolt's head, seat (under the head), shank, thread and end (the tip); a bolt threaded to its head has no shank. Their seat frame is the frame you gave.
  • socketHeadCapScrewWithRoles, in both standards, names the same roles and the recess.
  • hexNutWithRoles names a nut's seat (its bearing face), top, side and thread (the hole).
  • setScrewWithRoles names a set screw's top (the recessed end), recess, thread and end (the point).
  • washerWithRoles names a washer's seat, top, bore and rim, an ISO 7090 washer's chamfer included in the rim.
  • bitbybit.occt.parts.mechanical.fasteners.dowelPinWithRoles names a pin's side and its end faces, chamfers included.

The tables​

bitbybit.engineering.mechanical.fasteners.iso and bitbybit.engineering.mechanical.fasteners.ansi give the numbers the parts are built from, in unit:

  • clearanceHole gives the diameter of the hole a screw passes through, close, normal or loose by fit: ISO 273 for metric screws, where M6 normal is 6.6 millimetres, and ASME B18.2.8 for inch ones, where 1/4 normal is 0.281 inches, a 9/32 drill.
  • hexBoltSizes gives a bolt's width across flats, head height and threaded length for a length: an M8 bolt 40 long has 13 across flats, a 5.3 high head and 22 threaded.
  • socketHeadCapScrewSizes gives a cap screw's head, its recess, its threaded length and the counterbore that sinks it below the surface: DIN 974-1 for metric screws, half a millimetre deeper than the head, and 0.02 inches deeper for inch ones.
  • hexNutSizes gives a nut's width across flats and height: M8 is 13 across and 6.8 high.
  • setScrewSizes gives a set screw's recess and its point; a short screw, by length, gets a shallower recess and, at its cone, a blunter angle.
  • washerSizes gives a washer's inner and outer diameters and thickness, and bitbybit.engineering.mechanical.fasteners.iso.chamferedWasherSizes an ISO 7090 washer chamfered on one face, from M5.
FunctionWhat it does
ansi.hexBoltMakes an ASME B18.2.1 hex cap screw with chamfered top corners, threaded for the length the standard gives, or to the head when fullyThreaded is true.
ansi.hexBoltWithRolesMakes a hex cap screw as hexBolt does and names the role each face plays.
ansi.hexNutMakes an ASME hex nut, a machine screw nut to #12 and a hex nut from 1/4, its corners chamfered on both sides and its hole at the thread's nominal diameter.
ansi.hexNutWithRolesMakes a hex nut as hexNut does and names the role each face plays.
ansi.setScrewMakes an ASME B18.3 set screw with a hexagon recess, threaded its whole length, its point a cup, flat, cone, oval or half dog, the recess as deep as the standard asks of its length.
ansi.setScrewWithRolesMakes a set screw as setScrew does and names the role each face plays.
ansi.socketHeadCapScrewMakes an ASME B18.3 cap screw: a round head with a hexagon recess for a key, and a shank threaded from the tip for the length the standard gives, or to the head on a shorter screw.
ansi.socketHeadCapScrewWithRolesMakes a cap screw as socketHeadCapScrew does and names the role each face plays.
ansi.washerMakes an ASME B18.22.1 type A plain washer, narrow or wide.
ansi.washerWithRolesMakes a plain washer as washer does and names the role each face plays.
dowelPinMakes a cylindrical dowel pin with a 45 degree chamfer of a tenth of its diameter at each end, after ISO 2338.
dowelPinWithRolesMakes a dowel pin as dowelPin does and names the role each face plays.
iso.hexBoltMakes a hexagon head bolt with chamfered top corners: threaded to the head after ISO 4017, or after ISO 4014 only for the length the standard gives when fullyThreaded is false.
iso.hexBoltWithRolesMakes a hexagon head bolt as hexBolt does and names the role each face plays.
iso.hexNutMakes an ISO 4032 hexagon nut, its corners chamfered on both sides and its hole at the thread's nominal diameter, so a screw of its size passes through without overlapping it.
iso.hexNutWithRolesMakes a hexagon nut as hexNut does and names the role each face plays.
iso.setScrewMakes a set screw with a hexagon recess, threaded its whole length, its point flat, cone, dog or cup as ISO 4026 to 4029 give them, the recess as deep as they ask of its length.
iso.setScrewWithRolesMakes a set screw as setScrew does and names the role each face plays.
iso.socketHeadCapScrewMakes an ISO 4762 cap screw: a round head with a hexagon recess for a key, and a shank threaded from the tip for the length the standard gives, or to the head on a shorter screw.
iso.socketHeadCapScrewWithRolesMakes a cap screw as socketHeadCapScrew does and names the role each face plays.
iso.washerMakes a plain washer: flat after ISO 7089, or after ISO 7090 with its outside chamfered on the face away from the seat.
iso.washerWithRolesMakes a plain washer as washer does and names the role each face plays.
FunctionWhat it does
ansi.clearanceHoleGives the diameter of an ASME B18.2.8 clearance hole for a screw: close, normal or loose.
ansi.hexBoltSizesGives an ASME B18.2.1 hex cap screw's width across flats, head height and threaded length.
ansi.hexNutSizesGives an ASME hex nut: a B18.6.3 machine screw nut from #0 to #12, a B18.2.2 hex nut from 1/4 up, as its width across flats and its height.
ansi.setScrewSizesGives an ASME B18.3 set screw by its size and point: its hexagon recess's size and least depth, and the point's diameter, length, angle and, for an oval point, radius.
ansi.socketHeadCapScrewSizesGives the head of an ASME B18.3 cap screw: its diameter and height, its hexagon recess, the threaded length and the counterbore that sinks it.
ansi.washerSizesGives an ASME B18.22.1 type A plain washer, narrow or wide: its inner and outer diameters and its thickness.
iso.chamferedWasherSizesGives an ISO 7090 washer, chamfered on the outside of one face: its inner and outer diameters, its thickness and its chamfer's height and width.
iso.clearanceHoleGives the diameter of an ISO 273 clearance hole for a screw: close, normal or loose.
iso.hexBoltSizesGives the head of an ISO 4014 or 4017 hexagon bolt and how much of its length ISO 4014 threads: the width across flats, the head's height and the threaded length.
iso.hexNutSizesGives an ISO 4032 hexagon nut: its width across flats and its height.
iso.setScrewSizesGives a set screw with a hexagon recess by its size and point: the recess's size and least depth, and the point's diameter, length and angle, as ISO 4026 to 4029 give them.
iso.socketHeadCapScrewSizesGives the head of an ISO 4762 cap screw: its diameter and height, its hexagon recess, the threaded length and the DIN 974-1 counterbore that sinks it.
iso.washerSizesGives an ISO 7089 plain washer: its inner and outer diameters and its thickness.