Kernel rig: everyday rounds of a pocket and a boss

A rectangular pocket's floor edges, rim edges and both rounded r2, the rim r5 as deep
as the pocket; a boss's root r2 and r10 (as tall as the boss) and its top rim r2.
The rim cases fail today: SMLib puts a corner patch where two rim rounds meet at a
concave pocket corner, where the rounds running into each other make a mitre (four
faces more; the volumes agree to 5e-4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jyviko
2026-10-30 06:07:18 -04:00
committed by Irakli Kourtis
parent f78e7fd66d
commit d027399e0c
15 changed files with 549 additions and 0 deletions
+3
View File
@@ -7,3 +7,6 @@
5158-fillet-round-just-past-a-10mm-face SMLib status 1001: a convex round 0.01 past its face is not yet built by subtraction (10.0001-10.04 open)
9-fillet-corner-curvature-with-reduce-fit not supported yet: solid.fillet builds corner g2 with the exact fit only
9-fillet-corner-curvature-with-taper-fit not supported yet: solid.fillet builds corner g2 with the exact fit only
every-pocket-floor-and-rim-edges-r2 a corner patch where two rim rounds meet at each concave pocket corner (23 faces, not 19) instead of the mitre the rounds make running into each other
every-pocket-rim-edges-r2 a corner patch where two rim rounds meet at each concave pocket corner (19 faces, not 15) instead of the mitre the rounds make running into each other
every-pocket-rim-edges-r5-as-deep-as-pocket a corner patch where two rim rounds meet at each concave pocket corner (15 faces, not 11) instead of the mitre the rounds make running into each other
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the root circle of a 10 mm tall boss rounded r10: the round uses up the boss's wall and meets its top face at its rim",
"source": "analytic",
"method": "plate 60x40x10 with a boss R8 x 10 on its top at (30, 20): V0 = 24000 + 640 pi = 26010.6193. The concave root (rho = 8, z = 10) rounded r10 adds the spandrel (1-pi/4) r^2 = 21.460184 outside the boss, its first moment about the wall r^3 (5/6-pi/4) = 47.935170, revolved once (Pappus): 2 pi (8 A + M) = 1379.8920. V = 27390.5113. The round is tangent to the wall at z = 20, the boss's top rim: the wall is used up (a round may use up a face). Faces 8 - 1 + 1 = 8.",
"body_count": 1,
"volume_mm3": 27390.511339043704,
"faces": 8,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
20
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,42 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 10,
"body_name": "Plate"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 8,
"height": 10,
"base": [
30,
20,
10
],
"operation": "join",
"targets": [
"Plate"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
38,
20,
10
]
],
"radius": 10
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the root circle of a cylindrical boss on a plate rounded r2 (a concave torus)",
"source": "analytic",
"method": "plate 60x40x10 with a boss R8 x 10 on its top at (30, 20): V0 = 24000 + 640 pi = 26010.6193. The concave root (rho = 8, z = 10) rounded r2 adds the spandrel (1-pi/4) r^2 = 0.858407 outside the boss, its first moment about the wall r^3 (5/6-pi/4) = 0.383481, revolved once (Pappus): 2 pi (8 A + M) = 45.5577. V = 26056.1770. Faces 9.",
"body_count": 1,
"volume_mm3": 26056.177042153293,
"faces": 9,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
20
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,42 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 10,
"body_name": "Plate"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 8,
"height": 10,
"base": [
30,
20,
10
],
"operation": "join",
"targets": [
"Plate"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
38,
20,
10
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the top rim of a cylindrical boss on a plate rounded r2",
"source": "analytic",
"method": "plate 60x40x10 with a boss R8 x 10 on its top at (30, 20): V0 = 24000 + 640 pi = 26010.6193. The convex top rim (rho = 8, z = 20) rounded r2 removes the spandrel A = 0.858407, centroid inside the wall (first moment 0.383481), revolved once: 2 pi (8 A - M) = 40.7388. V = 25969.8805. Faces 9.",
"body_count": 1,
"volume_mm3": 25969.88052332866,
"faces": 9,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
20
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,42 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 10,
"body_name": "Plate"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 8,
"height": 10,
"base": [
30,
20,
10
],
"operation": "join",
"targets": [
"Plate"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
38,
20,
20
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "a rectangular pocket's floor edges and rim edges rounded r2 in one fillet (5 mm walls: 1 mm of flat wall left between them)",
"source": "analytic",
"method": "plate 60x40x10 with the pocket 30x20x5 (x 15..45, y 10..30, floor z = 5, sharp vertical corners): V0 = 24000 - 3000 = 21000. The floor rounds and the rim rounds touch different parts of the walls (2 + 2 < 5), so they add up: + (100 A - 4 r^3 (5/3-pi/2)) = 82.7729 - (100 A + 4 r^3 (5/3-pi/2)) = 88.9086. V = 20993.8643. Faces 19.",
"body_count": 1,
"volume_mm3": 20993.864298248205,
"faces": 19,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
10
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,78 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 10,
"body_name": "Plate"
}
},
{
"command": "solid.box",
"params": {
"length": 30,
"width": 20,
"height": 6,
"corner": [
15,
10,
5
],
"operation": "cut",
"targets": [
"Plate"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
30,
10,
5
],
[
30,
30,
5
],
[
15,
20,
5
],
[
45,
20,
5
],
[
30,
10,
10
],
[
30,
30,
10
],
[
15,
20,
10
],
[
45,
20,
10
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the four floor edges of a rectangular pocket rounded r2 (concave), the pocket's vertical corners left sharp",
"source": "analytic",
"method": "plate 60x40x10 with the pocket 30x20x5 (x 15..45, y 10..30, floor z = 5, sharp vertical corners): V0 = 24000 - 3000 = 21000. Each concave floor edge gains the spandrel (1-pi/4) r^2 = 0.858407 along its whole length (30, 30, 20, 20: 100); at each sharp vertical corner the two rounds run into each other (a mitre), their spandrel prisms overlapping in int_0^r L(u)^2 du, L(u) = r - sqrt(r^2-(r-u)^2), = r^3 (5/3 - pi/2) = 0.766963. Added = 100 A - 4 overlap = 82.7729. V = 21082.7729. Faces 11 + 4 = 15.",
"body_count": 1,
"volume_mm3": 21082.772883765123,
"faces": 15,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
10
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,58 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 10,
"body_name": "Plate"
}
},
{
"command": "solid.box",
"params": {
"length": 30,
"width": 20,
"height": 6,
"corner": [
15,
10,
5
],
"operation": "cut",
"targets": [
"Plate"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
30,
10,
5
],
[
30,
30,
5
],
[
15,
20,
5
],
[
45,
20,
5
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the four rim edges of a rectangular pocket rounded r2 (convex edges meeting at the pocket's concave corners)",
"source": "analytic",
"method": "plate 60x40x10 with the pocket 30x20x5 (x 15..45, y 10..30, floor z = 5, sharp vertical corners): V0 = 24000 - 3000 = 21000. Each convex rim edge loses the spandrel A = 0.858407 along its length (100 in all); at each corner of the pocket the two rounds run on past the corner into the material beyond it and meet in a mitre, so the quadrant there loses what both remove: the overlap of their spandrel prisms, r^3 (5/3 - pi/2) = 0.766963. Removed = 100 A + 4 overlap = 88.9086. V = 20911.0914. Faces 15.",
"body_count": 1,
"volume_mm3": 20911.091414483082,
"faces": 15,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
10
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,58 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 10,
"body_name": "Plate"
}
},
{
"command": "solid.box",
"params": {
"length": 30,
"width": 20,
"height": 6,
"corner": [
15,
10,
5
],
"operation": "cut",
"targets": [
"Plate"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
30,
10,
10
],
[
30,
30,
10
],
[
15,
20,
10
],
[
45,
20,
10
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "a 5 mm deep pocket's rim edges rounded r5: the rounds use up the walls and meet the floor where the walls met it",
"source": "analytic",
"method": "plate 60x40x10 with the pocket 30x20x5 (x 15..45, y 10..30, floor z = 5, sharp vertical corners): V0 = 24000 - 3000 = 21000. As every-pocket-rim-edges-r2 with r = 5, the wall's height: each round reaches the floor tangent to the wall exactly at the floor edge, so the walls are used up (a round may use up a face). Removed = 100 (1-pi/4) 25 + 4 * 125 (5/3-pi/2) = 584.4398. V = 20415.5602. Faces 11 - 4 walls + 4 rounds = 11.",
"body_count": 1,
"volume_mm3": 20415.560238557737,
"faces": 11,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
10
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,58 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 10,
"body_name": "Plate"
}
},
{
"command": "solid.box",
"params": {
"length": 30,
"width": 20,
"height": 6,
"corner": [
15,
10,
5
],
"operation": "cut",
"targets": [
"Plate"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
30,
10,
10
],
[
30,
30,
10
],
[
15,
20,
10
],
[
45,
20,
10
]
],
"radius": 5
}
}
]
}