Kernel rig: the turn at a corner of two rounds, Mitre (the default) and Swept, at a pocket's floor and a boss's base, by exact volumes

A round's spandrel A = (1 - pi/4) r^2 and its first moment about its wall M = r^3 (5/6 - pi/4):
Mitre adds L A -+ 2 M per edge (cut at, or run on to, the corners' bisector planes), Swept turns
the section about a convex corner's edge, (pi/2) M a corner, and refuses a concave corner rounded
less than the ball. The pocket's tangent chain round its R3 corners is a torus each. Graded to
1e-7, where Mitre and Swept differ by 6.6e-6. The Swept cases are listed until solid.fillet
takes a turn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jyviko
2026-10-31 23:54:43 -04:00
committed by jyviko
parent 539d126489
commit 7577e032fb
11 changed files with 472 additions and 0 deletions
+2
View File
@@ -18,6 +18,8 @@ cov-fillet-g2-four-edge-apex-corner refused: the default setback is shorter than
cov-fillet-g2-mixed-corner not supported yet: SMLib sets back a corner only where its edges are all convex or all concave
cov-fillet-g2-oblique-three-edge-corner the G2 corner patch meets the new order-2 section's rounds only G1 at one face seam (its volume holds); the corner step rebuilds the patch
cov-fillet-g2-pocket-corner the G2 corner patch meets the new order-2 section's rounds only G1 at one face seam (its volume holds); the corner step rebuilds the patch
cov-fillet-turn-swept-boss-base-r1 not supported yet: solid.fillet has no `turn`; the corners are mitred (12508.9676, the Mitre case's volume)
cov-fillet-turn-swept-pocket-sharp-corner-refused-r1 not supported yet: solid.fillet has no `turn`, so the sharp concave corners are mitred, not refused
cov-fillet-variable-box-edge-1-to-5-on-its-cone the variable round's sections are the balls' great circles, not the circles their envelope touches them along: volume 11955.6466 against 11956.2224 (rel 4.8e-5)
report-drafted-peg-front-and-concave-rounds-together-r2 not supported yet: SMLib refuses the corner where the drafted front top edge runs tangent into the concave arc (on the cone) as of no kind its blend corners take
report-fillet-concave-arc-and-front-top-edge-together-r5-solver-residues the corner patch where the convex and concave rounds meet stands 0.128 out of the front face (box y min -0.0699 against 0.0579)
@@ -0,0 +1,14 @@
{
"sources": [],
"what": "a pocket whose vertical corners are rounded R3 first, then its floor outline rounded R1 as one tangent chain: the round follows the corners round, a torus at each (no turn to choose)",
"source": "analytic",
"method": "pocket 20x10x5 with R3 vertical corners: V0 = 12000 - 5 (200 - (4 - pi) 9) = 11038.628330588. The floor round: straight runs 14, 4, 14, 4 add A each per length; at each corner the section turns about the corner's axis, its spandrel at distance R - u from it (u from the wall): (pi/2)(R A - M) each (Pappus). V = 11050.097960471. Every seam G1. Graded to 1e-7 relative: the Mitre and Swept turns differ by (8 - 2 pi) M = 0.0823 mm^3 at these four corners, 6.6e-6 of the volume.",
"body_count": 1,
"volume_mm3": 11050.097960470617,
"continuity": {
"order": "g1"
},
"tolerance": {
"rel": 1e-07
}
}
@@ -0,0 +1,106 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Part"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"origin": [
0,
0,
10
],
"x_dir": [
1,
0,
0
],
"y_dir": [
0,
1,
0
]
},
"name": "Pocket"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
10,
10
],
"p1": [
30,
20
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Pocket",
"distance": -5,
"operation": "cut",
"targets": [
"Part"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
10,
10,
7.5
],
[
30,
10,
7.5
],
[
30,
20,
7.5
],
[
10,
20,
7.5
]
],
"radius": 3.0,
"tangent_chain": false
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
10,
5
]
],
"radius": 1.0
}
}
]
}
@@ -0,0 +1,11 @@
{
"sources": [],
"what": "a square boss 10 x 10 x 5 on a plate, its base edges rounded R1, its vertical corners sharp: the default turn, Mitre: at each convex corner the two base rounds run on past it to the bisector plane and meet there",
"source": "analytic",
"method": "plate 40x30x10 and boss 10x10x5: V0 = 12500. Each base round adds A along its edge and runs on past both corners to the bisector planes: the integral of (L + 2u) dA = L A + 2 M. Four edges of 10: 40 A + 8 M. V = 12508.967554824. Graded to 1e-7 relative: the Mitre and Swept turns differ by (8 - 2 pi) M = 0.0823 mm^3 at these four corners, 6.6e-6 of the volume.",
"body_count": 1,
"volume_mm3": 12508.96755482359,
"tolerance": {
"rel": 1e-07
}
}
@@ -0,0 +1,59 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Part"
}
},
{
"command": "solid.box",
"params": {
"length": 10,
"width": 10,
"height": 5,
"corner": [
15,
10,
10
],
"operation": "join",
"targets": [
"Part"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
10,
10
],
[
25,
15,
10
],
[
20,
20,
10
],
[
15,
15,
10
]
],
"radius": 1.0,
"tangent_chain": false
}
}
]
}
@@ -0,0 +1,11 @@
{
"sources": [],
"what": "a pocket 20 x 10 x 5 in a plate, its floor edges rounded R1 and its vertical corners left sharp: the default turn, Mitre: at each corner the two floor rounds run on to the corner's bisector plane and meet there",
"source": "analytic",
"method": "plate 40x30x10 less the pocket 20x10x5: V0 = 11000. Each floor round adds the spandrel A = (1 - pi/4) r^2 along its edge; at a corner the bisector plane cuts it where x - 10 = u, u its distance from its own wall, so an edge of length L adds the integral of (L - 2u) dA = L A - 2 M, M = r^3 (5/6 - pi/4) the spandrel's first moment about its wall. Four edges (20, 10, 20, 10): 60 A - 8 M = 12.492628837. V = 11012.492628837. The rounds meet each other at the mitre G0 and their faces G1. Graded to 1e-7 relative: the Mitre and Swept turns differ by (8 - 2 pi) M = 0.0823 mm^3 at these four corners, 6.6e-6 of the volume.",
"body_count": 1,
"volume_mm3": 11012.492628836666,
"tolerance": {
"rel": 1e-07
}
}
@@ -0,0 +1,93 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Part"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"origin": [
0,
0,
10
],
"x_dir": [
1,
0,
0
],
"y_dir": [
0,
1,
0
]
},
"name": "Pocket"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
10,
10
],
"p1": [
30,
20
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Pocket",
"distance": -5,
"operation": "cut",
"targets": [
"Part"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
10,
5
],
[
30,
15,
5
],
[
20,
20,
5
],
[
10,
15,
5
]
],
"radius": 1.0,
"tangent_chain": false
}
}
]
}
@@ -0,0 +1,14 @@
{
"sources": [],
"what": "the same boss's base rounds turned Swept: at each convex corner the section is revolved about the vertical corner edge through the corner's 90 degrees, a torus piece G1 to both rounds",
"source": "analytic",
"method": "V0 = 12500. Straight rounds 40 A; each corner the spandrel revolved a quarter turn about the corner edge, at distance u from it: (pi/2) M (Pappus). V = 12500 + 40 A + 2 pi M = 12508.885259020. Every seam G1. Graded to 1e-7 relative: the Mitre and Swept turns differ by (8 - 2 pi) M = 0.0823 mm^3 at these four corners, 6.6e-6 of the volume.",
"body_count": 1,
"volume_mm3": 12508.88525901954,
"continuity": {
"order": "g1"
},
"tolerance": {
"rel": 1e-07
}
}
@@ -0,0 +1,60 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Part"
}
},
{
"command": "solid.box",
"params": {
"length": 10,
"width": 10,
"height": 5,
"corner": [
15,
10,
10
],
"operation": "join",
"targets": [
"Part"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
10,
10
],
[
25,
15,
10
],
[
20,
20,
10
],
[
15,
15,
10
]
],
"radius": 1.0,
"tangent_chain": false,
"turn": "swept"
}
}
]
}
@@ -0,0 +1,8 @@
{
"sources": [],
"what": "the same pocket's floor rounds asked to turn Swept at sharp concave corners: the ball cannot pass a concave corner rounded less than its radius, so it is refused, naming the corner radius that works",
"source": "analytic",
"method": "a swept turn sweeps the round's section along the corner's own rounding; a sharp concave corner (R 0 < r 1) has none the ball can follow: refused, naming R >= 1",
"outcome": "refused",
"refusal": "at least 1"
}
@@ -0,0 +1,94 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Part"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"origin": [
0,
0,
10
],
"x_dir": [
1,
0,
0
],
"y_dir": [
0,
1,
0
]
},
"name": "Pocket"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
10,
10
],
"p1": [
30,
20
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Pocket",
"distance": -5,
"operation": "cut",
"targets": [
"Part"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
10,
5
],
[
30,
15,
5
],
[
20,
20,
5
],
[
10,
15,
5
]
],
"radius": 1.0,
"tangent_chain": false,
"turn": "swept"
}
}
]
}