kernel-cases: fillets cases from #1008, #1191, #3276 and #3753

A tray with seven rounded edges, both rim rounds of a tube, a chamfer on
a joined L-shaped body, and a circular pattern of a chamfered hole, each
with an analytic volume.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Brennen Herbruck
2026-10-21 06:52:51 -04:00
committed by jyviko
parent 8764a76ff8
commit 9c9ec27c3b
8 changed files with 430 additions and 0 deletions
@@ -0,0 +1,23 @@
{
"sources": [
"tangency-labs/solidcraft#1008"
],
"what": "an R10 round on the four inside floor edges and three of the four inside vertical corners of an open tray, so one corner keeps a sharp vertical edge where two floor rounds meet (rebuilt from the report's edge picks: the original design is not in the report)",
"source": "analytic",
"method": "Tray 100x100x50, cavity 90x90 from z=5 up through the open top (walls and floor 5 mm): V0 = 500000 - 90*90*45 = 135500. Rounding concave edges adds material. Let P be the cavity's plan outline after the vertical rounds: the 90x90 square with three corners rounded R10 (one corner sharp), area 8100 - 3 (1-pi/4) 100 = 8035.6194. The floor round is a rolling ball of R10 along the outline, so over a point at plan distance d from the outline (d<10) the floor rises by g(d) = 10 - sqrt(100 - (10-d)^2); at the sharp corner the two rounds meet in a mitre, which is g of the distance to the nearest wall, the same rule; at a rounded corner the torus degenerates to the ball's sphere. Co-area: the integral of g(d) over P = integral over t in [0,10] of g(t) L(t) dt, with L(t) the perimeter of the outline pulled in by t, L(t) = L0 - 2 pi t for a convex outline (L0 = 360 - 3 (20 - 5 pi) = 347.1239). Integral of g = (1-pi/4) 100 = 21.4602; integral of t g = 1000 (5/6 - pi/4) = 47.9352 (first moment of the square minus quarter disc). Added by the floor rounds = 347.1239*21.4602 - 2 pi 47.9352 = 7148.1569. Cavity after = 45 * 8035.6194 - 7148.1569 = 354454.7183; V = 500000 - that = 145545.2817 mm3 (a grid sum over the plan agrees to 2e-4).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 145545.2817,
"bbox": {
"min": [
0,
-100,
0
],
"max": [
100,
0,
50
]
}
}
@@ -0,0 +1,78 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
0,
-100,
0
],
"length": 100,
"width": 100,
"height": 50,
"body_name": "Tray"
}
},
{
"command": "solid.box",
"params": {
"corner": [
5,
-95,
5
],
"length": 90,
"width": 90,
"height": 46,
"operation": "cut",
"targets": [
"Tray"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
5,
-50,
5
],
[
50,
-95,
5
],
[
95,
-50,
5
],
[
50,
-5,
5
],
[
95,
-5,
27.5
],
[
5,
-5,
27.5
],
[
5,
-95,
27.5
]
],
"radius": 10
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [
"tangency-labs/solidcraft#1191"
],
"what": "an R2 round on the outer and inner rim circles of a tube's top face (the report's ten picks on a ring-shaped top: the round failed after 0.10.1; rebuilt as a plain tube since the design is not in the report)",
"source": "analytic",
"method": "Tube R=18.5, r=11.5, h=33: V0 = pi (18.5^2 - 11.5^2) 33 = 21771.2371. Each rim round removes the square-minus-quarter-disc section (area A = (1-pi/4) 4 = 0.858407, first moment about the round's centre line rho^3/6 = 4/3) swept about the axis (Pappus). Outer rim (convex), section centre at radius 16.5: 2 pi (16.5 A + 4/3) = 97.3737; inner rim (convex, material outside r=11.5), centre at radius 13.5: 2 pi (13.5 A - 4/3) = 64.4333. V = 21771.2371 - 97.3737 - 64.4333 = 21609.4311 mm3. Faces: outer wall, two toroidal rounds, top ring, inner wall, bottom ring = 6.",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 21609.4311,
"faces": 6,
"bbox": {
"min": [
-18.5,
-18.5,
0
],
"max": [
18.5,
18.5,
33
]
}
}
@@ -0,0 +1,67 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY"
}
},
{
"command": "sketch.circle.center",
"params": {
"center": [
0,
0
],
"radius": 18.5
}
},
{
"command": "sketch.circle.center",
"params": {
"center": [
0,
0
],
"radius": 11.5
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 33,
"body_name": "Ring",
"profiles": [
{
"point": [
15,
0
]
}
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
0,
18.5,
33
],
[
0,
11.5,
33
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,28 @@
{
"sources": [
"tangency-labs/solidcraft#3276"
],
"what": "three extrudes joined into an L-shaped body with a 1 mm protrusion, then a chamfer on the protrusion's outer edge (the report: the corners are no longer 90 degrees and the chamfer fails)",
"source": "analytic",
"method": "Base 40x20x10 (8000). A wall 40x5x20 extruded up from the base's top face at y 0..5 (4000): an L section. A 20x10 pad extruded 1 mm out of the wall's front face (y 5..6, z 10..20, x 10..30) (200). A 0.5 mm chamfer on its top outer edge (y=6, z=20, length 20) removes a right triangle 0.5x0.5/2 x 20 = 2.5. V = 12200 - 2.5 = 12197.5 mm3. Centre of mass from the pieces: base (20,10,5), wall (20,2.5,20), pad (20,5.5,15), minus the removed wedge at (20, 17/3, 59.5/3).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 12197.5,
"center_of_mass": [
20.0,
7.4676,
10.08
],
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
20,
30
]
}
}
@@ -0,0 +1,119 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
0,
0
],
"p1": [
40,
20
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 10,
"body_name": "L"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"face": [
20,
10,
10
]
}
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
0,
0
],
"p1": [
40,
5
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 20,
"operation": "join"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"face": [
20,
5,
20
]
}
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
-30,
10
],
"p1": [
-10,
20
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 1,
"operation": "join"
}
},
{
"command": "solid.chamfer",
"params": {
"edges": [
[
20,
6,
20
]
],
"distance": 0.5
}
}
]
}
@@ -0,0 +1,24 @@
{
"sources": [
"tangency-labs/solidcraft#3753"
],
"what": "a circular pattern (6 copies about Y) of a through hole and the 1 mm chamfer on its rim (the report: the pattern is refused because the copied chamfer 'would grow the part'); rebuilt as a hole in a disc, the original design is not in the report",
"source": "analytic",
"method": "Disc R=30, h=10 (axis Y): V0 = pi 900 10 = 28274.3339. Each hole: diameter 4 through (pi 4 10 = 125.6637) plus the 1 mm chamfer on the top rim, a frustum from r=2 (depth 1) to r=3 (top) minus the cylinder it overlaps: pi/3 (4 + 6 + 9) - 4 pi = 7 pi/3 = 7.3304. The holes sit on a circle of radius 20, 60 degrees apart (chord 20, holes 4 mm wide plus the chamfer's 6 mm: no overlap, and 20 - 3 > 0 leaves the rim inside the disc). V = V0 - 6 (125.6637 + 7.3304) = 27476.3693 mm3. Faces: side, top, bottom, plus a wall and a cone per hole = 15.",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 27476.3693,
"faces": 15,
"bbox": {
"min": [
-30,
0,
-30
],
"max": [
30,
10,
30
]
}
}
@@ -0,0 +1,67 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XZ"
}
},
{
"command": "sketch.circle.center",
"params": {
"center": [
0,
0
],
"radius": 30
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 10,
"body_name": "Disc"
}
},
{
"command": "solid.hole",
"params": {
"position": [
20,
10,
0
],
"diameter": 4
}
},
{
"command": "solid.chamfer",
"params": {
"edges": [
[
22,
10,
0
]
],
"distance": 1
}
},
{
"command": "solid.pattern.circular",
"params": {
"features": [
"Hole1",
"Chamfer1"
],
"axis": "Y",
"count": 6,
"angle": "360 deg"
}
}
]
}