mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-03 10:35:58 +00:00
Kernel rig: the partial-selection cases kept as -partial-chain copies, tangent chain off
Where a case's point is one edge of a tangent chain rounded alone, a copy keeps tangent_chain false as its own case (SMLib rounds exactly the picked edges, ending at the smooth vertex); their expectations stay as they were, to be re-derived: - fillets/1207-fillet-box-end-edge-into-unblended-round-partial-chain; - fillets/every-fillet-after-fillet-curvature-front-then-side-r3-partial-chain; - fillets/1207-fillet-bar-top-edge-after-boss-arc-round-partial-chain, renamed from ...-no-tangent-chain: with the chain on it is exactly 1207-fillet-bar-top-edge-after-boss-arc-round, which the rig already has; - ladder/07-fillets/020 and 021, the r5/r3/r7 and r5/r3/r2 corners (016 and 018) with the r3 on its edge alone: with the chain on, the r3 runs on along the r5 round's end arc and down the vertical edge the third round was to take. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
This commit is contained in:
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1207"
|
||||
],
|
||||
"what": "an edge that runs on tangentially into a round left out of the blend (tangent chain off) is rounded on past the round's end arc until it leaves the material",
|
||||
"source": "analytic",
|
||||
"method": "cube 20 (V0 = 8000), its top back edge (y=20, z=20) rounded r3: removes 20 (9 - 9 pi/4) = 38.628316. The end face's top edge (x=0, z=20, y 0..17) then rounded r1 alone, tangent_chain false: over y 0..17 it removes 17 (1 - pi/4) = 3.648231; at y=17 the edge goes on tangentially into the r3 round's end arc, and the r1 round's cylinder (axis x=1, z=19) runs on along y through the r3 round, cutting the part of its section under the round's surface z = 17 + sqrt(9 - (y-17)^2) until that surface drops below z=19 at y = 17 + sqrt(5): with t = sqrt(9 - (y-17)^2) - 2, the section's area under it is t - (t sqrt(1-t^2) + asin t)/2, integrated over y 17..17+sqrt(5) (Simpson, 200000 steps) = 0.218236. V = 8000 - 38.628316 - 3.648231 - 0.218236 = 7957.505202",
|
||||
"outcome": "solid",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 7957.505202,
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 20,
|
||||
"body_name": "Cube"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
10,
|
||||
20,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
0,
|
||||
8,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 1,
|
||||
"tangent_chain": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"sources": [],
|
||||
"what": "the concave half circle where a block as wide as the cylinder's diameter meets the cylinder's wall above its top, rounded r2 alone (Tangent chain off)",
|
||||
"source": "analytic",
|
||||
"method": "block 40x20x15 (x 0..40, y -10..10) joined to the cylinder R10 x 30 on the z axis: the block's sides y = +-10 run tangent into the cylinder wall at x = 0; V0 = 12000 + 3000 pi - 15 * 50 pi = 19068.5835. The arc (z = 15, rho = 10, x > 0) ends at (0, +-10, 15), where the block's top-side edges go on tangentially. Rounded r2 alone, the round adds the spandrel (rho in [10,12], z in [15,17]) over the block only, between its side planes |y| = 10: at radius rho it spans 2 asin(10/rho), running out to nothing at the ends. Added = int over the spandrel of 2 rho asin(10/rho) (Gauss-Legendre) = 23.3785. V = 19091.9620. Or a refusal saying the edge continues tangentially (as fillets/1207-fillet-bar-top-edge-after-boss-arc-round-no-tangent-chain).",
|
||||
"method": "block 40x20x15 (x 0..40, y -10..10) joined to the cylinder R10 x 30 on the z axis: the block's sides y = +-10 run tangent into the cylinder wall at x = 0; V0 = 12000 + 3000 pi - 15 * 50 pi = 19068.5835. The arc (z = 15, rho = 10, x > 0) ends at (0, +-10, 15), where the block's top-side edges go on tangentially. Rounded r2 alone, the round adds the spandrel (rho in [10,12], z in [15,17]) over the block only, between its side planes |y| = 10: at radius rho it spans 2 asin(10/rho), running out to nothing at the ends. Added = int over the spandrel of 2 rho asin(10/rho) (Gauss-Legendre) = 23.3785. V = 19091.9620. Or a refusal saying the edge continues tangentially (as fillets/1207-fillet-bar-top-edge-after-boss-arc-round-partial-chain).",
|
||||
"body_count": 1,
|
||||
"outcome": "solid_or_refused",
|
||||
"refusal": "continues tangentially",
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "a box's top front edge rounded curvature-continuous size 3, then the top side edge meeting it at the corner rounded the same way alone (Tangent chain off)",
|
||||
"source": "invariants",
|
||||
"method": "box 40x30x20; the edge y=0, z=20 rounded type curvature 3 (every-box-edge-r3-curvature's section), then the edge x=40, z=20 (now y 3..30) rounded type curvature 3 alone: at y = 3 it runs on tangentially into the first round's end curve on x = 40 (the order-2 section, tangent to the top there), so the second round ends on a curved round, not a planar end face: no closed form. A valid body with every blend seam G2, or a refusal saying the edge continues tangentially (the 1207 precedent).",
|
||||
"body_count": 1,
|
||||
"outcome": "solid_or_refused",
|
||||
"refusal": "continues tangentially",
|
||||
"continuity": {
|
||||
"order": "g2"
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 30,
|
||||
"height": 20,
|
||||
"body_name": "Part"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 3,
|
||||
"type": "curvature"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
40,
|
||||
15,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 3,
|
||||
"type": "curvature",
|
||||
"tangent_chain": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "rounds r5 and r3 on the two top edges at a corner, the r3 on its edge alone (Tangent chain off, so it ends where the edge runs on into the r5 round's end arc), then r7 on the vertical edge under them: refused, the r7 cannot exist",
|
||||
"source": "invariants",
|
||||
"method": "the r7 runs on (tangent chain) up the side x=60 along its arc on the r5 round, a circle of radius 5 about the r5 axis: the r7's contact line on that face would be the arc offset 7 towards its centre, radius 5 - 7 < 0, so the blend passes through itself; and along the seam of the r5 and r3 rounds no ball over r3 fits the r3 round. No such round exists, so the right answer is a clean refusal (SMLib: no room for the rolling ball). 021 is the same corner with a radius that fits.",
|
||||
"outcome": "refused",
|
||||
"refusal": "the fillet is larger than the faces beside its edges allow"
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"base": "../../01-primitives/001-box",
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
30,
|
||||
40,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
60,
|
||||
20,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 3,
|
||||
"tangent_chain": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
60,
|
||||
40,
|
||||
8
|
||||
]
|
||||
],
|
||||
"radius": 7
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "rounds r5 and r3 on the two top edges at a corner, the r3 on its edge alone (Tangent chain off, so it ends where the edge runs on into the r5 round's end arc), then r2 on the vertical edge under them, run on up into the corner",
|
||||
"source": "invariants",
|
||||
"method": "as 020 with a radius that fits (r < 3, the smaller top round): the r2 runs up the vertical edge and on along the side's arc on the r5 round and the seam between the two rounds, tapering to a point where they become tangent. Faces: the box's 6 and the two top rounds, + 3 for the r2 (along the vertical edge, up the arc, along the seam); one valid body inside the box",
|
||||
"body_count": 1,
|
||||
"faces": 11,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
60,
|
||||
40,
|
||||
20
|
||||
]
|
||||
}
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"base": "../../01-primitives/001-box",
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
30,
|
||||
40,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
60,
|
||||
20,
|
||||
20
|
||||
]
|
||||
],
|
||||
"radius": 3,
|
||||
"tangent_chain": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
60,
|
||||
40,
|
||||
8
|
||||
]
|
||||
],
|
||||
"radius": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -156,7 +156,9 @@
|
||||
"ladder/07-fillets/003-tangent-chain-r3",
|
||||
"ladder/07-fillets/017-part-rounds",
|
||||
"ladder/07-fillets/019-concave-corner-g2-patch",
|
||||
"ladder/07-fillets/015-corner-g2-patch"
|
||||
"ladder/07-fillets/015-corner-g2-patch",
|
||||
"ladder/07-fillets/020-corner-three-sequential-r5-r3-r7-partial-chain",
|
||||
"ladder/07-fillets/021-corner-three-sequential-r5-r3-r2-partial-chain"
|
||||
],
|
||||
"tier": "07-fillets",
|
||||
"what": "constant, variable and corner fillets"
|
||||
|
||||
Reference in New Issue
Block a user