Rig: fillet corners graded curvature-continuous, the default to be

Six fillet cases that pick their edges with no type, so they take the fillet's default, which the
owner has ruled is to be curvature-continuous (G2) at every corner, with circular rounds kept as
an option. Each grades every seam of the rounds and of the corner patch G2, on one valid body:

- an oblique convex corner (a block drafted 15 deg);
- a four-edge and a five-edge apex corner (pyramids lofted to a point);
- a pocket's concave corner;
- a mixed corner (a step: one concave edge, two convex);
- a corner beside a cylinder (the top corner of a half cylinder).

All six fail on SMLib 2fc375f, listed in KNOWN_FAILING: today's default is the circular round,
whose seams jump in curvature by 1/r. On the five-edge apex the corner patch also meets two
rounds at 8.45 degrees (G0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jyviko
2026-10-31 07:56:58 -04:00
committed by jyviko
parent 2273379056
commit a3165f62d2
13 changed files with 680 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-g2-default-corner-beside-a-cylinder the default fillet is the circular (G1) round, not yet the curvature-continuous one: its seams with the faces jump in curvature by 1/r (0.5 / mm)
cov-fillet-g2-default-five-edge-apex-corner the default fillet is the circular (G1) round, not yet the curvature-continuous one: and the apex patch meets two rounds at 8.45 degrees (G0) near (0.708, 1.556, 26.824)
cov-fillet-g2-default-four-edge-apex-corner the default fillet is the circular (G1) round, not yet the curvature-continuous one: the apex patch meets the rounds G1 only (curvature jump 6.6 / mm)
cov-fillet-g2-default-mixed-corner the default fillet is the circular (G1) round, not yet the curvature-continuous one: its seams with the faces jump in curvature by 1/r (0.5 / mm)
cov-fillet-g2-default-oblique-three-edge-corner the default fillet is the circular (G1) round, not yet the curvature-continuous one: its seams jump in curvature by 1/r (0.5 / mm)
cov-fillet-g2-default-pocket-corner the default fillet is the circular (G1) round, not yet the curvature-continuous one: its seams jump in curvature by 1/r (0.5 / mm)
every-block-cylinder-crease-top-edge-after-arc-round-r1 the r1 round's contact seam with the block's side face reads 60 degrees (the cylinder wall's normal) at its end on the crease (8.660, 5, 15.284): G0 where the round is built tangent
every-hole-top-rim-r12-past-plate-bottom SMLib status 1001: a convex round past its face on the tangent side is not yet built by subtraction
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
@@ -0,0 +1,9 @@
{
"what": "the corner of a half cylinder's top (the top's arc, its straight edge and the upright seam where the flat face meets the cylinder) filleted 2 with the default type",
"source": "invariants",
"method": "a half disc R10 (the arc from (10, 0) round to (-10, 0) and its diameter) extruded 10; the three edges at (10, 0, 10); the fillet's default section and corner are curvature-continuous (owner, 2026-10-31: G2 by default, tangent rounds an option): every seam of a round and of the corner patch with its neighbours G2, one valid body",
"body_count": 1,
"continuity": {
"order": "g2"
}
}
@@ -0,0 +1,77 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Half"
}
},
{
"command": "sketch.arc.center_point",
"params": {
"center": [
0,
0
],
"start": [
10,
0
],
"end": [
-10,
0
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
-10,
0
],
[
10,
0
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Half",
"distance": 10
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
7.0710678118654755,
7.0710678118654755,
10
],
[
0,
0,
10
],
[
10,
0,
5
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,9 @@
{
"what": "the 5 slant edges of a 5-sided pyramid filleted 2 with the default type: a convex corner of 5 edges at the apex",
"source": "invariants",
"method": "a regular 5-gon of circumradius 20 lofted to the apex (0, 0, 30); its 5 slant edges; the fillet's default section and corner are curvature-continuous (owner, 2026-10-31: G2 by default, tangent rounds an option): every seam of a round and of the corner patch with its neighbours G2, one valid body",
"body_count": 1,
"continuity": {
"order": "g2"
}
}
@@ -0,0 +1,174 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Base"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
1.2246467991473533e-15,
20.0
],
[
-19.02113032590307,
6.18033988749895
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
-19.02113032590307,
6.18033988749895
],
[
-11.755705045849465,
-16.180339887498945
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
-11.755705045849465,
-16.180339887498945
],
[
11.755705045849458,
-16.180339887498953
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
11.755705045849458,
-16.180339887498953
],
[
19.021130325903073,
6.180339887498944
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
19.021130325903073,
6.180339887498944
],
[
1.2246467991473533e-15,
20.0
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "sketch.create",
"params": {
"plane": {
"origin": [
0,
0,
30
],
"x_dir": [
1,
0,
0
],
"y_dir": [
0,
1,
0
]
},
"name": "Top"
}
},
{
"command": "sketch.point",
"params": {
"point": [
0,
0
],
"id": "apex"
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.loft",
"params": {
"sections": [
{
"sketch": "Base"
},
{
"sketch": "Top",
"point": "apex"
}
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
6.123233995736766e-16,
10.0,
15.0
],
[
-9.510565162951535,
3.090169943749475,
15.0
],
[
-5.877852522924733,
-8.090169943749473,
15.0
],
[
5.877852522924729,
-8.090169943749476,
15.0
],
[
9.510565162951536,
3.090169943749472,
15.0
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,9 @@
{
"what": "the 4 slant edges of a 4-sided pyramid filleted 2 with the default type: a convex corner of 4 edges at the apex",
"source": "invariants",
"method": "a regular 4-gon of circumradius 20 lofted to the apex (0, 0, 30); its 4 slant edges; the fillet's default section and corner are curvature-continuous (owner, 2026-10-31: G2 by default, tangent rounds an option): every seam of a round and of the corner patch with its neighbours G2, one valid body",
"body_count": 1,
"continuity": {
"order": "g2"
}
}
@@ -0,0 +1,154 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Base"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
1.2246467991473533e-15,
20.0
],
[
-20.0,
2.4492935982947065e-15
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
-20.0,
2.4492935982947065e-15
],
[
-3.673940397442059e-15,
-20.0
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
-3.673940397442059e-15,
-20.0
],
[
20.0,
-4.898587196589413e-15
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
20.0,
-4.898587196589413e-15
],
[
1.2246467991473533e-15,
20.0
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "sketch.create",
"params": {
"plane": {
"origin": [
0,
0,
30
],
"x_dir": [
1,
0,
0
],
"y_dir": [
0,
1,
0
]
},
"name": "Top"
}
},
{
"command": "sketch.point",
"params": {
"point": [
0,
0
],
"id": "apex"
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.loft",
"params": {
"sections": [
{
"sketch": "Base"
},
{
"sketch": "Top",
"point": "apex"
}
]
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
6.123233995736766e-16,
10.0,
15.0
],
[
-10.0,
1.2246467991473533e-15,
15.0
],
[
-1.8369701987210296e-15,
-10.0,
15.0
],
[
10.0,
-2.4492935982947065e-15,
15.0
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,9 @@
{
"what": "a step's corner (the concave step edge, the lower box's convex front top edge, the upper box's convex upright edge) filleted 2 with the default type",
"source": "invariants",
"method": "a 30 x 20 x 10 box with a 15 x 20 x 10 box joined on its top at x 0..15; the three edges at (15, 0, 10); the fillet's default section and corner are curvature-continuous (owner, 2026-10-31: G2 by default, tangent rounds an option): every seam of a round and of the corner patch with its neighbours G2, one valid body",
"body_count": 1,
"continuity": {
"order": "g2"
}
}
@@ -0,0 +1,55 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
0,
0,
0
],
"length": 30,
"width": 20,
"height": 10,
"body_name": "Step"
}
},
{
"command": "solid.box",
"params": {
"corner": [
0,
0,
10
],
"length": 15,
"width": 20,
"height": 10,
"operation": "join"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
15,
10,
10
],
[
22.5,
0,
10
],
[
15,
0,
15
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,9 @@
{
"what": "the three edges at a top corner of a block drafted 15 deg (an oblique convex corner) filleted 2 with the default type",
"source": "invariants",
"method": "a 30 x 20 rectangle extruded 10 with a 15 deg inward taper; the top front edge, the top left edge and the drafted edge between them at the corner near (0, 0, 10); the fillet's default section and corner are curvature-continuous (owner, 2026-10-31: G2 by default, tangent rounds an option): every seam of a round and of the corner patch with its neighbours G2, one valid body",
"body_count": 1,
"continuity": {
"order": "g2"
}
}
@@ -0,0 +1,106 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Base"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
0,
0
],
[
30,
0
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
30,
0
],
[
30,
20
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
30,
20
],
[
0,
20
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
0,
20
],
[
0,
0
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Base",
"distance": 10,
"taper": "-15 deg"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
15,
2.679491924311227,
10
],
[
2.679491924311227,
10,
10
],
[
1.3397459621556136,
1.3397459621556136,
5
]
],
"radius": 2
}
}
]
}
@@ -0,0 +1,9 @@
{
"what": "a pocket's corner (its two floor edges and the upright edge between them, all concave) filleted 2 with the default type",
"source": "invariants",
"method": "a 60 x 40 x 10 plate less a 30 x 20 pocket 5 deep from (15, 10); the floor edges and the upright edge at (15, 10); the fillet's default section and corner are curvature-continuous (owner, 2026-10-31: G2 by default, tangent rounds an option): every seam of a round and of the corner patch with its neighbours G2, one valid body",
"body_count": 1,
"continuity": {
"order": "g2"
}
}
@@ -0,0 +1,54 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
0,
0,
0
],
"length": 60,
"width": 40,
"height": 10
}
},
{
"command": "solid.box",
"params": {
"corner": [
15,
10,
5
],
"length": 30,
"width": 20,
"height": 6,
"operation": "cut"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
30,
10,
5
],
[
15,
20,
5
],
[
15,
10,
7.5
]
],
"radius": 2
}
}
]
}