Sign in with STEVE

steve/retaining-ring

External retaining ring (circlip) for shafts, DIN 471 pattern, shafts 10 to 34 mm, measured from published models.

v1.0.0 Latest STEVE MIT 0
Isometric
part.py 191 lines · Python · STEVE runtime · checked
Download
1"""External retaining ring (circlip) for shafts of the DIN 471 pattern, shafts 10 to 34 mm, as the published
2FreeCAD-library models draw them.
3
4The ring lies on the XY plane (from z = 0 to its thickness s), its bore centred on the origin (the shaft's axis along
5Z), the lugs with their holes toward +X. Each size's outline is the reference model's own (lines and arcs, each arc by
6its ends and midpoint); the model is a flat plate of constant thickness. See the README for the models and authors.
7"""
8import cadquery as cq
9
10from steve import Model
11
12size = "20" # Shaft diameter d1 (mm)
13material = "spring-steel" # Material
14
15# mm. Measured on each reference model: its largest planar face gives the ring's plane; s is the model's extent across
16# it; the outline is the OCCT section at mid-thickness, every edge read exactly (line ends; each arc's ends and
17# midpoint), placed with the bore arc's centre at the origin and the lug holes toward +X, rounded to 1e-4 mm.
18# {d1: (s, [outline, hole, hole])}: a loop is x0, y0, then ("L", x, y) a line to or ("A", xm, ym, x, y) an arc through
19# (xm, ym) to; ("C", cx, cy, r) a circle.
20RINGS = {
21 # d1 = 10: step.parts din471_retaining_ring_m10, FreeCAD-library DIN471_CLASS_A_M10RetainingRings.step;
22 # s = 1.0, bore (d3) 9.2966, outline area 61.5094 mm^2 on the model
23 10: (1.0, [
24 [4.1213, -4.1346, ('L', 5.9421, -4.1346), ('A', 6.7601, -3.892, 7.3134, -3.2426),
25 ('A', 7.7312, -2.0562, 7.958, -0.819), ('L', 4.5756, -0.819), ('A', -4.6483, 0.0, 4.5756, 0.819),
26 ('L', 7.958, 0.819), ('A', 7.7312, 2.0562, 7.3134, 3.2426), ('A', 6.7601, 3.892, 5.9421, 4.1346),
27 ('L', 4.1213, 4.1346), ('A', -6.5794, 0.0, 4.1213, -4.1346)],
28 [('C', 5.7, 2.5, 0.75)],
29 [('C', 5.7, -2.5, 0.75)],
30 ]),
31 # d1 = 12: step.parts din471_retaining_ring_m12, FreeCAD-library DIN471_CLASS_A_M12RetainingRings.step;
32 # s = 1.0, bore (d3) 11.0, outline area 67.6073 mm^2 on the model
33 12: (1.0, [
34 [5.498, 0.15, ('L', 8.758, 0.1499), ('A', 8.6548, 1.3486, 8.3884, 2.5218),
35 ('A', 8.1164, 2.9619, 7.661, 3.2071), ('L', 6.0001, 3.6), ('A', 5.5769, 3.8145, 5.3002, 4.2),
36 ('A', -7.3, -0.0182, 5.3222, -4.17), ('A', 5.5945, -3.8059, 5.9999, -3.6), ('L', 7.6607, -3.2072),
37 ('A', 8.1162, -2.962, 8.3882, -2.522), ('A', 8.6547, -1.3488, 8.758, -0.1501), ('L', 5.498, -0.15),
38 ('A', -5.5, 0.0004, 5.498, 0.15)],
39 [('C', 7.1199, -1.54, 0.85)],
40 [('C', 7.1201, 1.54, 0.85)],
41 ]),
42 # d1 = 14: step.parts din471_retaining_ring_m14, FreeCAD-library DIN471_CLASS_A_M14RetainingRings.step;
43 # s = 1.0, bore (d3) 12.8, outline area 94.503 mm^2 on the model
44 14: (1.0, [
45 [6.3983, 0.147, ('L', 9.8983, 0.1832), ('A', 9.745, 1.7456, 9.3466, 3.2642),
46 ('A', 9.0738, 3.6757, 8.6374, 3.9065), ('L', 6.9988, 4.3024), ('A', 6.5247, 4.4807, 6.1987, 4.8684),
47 ('A', -8.6, -0.0018, 6.2013, -4.864), ('A', 6.55, -4.4632, 7.0547, -4.2976), ('L', 8.6951, -3.8348),
48 ('A', 9.1114, -3.5982, 9.3701, -3.1951), ('A', 9.7526, -1.7016, 9.8986, -0.1668), ('L', 6.3984, -0.1425),
49 ('A', -6.4, -0.0012, 6.3983, 0.147)],
50 [('C', 8.2005, -1.7972, 0.85)],
51 [('C', 8.1995, 1.8028, 0.85)],
52 ]),
53 # d1 = 16: step.parts din471_retaining_ring_m16, FreeCAD-library DIN471_CLASS_A_M16RetainingRings.step;
54 # s = 1.0, bore (d3) 14.7, outline area 109.0171 mm^2 on the model
55 16: (1.0, [
56 [7.9978, -4.65, ('L', 9.8012, -4.1482), ('A', 10.2219, -3.9097, 10.4815, -3.5017),
57 ('A', 10.8904, -1.8774, 11.049, -0.21), ('L', 7.349, -0.1212), ('A', -7.35, 0.0, 7.349, 0.1212),
58 ('L', 11.049, 0.21), ('A', 10.8904, 1.8774, 10.4815, 3.5017), ('A', 10.2219, 3.9097, 9.8012, 4.1482),
59 ('L', 7.9978, 4.65), ('A', 7.5499, 4.7805, 7.21, 5.1), ('A', -3.0637, 8.7733, -9.55, 0.0),
60 ('A', -3.0637, -8.7733, 7.21, -5.1), ('A', 7.5499, -4.7805, 7.9978, -4.65)],
61 [('C', 9.15, -2.0, 0.85)],
62 [('C', 9.15, 2.0, 0.85)],
63 ]),
64 # d1 = 18: step.parts din471_retaining_ring_m18, FreeCAD-library DIN471_CLASS_A_M18RetainingRings.step;
65 # s = 1.2, bore (d3) 16.6, outline area 129.3663 mm^2 on the model
66 18: (1.2, [
67 [10.7415, -4.6379, ('A', 11.1509, -4.4136, 11.4139, -4.0278), ('A', 11.96, -2.1453, 12.1976, -0.1996),
68 ('L', 8.2976, -0.2), ('A', -8.3, -0.0021, 8.2976, 0.2), ('L', 12.1976, 0.2004),
69 ('A', 11.9049, 2.3991, 11.2189, 4.5084), ('L', 8.7656, 5.1751), ('A', 8.3188, 5.3776, 8.0222, 5.7682),
70 ('A', -10.7, -0.0024, 8.0236, -5.7683), ('A', 8.3202, -5.3777, 8.7668, -5.175), ('L', 10.7415, -4.6379)],
71 [('C', 10.1997, 2.3002, 1.0)],
72 [('C', 10.2003, -2.2998, 1.0)],
73 ]),
74 # d1 = 20: step.parts din471_retaining_ring_m20, FreeCAD-library DIN471_CLASS_A_M20RetainingRings.step;
75 # s = 1.2, bore (d3) 18.6, outline area 155.5462 mm^2 on the model
76 20: (1.2, [
77 [9.2986, -0.1602, ('A', -9.3, -0.002, 9.2986, 0.1602), ('L', 13.2986, 0.2337),
78 ('A', 13.0287, 2.6749, 12.3145, 5.0249), ('L', 9.7099, 5.753), ('A', 9.2202, 5.9772, 8.9177, 6.4229),
79 ('A', -11.9, -0.0023, 8.9191, -6.4229), ('A', 9.2215, -5.9771, 9.7112, -5.7529), ('L', 11.8325, -5.1593),
80 ('A', 12.2431, -4.9295, 12.5031, -4.5374), ('A', 13.0792, -2.418, 13.2986, -0.2328), ('L', 9.2986, -0.1602)],
81 [('C', 11.1997, 2.5002, 1.0)],
82 [('C', 11.2002, -2.4998, 1.0)],
83 ]),
84 # d1 = 22: step.parts din471_retaining_ring_m22, FreeCAD-library DIN471_CLASS_A_M22RetainingRings.step;
85 # s = 1.2, bore (d3) 20.6, outline area 186.9612 mm^2 on the model
86 22: (1.2, [
87 [10.0827, -6.8387, ('A', 10.3353, -6.5356, 10.6855, -6.3538), ('L', 12.8908, -5.7455),
88 ('A', 13.2984, -5.5207, 13.56, -5.1357), ('A', 14.2397, -2.735, 14.4978, -0.2534), ('L', 10.2978, -0.2135),
89 ('A', -10.3, 0.0, 10.2978, 0.2135), ('L', 14.4978, 0.2534), ('A', 14.2397, 2.735, 13.56, 5.1357),
90 ('A', 13.2984, 5.5207, 12.8908, 5.7455), ('L', 10.6855, 6.3538), ('A', 10.3353, 6.5356, 10.0827, 6.8387),
91 ('A', -13.1, 0.0, 10.0827, -6.8387)],
92 [('C', 12.3, -2.75, 1.0)],
93 [('C', 12.3, 2.75, 1.0)],
94 ]),
95 # d1 = 24: step.parts din471_retaining_ring_m24, FreeCAD-library DIN471_CLASS_A_M24RetainingRings.step;
96 # s = 1.2, bore (d3) 22.1773, outline area 216.3393 mm^2 on the model
97 24: (1.2, [
98 [13.7647, -6.2178, ('A', 14.1732, -5.9964, 14.4375, -5.6144), ('A', 15.1956, -3.0094, 15.4876, -0.3121),
99 ('L', 11.0876, -0.1561), ('A', -11.0886, 0.0, 11.0876, 0.1561), ('L', 15.4876, 0.3121),
100 ('A', 15.1956, 3.0094, 14.4375, 5.6144), ('A', 14.1732, 5.9964, 13.7647, 6.2178), ('L', 11.7665, 6.7542),
101 ('A', 11.2834, 6.9037, 10.9351, 7.2705), ('A', -14.0886, 0.0, 10.9351, -7.2705),
102 ('A', 11.2834, -6.9037, 11.7665, -6.7542), ('L', 13.7647, -6.2178)],
103 [('C', 13.25, 3.0, 1.0)],
104 [('C', 13.25, -3.0, 1.0)],
105 ]),
106 # d1 = 26: step.parts din471_external_retaining_ring_m26, FreeCAD-library DIN471_CLASS_A_M26RetainingRings.step;
107 # s = 1.2, bore (d3) 24.1999, outline area 238.6832 mm^2 on the model
108 26: (1.2, [
109 [14.8315, -6.521, ('A', 15.2313, -6.2976, 15.4897, -5.9193), ('A', 16.2952, -3.1197, 16.5989, -0.2223),
110 ('L', 12.0989, -0.1571), ('A', -0.1051, -12.0995, -12.0999, 0.053), ('A', -0.1051, 12.2055, 12.0989, 0.2631),
111 ('L', 16.5989, 0.3283), ('A', 16.2952, 3.2257, 15.4897, 6.0253), ('A', 15.2313, 6.4036, 14.8315, 6.627),
112 ('L', 13.0012, 7.1502), ('A', 12.4555, 7.2829, 12.0012, 7.613), ('A', -15.1999, 0.053, 12.0012, -7.507),
113 ('A', 12.4555, -7.1769, 13.0012, -7.0442), ('L', 14.8315, -6.521)],
114 [('C', 14.3012, 3.253, 1.0)],
115 [('C', 14.3012, -3.147, 1.0)],
116 ]),
117 # d1 = 28: step.parts din471_external_retaining_ring_m28, FreeCAD-library DIN471_CLASS_A_M28RetainingRings.step;
118 # s = 1.5, bore (d3) 25.9, outline area 264.2574 mm^2 on the model
119 28: (1.5, [
120 [12.9483, 0.2098, ('L', 17.6484, 0.3128), ('A', 17.3269, 3.3676, 16.4807, 6.3205),
121 ('A', 16.2118, 6.7095, 15.7942, 6.9314), ('L', 13.7322, 7.4575), ('A', 13.1852, 7.702, 12.7012, 8.055),
122 ('A', -16.15, 0.0, 12.7012, -8.055), ('A', 13.1852, -7.702, 13.7322, -7.4575), ('L', 15.7942, -6.9314),
123 ('A', 16.2118, -6.7095, 16.4807, -6.3205), ('A', 17.3269, -3.3676, 17.6483, -0.3128),
124 ('L', 12.9483, -0.2098), ('A', -12.95, 0.0, 12.9483, 0.2098)],
125 [('C', 15.2001, 3.4, 1.0)],
126 [('C', 15.2, -3.4, 1.0)],
127 ]),
128 # d1 = 30: step.parts din471_retaining_ring_m30, FreeCAD-library DIN471_CLASS_A_M30RetainingRings.step;
129 # s = 1.5, bore (d3) 27.9987, outline area 321.2757 mm^2 on the model
130 30: (1.5, [
131 [17.6469, -7.0418, ('A', 18.6243, -3.7595, 18.9966, -0.355), ('L', 13.9966, -0.276),
132 ('A', -13.9994, 0.0, 13.9966, 0.276), ('L', 18.9966, 0.355), ('A', 18.6243, 3.7595, 17.6469, 7.0418),
133 ('A', 17.3789, 7.4218, 16.968, 7.6394), ('L', 14.5822, 8.2553), ('A', 14.0253, 8.5855, 13.6395, 9.1054),
134 ('A', -17.5994, 0.0, 13.6395, -9.1054), ('A', 14.0253, -8.5855, 14.5822, -8.2553), ('L', 16.968, -7.6394),
135 ('A', 17.3789, -7.4218, 17.6469, -7.0418)],
136 [('C', 16.3679, -3.7076, 1.0)],
137 [('C', 16.3679, 3.7076, 1.0)],
138 ]),
139 # d1 = 32: step.parts din471_external_retaining_ring_m32, FreeCAD-library DIN471_CLASS_A_M32RetainingRings.step;
140 # s = 1.5, bore (d3) 29.4739, outline area 345.7124 mm^2 on the model
141 32: (1.5, [
142 [17.85, -7.9776, ('A', 18.2554, -7.759, 18.5198, -7.382), ('A', 19.5474, -3.9212, 19.9341, -0.3318),
143 ('L', 14.7341, -0.2904), ('A', -14.7369, 0.0, 14.7341, 0.2904), ('L', 19.9341, 0.3318),
144 ('A', 19.5474, 3.9212, 18.5198, 7.382), ('A', 18.2554, 7.759, 17.85, 7.9776), ('L', 15.4868, 8.6115),
145 ('A', 14.8458, 8.9745, 14.3796, 9.545), ('A', -18.4079, 0.0, 14.3796, -9.545),
146 ('A', 14.8458, -8.9745, 15.4868, -8.6115), ('L', 17.85, -7.9776)],
147 [('C', 17.3207, 3.9, 1.25)],
148 [('C', 17.3207, -3.9, 1.25)],
149 ]),
150 # d1 = 34: step.parts din471_retaining_ring_m34, FreeCAD-library DIN471_CLASS_A_M34RetainingRings.step;
151 # s = 1.5, bore (d3) 31.6321, outline area 381.0868 mm^2 on the model
152 34: (1.5, [
153 [21.1723, 0.4026, ('A', 20.756, 4.1973, 19.6652, 7.8556), ('A', 19.3954, 8.2368, 18.9819, 8.454),
154 ('L', 16.6191, 9.0521), ('A', 16.0305, 9.3414, 15.5672, 9.8056), ('A', -19.6161, 0.0, 15.5672, -9.8056),
155 ('A', 16.0305, -9.3414, 16.6191, -9.0521), ('L', 18.9819, -8.454), ('A', 19.3954, -8.2368, 19.6652, -7.8556),
156 ('A', 20.756, -4.1973, 21.1723, -0.4026), ('L', 15.811, -0.3996), ('A', -15.8161, 0.0, 15.811, 0.3996),
157 ('L', 21.1723, 0.4026)],
158 [('C', 18.3, -4.1, 1.25)],
159 [('C', 18.3, 4.1, 1.25)],
160 ]),
161}
162MATERIALS = {"spring-steel": ("steel-c60e", "#3a3c3f"), "stainless": ("stainless-420c", "#c9ccd0")}
163
164
165def loop_wire(loop):
166 if isinstance(loop[0], (tuple, list)): # ("C", cx, cy, r)
167 _, cx, cy, r = loop[0]
168 return cq.Wire.makeCircle(r, cq.Vector(cx, cy, 0), cq.Vector(0, 0, 1))
169 x, y = loop[0], loop[1]
170 edges = []
171 for seg in loop[2:]:
172 start = cq.Vector(x, y, 0)
173 if seg[0] == "L":
174 x, y = seg[1], seg[2]
175 edges.append(cq.Edge.makeLine(start, cq.Vector(x, y, 0)))
176 else:
177 x, y = seg[3], seg[4]
178 edges.append(cq.Edge.makeThreePointArc(start, cq.Vector(seg[1], seg[2], 0), cq.Vector(x, y, 0)))
179 return cq.Wire.assembleEdges(edges)
180
181
182s, outline = RINGS[int(size)]
183loops = [loop_wire(loop) for loop in outline]
184ring = cq.Solid.extrudeLinear(cq.Face.makeFromWires(loops[0], loops[1:]), cq.Vector(0, 0, s))
185material_id, colour = MATERIALS[material]
186
187model = Model()
188model.add("ring", cq.Workplane("XY").add(ring), name="Retaining ring")
189model.material(material_id, color=colour) # DIN 471: spring steel (C75S); closest library grade C60E
190result = model.result()
191

External retaining ring (circlip) for shafts of the DIN 471 pattern, shaft diameters 10 to 34 mm: the ring's outline with its lugs and lug holes, a flat plate of the ring's thickness. Each size was measured from the FreeCAD-library model of that size (CC-BY-3.0, by nachotineo); DIN 471 gives the ring's key dimensions but not its outline between the back and the lugs, so the models' outlines are used as they are. On the XY plane from z = 0, the bore centred on the origin, the lugs toward +X. Dimensions and attribution: see the README.

Retaining ring (DIN 471 pattern)

External retaining ring (circlip) for shafts, shaft diameters 10 to 34 mm, as the published FreeCAD-library models draw them: the ring's outline with its lugs and lug holes, a flat plate of the ring's thickness.

Geometry

The ring lies on the XY plane from z = 0 to its thickness s, the bore centred on the origin (shaft axis along Z), the lugs toward +X. Each size's outline is the reference model's own, written in the recipe as a table (RINGS, in part.py): lines and arcs (each arc by its ends and midpoint) and the two lug holes.

Measured on the models, mm (bore d3: the ring's inside arc, free state; extents: across the lugs (X) × across (Y)):

d1 s d3 Extents Lug holes
10 1 9.2966 14.54 × 12.3 1.5
12 1 11 16.06 × 14 1.7
14 1 12.8 18.5 × 16.4 1.7
16 1 14.7 20.6 × 18.34 1.7
18 1.2 16.6 22.9 × 20.5 2
20 1.2 18.6 25.2 × 22.8 2
22 1.2 20.6 27.6 × 25.2 2
24 1.2 22.1773 29.58 × 27.14 2
26 1.2 24.1999 31.8 × 29.3 2
28 1.5 25.9 33.8 × 31.1 2
30 1.5 27.9987 36.6 × 33.89 2
32 1.5 29.4739 38.34 × 35.57 2.5
34 1.5 31.6321 40.79 × 37.92 2.5

Parameters

Parameter Meaning
size shaft diameter d1, mm
material spring-steel (STEVE steel-c60e, the closest grade to DIN 471's C75S) or stainless

Sources

DIN 471 gives the ring's thickness, bore, lug size and hole diameter but no drawing of the ring's outline between its back and its lugs. The geometry was measured from the published reference models below: each model's largest planar face gives the ring's plane, the thickness is the model's extent across it, and the outline is the OCCT section at mid-thickness with every edge read exactly (line ends; each arc's ends and midpoint), rounded to 0.0001 mm; the recipe re-draws it in its own code. Every preset is checked against its own model: bounding box within 0.05 mm (the M10 model is stored tilted, so its oriented box is compared) and volume within 2 %.

  • FreeCAD-library, Mechanical Parts/Fasteners/RetainingRings/Metric/DIN471_CLASS_A_M<d1>RetainingRings.step for d1 = 10 to 34 (commit 2e36ae32), by nachotineo (added 2015-10-11); https://github.com/FreeCAD/FreeCAD-library; licensed under CC-BY-3.0 (the library's licence for all its parts). Distributed by step.parts as din471_retaining_ring_m<d1> / din471_external_retaining_ring_m<d1> (https://www.step.parts), identical geometry. No endorsement by the author or the FreeCAD project is implied.

The models follow DIN 471's key dimensions closely but not exactly: their bores differ from DIN 471's d3 by up to 0.13 mm in some sizes (14, 18, 20, 22, 30, 32, 34). The recipe keeps the models' values; use DIN 471's table where the groove fit matters. Simplifications: none beyond the models' own (sharp edges, free state).

Preset list: from the step.parts catalogue (MIT), see library/NOTICE.md.

  1. 1.0.0 Latest
STEVEMIT

steve/hex-head-screw

Hexagon head screw, fully threaded, ISO 4017 / DIN 933, M1.6 to M36, any length, with catalogue sizes as presets.

18 85 sizes 0 1 day ago v2.0.0
STEVEMIT

steve/button-head-screw

Hexagon socket button head screw, ISO 7380-1, M3 to M16, any length, with catalogue sizes as presets.

10 65 sizes 0 1 day ago v2.0.0
STEVEMIT

steve/hex-nut

Hex nut, ISO 4032, M2 to M12.

7 9 variants 0 2 days ago v1.1.0
STEVEMIT

steve/split-lock-washer

Split lock washer (spring washer), DIN 127 form B, M2 to M100.

3 21 sizes 0 1 day ago v1.0.0