kernel-cases: fillets pattern and G2 cases from #193, #219, #862, #1488, #2341, #2708, #2811

Copies of filleted and chamfered features (a pasted block, a pattern of pockets with corner rounds, a pattern of chamfered bosses), a grille of rib roots, a join that needs a boolean retry followed by a fillet, and curvature-continuous fillets worked out from the documented quintic section.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Brennen Herbruck
2026-10-21 06:08:48 -04:00
committed by jyviko
parent cc3f8b1788
commit d235bd7a0e
14 changed files with 1193 additions and 0 deletions
@@ -0,0 +1,10 @@
{
"sources": [
"tangency-labs/solidcraft#1488",
"tangency-labs/solidcraft#1517"
],
"what": "an R1 fillet on the end edge of a 3.5 mm slab after a pleated loft was joined flush with its inner face (the join needs a tool retry; later fillets must still work)",
"source": "invariants",
"method": "slab 120x3.5x95 with a 48 x 4.5 window, a pleated loft band joined flush into it, then R1 on the slab end edge at x=-60, 34 mm away from the join. The fillet edge is a plain straight convex edge between two large planar faces; the join must not leave slivers that make it fail. One closed valid solid is the right answer (the volume of the pleat band has no simple closed form).",
"body_count": 1
}
@@ -0,0 +1,254 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
-60,
0,
0
],
"length": 120,
"width": 3.5,
"height": 95,
"body_name": "Wall"
}
},
{
"command": "solid.box",
"params": {
"corner": [
-24,
-0.5,
-1
],
"length": 48,
"width": 4.5,
"height": 91,
"operation": "cut",
"targets": [
"Wall"
]
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Bottom"
}
},
{
"command": "sketch.line",
"params": {
"closed": true,
"infer": false,
"connect": false,
"points": [
[
-26,
3
],
[
-24.76384,
3
],
[
-16.0568,
14.97217
],
[
-8,
4.90117
],
[
0,
14.90117
],
[
8,
4.90117
],
[
16.0568,
14.97217
],
[
24.76384,
3
],
[
26,
3
],
[
26,
0
],
[
23.23616,
0
],
[
15.9432,
10.02783
],
[
8,
0.09883
],
[
0,
10.09883
],
[
-8,
0.09883
],
[
-15.9432,
10.02783
],
[
-23.23616,
0
],
[
-26,
0
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"offset": 90.5,
"name": "Top"
}
},
{
"command": "sketch.line",
"params": {
"closed": true,
"infer": false,
"connect": false,
"points": [
[
-26,
3
],
[
-24,
3
],
[
-16,
3
],
[
-8,
3
],
[
0,
3
],
[
8,
3
],
[
16,
3
],
[
24,
3
],
[
26,
3
],
[
26,
0
],
[
24,
0
],
[
16,
0
],
[
8,
0
],
[
0,
0
],
[
-8,
0
],
[
-16,
0
],
[
-24,
0
],
[
-26,
0
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.loft",
"params": {
"sections": [
{
"sketch": "Bottom"
},
{
"sketch": "Top"
}
],
"operation": "join",
"targets": [
"Wall"
],
"name": "Pleat"
}
},
{
"command": "solid.fillet",
"params": {
"body": "Wall",
"edges": [
[
-60,
1.75,
95
]
],
"radius": 1
}
}
]
}
@@ -0,0 +1,13 @@
{
"sources": [
"tangency-labs/solidcraft#193",
"tangency-labs/solidcraft#214",
"tangency-labs/solidcraft#363",
"tangency-labs/solidcraft#613"
],
"what": "a block with two R2 top edges rounded, copied and pasted 40 mm over: the copy must carry its own fillets",
"source": "analytic",
"method": "two 40x20x10 blocks, each with its two long top edges rounded R2 (each removes (1-pi/4) 4 x 40): V = 2 (8000 - 2*(1-pi/4)*4*40) = 15862.655. Two bodies.",
"body_count": 2,
"volume_mm3": 15862.654824574367
}
@@ -0,0 +1,78 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "S"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
0,
0
],
"p1": [
40,
20
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "S",
"distance": 10,
"operation": "new",
"body_name": "Block",
"name": "Block"
}
},
{
"command": "solid.fillet",
"params": {
"body": "Block",
"radius": 2,
"edges": [
[
20,
0,
10
],
[
20,
20,
10
]
],
"name": "Round"
}
},
{
"command": "timeline.copy",
"params": {
"features": [
"S",
"Block",
"Round"
]
}
},
{
"command": "timeline.paste",
"params": {
"translate": [
0,
40,
0
]
}
}
]
}
@@ -0,0 +1,10 @@
{
"sources": [
"tangency-labs/solidcraft#219"
],
"what": "a plate with 6 pockets made by patterning one pocket and the R3.2 round of its four corner edges, the pocket height set by a parameter",
"source": "analytic",
"method": "plate 150 x 422.275 x 19.05; each pocket 143.65 x h x 12.7 deep with h = (419.1 - 3.175 - 5*3.175)/6 = 66.6750 mm, its four vertical corner edges (concave) rounded R3.2: the rounds add (1-pi/4) 3.2^2 x 4 = (4-pi) 3.2^2 of area back, so the pocket area is 143.65 h - (4-pi) 3.2^2 = 9569.074. V = 150*422.275*19.05 - 6 * 12.7 * pocket = 477487.40. Pockets are 3.175 apart.",
"body_count": 1,
"volume_mm3": 477487.3997015158
}
@@ -0,0 +1,176 @@
{
"commands": [
{
"command": "parameters.add",
"params": {
"name": "n",
"expression": "6",
"unit": ""
}
},
{
"command": "parameters.add",
"params": {
"name": "h",
"expression": "(419.1 mm - 3.175 mm - (n - 1) * 3.175 mm) / n",
"unit": "mm"
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
0,
0
],
"p1": [
150,
422.275
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 19.05,
"name": "Plate"
}
},
{
"command": "construct.plane.offset",
"params": {
"base": "XY",
"offset": 19.05,
"name": "PocketPlane"
}
},
{
"command": "sketch.create",
"params": {
"plane": "PocketPlane"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
3.175,
3.175
],
"p1": [
146.825,
69.85
]
}
},
{
"command": "sketch.dimension",
"params": {
"entities": [
"origin",
"p1"
],
"type": "horizontal",
"value": "3.175"
}
},
{
"command": "sketch.dimension",
"params": {
"entities": [
"origin",
"p1"
],
"type": "vertical",
"value": "3.175"
}
},
{
"command": "sketch.dimension",
"params": {
"entities": [
"l1"
],
"type": "length",
"value": "143.65"
}
},
{
"command": "sketch.dimension",
"params": {
"entities": [
"l4"
],
"type": "length",
"value": "h"
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 12.7,
"direction": "negative",
"operation": "cut",
"name": "Pocket"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
3.175,
3.175,
12.700000000000001
],
[
146.825,
3.175,
12.700000000000001
],
[
146.825,
69.85,
12.700000000000001
],
[
3.175,
69.85,
12.700000000000001
]
],
"radius": 3.2
}
},
{
"command": "solid.pattern.rectangular",
"params": {
"features": [
"Pocket",
"Fillet1"
],
"dir1": [
0,
1,
0
],
"count1": "n",
"spacing1": "h + 3.175 mm"
}
}
]
}
@@ -0,0 +1,13 @@
{
"sources": [
"tangency-labs/solidcraft#2341",
"tangency-labs/solidcraft#2774",
"tangency-labs/solidcraft#2775",
"tangency-labs/solidcraft#2342"
],
"what": "a 2 x 2 grid made by a feature pattern of a boss and its two chamfers (a concave root chamfer and a convex tip chamfer)",
"source": "analytic",
"method": "plate 84x84x3 with four bosses (34x34 rounded square, corners R4, 4 deep below the plate): boss area 34^2 - (4-pi)*16 = 1142.265, perimeter P = 4*26 + 2 pi 4 = 129.133. Root chamfer 1 mm (concave, round the boss where it meets the plate underside) adds the triangle c^2/2 along the loop at its centroid line, which lies c/3 outside the wall: c^2/2 (P + 2 pi c/3) = 65.6136 per boss. Tip chamfer 0.8 (convex, on the boss end loop) removes c^2/2 (P - 2 pi c/3) = 40.7863 per boss. V = 84*84*3 + 4 (4 Ab + root - tip) = 39543.557. Copies are 42 apart, 8 mm clear of each other, so the chamfers never meet.",
"body_count": 1,
"volume_mm3": 39543.556743793306
}
@@ -0,0 +1,157 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Plate"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
0,
0
],
"p1": [
84.0,
84.0
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 3.0,
"body_name": "Plate"
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Boss"
}
},
{
"command": "sketch.rectangle.rounded",
"params": {
"p0": [
4.0,
4.0
],
"p1": [
38.0,
38.0
],
"radius": 4.0
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 4.0,
"direction": "negative",
"operation": "join",
"name": "BossX",
"profiles": "all"
}
},
{
"command": "solid.chamfer",
"params": {
"edges": [
[
21.0,
4.0,
0.0
]
],
"distance": 1.0,
"name": "Root"
}
},
{
"command": "solid.chamfer",
"params": {
"edges": [
[
21.0,
4.0,
-4.0
],
[
38.0,
21.0,
-4.0
],
[
21.0,
38.0,
-4.0
],
[
4.0,
21.0,
-4.0
],
[
5.17157287525381,
5.17157287525381,
-4.0
],
[
36.82842712474619,
5.17157287525381,
-4.0
],
[
36.82842712474619,
36.82842712474619,
-4.0
],
[
5.17157287525381,
36.82842712474619,
-4.0
]
],
"distance": 0.8,
"name": "Tip"
}
},
{
"command": "solid.pattern.rectangular",
"params": {
"features": [
"BossX",
"Root",
"Tip"
],
"dir1": [
1,
0,
0
],
"count1": 2,
"spacing1": 42.0,
"dir2": [
0,
1,
0
],
"count2": 2,
"spacing2": 42.0
}
}
]
}
@@ -0,0 +1,11 @@
{
"sources": [
"tangency-labs/solidcraft#2708",
"tangency-labs/solidcraft#2739"
],
"what": "a curvature-continuous (G2) fillet of size 5 on a straight edge that ends on two slanted planar faces",
"source": "analytic",
"method": "prism over the polygon (0,0),(40,0),(30,20),(10,20), 20 tall: V0 = 600 * 20 = 12000. Fillet type curvature, size 5 on the top front edge (y=0, z=20, length 40): section is the quintic Bezier (control points at thirds of the setback s = 5 on each face, zero curvature at both contacts), area A = 3.73677 between the corner and the curve and first moment of y over it 3.52297. The end faces are the planes x = y/2 and x = 40 - y/2, so the strip at depth y is 40 - y long: removed = 40 A - int y dA = 145.9479. V = 12000 - removed = 11854.0521.",
"body_count": 1,
"volume_mm3": 11854.052069321415
}
@@ -0,0 +1,58 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
0,
0
],
[
40,
0
],
[
30,
20
],
[
10,
20
]
],
"closed": true
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 20
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
0,
20
]
],
"radius": 5,
"type": "curvature"
}
}
]
}
@@ -0,0 +1,10 @@
{
"sources": [
"tangency-labs/solidcraft#2811"
],
"what": "an R1.5 fillet of the 32 vertical root edges of 8 ribs between two walls of a grille tray (a performance case: the time must not blow up)",
"source": "analytic",
"method": "tray: plate 100x60x3, two walls 100x4 up to z=12 (so 9 above the plate), 8 ribs 1.2 thick x 52 long x 9 tall between the walls: V0 = 18000 + 2*100*4*9 + 8*1.2*52*9 = 29692.8. The 4N = 64 vertical concave edges where a rib side meets a wall (length 9) are rounded R1.5, each adding (1-pi/4) r^2 x 9; ribs are 5.6 apart, gaps 4.4 > 2 r, so the rounds never meet. V = V0 + 32 (1-pi/4) 2.25 * 9 = 29831.862.",
"body_count": 1,
"volume_mm3": 29831.861990118454
}
@@ -0,0 +1,366 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
0,
0,
0
],
"length": 100,
"width": 60,
"height": 3,
"body_name": "Tray"
}
},
{
"command": "solid.box",
"params": {
"corner": [
0,
0,
0
],
"length": 100,
"width": 4,
"height": 12,
"operation": "join",
"targets": [
"Tray"
]
}
},
{
"command": "solid.box",
"params": {
"corner": [
0,
56,
0
],
"length": 100,
"width": 4,
"height": 12,
"operation": "join",
"targets": [
"Tray"
]
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"offset": 3,
"name": "Ribs"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
8.0,
4
],
[
8.0,
56
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
13.6,
4
],
[
13.6,
56
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
19.2,
4
],
[
19.2,
56
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
24.799999999999997,
4
],
[
24.799999999999997,
56
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
30.4,
4
],
[
30.4,
56
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
36.0,
4
],
[
36.0,
56
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
41.599999999999994,
4
],
[
41.599999999999994,
56
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
47.199999999999996,
4
],
[
47.199999999999996,
56
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"thin": true,
"thickness": 1.2,
"side": "center",
"distance": 9,
"operation": "join",
"targets": [
"Tray"
],
"name": "Ribs"
}
},
{
"command": "solid.fillet",
"params": {
"radius": 1.5,
"edges": [
[
7.4,
4,
7.5
],
[
7.4,
56,
7.5
],
[
8.6,
4,
7.5
],
[
8.6,
56,
7.5
],
[
13.0,
4,
7.5
],
[
13.0,
56,
7.5
],
[
14.2,
4,
7.5
],
[
14.2,
56,
7.5
],
[
18.599999999999998,
4,
7.5
],
[
18.599999999999998,
56,
7.5
],
[
19.8,
4,
7.5
],
[
19.8,
56,
7.5
],
[
24.199999999999996,
4,
7.5
],
[
24.199999999999996,
56,
7.5
],
[
25.4,
4,
7.5
],
[
25.4,
56,
7.5
],
[
29.799999999999997,
4,
7.5
],
[
29.799999999999997,
56,
7.5
],
[
31.0,
4,
7.5
],
[
31.0,
56,
7.5
],
[
35.4,
4,
7.5
],
[
35.4,
56,
7.5
],
[
36.6,
4,
7.5
],
[
36.6,
56,
7.5
],
[
40.99999999999999,
4,
7.5
],
[
40.99999999999999,
56,
7.5
],
[
42.199999999999996,
4,
7.5
],
[
42.199999999999996,
56,
7.5
],
[
46.599999999999994,
4,
7.5
],
[
46.599999999999994,
56,
7.5
],
[
47.8,
4,
7.5
],
[
47.8,
56,
7.5
]
]
}
}
]
}
@@ -0,0 +1,11 @@
{
"sources": [
"tangency-labs/solidcraft#862"
],
"what": "a curvature-continuous (G2) fillet of size 6 on one edge of a 20 mm cube",
"source": "analytic",
"method": "type curvature: the section is the quintic Bezier with control points p+s t1, p+(2s/3) t1, p+(s/3) t1, p+(s/3) t2, p+(2s/3) t2, p+s t2 with setback s = radius = 6 (perpendicular faces), as documented for the feature (zero curvature where it meets the faces). The area between the corner and that curve, by Green on the Bezier polygon (200000 points), is 5.38095 mm^2; the edge is 20 long between two planar end faces square to it: V = 8000 - 20*5.38095 = 7892.3810. Faces: 6 + 1 = 7.",
"body_count": 1,
"volume_mm3": 7892.380952374643,
"faces": 7
}
@@ -0,0 +1,26 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 20,
"width": 20,
"height": 20
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
0,
10
]
],
"radius": 6,
"type": "curvature"
}
}
]
}