mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-04 11:05:56 +00:00
kernel-cases: booleans cases from items another area had skipped (#451, #1107, #1140, #2928, #3850/#3741, #1984, #3573)
Added: 451 (block inside / crossing a hollow spherical-shell tool), 1107 (hollow hub joined with nine blades), 1140 (spiral hollow lofted tube cut in half and joined), 2928 (cap-touching lips with 0.0001 mm offset walls), 3850 with 3741 (cross cut touching a round side, and the hole after it), 1984 (near-coaxial pin and rivet overlaps). #3573 is now a source of shell/3576. Their lines are gone from the skipped files; #2259, #3518 and #3602 stay skipped with corrected reasons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1107"
|
||||
],
|
||||
"what": "a hollow hub (tube r 21.5..23) joined with nine disjoint blades whose roots lie wholly in the wall: one valid solid, the cavity stays the hub's. Blades here are r1 round bars (the report's are lofted fan blades)",
|
||||
"source": "analytic",
|
||||
"method": "tube V = pi(23^2-21.5^2)*20 = 4194.03. Each blade is a round bar r=1, axis radial, from radial distance 22.2 to 37.2, z centre 10; its root disk (radius at most 22.22) lies in the wall 21.5..23, so only the part beyond the hub's outer cylinder adds: along the bar at tangential offset s the cylinder wall is at radial distance sqrt(23^2-s^2), so one blade adds Int_-1^1 2 sqrt(1-s^2) (37.2 - sqrt(529-s^2)) ds = 44.6277 (python quadrature, 2000-point Simpson in s=sin a). Bars are 40 deg apart (>2 mm clear), none touches the cavity. V = 4194.03 + 9*44.6277 = 4595.675; one body",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 4595.6754,
|
||||
"center_of_mass": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 23,
|
||||
"height": 20,
|
||||
"base": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"body_name": "Hub"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 21.5,
|
||||
"height": 22,
|
||||
"base": [
|
||||
0,
|
||||
0,
|
||||
-1
|
||||
],
|
||||
"operation": "cut",
|
||||
"targets": [
|
||||
"Hub"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
22.2,
|
||||
0.0,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
1.0,
|
||||
0.0,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
17.006186637,
|
||||
14.269884935,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
0.766044443119,
|
||||
0.642787609687,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
3.854989544,
|
||||
21.862732117,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
0.173648177667,
|
||||
0.984807753012,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
-11.1,
|
||||
19.225763964,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
-0.5,
|
||||
0.866025403784,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
-20.861176181,
|
||||
7.592847182,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
-0.939692620786,
|
||||
0.342020143326,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade5"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
-20.861176181,
|
||||
-7.592847182,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
-0.939692620786,
|
||||
-0.342020143326,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
-11.1,
|
||||
-19.225763964,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
-0.5,
|
||||
-0.866025403784,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
3.854989544,
|
||||
-21.862732117,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
0.173648177667,
|
||||
-0.984807753012,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 1,
|
||||
"height": 15,
|
||||
"base": [
|
||||
17.006186637,
|
||||
-14.269884935,
|
||||
10
|
||||
],
|
||||
"axis": [
|
||||
0.766044443119,
|
||||
-0.642787609687,
|
||||
0
|
||||
],
|
||||
"body_name": "Blade9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Hub",
|
||||
"tools": [
|
||||
"Blade1",
|
||||
"Blade2",
|
||||
"Blade3",
|
||||
"Blade4",
|
||||
"Blade5",
|
||||
"Blade6",
|
||||
"Blade7",
|
||||
"Blade8",
|
||||
"Blade9"
|
||||
],
|
||||
"operation": "join"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1140"
|
||||
],
|
||||
"what": "a spiral round tube (radius growing 76 to 210 mm over one turn, 12 mm wall) built as 8 lofted bands, each minus a lofted bore, cut in half through the axis plane z=0 and the halves joined: must give one body",
|
||||
"source": "invariants",
|
||||
"method": "the script is the report's own generator (stdlib only, defaults 8 bands x 7 sections, inspect.measure dropped). Every band is a hollow tube cut at z=0 and the bands abut end to end, so the join is one connected solid. No exact volume (the loft of 7 sections only approximates the spiral's ~8.15 L half wall), so only the outcome, validity and body_count are graded",
|
||||
"body_count": 1
|
||||
}
|
||||
+5665
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1984"
|
||||
],
|
||||
"what": "the overlap of a pin 0.00056 mm off the axis of a bore of its own radius (r=3, 9.65 long): a thin crescent. The report's STEP round trip is left out; this is the geometry",
|
||||
"source": "analytic",
|
||||
"method": "the overlap of the pin and the bush wall is the part of the pin outside the bore circle: crescent area = pi r^2 - lens, lens = 2 r^2 acos(d/2r) - (d/2) sqrt(4 r^2 - d^2) with r=3, d=0.00056 (= 0.0033600); V = 9.65 x crescent = 0.032424 (the PR's 9.65 mm x crescent = 0.032424). One body",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 0.03242399995
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 5,
|
||||
"height": 9.65,
|
||||
"body_name": "Bush"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 3,
|
||||
"height": 9.65,
|
||||
"operation": "cut",
|
||||
"targets": [
|
||||
"Bush"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 3,
|
||||
"height": 9.65,
|
||||
"base": [
|
||||
0.00056,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"body_name": "Pin"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Bush",
|
||||
"tools": [
|
||||
"Pin"
|
||||
],
|
||||
"operation": "intersect"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1984"
|
||||
],
|
||||
"what": "a rivet (shank r=2, heads r=4 flat on both faces of a 1.5 mm sheet) 0.004 mm off the axis of its hole: overlap with the sheet is the shank's crescent; the heads touch the sheet faces over an area but add no volume",
|
||||
"source": "analytic",
|
||||
"method": "overlap = 1.5 x crescent(r=2, d=0.004) = 1.5 x (pi r^2 - 2 r^2 acos(d/2r) + (d/2) sqrt(4 r^2 - d^2)) = 0.024000 (the PR's 1.5 x crescent = 0.0240). The heads (z -1..0 and 1.5..2.5) only touch the sheet's faces, sharing no volume. One body",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 0.023999996
|
||||
}
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0,
|
||||
0.75
|
||||
],
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 1.5,
|
||||
"body_name": "Sheet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 2,
|
||||
"height": 3,
|
||||
"base": [
|
||||
0,
|
||||
0,
|
||||
-0.5
|
||||
],
|
||||
"operation": "cut",
|
||||
"targets": [
|
||||
"Sheet"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 2,
|
||||
"height": 1.5,
|
||||
"base": [
|
||||
0.004,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"body_name": "Rivet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 4,
|
||||
"height": 1,
|
||||
"base": [
|
||||
0.004,
|
||||
0,
|
||||
1.5
|
||||
],
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Rivet"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.cylinder",
|
||||
"params": {
|
||||
"radius": 4,
|
||||
"height": 1,
|
||||
"base": [
|
||||
0.004,
|
||||
0,
|
||||
-1
|
||||
],
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Rivet"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Sheet",
|
||||
"tools": [
|
||||
"Rivet"
|
||||
],
|
||||
"operation": "intersect"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#2928"
|
||||
],
|
||||
"what": "two half-annulus lips (r 4..5, from z=2 to 20) joined onto a stadium-ring base (z 0..2, r 3..5 arcs, centres 20 apart) with their cylinder walls 0.0001 mm off the base's: the lip cap touches the base top, leaving a 0.0001 mm crescent overhang. Layout is a hand-built variant of the PR's public reproduction",
|
||||
"source": "analytic",
|
||||
"method": "base area = 2 straight rails (2 x 20) x 2 + full annulus pi(25-9) = 80 + 16 pi, times 2 mm = 160 + 32 pi. Each lip is a half annulus pi(25-16)/2 = 4.5 pi, two lips x 18 mm = 162 pi. The lips sit above z=2, the base is below, so nothing overlaps (the crescent overhang is above z=2 too): V = 160 + 194 pi = 769.469. One body",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 769.4689747964198
|
||||
}
|
||||
+277
@@ -0,0 +1,277 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
5,
|
||||
-10
|
||||
],
|
||||
[
|
||||
5,
|
||||
10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
10
|
||||
],
|
||||
"start": [
|
||||
5,
|
||||
10
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
-5,
|
||||
10
|
||||
],
|
||||
[
|
||||
-5,
|
||||
-10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
-10
|
||||
],
|
||||
"start": [
|
||||
-5,
|
||||
-10
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
3,
|
||||
-10
|
||||
],
|
||||
[
|
||||
3,
|
||||
10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
10
|
||||
],
|
||||
"start": [
|
||||
3,
|
||||
10
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
-3,
|
||||
10
|
||||
],
|
||||
[
|
||||
-3,
|
||||
-10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
-10
|
||||
],
|
||||
"start": [
|
||||
-3,
|
||||
-10
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Base",
|
||||
"distance": 2,
|
||||
"operation": "new",
|
||||
"body_name": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 2,
|
||||
"name": "Lips"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0.0001,
|
||||
10
|
||||
],
|
||||
"start": [
|
||||
5.0001,
|
||||
10
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
-4.9999,
|
||||
10
|
||||
],
|
||||
[
|
||||
-3.9999,
|
||||
10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0.0001,
|
||||
10
|
||||
],
|
||||
"start": [
|
||||
-3.9999,
|
||||
10
|
||||
],
|
||||
"sweep": -180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
4.0001,
|
||||
10
|
||||
],
|
||||
[
|
||||
5.0001,
|
||||
10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
-0.0001,
|
||||
-10
|
||||
],
|
||||
"start": [
|
||||
-5.0001,
|
||||
-10
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
4.9999,
|
||||
-10
|
||||
],
|
||||
[
|
||||
3.9999,
|
||||
-10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
-0.0001,
|
||||
-10
|
||||
],
|
||||
"start": [
|
||||
3.9999,
|
||||
-10
|
||||
],
|
||||
"sweep": -180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
-4.0001,
|
||||
-10
|
||||
],
|
||||
[
|
||||
-5.0001,
|
||||
-10
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Lips",
|
||||
"distance": 18,
|
||||
"operation": "join",
|
||||
"profiles": "all"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#3850",
|
||||
"tangency-labs/solidcraft#3741"
|
||||
],
|
||||
"what": "a O50 x 50 cylinder with a 25 mm square through-hole, then a cross cut by a O40 circle split into two halves by a line (both halves picked, merged into one round tool whose end face x=25 touches the cylinder's side along y=0): the result must be one shell, not a good shell plus a zero-area one",
|
||||
"source": "analytic",
|
||||
"method": "slice by y: width(y) = 2 sqrt(625-y^2) minus 25 where |y|<=12.5 (the square hole); the tool is the cylinder y^2+(z-25)^2<=400 along x, removing 2 sqrt(400-y^2) of the 50 mm height for |y|<20. V = Int_-25^25 width(y) (50 - 2 sqrt(400-y^2) [|y|<20]) dy = 32897.51 (python midpoint quadrature, 400000 pts per piece, split at the breakpoints). The PR reports 32893.6 (mesh integration, within 1.2e-4). One body, one shell",
|
||||
"body_count": 1,
|
||||
"shells": 1,
|
||||
"volume_mm3": 32897.506
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"radius": 25
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"distance": 50,
|
||||
"operation": "new",
|
||||
"body_name": "Cyl"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 50
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
-12.5,
|
||||
-12.5
|
||||
],
|
||||
"p1": [
|
||||
12.5,
|
||||
12.5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"distance": 50,
|
||||
"direction": "negative",
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
25,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"x_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
25
|
||||
],
|
||||
"radius": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
50
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"distance": 58,
|
||||
"direction": "negative",
|
||||
"operation": "cut",
|
||||
"profiles": [
|
||||
0,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#3850",
|
||||
"tangency-labs/solidcraft#3741"
|
||||
],
|
||||
"what": "the O10 through-all hole across the wall of the body from the cross-cut case (the report's failing step: 'lumps: cannot mesh a complete shell boundary')",
|
||||
"source": "analytic",
|
||||
"method": "the hole is a O10 cylinder along y through (x=0,z=25), starting on the y=0 plane and running out through the +y wall (the body is symmetric in y, so either direction gives the same volume). It removes the material beyond the earlier cuts: Int over the disk x^2+w^2<=25 (w=z-25) of (sqrt(625-x^2) - max(sqrt(400-w^2), 12.5 for |x|<=12.5)) = 395.199 (python quadrature). V = 32897.506 - 395.199 = 32502.307. One shell",
|
||||
"body_count": 1,
|
||||
"shells": 1,
|
||||
"volume_mm3": 32502.3067
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"radius": 25
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"distance": 50,
|
||||
"operation": "new",
|
||||
"body_name": "Cyl"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"offset": 50
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
-12.5,
|
||||
-12.5
|
||||
],
|
||||
"p1": [
|
||||
12.5,
|
||||
12.5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"distance": 50,
|
||||
"direction": "negative",
|
||||
"operation": "cut"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
25,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"x_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
25
|
||||
],
|
||||
"radius": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
50
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"distance": 58,
|
||||
"direction": "negative",
|
||||
"operation": "cut",
|
||||
"profiles": [
|
||||
0,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
25
|
||||
],
|
||||
"radius": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"through_all": true,
|
||||
"direction": "negative",
|
||||
"operation": "cut"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#451"
|
||||
],
|
||||
"what": "a 12x8x8 block (x 8..20) crossing the inner sphere r=18.5 of a hollow spherical-shell tool: the cut keeps the part inside r=18.5",
|
||||
"source": "analytic",
|
||||
"method": "the block's farthest corner is at r=sqrt(20^2+4^2+4^2)=20.78 < 40, so the tool removes exactly the block's part with r>18.5. Kept: V = integral over |y|,|z|<=4 of (min(20, sqrt(18.5^2-y^2-z^2)) - 8) dy dz = 653.343 (numeric quadrature in python, midpoint 1500 x Simpson 200 points; the integrand is smooth). The far face x=20 lies wholly outside the sphere (r>=20), so the kept part is one piece",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 653.3429
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
18.5,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
-40,
|
||||
0
|
||||
],
|
||||
[
|
||||
-18.5,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"start": [
|
||||
-18.5,
|
||||
0
|
||||
],
|
||||
"sweep": -180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.revolve",
|
||||
"params": {
|
||||
"axis": "x",
|
||||
"body_name": "Tool"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"corner": [
|
||||
8,
|
||||
-4,
|
||||
-4
|
||||
],
|
||||
"length": 12,
|
||||
"width": 8,
|
||||
"height": 8,
|
||||
"body_name": "Block"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Block",
|
||||
"tools": [
|
||||
"Tool"
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#451"
|
||||
],
|
||||
"what": "a block wholly inside the void of a hollow spherical-shell tool (r 18.5 to 40): cutting leaves it untouched, the tool never reaches it",
|
||||
"source": "analytic",
|
||||
"method": "the tool is the material between r=18.5 and r=40; the 8 mm block centred on the origin lies within r<=6.93 < 18.5, so it shares no volume with the tool: V = 8^3 = 512, still one body, centroid at the origin",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 512.0,
|
||||
"center_of_mass": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
18.5,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"sweep": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
-40,
|
||||
0
|
||||
],
|
||||
[
|
||||
-18.5,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"start": [
|
||||
-18.5,
|
||||
0
|
||||
],
|
||||
"sweep": -180
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.revolve",
|
||||
"params": {
|
||||
"axis": "x",
|
||||
"body_name": "Tool"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"center": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"length": 8,
|
||||
"width": 8,
|
||||
"height": 8,
|
||||
"body_name": "Block"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.combine",
|
||||
"params": {
|
||||
"target": "Block",
|
||||
"tools": [
|
||||
"Tool"
|
||||
],
|
||||
"operation": "cut"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -49,7 +49,7 @@
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3518",
|
||||
"why": "other area: shell (split of a user's body by a plane, 'Intersect: no result')"
|
||||
"why": "needs a user's design that can't be rebuilt synthetically: a plane split (XZ) of one body of a 41-body design, no geometry given; plain plane splits are covered by case 13"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3531",
|
||||
@@ -81,7 +81,7 @@
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3602",
|
||||
"why": "other area: shell (split of a user's body by a plane, 'Intersect: no result')"
|
||||
"why": "needs a user's design that can't be rebuilt synthetically: a split by a sketch line (l8 of sketch 9) of one body, the body is not given; plain splits are covered by case 13"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3607",
|
||||
@@ -151,10 +151,6 @@
|
||||
"source": "tangency-labs/solidcraft#3734",
|
||||
"why": "not geometry: the failing step is a profile that is not closed in the user's sketch"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3741",
|
||||
"why": "needs a user's design that can't be rebuilt synthetically: the report gives only the failing command, no geometry ('lumps: ...' error on a cut or join in a user's design)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3753",
|
||||
"why": "other area: fillets (a chamfer inside a circular pattern is too large for the edge, 'grow the part'; the pattern itself is not at fault)"
|
||||
|
||||
@@ -59,10 +59,6 @@
|
||||
"source": "tangency-labs/solidcraft#1934",
|
||||
"why": "hang on a user's STEP file (gehaeuse82.stp), performance; no synthetic repro"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#1984",
|
||||
"why": "other area: booleans (interference of near-coaxial pins after a round trip)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#2052",
|
||||
"why": "DXF import, not STEP/IGES"
|
||||
@@ -155,10 +151,6 @@
|
||||
"source": "tangency-labs/solidcraft#3557",
|
||||
"why": "export-only: loop order of merged cone and cylinder faces on STEP export"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3573",
|
||||
"why": "other area: shell (tapered filleted box shell, fillet edges 0.02 mm off the surface)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3595",
|
||||
"why": "performance only (orbit stutter with ~100 bodies)"
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#3576"
|
||||
"tangency-labs/solidcraft#3576",
|
||||
"tangency-labs/solidcraft#3573"
|
||||
],
|
||||
"what": "a 120x80x40 box drafted 5 degrees with 4 mm rounds on the sloping corners, shelled 2 mm open at the top: the inner rounds' edges must lie on their faces",
|
||||
"what": "a 120x80x40 box drafted 5 degrees with 4 mm rounds on the sloping corners, shelled 2 mm open at the top: the inner rounds' edges must lie on their faces (#3573 reports the same design)",
|
||||
"source": "invariants",
|
||||
"method": "no closed-form volume (tilted rounds). Invariants: the shell succeeds, one closed body, and the record's geometry check holds (every edge of the four inner rounds lies on its faces; the old offset left them up to 0.02 mm off, which other STEP readers reject)",
|
||||
"body_count": 1
|
||||
|
||||
@@ -7,18 +7,6 @@
|
||||
"source": "tangency-labs/solidcraft#209",
|
||||
"why": "no geometry given (a screenshot and 'the shell removed everything'); needs the user's design"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#451",
|
||||
"why": "other area: booleans (cut with a hollow spherical-shell tool)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#1107",
|
||||
"why": "other area: booleans (combine of a hollow hub with 9 lofted blades; cavity ownership)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#1140",
|
||||
"why": "other area: booleans (cutting a hollow lofted tube in half; a vertex a hair inside an edge)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#1379",
|
||||
"why": "needs the user's design; the refusal ('rim would have no thickness': round r2 tangent to the open face, shell 2 mm) is also the intended clean refusal, so no wrong result is recorded"
|
||||
@@ -33,7 +21,7 @@
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#2259",
|
||||
"why": "other area: booleans (second cut beside an earlier cut through a shelled arched block; mesh edge snapping, seed 61)"
|
||||
"why": "needs the eight-command script of #2258 (a shelled arched block, two cylinder cuts); neither it nor the arch dimensions are in the PR, and the failure hangs on 2e-6 mm vertex gaps that a re-guessed profile would not reproduce"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#2421",
|
||||
@@ -95,10 +83,6 @@
|
||||
"source": "tangency-labs/solidcraft#2917",
|
||||
"why": "needs the user's design (only the failing pick and error text are given); no synthetic geometry can be inferred"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#2928",
|
||||
"why": "other area: booleans (join of cap-touching prisms with slightly offset cylinder walls)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#2935",
|
||||
"why": "empty report: no body, pick or error given"
|
||||
@@ -207,10 +191,6 @@
|
||||
"source": "tangency-labs/solidcraft#3828",
|
||||
"why": "other area: 2D sketch offset of splines (sketch.offset), not a solid operation"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3850",
|
||||
"why": "other area: booleans (cut whose end face touches a round side leaves an empty shell)"
|
||||
},
|
||||
{
|
||||
"source": "tangency-labs/solidcraft#3933",
|
||||
"why": "needs the user's design; the refusal ('rim would have no thickness': round r2 tangent to the open face, shell 2 mm) is also the intended clean refusal"
|
||||
|
||||
Reference in New Issue
Block a user