Kernel rig: constant rounds of the exact classes, and a tee's round

A plane cutting a cylinder or a cone at an angle, a sphere or a cone coaxial with the other face, a
cone and a cylinder touching one ball, two pipes touching at a point: their rounds' centre lines
are rational, so the rounds are rational surfaces of degrees fixed by the construction ((4, 2),
(2, 2) revolved, (6, 2), (12, 2)). The tee's centre line is not rational; its round is graded on
its volume. Volumes from the divergence theorem over the exact pieces, at rel 1e-6. The six that
SMLib 0cc48bd traces are listed in KNOWN_FAILING with what they come out as.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jyviko
2026-10-31 11:41:35 -04:00
committed by jyviko
parent 4401ffb1f9
commit 19014f38a0
17 changed files with 640 additions and 0 deletions
+6
View File
@@ -16,6 +16,12 @@
cov-chamfer-concave-edge-through-up-down-joined-squares SMLib status 1001 on the concave chamfer's tangent chain
cov-chamfer-outer-corner-edge-of-a-shelled-box-with-a-lip SMLib's chamfer result is not a closed solid where it ends on the lip
cov-fillet-arc-edge-on-an-oblique-cut-of-a-bar SMLib's check refuses the round: internal coincident control points in a B-spline curve
cov-fillet-exact-cone-cylinder-sharing-a-ball-r1 the round is traced: two B-spline faces of degrees (3, 3), not one rational face of degrees (6, 2)
cov-fillet-exact-cylinders-touching-at-a-point-r1 the round is traced: four B-spline faces of degrees (3, 3), not one rational face of degrees (12, 2)
cov-fillet-exact-oblique-plane-cone-rim-r1-5 the round is traced: two B-spline faces of degrees (3, 3), not one rational face of degrees (4, 2)
cov-fillet-exact-oblique-plane-cylinder-rim-r2 the round is traced: two B-spline faces of degrees (3, 3), not one rational face of degrees (4, 2); volume 1.2e-6 short
cov-fillet-exact-sphere-coaxial-cone-r3 the round is traced (no sphere is taken as analytic): a B-spline of degrees (3, 3), not the revolved arc's (2, 2); volume 1.1e-6 over
cov-fillet-exact-sphere-plane-rim-r2 the round is traced (no sphere is taken as analytic): a B-spline of degrees (3, 3), not the revolved arc's (2, 2); volume 1.9e-6 short
cov-fillet-g2-corner-beside-a-cylinder not supported yet: the curvature fillet builds its sections only between planar faces ("a picked edge is not on the face beside it" on the cylinder's arc)
cov-fillet-g2-five-edge-apex-corner refused: the default setback is shorter than where the rounds' contact lines meet (3.5056 mm from the apex); the corner should take a setback that works
cov-fillet-g2-four-edge-apex-corner refused: the default setback is shorter than where the rounds' contact lines meet (3.9027 mm from the apex); the corner should take a setback that works
@@ -0,0 +1,27 @@
{
"sources": [],
"what": "two coaxial frusta joined, R10 to 6 over z 0..8 and R6 to 1 over z 8..9: the convex circle between their cones rounded r2",
"source": "analytic",
"method": "both cones turn about z: the ball's centre runs on a circle about z, so the round is the ball's arc turned about z: rational, of degrees (2, 2). V0 = the frusta, pi h (R^2 + R r + r^2) / 3; the round removes 2 pi times the first moment about z of its section (the ball R2 tangent to both profile lines): 5.065333649310.",
"body_count": 1,
"volume_mm3": 1681.969921328409,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"cone",
"plane"
],
"splines": [
{
"degree": [
2,
2
]
}
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,49 @@
{
"commands": [
{
"command": "solid.cone",
"params": {
"radius": 10,
"height": 8,
"top_radius": 6,
"base": [
0,
0,
0
],
"operation": "new",
"body_name": "Top"
}
},
{
"command": "solid.cone",
"params": {
"radius": 6,
"height": 1,
"top_radius": 1,
"base": [
0,
0,
8
],
"operation": "join",
"targets": [
"Top"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
0,
6,
8
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,28 @@
{
"sources": [],
"what": "a cone (apex (0, 0, 10 sqrt 2), half-angle 45 deg) and a post R10 tilted 20 deg through the origin, both touching the ball R10 about the origin along circles that do not meet, joined: the concave edge where the cone leaves the post rounded r1",
"source": "analytic",
"method": "the offsets by 1 (the post R11, the cone with its apex sqrt 2 higher) both touch the ball R11 about the origin, so they meet in two plane conics (the cone and the post are each the ball's sphere less a multiple of the square of their contact circle's plane, and their difference is two planes); the spine is the conic round the post, and the round, between contact lines that are rational on both quadrics, is a rational B-spline of degrees (6, 2). V0 = the cone and the post less their overlap, about the cone's apex (where the cone gives no flux): the post's wall below the edge and its bottom cap: 21763.823377543333; the round adds 1.884007899126, (1/3) of the flux of the position through the boundary of the material the round adds: the round's surface as the ball's circles about the spine from contact to contact, the strips of the faces between the edge and the contact lines, each written out exactly and integrated by Gauss-Legendre quadrature (24 points a panel), about the apex.",
"body_count": 1,
"volume_mm3": 21765.70738544246,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"cone",
"cylinder",
"plane"
],
"splines": [
{
"degree": [
6,
2
]
}
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,53 @@
{
"commands": [
{
"command": "solid.cone",
"params": {
"radius": 24.14213562373095,
"height": 24.14213562373095,
"top_radius": 0,
"base": [
0,
0,
-10
],
"operation": "new",
"body_name": "Hill"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 10,
"height": 30,
"base": [
0,
0,
0
],
"axis": [
0.3420201433256687,
0,
0.9396926207859084
],
"operation": "join",
"targets": [
"Hill"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
1.46857451100787,
10,
4.034875307780737
]
],
"radius": 1
}
}
]
}
@@ -0,0 +1,27 @@
{
"sources": [],
"what": "two pipes touching at one point (R10 about y = 0, z = -10 and R5 about x = 0, z = -5, both touching z = 0 at the origin from below), joined and cut at z = -2: the concave arc of their edge on the +y side, from (4, 6, -2) down through (0, 10, -10) to (-4, 6, -2), rounded r1",
"source": "analytic",
"method": "the offsets by 1 (R11 and R6) touch at (0, 0, 1) as the pipes do at the origin, so they meet in a quartic with a node there, which is rational (the lines through the node meet it once more); the round is a rational B-spline of degrees (12, 2). V0 = the two cut pipes less their overlap, integral of 4 sqrt(25 - (z+5)^2) sqrt(100 - (z+10)^2) over z in [-10, -2]: 13437.742049099792; the round adds 4.961081486747, (1/3) of the flux of the position through the boundary of the material the round adds: the round's surface as the ball's circles about the spine from contact to contact, the strips of the faces between the edge and the contact lines, and its end pieces in the plane z = -2 (bounded by the round's section there), each written out exactly and integrated by Gauss-Legendre quadrature (24 points a panel).",
"body_count": 1,
"volume_mm3": 13442.703130586538,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"cylinder",
"plane"
],
"splines": [
{
"degree": [
12,
2
]
}
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,71 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 10,
"height": 40,
"base": [
-20,
0,
-10
],
"axis": "X",
"operation": "new",
"body_name": "Pipes"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 5,
"height": 40,
"base": [
0,
-20,
-5
],
"axis": "Y",
"operation": "join",
"targets": [
"Pipes"
]
}
},
{
"command": "solid.box",
"params": {
"length": 100,
"width": 100,
"height": 50,
"corner": [
-50,
-50,
-2
],
"operation": "cut",
"targets": [
"Pipes"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
4.207354924039483,
9.732263392975257,
-7.701511529340699
],
[
-4.207354924039483,
9.732263392975257,
-7.701511529340699
]
],
"radius": 1
}
}
]
}
@@ -0,0 +1,27 @@
{
"sources": [],
"what": "a frustum R10 narrowing at 10 deg, cut by the plane z = 15 + 0.3 x: its elliptical top rim rounded r1.5",
"source": "analytic",
"method": "the ball's centre runs on the cone moved 1.5 in (its apex 1.5 / sin 10 deg lower) and on the plane moved 1.5 down: a plane section of a cone, an ellipse (rho = K / (1 + 0.3 tan 10 deg cos phi) about the axis), so the round is a rational B-spline of degrees (4, 2). V0 = 3565.939077141579 (the bottom disc gives no flux about the origin, the cone X.n = 10 sin 10 deg / tan 10 deg over its area, the top X.n = 15 / sqrt 1.09 over its area); the round removes 16.021667699147, (1/3) of the flux of the position through the boundary of the material the round removes: the round's surface as the ball's circles about the spine from contact to contact, the strips of the faces between the edge and the contact lines, each written out exactly and integrated by Gauss-Legendre quadrature (24 points a panel).",
"body_count": 1,
"volume_mm3": 3549.917409442432,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"cone",
"plane"
],
"splines": [
{
"degree": [
4,
2
]
}
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,53 @@
{
"commands": [
{
"command": "solid.cone",
"params": {
"radius": 10,
"height": 30,
"top_radius": 4.710190578746051,
"base": [
0,
0,
0
],
"operation": "new",
"body_name": "Post"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 100,
"height": 100,
"base": [
0,
0,
15
],
"axis": [
-0.2873478855663454,
0,
0.9578262852211513
],
"operation": "cut",
"targets": [
"Post"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
5.013316645912501,
5.013316645912501,
16.503994993773752
]
],
"radius": 1.5
}
}
]
}
@@ -0,0 +1,27 @@
{
"sources": [],
"what": "a cylinder R10 cut by the plane z = 20 + x/2: its elliptical top rim rounded r2",
"source": "analytic",
"method": "the ball's centre runs on the cylinder R8 and on the plane moved 2 down, so the spine is their ellipse; the contact lines are the ellipse moved along each face's normal, rational, and the round (the circles of the ball between them, rational quadratic arcs whose weights are rational in the ellipse's parameter) is a rational B-spline of degrees (4, 2). V0 = 2000 pi (the plane's tilt cancels round the axis); the round removes 68.775042921067, (1/3) of the flux of the position through the boundary of the material the round removes: the round's surface as the ball's circles about the spine from contact to contact, the strips of the faces between the edge and the contact lines, each written out exactly and integrated by Gauss-Legendre quadrature (24 points a panel).",
"body_count": 1,
"volume_mm3": 6214.41026425852,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"cylinder",
"plane"
],
"splines": [
{
"degree": [
4,
2
]
}
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,52 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 10,
"height": 40,
"base": [
0,
0,
0
],
"operation": "new",
"body_name": "Post"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 100,
"height": 100,
"base": [
0,
0,
20
],
"axis": [
-0.4472135954999579,
0,
0.8944271909999159
],
"operation": "cut",
"targets": [
"Post"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
7.0710678118654755,
7.0710678118654755,
23.535533905932738
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,28 @@
{
"sources": [],
"what": "a ball R10 and a frustum about z through its centre (R5 at z = 0 to R3 at z = 20) joined: the concave circle where the cone leaves the ball rounded r3",
"source": "analytic",
"method": "the ball's centre (outside both) runs on the sphere R13 and on the cone moved 3 out, both about z: a circle, so the round is the ball's arc turned about z: rational, of degrees (2, 2). V0 = the ball and the frustum less their overlap (the frustum below the edge at z = 9.1265, the ball's cap above it): 4597.853510151037; the round adds 2 pi times the first moment of its section: 9.688315962175.",
"body_count": 1,
"volume_mm3": 4607.541826113212,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"cone",
"plane",
"sphere"
],
"splines": [
{
"degree": [
2,
2
]
}
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,47 @@
{
"commands": [
{
"command": "solid.sphere",
"params": {
"radius": 10,
"center": [
0,
0,
0
],
"operation": "new",
"body_name": "Ball"
}
},
{
"command": "solid.cone",
"params": {
"radius": 5,
"height": 20,
"top_radius": 3,
"base": [
0,
0,
0
],
"operation": "join",
"targets": [
"Ball"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
0,
4.087346743853332,
9.12653256146668
]
],
"radius": 3
}
}
]
}
@@ -0,0 +1,27 @@
{
"sources": [],
"what": "a ball R10 cut flat at z = 4: its rim rounded r2",
"source": "analytic",
"method": "the ball's centre runs on the sphere R8 and the plane z = 2: the circle of radius sqrt 60 about z, so the round is the ball's arc turned about z, a rational B-spline of degrees (2, 2). V0 = 4000 pi / 3 - 288 pi; the round removes 2 pi times the first moment about z of its section (Pappus), from contact (sqrt 60, 4) on the plane to (1.25 sqrt 60, 2.5) on the sphere: 22.492758031524.",
"body_count": 1,
"volume_mm3": 3261.518762521006,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"plane",
"sphere"
],
"splines": [
{
"degree": [
2,
2
]
}
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,51 @@
{
"commands": [
{
"command": "solid.sphere",
"params": {
"radius": 10,
"center": [
0,
0,
0
],
"operation": "new",
"body_name": "Ball"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 100,
"height": 100,
"base": [
0,
0,
4
],
"axis": [
0,
0,
1
],
"operation": "cut",
"targets": [
"Ball"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
0,
9.16515138991168,
4
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,19 @@
{
"sources": [],
"what": "the saddle edge of a tee: a branch R8 standing on a pipe R20, rounded r3",
"source": "analytic",
"method": "the ball's centre runs where the cylinders R23 and R11 meet, a quartic with no node: not rational, so the round is fitted (a B-spline within the fillet's tolerance). V0 = the pipes less the branch inside the pipe, integral over the branch's disc of sqrt(400 - y^2): 129767.064584659383; the round adds 62.888321009560, (1/3) of the flux of the position through the boundary of the material the round adds: the round's surface as the ball's circles about the spine from contact to contact, the strips of the faces between the edge and the contact lines, each written out exactly and integrated by Gauss-Legendre quadrature (24 points a panel), the spine written out by the branch's angle, (11 cos f, 11 sin f, sqrt(529 - 121 sin^2 f)).",
"body_count": 1,
"volume_mm3": 129829.95290566895,
"tolerance": {
"rel": 1e-06
},
"surface_types": [
"bspline",
"cylinder",
"plane"
],
"continuity": {
"order": "g1"
}
}
@@ -0,0 +1,48 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 20,
"height": 100,
"base": [
-50,
0,
0
],
"axis": "X",
"operation": "new",
"body_name": "Tee"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 8,
"height": 40,
"base": [
0,
0,
0
],
"operation": "join",
"targets": [
"Tee"
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
5.656854249492381,
5.656854249492381,
19.183326093250876
]
],
"radius": 3
}
}
]
}