kernel-cases: threads cases from modelled-thread reports (2 of 2), skipped sources

The rest of the thread cases (holes at the nominal size, shafts and holes
off the thread's size, the crash and sketch-attachment repros) and the
triage of the sources that are not kernel geometry.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Brennen Herbruck
2026-10-21 06:17:39 -04:00
committed by jyviko
parent 04135da965
commit ead88e582b
25 changed files with 1381 additions and 0 deletions
@@ -0,0 +1,31 @@
{
"sources": [
"tangency-labs/solidcraft#2406"
],
"what": "an M8 modelled thread in a 6.8 mm pilot hole (the case where the thread 'was not visible')",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Block 20x20x10 with a 6.8 mm through hole (rho=3.4, a 0.6 mm groove depth at M8x1.25), M8 over the full 10 mm (8 turns, both ends free): V = 4000 - pi 3.4^2 10 - 8 x V_turn(clipped at r=3.4) = 3636.8319 - 8 x 6.88085 = 3581.7851 mm3. COM on the axis at z=5. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 3581.7851,
"center_of_mass": [
0,
0,
5.0
],
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
-10,
-10,
0
],
"max": [
10,
10,
10
]
}
}
@@ -0,0 +1,41 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
-10,
-10,
0
],
"length": 20,
"width": 20,
"height": 10,
"body_name": "Block"
}
},
{
"command": "solid.hole",
"params": {
"position": [
0,
0,
10
],
"diameter": 6.8
}
},
{
"command": "solid.thread",
"params": {
"face": [
3.4,
0,
5.0
],
"designation": "M8",
"modeled": true
}
}
]
}
@@ -0,0 +1,26 @@
{
"sources": [
"tangency-labs/solidcraft#2526"
],
"what": "three modelled threads, internal and external, in one body with a hub and a plain hole beside the bore (each thread used to facet the rest of the part and the next thread was refused)",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Block 40x40x20, a hub R=10 h=10 on top, a 6.75 mm bore through both (30 long), a 3.3 mm hole through the block at (15,15). Three modelled threads on one body: M8 over 8 mm of the bore from the free top end (8/1.25 = 6.4 turns), M4 over the whole 20 mm of the 3.3 mm hole (20/0.7 turns), M20x2.5 over 6 mm of the hub from its free top end (2.4 turns). Plain solid: 32000 + pi 10^2 10 - pi 3.375^2 30 - pi 1.65^2 20 = 33896.9918. Grooves: 46.9780 + 32.4641 + 271.1296. V = 33546.4201 mm3. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 33546.4201,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
-20,
-20,
0
],
"max": [
20,
20,
30
]
}
}
@@ -0,0 +1,94 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
-20,
-20,
0
],
"length": 40,
"width": 40,
"height": 20,
"body_name": "Block"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 10,
"height": 10,
"base": [
0,
0,
20
],
"operation": "join",
"targets": [
"Block"
]
}
},
{
"command": "solid.hole",
"params": {
"position": [
0,
0,
30
],
"diameter": 6.75
}
},
{
"command": "solid.hole",
"params": {
"position": [
15,
15,
20
],
"diameter": 3.3
}
},
{
"command": "solid.thread",
"params": {
"face": [
3.375,
0,
29
],
"designation": "M8",
"length": 8,
"modeled": true
}
},
{
"command": "solid.thread",
"params": {
"face": [
16.65,
15,
10
],
"designation": "M4",
"modeled": true
}
},
{
"command": "solid.thread",
"params": {
"face": [
10,
0,
29
],
"designation": "M20",
"length": 6,
"modeled": true
}
}
]
}
@@ -0,0 +1,26 @@
{
"sources": [
"tangency-labs/solidcraft#2705"
],
"what": "a modelled M14 thread on a 14.6 mm boss, slightly thicker than the thread (refused: the face is too far from the thread's diameter)",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. A 14.6 mm boss (R=7.3, 15 tall) on a 20x20x4 plate takes a modelled M14 (P=2) over 10 mm from its free top end. The boss is thicker than the major diameter, so a die turns it down to 14 mm over the threaded length first (ring pi (7.3^2 - 7^2) 10 = 134.7743) and the groove is cut from there (5 turns, 50.18900 each). V = 1600 + pi 7.3^2 15 - 134.7743 - 5 x 50.18900 = 3725.5127 mm3. The groove's last end may nick the unturned boss by well under 0.2 mm3. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 3725.5127,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
-10,
-10,
0
],
"max": [
10,
10,
19
]
}
}
@@ -0,0 +1,47 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
-10,
-10,
0
],
"length": 20,
"width": 20,
"height": 4,
"body_name": "Part"
}
},
{
"command": "solid.cylinder",
"params": {
"radius": 7.3,
"height": 15,
"base": [
0,
0,
4
],
"operation": "join",
"targets": [
"Part"
]
}
},
{
"command": "solid.thread",
"params": {
"face": [
7.3,
0,
17
],
"designation": "M14",
"length": 10,
"modeled": true
}
}
]
}
@@ -0,0 +1,31 @@
{
"sources": [
"tangency-labs/solidcraft#2822"
],
"what": "a modelled M3 thread in a hole through a block whose vertical edges are rounded (the fillets showed as black lines after the thread)",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Cube 20x20x10 with its four vertical edges rounded R2: each removes (1 - pi/4) R^2 x 10 = 8.5841, total 34.3363. A 2.5 mm through hole (the M3 tap drill, rho=1.25) with M3 (P=0.5) over the whole 10 mm (20 turns): V = 4000 - 34.3363 - pi 1.25^2 10 - 20 x 0.43729 = 3907.8305 mm3. By symmetry COM = (10,10,5). Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 3907.8305,
"center_of_mass": [
10,
10,
5
],
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
0,
0,
0
],
"max": [
20,
20,
10
]
}
}
@@ -0,0 +1,85 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY"
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
0,
0
],
"p1": [
20,
20
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 10,
"body_name": "Cube"
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
0,
0,
5
],
[
20,
0,
5
],
[
20,
20,
5
],
[
0,
20,
5
]
],
"radius": 2
}
},
{
"command": "solid.hole",
"params": {
"position": [
10,
10,
10
],
"diameter": 2.5
}
},
{
"command": "solid.thread",
"params": {
"face": [
11.25,
10,
5
],
"designation": "M3",
"modeled": true
}
}
]
}
@@ -0,0 +1,31 @@
{
"sources": [
"tangency-labs/solidcraft#2969"
],
"what": "a modelled M48x0.75 internal thread in a 48 mm hole (a workflow Fusion accepts)",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. A 48 mm hole through a D54 x 3 disc, drawn at the thread's nominal size, takes a modelled M48x0.75: the hole is first filled to the tap drill (major - pitch = 47.25 mm, rho=23.625), then the groove is cut, the same thread as in a hole drilled at the tap drill. Whole length, both ends free (4 turns): V = pi 27^2 3 - pi 23.625^2 3 - 4 x V_turn(clipped at rho) = 6870.6631 - 5260.3515 - 4 x 17.37563 = 1540.8091 mm3. The thin lips a tap leaves at each end are below 0.2% of the volume. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 1540.8091,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
-27,
-27,
0
],
"max": [
27,
27,
3
]
},
"center_of_mass": [
0,
0,
1.5
]
}
@@ -0,0 +1,35 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 27,
"height": 3,
"body_name": "Nut"
}
},
{
"command": "solid.hole",
"params": {
"position": [
0,
0,
3
],
"diameter": 48
}
},
{
"command": "solid.thread",
"params": {
"face": [
24.0,
0,
1.5
],
"designation": "M48x0.75",
"modeled": true
}
}
]
}
@@ -0,0 +1,26 @@
{
"sources": [
"tangency-labs/solidcraft#3311"
],
"what": "a second modelled thread on the same body (the first thread faceted every other hole), over each hole's full length",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Block 40x20x9 with two M5 tapped holes (drill 4.2, rho=2.1), each modelled-threaded over its whole 9 mm (11.25 turns, both ends free): V = 7200 - 2 pi 2.1^2 9 - 2 x 11.25 x V_turn(clipped at 2.1) = 6950.6204 - 22.5 x 1.87431 = 6908.4483 mm3. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 6908.4483,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
20,
9
]
}
}
@@ -0,0 +1,64 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
0,
0,
0
],
"length": 40,
"width": 20,
"height": 9,
"body_name": "Block"
}
},
{
"command": "solid.hole",
"params": {
"position": [
10,
10,
9
],
"thread": "M5"
}
},
{
"command": "solid.hole",
"params": {
"position": [
30,
10,
9
],
"thread": "M5"
}
},
{
"command": "solid.thread",
"params": {
"face": [
12.1,
10,
4.5
],
"designation": "M5",
"modeled": true
}
},
{
"command": "solid.thread",
"params": {
"face": [
32.1,
10,
4.5
],
"designation": "M5",
"modeled": true
}
}
]
}
@@ -0,0 +1,32 @@
{
"sources": [
"tangency-labs/solidcraft#3366",
"tangency-labs/solidcraft#3367"
],
"what": "a modelled M20 internal thread in a 20 mm hole, made after the 20 mm cylinder's own thread",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. A 20 mm hole through a D48 x 10 disc, drawn at the thread's nominal size, takes a modelled M20: the hole is first filled to the tap drill (major - pitch = 17.5 mm, rho=8.75), then the groove is cut, the same thread as in a hole drilled at the tap drill. Whole length, both ends free (4 turns): V = pi 24^2 10 - pi 8.75^2 10 - 4 x V_turn(clipped at rho) = 18095.5737 - 2405.2819 - 4 x 74.96751 = 15390.4218 mm3. The thin lips a tap leaves at each end are below 0.2% of the volume. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 15390.4218,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
-24,
-24,
0
],
"max": [
24,
24,
10
]
},
"center_of_mass": [
0,
0,
5.0
]
}
@@ -0,0 +1,35 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 24,
"height": 10,
"body_name": "Nut"
}
},
{
"command": "solid.hole",
"params": {
"position": [
0,
0,
10
],
"diameter": 20
}
},
{
"command": "solid.thread",
"params": {
"face": [
10.0,
0,
5.0
],
"designation": "M20",
"modeled": true
}
}
]
}
@@ -0,0 +1,26 @@
{
"sources": [
"tangency-labs/solidcraft#3914"
],
"what": "Create Sketch on the top face of a block with a modelled thread and rounded corners, then a boss from it",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Box 20^3, a D5 hole 20 deep (rho=2.5), M6 (P=1) over the whole 20 mm (20 turns, both ends free), the four vertical edges rounded R2 (68.6726), then a sketch on the top face with a 4x4 rectangle at least 4 mm from the hole centre, extruded 5 mm and joined: +80. V = 8000 - 68.6726 - pi 2.5^2 20 - 20 x 3.49832 + 80 = 7548.6619 mm3. Create Sketch on that face was refused ('its history can't tell it apart from other faces'). Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 7548.6619,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
0,
0,
0
],
"max": [
20,
20,
25
]
}
}
@@ -0,0 +1,109 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"corner": [
0,
0,
0
],
"length": 20,
"width": 20,
"height": 20,
"body_name": "Block"
}
},
{
"command": "solid.hole",
"params": {
"position": [
10,
10,
20
],
"diameter": 5,
"depth": 20
}
},
{
"command": "solid.thread",
"params": {
"face": [
12.5,
10,
10
],
"designation": "M6",
"modeled": true
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
0,
0,
10
],
[
20,
0,
10
],
[
20,
20,
10
],
[
0,
20,
10
]
],
"radius": 2
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"face": [
5,
5,
20
]
}
}
},
{
"command": "sketch.rectangle.two_point",
"params": {
"p0": [
3,
3
],
"p1": [
7,
7
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 5,
"operation": "join",
"targets": [
"Block"
]
}
}
]
}
@@ -0,0 +1,23 @@
{
"sources": [
"tangency-labs/solidcraft#3952"
],
"what": "a modelled thread in a small blind hole drilled into a revolved ring, off its axis ('faceted boolean: inconsistent volumes')",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Revolved ring R12..30, 30 tall: pi (30^2 - 12^2) 30 = 71251.3214. A D2.5 flat-bottomed hole 8 deep at 21 mm from the axis (pi 1.25^2 8 = 39.2699), M3 (P=0.5, rho=1.25) over the hole's whole 8 mm (16 turns): 16 x 0.43729. The blind end can shift the groove's last end by under 0.25 mm3. V = 71205.0548 mm3. Tolerance 1e-3 (the ring dominates the volume; the check is that the thread builds a valid solid, which it once refused: faceted boolean: inconsistent volumes).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 71205.0548,
"bbox": {
"min": [
-30,
-30,
0
],
"max": [
30,
30,
30
]
}
}
@@ -0,0 +1,90 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XZ",
"name": "Sketch1"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
12,
0
],
[
30,
0
],
[
30,
-30
],
[
12,
-30
]
],
"closed": true
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.revolve",
"params": {
"sketch": "Sketch1",
"axis": "Z"
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"offset": "30 mm",
"name": "Sketch2"
}
},
{
"command": "sketch.circle.center",
"params": {
"center": [
21,
0
],
"diameter": 2.5
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Sketch2",
"profiles": "all",
"distance": 8,
"direction": "negative",
"operation": "cut"
}
},
{
"command": "solid.thread",
"params": {
"face": [
22.25,
0,
26
],
"designation": "M3",
"modeled": true
}
}
]
}
@@ -0,0 +1,26 @@
{
"sources": [
"tangency-labs/solidcraft#4149"
],
"what": "a modelled M10x1.5 internal thread, full length of the bore below a counterbore, in a cylinder with its rim rounded (stack overflow)",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Cylinder D40 h=30; a 8.5 mm through hole with a D18 x 5 counterbore (hole volume pi(9^2 5 + 4.25^2 25) = 2690.9705); the top outer edge rounded R3: removed = 2 pi (R - xbar) A with A = r^2 (1 - pi/4) = 1.9314 and the removed corner's centroid xbar = r (5/6 - pi/4)/(1 - pi/4) = 0.6701 from the corner, so 234.5769. M10x1.5 over the 25 mm of the bore below the counterbore (16.667 turns, rho=4.25): the thread ends at the counterbore floor, so the last groove end may stop up to half a groove short of it; that is under 0.3 mm of pitch, below 4 mm3. V = 37699.1118 - 234.5769 - 2690.9705 - 16.667 x 13.26888 = 34552.4164 mm3. Tolerance 0.3%: faceted helix as for the other thread cases; that is 110 mm3 on this large body (the groove itself is 192 mm3), and the end effect and the faceting stay far below it.",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 34552.4164,
"tolerance": {
"rel": 0.003
},
"bbox": {
"min": [
-20,
-20,
0
],
"max": [
20,
20,
30
]
}
}
@@ -0,0 +1,52 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 20,
"height": 30,
"body_name": "Part"
}
},
{
"command": "solid.hole",
"params": {
"position": [
0,
0,
30
],
"diameter": 8.5,
"type": "counterbore",
"cb_diameter": 18,
"cb_depth": 5
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
20,
0,
30
]
],
"radius": 3
}
},
{
"command": "solid.thread",
"params": {
"face": [
0,
-4.25,
12.5
],
"designation": "M10x1.5",
"length": 25,
"modeled": true
}
}
]
}
@@ -0,0 +1,27 @@
{
"sources": [
"tangency-labs/solidcraft#602",
"tangency-labs/solidcraft#618"
],
"what": "rounding the top edges of a hex head on a shaft with a modelled thread (it froze the app)",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. Shaft D5 h=10 plus a hexagonal head of apothem a=2 (area 2 sqrt3 a^2 = 13.8564), h=3. M5 (P=0.8) over 4 mm from the free bottom end (5 turns): 5 x 2.84480. The six top edges rounded R=r=0.3 with the vertical edges left sharp: the section at depth y below the top is a hexagon of apothem a - d(y), d = r - sqrt(r^2 - (r-y)^2); removed = 2 sqrt3 int (2 a d - d^2) dy = 2 sqrt3 [2 a r^2 (1 - pi/4) - r^3 (5/3 - pi/2)] = 0.25866. V = pi 2.5^2 10 + 41.5692 - 5 x 2.84480 - 0.25866 = 223.4361 mm3. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 223.4361,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
-2.5,
-2.5,
0
],
"max": [
2.5,
2.5,
13
]
}
}
@@ -0,0 +1,127 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY"
}
},
{
"command": "sketch.circle.center",
"params": {
"center": [
0,
0
],
"diameter": 5
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 10,
"body_name": "Screw"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"face": [
0,
0,
10
]
}
}
},
{
"command": "sketch.polygon.circumscribed",
"params": {
"center": [
0,
0
],
"radius": 2,
"sides": 6
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"distance": 3,
"profiles": [
{
"point": [
0,
0
]
}
],
"operation": "join",
"targets": [
"Screw"
]
}
},
{
"command": "solid.thread",
"params": {
"face": [
2.5,
0,
5
],
"designation": "M5",
"length": 4,
"modeled": true
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
1.7320508075688774,
0.9999999999999999,
13
],
[
1.2246467991473532e-16,
2.0,
13
],
[
-1.7320508075688774,
0.9999999999999999,
13
],
[
-1.7320508075688772,
-1.0000000000000002,
13
],
[
-3.6739403974420594e-16,
-2.0,
13
],
[
1.7320508075688767,
-1.0000000000000009,
13
]
],
"radius": 0.3
}
}
]
}
@@ -0,0 +1,32 @@
{
"sources": [
"tangency-labs/solidcraft#995",
"tangency-labs/solidcraft#1018"
],
"what": "a modelled M5 thread in a hole drawn at 5 mm, the thread's own size (nothing was cut: the wall only turned faceted)",
"source": "analytic",
"method": "ISO 68-1 basic profile: H = P sqrt3/2, basic depth 5H/8. External groove (the space between teeth): a trapezoid P/4 wide at the root radius d/2 - 5H/8, widening by 2 tan30 per unit of radius to 7P/8 at d/2. Internal groove: P/8 wide at the major radius d/2, widening to 3P/4 at the minor radius, cut only where there is material (r >= hole radius). Pappus: volume per turn = 2 pi A rc (A the trapezoid area, rc its centroid radius from the axis); a helical sweep of L/P turns removes exactly (L/P) x that, where each end of the thread is a free end or lies inside material. A 5 mm hole through a D14 x 4 disc, drawn at the thread's nominal size, takes a modelled M5: the hole is first filled to the tap drill (major - pitch = 4.2 mm, rho=2.1), then the groove is cut, the same thread as in a hole drilled at the tap drill. Whole length, both ends free (5 turns): V = pi 7^2 4 - pi 2.1^2 4 - 5 x V_turn(clipped at rho) = 615.7522 - 55.4177 - 5 x 1.87431 = 550.9629 mm3. The thin lips a tap leaves at each end are below 0.2% of the volume. Tolerance 1%: a modelled thread is a faceted helical solid (radial chord error up to 1% of the pitch on every wall, i.e. a volume deficit of about 4/3 x sag/R).",
"outcome": "solid",
"body_count": 1,
"volume_mm3": 550.9629,
"tolerance": {
"rel": 0.01
},
"bbox": {
"min": [
-7,
-7,
0
],
"max": [
7,
7,
4
]
},
"center_of_mass": [
0,
0,
2.0
]
}
@@ -0,0 +1,35 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 7,
"height": 4,
"body_name": "Nut"
}
},
{
"command": "solid.hole",
"params": {
"position": [
0,
0,
4
],
"diameter": 5
}
},
{
"command": "solid.thread",
"params": {
"face": [
2.5,
0,
2.0
],
"designation": "M5",
"modeled": true
}
}
]
}
+230
View File
@@ -0,0 +1,230 @@
[
{
"source": "tangency-labs/solidcraft#4093",
"why": "other area: sweeps (a guided helical sweep cut whose exported mesh has open boundaries; not the Thread feature)"
},
{
"source": "tangency-labs/solidcraft#4087",
"why": "feature request: the thread as a few selectable faces rather than many facets; no closed-form face count, no number to grade"
},
{
"source": "tangency-labs/solidcraft#4085",
"why": "no new geometry: M6 on a 7 mm shaft is a shaft thicker than the thread, the family of case 2705"
},
{
"source": "tangency-labs/solidcraft#4033",
"why": "visual only: the thread's facets look faceted; the report has no design, only a face point"
},
{
"source": "tangency-labs/solidcraft#3847",
"why": "other area: tessellation (display plans for threads and pointed ends of imported STEP bodies)"
},
{
"source": "tangency-labs/solidcraft#3745",
"why": "UI only: hover highlight of a large thread computed on the main thread"
},
{
"source": "tangency-labs/solidcraft#3737",
"why": "UI only: orbit and zoom freeze in edge highlighting on the main thread"
},
{
"source": "tangency-labs/solidcraft#3710",
"why": "no repro geometry: the report has only the face point of a private design (an app that stopped responding)"
},
{
"source": "tangency-labs/solidcraft#3519",
"why": "UI only: the Thread dialog was applied with no cylindrical face selected"
},
{
"source": "tangency-labs/solidcraft#3467",
"why": "no repro geometry: 'planar boolean: shell not oriented and closed' with only the face point of a private design; the same family as case 3311-two-tapped-holes-both-modelled-threaded"
},
{
"source": "tangency-labs/solidcraft#3386",
"why": "other area: crashes (a crash report with only a face point, no design)"
},
{
"source": "tangency-labs/solidcraft#3337",
"why": "no repro geometry: 'planar boolean: shell not oriented and closed' with only a face point; the same family as case 3311-two-tapped-holes-both-modelled-threaded"
},
{
"source": "tangency-labs/solidcraft#3307",
"why": "no repro: a hole with a thread size is a cosmetic thread by default (see case 2115-tapped-hole-drill-is-major-minus-pitch)"
},
{
"source": "tangency-labs/solidcraft#3183",
"why": "no repro geometry: 'planar boolean: tree too deep' redefining a thread after a fillet; sizes of the private design unknown"
},
{
"source": "tangency-labs/solidcraft#3165",
"why": "empty report (the body was not pasted)"
},
{
"source": "tangency-labs/solidcraft#3145",
"why": "feature request: threads without turning the whole body into facets; no number to grade (the multi-thread case 2526-three-modelled-threads-in-one-body covers the symptom)"
},
{
"source": "tangency-labs/solidcraft#3133",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#3131",
"why": "no repro geometry: 'the face is too far from the thread's diameter' with only a face point; the family of case 2369"
},
{
"source": "tangency-labs/solidcraft#3110",
"why": "not kernel geometry: the automatic-size lookup refuses a 78 mm shaft (no standard size); a cosmetic thread leaves the model unchanged"
},
{
"source": "tangency-labs/solidcraft#2929",
"why": "test flakiness of the off-window-thread tests: not geometry"
},
{
"source": "tangency-labs/solidcraft#2908",
"why": "test flakiness of the off-window-thread tests: not geometry"
},
{
"source": "tangency-labs/solidcraft#2892",
"why": "no repro geometry: 'planar boolean: tree too deep' for an M22x2.5 modelled thread, with only a face point"
},
{
"source": "tangency-labs/solidcraft#2796",
"why": "other area: crashes (a crash report with only a face point, no design)"
},
{
"source": "tangency-labs/solidcraft#2470",
"why": "other area: crashes (a crash report with only a face point, no design)"
},
{
"source": "tangency-labs/solidcraft#2467",
"why": "window-thread / UI responsiveness, not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#2451",
"why": "other area: crashes (a crash report with only a face point, no design)"
},
{
"source": "tangency-labs/solidcraft#2079",
"why": "tracker for modelled threads; the geometry is in cases 2038-* and 2526-*"
},
{
"source": "tangency-labs/solidcraft#1794",
"why": "no repro geometry: 'no cylindrical face there to thread' with only a face point of a private design; the family of case 2038-internal-then-external-thread-on-one-body"
},
{
"source": "tangency-labs/solidcraft#1731",
"why": "no repro geometry: 'planar boolean: shell not oriented and closed' with only a face point; the family of case 3311-two-tapped-holes-both-modelled-threaded"
},
{
"source": "tangency-labs/solidcraft#1289",
"why": "other area: tessellation (imported STEP threads displayed with artifacts; the B-rep was fine)"
},
{
"source": "tangency-labs/solidcraft#1024",
"why": "test-process memory corruption on Windows in the thread tests, not a geometry result with a right answer"
},
{
"source": "tangency-labs/solidcraft#873",
"why": "other area: booleans (a hexagon join beside a screw: 'join cannot preserve the original faces'; no thread involved)"
},
{
"source": "tangency-labs/solidcraft#524",
"why": "design preference (thread adds material instead of cutting into the part) and a groove-end convention at shoulders with no derivable number; the hole-too-wide fill it was linked to is case 1443-m5x0.7-thread-in-5mm-hole"
},
{
"source": "tangency-labs/solidcraft#519",
"why": "feature request: a thread as 1 to 3 faces so it can be offset; no closed-form face count to grade"
},
{
"source": "tangency-labs/solidcraft#424",
"why": "Insert Part bolts carry cosmetic threads by design (the comment asks for a modelled option); no geometry defect"
},
{
"source": "tangency-labs/solidcraft#287",
"why": "performance umbrella: multithreading, SIMD, caching; nothing to grade"
},
{
"source": "tangency-labs/solidcraft#3870",
"why": "other area: tessellation (hover and select a thread as one piece: display and picking groups)"
},
{
"source": "tangency-labs/solidcraft#3849",
"why": "other area: tessellation (display plans for STEP threads and pointed ends)"
},
{
"source": "tangency-labs/solidcraft#3738",
"why": "UI and data: tapped-hole catalogue of metric fine, UNC and UNF sizes with tabulated pilot drills; no closed form"
},
{
"source": "tangency-labs/solidcraft#3622",
"why": "test flakiness: not geometry"
},
{
"source": "tangency-labs/solidcraft#3609",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#3340",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#3135",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#2868",
"why": "UI only: cosmetic thread markings as a display preference"
},
{
"source": "tangency-labs/solidcraft#2679",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#2468",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#2265",
"why": "UI only: reopening a Thread feature lost its face selection"
},
{
"source": "tangency-labs/solidcraft#2264",
"why": "UI only: modelled-thread preview in the dialog"
},
{
"source": "tangency-labs/solidcraft#2243",
"why": "other area: import (STEP export read-back hangs meshing a seam cylinder hole)"
},
{
"source": "tangency-labs/solidcraft#2095",
"why": "performance: kernel profile timings of a thread's faceted cut"
},
{
"source": "tangency-labs/solidcraft#1759",
"why": "UI only: the Thread dialog's size suggestion"
},
{
"source": "tangency-labs/solidcraft#1675",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#1527",
"why": "other area: booleans (last-resort nudge of a pleat loft join; not a thread)"
},
{
"source": "tangency-labs/solidcraft#1524",
"why": "assembly joints (gear, rack and screw couplings between motions): no kernel geometry"
},
{
"source": "tangency-labs/solidcraft#1300",
"why": "other area: tessellation (display of imported modelled threads)"
},
{
"source": "tangency-labs/solidcraft#1201",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
},
{
"source": "tangency-labs/solidcraft#1020",
"why": "CPU or window threads (off-thread evaluation, freezes), not modelled threads: no geometry"
}
]