mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-03 10:35:58 +00:00
Kernel rig: fillets keeps one case per regime; 17 replications of a case in the same regime go
The sloped-basin chamfers and rounds at 0.5 mm rims repeat the 1 mm rim's regimes; two of the three knife-edge chamfer tips, the r1 and box r3 curvature corners, the r1 tangent corner, the 1 mm pocket-rim and hole-rim chamfers short of the floor and the r1 together-round each repeat a kept case's regime and grades. #854 moves to 851-chamfer-arc-top-edge-9-5, and the cases that cited a dropped one cite the kept one or state its formula. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1080"
|
||||
],
|
||||
"what": "the 0.5 mm front rim of a sloped basin's top chamfered 4: its leg on the top runs off the rim over the slab's front face (a cliff), so it builds as if the top went on and is cut by the front face, which it lowers to z = 28.524233 where it crosses it",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 0.5)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 144266.666667. The chamfer's triangle in (y, z): the edge (0.5, 30), its leg on the top to (-3.5, 30), past the front face y = 0, and d down the wall to (0.5 + d (20-0.5)/L, 30 - 20 d/L), L = sqrt((20-0.5)^2 + 400), built as if the top went on and cut by the front face (the owner's ruling of 2026-10-30 (d7): a chamfer that reaches or runs past a rim builds): the triangle clipped to y >= 0, the quadrilateral (0.5, 30), (0, 30), (0, 28.524233), (3.292401, 27.135999). At height z the blend runs between the sloped end walls x = 20 + (30-z)/2 and 80 - (30-z)/2 extended, which cut it: its length there is 30 + z, so it takes Int Int (30 + z) dy dz over its section (y, z). Removed (shoelace for the area and its first moment) 184.526613. V = 144082.140054",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 144082.14005363008,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
}
|
||||
}
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
0.5
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
0.5,
|
||||
30
|
||||
]
|
||||
],
|
||||
"distance": 4
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1080"
|
||||
],
|
||||
"what": "the 0.5 mm front rim of a sloped basin's top chamfered 0.5, as wide as the rim: its leg on the top ends on the slab's front edge, using the rim's top up, and it builds",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 0.5)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 144266.666667. The chamfer's triangle in (y, z): the edge (0.5, 30), its leg on the top to (0, 30), the slab's front edge, and d down the wall to (0.5 + d (20-0.5)/L, 30 - 20 d/L), L = sqrt((20-0.5)^2 + 400) (the owner's ruling of 2026-10-30 (d7): a chamfer that reaches or runs past a rim builds). At height z the blend runs between the sloped end walls x = 20 + (30-z)/2 and 80 - (30-z)/2 extended, which cut it: its length there is 30 + z, so it takes Int Int (30 + z) dy dz over its section (y, z). Removed (shoelace for the area and its first moment) 5.359321. V = 144261.307346",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 144261.307345957,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
}
|
||||
}
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
0.5
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
0.5,
|
||||
30
|
||||
]
|
||||
],
|
||||
"distance": 0.5
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1080"
|
||||
],
|
||||
"what": "the 0.5 mm front rim of a sloped basin's top chamfered 0.25, half the rim's width: it fits",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 0.5)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 144266.666667. The chamfer's triangle in (y, z): the edge (0.5, 30), its leg on the top to (0.25, 30) and d down the wall to (0.5 + d (20-0.5)/L, 30 - 20 d/L), L = sqrt((20-0.5)^2 + 400). At height z the blend runs between the sloped end walls x = 20 + (30-z)/2 and 80 - (30-z)/2 extended, which cut it: its length there is 30 + z, so it takes Int Int (30 + z) dy dz over its section (y, z). Removed (shoelace for the area and its first moment) 1.341165. V = 144265.325501",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 144265.32550144705,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
}
|
||||
}
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
0.5
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
0.5,
|
||||
30
|
||||
]
|
||||
],
|
||||
"distance": 0.25
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1080"
|
||||
],
|
||||
"what": "the 1 mm front rim of a sloped basin's top chamfered 3: its leg on the top runs off the rim over the slab's front face (a cliff), so it builds as if the top went on and is cut by the front face, which it lowers to z = 29.141377 where it crosses it",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 1)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 144533.333333. The chamfer's triangle in (y, z): the edge (1, 30), its leg on the top to (-2, 30), past the front face y = 0, and d down the wall to (1 + d (20-1)/L, 30 - 20 d/L), L = sqrt((20-1)^2 + 400), built as if the top went on and cut by the front face (the owner's ruling of 2026-10-30 (d7): a chamfer that reaches or runs past a rim builds): the triangle clipped to y >= 0, the quadrilateral (1, 30), (0, 30), (0, 29.141377), (3.066248, 27.825002). At height z the blend runs between the sloped end walls x = 20 + (30-z)/2 and 80 - (30-z)/2 extended, which cut it: its length there is 30 + z, so it takes Int Int (30 + z) dy dz over its section (y, z). Removed (shoelace for the area and its first moment) 142.112912. V = 144391.220421",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 144391.22042136008,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
}
|
||||
}
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
1
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
1,
|
||||
30
|
||||
]
|
||||
],
|
||||
"distance": 3
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1080"
|
||||
],
|
||||
"what": "the 0.5 mm front rim of a sloped basin's top rounded R0.25: it fits on the rim",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 0.5)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 144266.666667. The wall leans (20-0.5) out over 20 down: the faces meet at 134.2748 deg, so the round's contacts lie r cot(t/2) = 0.105412 from the edge, on the top at y = 0.394588 and down the wall, its centre under the top contact at z = 30 - r. At height z the blend runs between the sloped end walls x = 20 + (30-z)/2 and 80 - (30-z)/2 extended, which cut it: its length there is 30 + z, so it takes Int Int (30 + z) dy dz over its section (y, z). Removed 0.084803. V = 144266.581864",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 144266.58186392413,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
0.5
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
0.5,
|
||||
30
|
||||
]
|
||||
],
|
||||
"radius": 0.25
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1080"
|
||||
],
|
||||
"what": "all four of the top rim edges of a sloped basin with a 0.5 mm front rim rounded R4, mitred at the rim's corners: past the thin rim the front round runs over the slab's front face and is cut from the slab",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 0.5)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 144266.666667. Each blend's section at height z spans from its wall to its arc (or chamfer line), the front one not past y = 0, the slab's face; its edge runs between its neighbours' walls (the sloped end walls extended), so it takes Int width(z) length(z) dz. At a re-entrant corner of two picked edges the blends meet in a mitre (the owner's ruling of 2026-10-30): each runs on past the corner and the quadrant beyond both walls loses what both take, Int width_1(z) width_2(z) dz. Removed 182.348561. V = 144084.318105",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 144084.31810540144,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
-105
@@ -1,105 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
0.5
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
0.5,
|
||||
30
|
||||
],
|
||||
[
|
||||
80,
|
||||
27,
|
||||
30
|
||||
],
|
||||
[
|
||||
50,
|
||||
50,
|
||||
30
|
||||
],
|
||||
[
|
||||
20,
|
||||
27,
|
||||
30
|
||||
]
|
||||
],
|
||||
"radius": 4
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1080"
|
||||
],
|
||||
"what": "the 0.5 mm front rim of a sloped basin's top rounded R4: the round runs over the rim's top past the slab's front face (a cliff) and is cut from the slab",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 0.5)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 144266.666667. The wall leans (20-0.5) out over 20 down: the faces meet at 134.2748 deg, so the round's contacts lie r cot(t/2) = 1.686591 from the edge, on the top at y = -1.186591 and down the wall, its centre under the top contact at z = 30 - r. The round is built as if the top went on past y = 0 and cut from the slab (a round past a face on its tangent side builds: the owner's ruling of 2026-10-30), so its section counts only at y >= 0. At height z the blend runs between the sloped end walls x = 20 + (30-z)/2 and 80 - (30-z)/2 extended, which cut it: its length there is 30 + z, so it takes Int Int (30 + z) dy dz over its section (y, z). Removed 17.395317. V = 144249.271350",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 144249.27134953788,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
0.5
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
0.5,
|
||||
30
|
||||
]
|
||||
],
|
||||
"radius": 4
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1207"
|
||||
],
|
||||
"what": "the bar's top edge and the partial base arc of a boss standing out over the bar's side, rounded r1 together: the corner patch where they meet must join the bar's round at least G1 (today a 13.1° crease)",
|
||||
"source": "analytic",
|
||||
"method": "bar 100x30x10 (y -15..15) joined with a diameter 40 boss 20 tall at the origin, standing out over both sides (V0 = 49756.1794, as 1207-fillet-concave-arc-at-boss). The bar's front top edge (y=-15, z=10) and the boss's base arc over the bar (its two edges, split at the cylinder's seam: the tangent chain) rounded r1 together meet at (13.229, -15, 10), where the third edge, the boss's line on the front face, is concave and runs down. Away from that corner the body is V0 plus the arc round's spandrel strip ending on y=+-15 (integral over rho of [r - sqrt(r^2-(20+r-rho)^2)] rho 2 asin(15/rho) = 7.2537, Simpson) less the front round's spandrel out to the boss wall (integral over y of [r - sqrt(r^2-(y+15-r)^2)] (100 - sqrt(400-y^2)) = 18.5684); the corner patch lies within the cube of side 2r about the vertex, so V is graded as V0 + add - removed with (2r)^3 as its tolerance",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 49744.864673399745,
|
||||
"tolerance": {
|
||||
"rel": 0.00016082062043035108
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
-52
@@ -1,52 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 30,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-15,
|
||||
0
|
||||
],
|
||||
"body_name": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"diameter": 40,
|
||||
"height": 20,
|
||||
"base": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Arm"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
60,
|
||||
-15,
|
||||
10
|
||||
],
|
||||
[
|
||||
16,
|
||||
12,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#5835"
|
||||
],
|
||||
"what": "all four of the top rim edges of a sloped basin whose walls slope unequally, its front rim 4 mm wide, chamfered 2: the chamfers meet in mitres at the rim's corners",
|
||||
"source": "analytic",
|
||||
"method": "slab 100 x 60 x 30 less the loft from the rectangle (20, 4)-(80, 50) at z = 30 to (30, 20)-(70, 40) at z = 10 (planar walls, a prismatoid: 20/6 (A_top + A_bottom + 4 A_mid)): V0 = 146133.333333. Each blend's section at height z spans from its wall to its arc (or chamfer line), inside its rim; its edge runs between its neighbours' walls (the sloped end walls extended), so it takes Int width(z) length(z) dz. At a re-entrant corner of two picked edges the blends meet in a mitre (the owner's ruling of 2026-10-30): each runs on past the corner and the quadrant beyond both walls loses what both take, Int width_1(z) width_2(z) dz. Removed 370.156402. V = 145763.176931",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 145763.17693088384,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
100,
|
||||
60,
|
||||
30
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"rel": 1e-06
|
||||
}
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 100,
|
||||
"width": 60,
|
||||
"height": 30,
|
||||
"body_name": "Slab"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 30,
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
20,
|
||||
4
|
||||
],
|
||||
"p1": [
|
||||
80,
|
||||
50
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 10,
|
||||
"name": "Bottom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
30,
|
||||
20
|
||||
],
|
||||
"p1": [
|
||||
70,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.loft",
|
||||
"params": {
|
||||
"sections": [
|
||||
{
|
||||
"sketch": "Top"
|
||||
},
|
||||
{
|
||||
"sketch": "Bottom"
|
||||
}
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
50,
|
||||
4,
|
||||
30
|
||||
],
|
||||
[
|
||||
80,
|
||||
27,
|
||||
30
|
||||
],
|
||||
[
|
||||
50,
|
||||
50,
|
||||
30
|
||||
],
|
||||
[
|
||||
20,
|
||||
27,
|
||||
30
|
||||
]
|
||||
],
|
||||
"distance": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#851",
|
||||
"tangency-labs/solidcraft#854"
|
||||
],
|
||||
"what": "on #851's knife-edge part (tessellation/1263): the arc's top edge chamfered 2",
|
||||
"source": "invariants",
|
||||
"method": "a 2 mm chamfer fits on these edges (the arc's chamfer is a cone cut by the back face where the arc runs into it); one closed valid solid whose display mesh closes is the right answer",
|
||||
"body_count": 1,
|
||||
"watertight": true
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 41.166666666666664,
|
||||
"width": 21,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Plate"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 21,
|
||||
"width": 21,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
41.166666666666664,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Corner"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 21,
|
||||
"height": 10,
|
||||
"base": [
|
||||
62.166666666666664,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Round"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Corner",
|
||||
"tools": [
|
||||
"Round"
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Plate",
|
||||
"tools": [
|
||||
"Corner"
|
||||
],
|
||||
"operation": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
47.31742426174917,
|
||||
-6.150757595082503,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 2,
|
||||
"tangent_chain": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#851",
|
||||
"tangency-labs/solidcraft#1113"
|
||||
"tangency-labs/solidcraft#1113",
|
||||
"tangency-labs/solidcraft#854"
|
||||
],
|
||||
"what": "the top edge of #851's concave R21 wall chamfered 9.5, just under its height",
|
||||
"source": "analytic",
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#851"
|
||||
],
|
||||
"what": "the knife edge where #851's concave R21 wall runs out tangent into the back face, chamfered 0.5: the plane through the contacts of the ball of radius 0.5",
|
||||
"source": "analytic",
|
||||
"method": "plate x 0..41.1667, y -21..0 and the corner x 41.1667..62.1667 less the cylinder r 21 about (62.1667, -21), 10 high (tessellation/1263): V0 = 10 (62.1667 x 21 - pi 21^2/4) = 9591.394099. The chamfer cuts along the chord between the contacts of the ball of radius d = 0.5 that fits there (as the R0.5 round's): on the back face at x = 62.1667 - sqrt(84 d), on the wall where the line from its axis to the ball's centre meets it. It takes the triangle plane contact, tip, wall contact less the wall's circular segment R^2/2 (b - sin b), b = acos((21-d)/(21+d)): 2.114982 mm^2, times 10. V = 9570.244281",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9570.244281078343,
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 41.166666666666664,
|
||||
"width": 21,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Plate"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 21,
|
||||
"width": 21,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
41.166666666666664,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Corner"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 21,
|
||||
"height": 10,
|
||||
"base": [
|
||||
62.166666666666664,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Round"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Corner",
|
||||
"tools": [
|
||||
"Round"
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Plate",
|
||||
"tools": [
|
||||
"Corner"
|
||||
],
|
||||
"operation": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
62.166666666666664,
|
||||
0,
|
||||
5
|
||||
]
|
||||
],
|
||||
"distance": 0.5,
|
||||
"tangent_chain": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#851"
|
||||
],
|
||||
"what": "the knife edge where #851's concave R21 wall runs out tangent into the back face, chamfered 2: the plane through the contacts of the ball of radius 2",
|
||||
"source": "analytic",
|
||||
"method": "plate x 0..41.1667, y -21..0 and the corner x 41.1667..62.1667 less the cylinder r 21 about (62.1667, -21), 10 high (tessellation/1263): V0 = 10 (62.1667 x 21 - pi 21^2/4) = 9591.394099. The chamfer cuts along the chord between the contacts of the ball of radius d = 2 that fits there (as the R2 round's): on the back face at x = 62.1667 - sqrt(84 d), on the wall where the line from its axis to the ball's centre meets it. It takes the triangle plane contact, tip, wall contact less the wall's circular segment R^2/2 (b - sin b), b = acos((21-d)/(21+d)): 15.923645 mm^2, times 10. V = 9432.157649",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9432.15764867435,
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 41.166666666666664,
|
||||
"width": 21,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Plate"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 21,
|
||||
"width": 21,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
41.166666666666664,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Corner"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 21,
|
||||
"height": 10,
|
||||
"base": [
|
||||
62.166666666666664,
|
||||
-21,
|
||||
0
|
||||
],
|
||||
"body_name": "Round"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Corner",
|
||||
"tools": [
|
||||
"Round"
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Plate",
|
||||
"tools": [
|
||||
"Corner"
|
||||
],
|
||||
"operation": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
62.166666666666664,
|
||||
0,
|
||||
5
|
||||
]
|
||||
],
|
||||
"distance": 2,
|
||||
"tangent_chain": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#9"
|
||||
],
|
||||
"what": "three r1 rounds at a box corner with the curvature (g2) corner at its default setback 1.5 r: the corner patch meets the rounds and faces G2 clear of the vertices where the seams turn",
|
||||
"source": "invariants",
|
||||
"method": "as ladder 07-fillets/015 at r1: the corner set back 1.5 and filled with one patch; no closed-form volume: one valid body, 6 faces + 3 rounds + the patch, within the box Graded as ladder 07/019, scaled by r: at a hole corner the round is only tangent (G1) to the plane, its curvature jumping by 1/r, so no patch is G2 to both there; the curvature jump is bounded at stations at least 0.24 mm (0.24 r) from each turn, within 2.2 mm of the corner, at most 0.005 per mm (0.5% of 1/r).",
|
||||
"body_count": 1,
|
||||
"faces": 10,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
60,
|
||||
40,
|
||||
20
|
||||
]
|
||||
},
|
||||
"continuity": {
|
||||
"near": [
|
||||
60,
|
||||
40,
|
||||
20
|
||||
],
|
||||
"within_mm": 2.2,
|
||||
"clear_mm": 0.24,
|
||||
"curvature_jump_per_mm": 0.005
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 60,
|
||||
"width": 40,
|
||||
"height": 20,
|
||||
"body_name": "Part"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
60,
|
||||
20,
|
||||
20
|
||||
],
|
||||
[
|
||||
30,
|
||||
40,
|
||||
20
|
||||
],
|
||||
[
|
||||
60,
|
||||
40,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 1,
|
||||
"corner": "g2",
|
||||
"tangent_chain": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -3,7 +3,6 @@
|
||||
# and on a listed case that passes: a fix removes its line in the same pull request.
|
||||
# Baseline: develop 242bbc89f with the SMLib fixes of 2026-10-29 (integration-overnight + b78bd4a), aarch64 Linux.
|
||||
1080-fillet-equal-slope-basin-1-mm-rim-loop-4 builds to the analytic volume (rel 5e-9), but the continuity check (g1 at every blend seam) takes in the mitre's creases, G0 by the mitre ruling: the case's continuity seams need the owner's word
|
||||
1080-fillet-sloped-basin-0-5-mm-rim-r4-4-edges builds to the analytic volume (rel 3e-9), but the continuity check (g1 at every blend seam) takes in the mitre's creases, G0 by the mitre ruling: the case's continuity seams need the owner's word
|
||||
1080-fillet-sloped-basin-1-mm-rim-r4-2-edges builds to the analytic volume (rel 6e-9), but the continuity check (g1 at every blend seam) takes in the mitre's creases, G0 by the mitre ruling: the case's continuity seams need the owner's word
|
||||
1080-fillet-sloped-basin-1-mm-rim-r4-4-edges builds to the analytic volume (rel 3e-9), but the continuity check (g1 at every blend seam) takes in the mitre's creases, G0 by the mitre ruling: the case's continuity seams need the owner's word
|
||||
1207-fillet-bar-top-edge-after-boss-arc-round-r0-5 SMLib's check refuses the round: internal coincident control points in its end rib on the boss, which starts where the round and the boss are tangent (the boss's intersection marched there in spans down to 6e-8 mm)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the three edges at one corner of a box rounded r1 together, rolling-ball (Tangent) corner: three quarter-cylinder rounds and a sphere octant",
|
||||
"source": "analytic",
|
||||
"method": "box 40x30x20, the edges at (40,30,20) (lengths 40, 30, 20) rounded r1. Each round removes the spandrel A = (1-pi/4) r^2 = 0.214602 along its edge outside the corner cube [40-r,40]x[30-r,30]x[20-r,20] (lengths 40-r, 30-r, 20-r: A (90-3r)); inside the corner cube what is left is the octant of the ball of radius r about (40-r,30-r,20-r), pi r^3/6, so the cube loses r^3 (1-pi/6). V = 24000 - A (90-3r) - r^3 (1-pi/6) = 24000 - 19.1468 = 23980.8532. Faces 6 + 3 rounds + the sphere octant = 10; every blend seam tangent (G1).",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 23980.853238991178,
|
||||
"faces": 10,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
40,
|
||||
30,
|
||||
20
|
||||
]
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 30,
|
||||
"height": 20,
|
||||
"body_name": "Part"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
30,
|
||||
20
|
||||
],
|
||||
[
|
||||
40,
|
||||
15,
|
||||
20
|
||||
],
|
||||
[
|
||||
40,
|
||||
30,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the three edges at one box corner rounded r3 with Corners: Curvature at its default setback (1.5 r = 4.5): the corner patch meets the rounds and faces G2",
|
||||
"source": "invariants",
|
||||
"method": "box 40x30x20, the edges at (40,30,20) rounded r3, corner g2: the corner is set back 4.5 along each edge and filled with one patch built G2 to the three rounds and the three faces (solid.fillet `corner`). The patch is a free-form surface SMLib fits, so no closed-form volume: one valid body, 6 faces + 3 rounds + the patch = 10, within the box. Graded as fillets/9-fillet-corner-r1-curvature-default-setback, scaled by r: at the points where a round's section ends on a face the round is only tangent (G1) to the plane, its curvature jumping by 1/r, so no patch is G2 to both there; the patch's curvature jump is bounded at stations at least 0.24 r from each turn, within 2.2 r of the corner, at most 0.5% of 1/r per mm.",
|
||||
"body_count": 1,
|
||||
"faces": 10,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
40,
|
||||
30,
|
||||
20
|
||||
]
|
||||
},
|
||||
"continuity": {
|
||||
"near": [
|
||||
40,
|
||||
30,
|
||||
20
|
||||
],
|
||||
"within_mm": 6.6,
|
||||
"clear_mm": 0.72,
|
||||
"curvature_jump_per_mm": 0.001667
|
||||
}
|
||||
}
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 30,
|
||||
"height": 20,
|
||||
"body_name": "Part"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
30,
|
||||
20
|
||||
],
|
||||
[
|
||||
40,
|
||||
15,
|
||||
20
|
||||
],
|
||||
[
|
||||
40,
|
||||
30,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 3,
|
||||
"corner": "g2",
|
||||
"tangent_chain": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
"sources": [],
|
||||
"what": "the three edges at one box corner rounded r3, Corners: Curvature set back 3.5, just past the radius: the smallest kind of setback that builds",
|
||||
"source": "invariants",
|
||||
"method": "as every-box-corner-three-edges-r3-curvature-corner with the setback 3.5: past where the rounds' contact lines meet (r = 3 from the vertex on a corner of faces square to each other), so the patch is built (the rule: a setback must be more than the radius). No closed-form volume (a fitted patch): one valid body of 10 faces within the box. Graded as fillets/9-fillet-corner-r1-curvature-default-setback, scaled by r: at the points where a round's section ends on a face the round is only tangent (G1) to the plane, its curvature jumping by 1/r, so no patch is G2 to both there; the patch's curvature jump is bounded at stations at least 0.24 r from each turn, within 2.2 r of the corner, at most 0.5% of 1/r per mm.",
|
||||
"method": "box 40x30x20, the edges at (40,30,20) rounded r3, corner g2, with the setback 3.5: past where the rounds' contact lines meet (r = 3 from the vertex on a corner of faces square to each other), so the patch is built (the rule: a setback must be more than the radius). No closed-form volume (a fitted patch): one valid body of 10 faces within the box. Graded as fillets/9-fillet-corner-r5-curvature-default-setback, scaled by r: at the points where a round's section ends on a face the round is only tangent (G1) to the plane, its curvature jumping by 1/r, so no patch is G2 to both there; the patch's curvature jump is bounded at stations at least 0.24 r from each turn, within 2.2 r of the corner, at most 0.5% of 1/r per mm.",
|
||||
"body_count": 1,
|
||||
"faces": 10,
|
||||
"bbox": {
|
||||
@@ -27,4 +27,4 @@
|
||||
"clear_mm": 0.72,
|
||||
"curvature_jump_per_mm": 0.001667
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "a rectangular pocket's four rim edges chamfered 1",
|
||||
"source": "analytic",
|
||||
"method": "plate 60x40x10 with the pocket 30x20x5 (x 15..45, y 10..30, floor z = 5, sharp vertical corners): V0 = 24000 - 3000 = 21000. Each convex rim edge loses the triangle d^2/2 along its length (100 in all); at each pocket corner the two chamfers run on past it and meet in a mitre, the quadrant losing what both remove: points (s, t) past both walls with s + u < d and t + u < d (u the depth), int_0^d (d-u)^2 du = d^3/3. d = 1: removed = 50 d^2 + (4/3) d^3 = 51.3333. V = 20948.6667. Faces 15.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 20948.666666666668,
|
||||
"faces": 15,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
60,
|
||||
40,
|
||||
10
|
||||
]
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 60,
|
||||
"width": 40,
|
||||
"height": 10,
|
||||
"body_name": "Plate"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 30,
|
||||
"width": 20,
|
||||
"height": 6,
|
||||
"corner": [
|
||||
15,
|
||||
10,
|
||||
5
|
||||
],
|
||||
"operation": "cut",
|
||||
"targets": [
|
||||
"Plate"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
30,
|
||||
10,
|
||||
10
|
||||
],
|
||||
[
|
||||
30,
|
||||
30,
|
||||
10
|
||||
],
|
||||
[
|
||||
15,
|
||||
20,
|
||||
10
|
||||
],
|
||||
[
|
||||
45,
|
||||
20,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
"sources": [],
|
||||
"what": "a box's top front edge rounded r2, then the vertical edge meeting it at the corner rounded r2 (Tangent chain on)",
|
||||
"source": "analytic",
|
||||
"method": "box 40x30x20; the edge y=0, z=20 rounded r2, then the edge x=40, y=0: rounding the second edge after the first, its tangent chain (the default) runs on along the first round's end arc (on the end face, tangent to it) and the third edge at the corner; the rolling ball along that arc, between the end face and the first round of the same radius, is the corner's sphere, so the result is the three-edge rolling-ball corner: V = 24000 - (1-pi/4) 4 (40+20+30-6) - 8 (1-pi/6) = 23924.0826 (every-box-corner-three-edges-r1-tangent's formula at r2). Faces 10. The same as every-fillet-after-fillet-vertical-then-front-r2: the order does not matter.",
|
||||
"method": "box 40x30x20; the edge y=0, z=20 rounded r2, then the edge x=40, y=0: rounding the second edge after the first, its tangent chain (the default) runs on along the first round's end arc (on the end face, tangent to it) and the third edge at the corner; the rolling ball along that arc, between the end face and the first round of the same radius, is the corner's sphere, so the result is the three-edge rolling-ball corner: V = 24000 - (1-pi/4) 4 (40+20+30-6) - 8 (1-pi/6) = 23924.0826 (every-box-corner-three-edges-r3-tangent's formula at r2). Faces 10. The same as every-fillet-after-fillet-vertical-then-front-r2: the order does not matter.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 23924.08257310633,
|
||||
"faces": 10,
|
||||
@@ -21,4 +21,4 @@
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"sources": [],
|
||||
"what": "both rims of a hole through a plate chamfered 1 in one chamfer",
|
||||
"source": "analytic",
|
||||
"method": "plate 40x40x10 with a through hole R5 at (20, 20): V0 = 16000 - 250 pi = 15214.6018. Each rim's chamfer removes 2 pi (5 + 1/3) 0.5 = 16.7552 (every-hole-top-rim-chamfer-1): V = 15181.0915. Faces 9.",
|
||||
"method": "plate 40x40x10 with a through hole R5 at (20, 20): V0 = 16000 - 250 pi = 15214.6018. Each rim's chamfer removes 2 pi (5 + 1/3) 0.5 = 16.7552 (the frustum ring of a rim chamfer d on a hole R: 2 pi (R + d/3) d^2/2): V = 15181.0915. Faces 9.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 15181.09151496426,
|
||||
"faces": 9,
|
||||
@@ -21,4 +21,4 @@
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the top rim of a hole through a plate chamfered 1 (a cone frustum)",
|
||||
"source": "analytic",
|
||||
"method": "plate 40x40x10 with a through hole R5 at (20, 20): V0 = 16000 - 250 pi = 15214.6018. The chamfer removes the right triangle of legs 1 and 1 (area 0.5) beside the rim, its centroid at rho = 5 + 1/3, revolved once (Pappus): 2 pi (16/3) 0.5 = 16.7552. V = 15197.8467. Faces 8; the cone meets the faces at creases (G0).",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 15197.846675783405,
|
||||
"faces": 8,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
40,
|
||||
40,
|
||||
10
|
||||
]
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 40,
|
||||
"height": 10,
|
||||
"body_name": "Plate"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 5,
|
||||
"height": 12,
|
||||
"base": [
|
||||
20,
|
||||
20,
|
||||
-1
|
||||
],
|
||||
"operation": "cut",
|
||||
"targets": [
|
||||
"Plate"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
25,
|
||||
20,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"what": "three r2 rounds at a top corner of a bar whose far end runs tangent into a cylinder, with the curvature (g2) corner set back 3: SMLib refused the result coming back (a cylinder over more than a turn); reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "analytic",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the rolling-ball answer: the three r2 rounds at the bar's other top corner (0, 0, 10): the front round's spandrel from x = 2 to the wall (30.5896671706), the vertical edge's and the left top edge's (1 - pi/4) r^2 over 8 and 14, the corner cube of side 2 less the rolling ball's eighth, 8 - 4 pi/3: removed 53.2858385868; the G2 patch differs from the ball only within the setback cube of side 3 about the vertex, so V is graded as V0 - removed with 3^3 as its tolerance (the rounds outside the cube exactly: ...-outside-setback); the patch meets the rounds and faces round it G2, graded as fillets/9-fillet-corner-r1-curvature-default-setback scaled by r = 2: at a hole corner the round is only tangent (G1) to the plane, so the curvature jump is bounded at stations at least 0.48 mm (0.24 r) from each turn, within 4.4 mm of the corner, at most 0.0025 per mm (0.5% of 1/r)",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the rolling-ball answer: the three r2 rounds at the bar's other top corner (0, 0, 10): the front round's spandrel from x = 2 to the wall (30.5896671706), the vertical edge's and the left top edge's (1 - pi/4) r^2 over 8 and 14, the corner cube of side 2 less the rolling ball's eighth, 8 - 4 pi/3: removed 53.2858385868; the G2 patch differs from the ball only within the setback cube of side 3 about the vertex, so V is graded as V0 - removed with 3^3 as its tolerance (the rounds outside the cube exactly: ...-outside-setback); the patch meets the rounds and faces round it G2, graded as fillets/9-fillet-corner-r5-curvature-default-setback scaled by r = 2: at a hole corner the round is only tangent (G1) to the plane, so the curvature jump is bounded at stations at least 0.48 mm (0.24 r) from each turn, within 4.4 mm of the corner, at most 0.0025 per mm (0.5% of 1/r)",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9362.643108859389,
|
||||
"tolerance": {
|
||||
|
||||
Reference in New Issue
Block a user