Kernel rig: everyday box corners and box edges, rounded and chamfered

Three edges at one box corner rounded r1 and r3 with the rolling-ball corner, r3 with
Corners: Curvature at its default setback and at 3.5, and refused at 3 (the radius);
the corner chamfered 2; all twelve edges rounded r2; one edge rounded Type: Curvature.
Volumes in closed form (strips plus sphere octants, half-space intersection, the
rounded box as a Minkowski sum, the quintic section's area 113/756 s^2); G1 at every
round's seam, G2 for the curvature round and the corner patches.

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 b66821c829
commit 57090ba2e3
16 changed files with 538 additions and 0 deletions
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "all twelve edges of a box rounded r2 at once: the rounded box (twelve quarter cylinders, eight sphere octants)",
"source": "analytic",
"method": "box 40x30x20 with every edge rounded r = 2 is the inner box (40-2r)x(30-2r)x(20-2r) = 36x26x16 grown by r (Minkowski sum with the ball): V = abc + 2r(ab+bc+ca) + pi r^2 (a+b+c) + 4/3 pi r^3 = 14976 + 4 (936+416+576) + 4 pi 78 + 32 pi/3 = 23701.6872. Faces 6 + 12 rounds + 8 sphere octants = 26; every blend seam G1.",
"body_count": 1,
"volume_mm3": 23701.68722955831,
"faces": 26,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,81 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
0,
0
],
[
20,
30,
0
],
[
20,
0,
20
],
[
20,
30,
20
],
[
0,
15,
0
],
[
40,
15,
0
],
[
0,
15,
20
],
[
40,
15,
20
],
[
0,
0,
10
],
[
40,
0,
10
],
[
0,
30,
10
],
[
40,
30,
10
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the three edges at one box corner chamfered 2 together: three planar chamfers meeting at one point",
"source": "analytic",
"method": "box 40x30x20, the edges at (40,30,20) chamfered d = 2. In coordinates measured inward from the corner (u,v,w >= 0) each chamfer removes {v+w < d} (resp. u+w, u+v) along its edge; the body left is the intersection of the three half-spaces, whose planes meet at (d/2,d/2,d/2), so no corner face. Removed, by inclusion-exclusion: (d^2/2)(40+30+20) - 3 (pair overlaps, int_0^d (d-w)^2 dw = d^3/3 each) + (triple overlap: area (d-w)^2 less (d-2w)^2/2 for w < d/2, integrated: d^3/4) = 45 d^2 - (3/4) d^3 = 174.0000. V = 24000 - 174.0000 = 23826.0000. Faces 6 + 3 = 9; the chamfers meet the faces at creases (G0).",
"body_count": 1,
"volume_mm3": 23826.0,
"faces": 9,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
},
"continuity": {
"order": "g0"
}
}
@@ -0,0 +1,36 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.chamfer",
"params": {
"edges": [
[
20,
30,
20
],
[
40,
15,
20
],
[
40,
30,
10
]
],
"distance": 2
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the three edges at one corner of a box rounded r1 together, rolling-ball (Tangent) corner: three quarter-cylinder rounds and a sphere octant",
"source": "analytic",
"method": "box 40x30x20, the edges at (40,30,20) (lengths 40, 30, 20) rounded r1. Each round removes the spandrel A = (1-pi/4) r^2 = 0.214602 along its edge outside the corner cube [40-r,40]x[30-r,30]x[20-r,20] (lengths 40-r, 30-r, 20-r: A (90-3r)); inside the corner cube what is left is the octant of the ball of radius r about (40-r,30-r,20-r), pi r^3/6, so the cube loses r^3 (1-pi/6). V = 24000 - A (90-3r) - r^3 (1-pi/6) = 24000 - 19.1468 = 23980.8532. Faces 6 + 3 rounds + the sphere octant = 10; every blend seam tangent (G1).",
"body_count": 1,
"volume_mm3": 23980.853238991178,
"faces": 10,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,36 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
30,
20
],
[
40,
15,
20
],
[
40,
30,
10
]
],
"radius": 1
}
}
]
}
@@ -0,0 +1,30 @@
{
"sources": [],
"what": "the three edges at one box corner rounded r3 with Corners: Curvature at its default setback (1.5 r = 4.5): the corner patch meets the rounds and faces G2",
"source": "invariants",
"method": "box 40x30x20, the edges at (40,30,20) rounded r3, corner g2: the corner is set back 4.5 along each edge and filled with one patch built G2 to the three rounds and the three faces (solid.fillet `corner`). The patch is a free-form surface SMLib fits, so no closed-form volume: one valid body, 6 faces + 3 rounds + the patch = 10, within the box. Graded as fillets/9-fillet-corner-r1-curvature-default-setback, scaled by r: at the points where a round's section ends on a face the round is only tangent (G1) to the plane, its curvature jumping by 1/r, so no patch is G2 to both there; the patch's curvature jump is bounded at stations at least 0.24 r from each turn, within 2.2 r of the corner, at most 0.5% of 1/r per mm.",
"body_count": 1,
"faces": 10,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
},
"continuity": {
"near": [
40,
30,
20
],
"within_mm": 6.6,
"clear_mm": 0.72,
"curvature_jump_per_mm": 0.001667
}
}
@@ -0,0 +1,38 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
30,
20
],
[
40,
15,
20
],
[
40,
30,
10
]
],
"radius": 3,
"corner": "g2",
"tangent_chain": false
}
}
]
}
@@ -0,0 +1,30 @@
{
"sources": [],
"what": "the three edges at one box corner rounded r3, Corners: Curvature set back 3.5, just past the radius: the smallest kind of setback that builds",
"source": "invariants",
"method": "as every-box-corner-three-edges-r3-curvature-corner with the setback 3.5: past where the rounds' contact lines meet (r = 3 from the vertex on a corner of faces square to each other), so the patch is built (the rule: a setback must be more than the radius). No closed-form volume (a fitted patch): one valid body of 10 faces within the box. Graded as fillets/9-fillet-corner-r1-curvature-default-setback, scaled by r: at the points where a round's section ends on a face the round is only tangent (G1) to the plane, its curvature jumping by 1/r, so no patch is G2 to both there; the patch's curvature jump is bounded at stations at least 0.24 r from each turn, within 2.2 r of the corner, at most 0.5% of 1/r per mm.",
"body_count": 1,
"faces": 10,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
},
"continuity": {
"near": [
40,
30,
20
],
"within_mm": 6.6,
"clear_mm": 0.72,
"curvature_jump_per_mm": 0.001667
}
}
@@ -0,0 +1,48 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
30,
20
],
[
40,
15,
20
],
[
40,
30,
10
]
],
"radius": 3,
"corner": "g2",
"tangent_chain": false,
"setbacks": [
{
"vertex": [
40,
30,
20
],
"distance": 3.5
}
]
}
}
]
}
@@ -0,0 +1,8 @@
{
"sources": [],
"what": "the three edges at one box corner rounded r3, Corners: Curvature set back exactly 3, the radius: refused, naming the least setback",
"source": "invariants",
"method": "on a corner of faces square to each other the rounds' contact lines meet r = 3 from the vertex along each edge; a setback of 3 starts the patch exactly there, which leaves it no room (the setback must be more than that), so the right answer is the refusal naming the radius, before SMLib runs (solid.fillet `setbacks`).",
"outcome": "refused",
"refusal": "the setback must be more than the radius (3 mm)"
}
@@ -0,0 +1,48 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
30,
20
],
[
40,
15,
20
],
[
40,
30,
10
]
],
"radius": 3,
"corner": "g2",
"tangent_chain": false,
"setbacks": [
{
"vertex": [
40,
30,
20
],
"distance": 3
}
]
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "the three edges at one corner of a box rounded r3 together, rolling-ball (Tangent) corner: three quarter-cylinder rounds and a sphere octant",
"source": "analytic",
"method": "box 40x30x20, the edges at (40,30,20) (lengths 40, 30, 20) rounded r3. Each round removes the spandrel A = (1-pi/4) r^2 = 1.931417 along its edge outside the corner cube [40-r,40]x[30-r,30]x[20-r,20] (lengths 40-r, 30-r, 20-r: A (90-3r)); inside the corner cube what is left is the octant of the ball of radius r about (40-r,30-r,20-r), pi r^3/6, so the cube loses r^3 (1-pi/6). V = 24000 - A (90-3r) - r^3 (1-pi/6) = 24000 - 169.3076 = 23830.6924. Faces 6 + 3 rounds + the sphere octant = 10; every blend seam tangent (G1).",
"body_count": 1,
"volume_mm3": 23830.692428057893,
"faces": 10,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
},
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,36 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
30,
20
],
[
40,
15,
20
],
[
40,
30,
10
]
],
"radius": 3
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [],
"what": "a curvature-continuous (Type: Curvature) round of size 3 on a box's long top edge, between two planar end faces",
"source": "analytic",
"method": "box 40x30x20, the top back edge (y=30, z=20, 40 long) filleted type curvature size 3: the section is the quintic Bezier with control points at thirds of the setback s = 3 along each face (as fillets/862), zero curvature where it meets the faces. The area between the corner and that curve (Green on the Bezier, exact: 113/756 s^2) is 1.345238; the end faces x=0 and x=40 are square to the edge: V = 24000 - 40 * 1.345238 = 23946.1905. Faces 7; both seams of the round with the faces G2.",
"body_count": 1,
"volume_mm3": 23946.190476190477,
"faces": 7,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
},
"continuity": {
"order": "g2"
}
}
@@ -0,0 +1,27 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Part"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
30,
20
]
],
"radius": 3,
"type": "curvature"
}
}
]
}