From 85f7200bbf4bf5ee61a79ab38d7bc35a2493320e Mon Sep 17 00:00:00 2001 From: Brennen Herbruck Date: Wed, 21 Oct 2026 06:20:29 -0400 Subject: [PATCH] kernel-cases: sweeps lofted tubes, blades and windows from #968-#2992 Hollow elbows lofted along a bend (Pappus), hollow bands halved and joined, a flange touching the end of a bent tapered loft, tapered and twisted lofted blades patterned round a disk, and a loft joined into a window that it overhangs, alone and mirrored on a hollow case. Co-Authored-By: Claude Sonnet 5.5 --- .../expected.json | 11 + .../recipe.json | 156 +++ .../expected.json | 10 + .../recipe.json | 1078 +++++++++++++++++ .../expected.json | 11 + .../recipe.json | 599 +++++++++ .../expected.json | 11 + .../recipe.json | 599 +++++++++ .../expected.json | 10 + .../recipe.json | 168 +++ .../expected.json | 11 + .../recipe.json | 214 ++++ .../expected.json | 11 + .../recipe.json | 565 +++++++++ .../expected.json | 11 + .../recipe.json | 515 ++++++++ .../expected.json | 11 + .../recipe.json | 915 ++++++++++++++ 18 files changed, 4906 insertions(+) create mode 100644 tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/expected.json create mode 100644 tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/recipe.json create mode 100644 tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/expected.json create mode 100644 tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/recipe.json create mode 100644 tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/expected.json create mode 100644 tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/recipe.json create mode 100644 tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/expected.json create mode 100644 tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/recipe.json create mode 100644 tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/expected.json create mode 100644 tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/recipe.json create mode 100644 tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/expected.json create mode 100644 tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/recipe.json create mode 100644 tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/expected.json create mode 100644 tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/recipe.json create mode 100644 tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/expected.json create mode 100644 tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/recipe.json create mode 100644 tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/expected.json create mode 100644 tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/recipe.json diff --git a/tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/expected.json b/tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/expected.json new file mode 100644 index 0000000000..9873400a6e --- /dev/null +++ b/tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1093", + "tangency-labs/solidcraft#1107" + ], + "what": "a tapered lofted blade (6 x 3 root embedded 2 mm into a disk, 3 x 1.5 tip) joined to a disk and patterned 9 times round the axis as joins (31 minutes with eight retries, or \"cavity ownership is ambiguous\")", + "source": "analytic", + "method": "the blade is a ruled loft of two rectangles (a prismatoid): above the disk top z = 5 its section runs from 5.838 x 2.919 to 3 x 1.5; with the section area quadratic in z, V_blade = 35/6 (A(5) + 4 A(22.5) + A(40)) = 353.464. The blades stand 40 mm out on a circle and are far apart, each embedded in the disk (pi 60^2 5 = 56548.7): V = disk + 9 V_blade = 59729.8. One body.", + "body_count": 1, + "volume_mm3": 59729.84563167252 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/recipe.json b/tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/recipe.json new file mode 100644 index 0000000000..106ff14f8c --- /dev/null +++ b/tests/kernel-cases/sweeps/1093-circular-pattern-of-a-lofted-join-blade/recipe.json @@ -0,0 +1,156 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Disk" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 60 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "distance": 5, + "body_name": "Hub" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 3.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Root" + } + }, + { + "command": "sketch.rectangle.center", + "params": { + "center": [ + 40, + 0 + ], + "corner": [ + 43, + 1.5 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 40.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Tip" + } + }, + { + "command": "sketch.rectangle.center", + "params": { + "center": [ + 40, + 0 + ], + "corner": [ + 41.5, + 0.75 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "Root" + }, + { + "sketch": "Tip" + } + ], + "operation": "join", + "name": "Blade", + "targets": [ + "Hub" + ] + } + }, + { + "command": "solid.pattern.circular", + "params": { + "features": [ + "Blade" + ], + "axis": "Z", + "count": 9 + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/expected.json b/tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/expected.json new file mode 100644 index 0000000000..d022a9c8cd --- /dev/null +++ b/tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1140" + ], + "what": "two hollow lofted tube bands (outer r 30, bore r 18 on R100, 5 sections each, 45 degrees each), each cut in half through its axis plane z = 0 and the halves joined into one body (\"no result\" after ten minutes of fallbacks)", + "source": "analytic", + "method": "the two bands meet on a shared section plane and together are the 90 degree wall: pi (30^2 - 18^2) * 100 * (pi/2), cut in half by the plane through the axis (the arc lies in z = 0, so the halves are equal): V = 1/2 * pi * 576 * 100 * pi/2 = 142122.3.", + "body_count": 1, + "volume_mm3": 142122.30337568675 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/recipe.json b/tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/recipe.json new file mode 100644 index 0000000000..216790b667 --- /dev/null +++ b/tests/kernel-cases/sweeps/1140-loft-hollow-tube-bands-halved-and-joined/recipe.json @@ -0,0 +1,1078 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 100.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 1.0, + 0.0, + 0 + ] + }, + "name": "O0_0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 98.07852804032305, + 19.509032201612825, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9807852804032304, + 0.19509032201612825, + 0 + ] + }, + "name": "O0_1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 92.38795325112868, + 38.268343236508976, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9238795325112867, + 0.3826834323650898, + 0 + ] + }, + "name": "O0_2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 83.14696123025452, + 55.557023301960214, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.8314696123025452, + 0.5555702330196022, + 0 + ] + }, + "name": "O0_3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 70.71067811865476, + 70.71067811865474, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.7071067811865476, + 0.7071067811865475, + 0 + ] + }, + "name": "O0_4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "O0_0" + }, + { + "sketch": "O0_1" + }, + { + "sketch": "O0_2" + }, + { + "sketch": "O0_3" + }, + { + "sketch": "O0_4" + } + ], + "operation": "new", + "body_name": "Out0" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 99.87502603949663, + -4.997916927067833, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9987502603949663, + -0.04997916927067833, + 0 + ] + }, + "name": "I0_0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 100.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 1.0, + 0.0, + 0 + ] + }, + "name": "I0_1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 98.07852804032305, + 19.509032201612825, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9807852804032304, + 0.19509032201612825, + 0 + ] + }, + "name": "I0_2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 92.38795325112868, + 38.268343236508976, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9238795325112867, + 0.3826834323650898, + 0 + ] + }, + "name": "I0_3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 83.14696123025452, + 55.557023301960214, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.8314696123025452, + 0.5555702330196022, + 0 + ] + }, + "name": "I0_4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 70.71067811865476, + 70.71067811865474, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.7071067811865476, + 0.7071067811865475, + 0 + ] + }, + "name": "I0_5" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 67.08824723277438, + 74.15636913464778, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.6708824723277438, + 0.7415636913464777, + 0 + ] + }, + "name": "I0_6" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "I0_0" + }, + { + "sketch": "I0_1" + }, + { + "sketch": "I0_2" + }, + { + "sketch": "I0_3" + }, + { + "sketch": "I0_4" + }, + { + "sketch": "I0_5" + }, + { + "sketch": "I0_6" + } + ], + "operation": "new", + "body_name": "Bore0" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Out0", + "tools": [ + "Bore0" + ], + "operation": "cut" + } + }, + { + "command": "solid.box", + "params": { + "length": 600, + "width": 600, + "height": 100, + "corner": [ + -300, + -300, + -100 + ], + "body_name": "Under0" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Out0", + "tools": [ + "Under0" + ], + "operation": "cut" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 70.71067811865476, + 70.71067811865474, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.7071067811865476, + 0.7071067811865475, + 0 + ] + }, + "name": "O1_0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 55.55702330196023, + 83.14696123025452, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.5555702330196023, + 0.8314696123025452, + 0 + ] + }, + "name": "O1_1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 38.26834323650898, + 92.38795325112868, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.38268343236508984, + 0.9238795325112867, + 0 + ] + }, + "name": "O1_2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 19.509032201612833, + 98.07852804032305, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.19509032201612833, + 0.9807852804032304, + 0 + ] + }, + "name": "O1_3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 6.123233995736766e-15, + 100.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 6.123233995736766e-17, + 1.0, + 0 + ] + }, + "name": "O1_4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "O1_0" + }, + { + "sketch": "O1_1" + }, + { + "sketch": "O1_2" + }, + { + "sketch": "O1_3" + }, + { + "sketch": "O1_4" + } + ], + "operation": "new", + "body_name": "Out1" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 74.15636913464778, + 67.08824723277438, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.7415636913464778, + 0.6708824723277438, + 0 + ] + }, + "name": "I1_0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 70.71067811865476, + 70.71067811865474, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.7071067811865476, + 0.7071067811865475, + 0 + ] + }, + "name": "I1_1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 55.55702330196023, + 83.14696123025452, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.5555702330196023, + 0.8314696123025452, + 0 + ] + }, + "name": "I1_2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 38.26834323650898, + 92.38795325112868, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.38268343236508984, + 0.9238795325112867, + 0 + ] + }, + "name": "I1_3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 19.509032201612833, + 98.07852804032305, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.19509032201612833, + 0.9807852804032304, + 0 + ] + }, + "name": "I1_4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 6.123233995736766e-15, + 100.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 6.123233995736766e-17, + 1.0, + 0 + ] + }, + "name": "I1_5" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + -4.997916927067831, + 99.87502603949663, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + -0.04997916927067831, + 0.9987502603949663, + 0 + ] + }, + "name": "I1_6" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "I1_0" + }, + { + "sketch": "I1_1" + }, + { + "sketch": "I1_2" + }, + { + "sketch": "I1_3" + }, + { + "sketch": "I1_4" + }, + { + "sketch": "I1_5" + }, + { + "sketch": "I1_6" + } + ], + "operation": "new", + "body_name": "Bore1" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Out1", + "tools": [ + "Bore1" + ], + "operation": "cut" + } + }, + { + "command": "solid.box", + "params": { + "length": 600, + "width": 600, + "height": 100, + "corner": [ + -300, + -300, + -100 + ], + "body_name": "Under1" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Out1", + "tools": [ + "Under1" + ], + "operation": "cut" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Out0", + "tools": [ + "Out1" + ], + "operation": "join" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/expected.json b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/expected.json new file mode 100644 index 0000000000..c30185f2d9 --- /dev/null +++ b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1391", + "tangency-labs/solidcraft#1556" + ], + "what": "a half tube (6 mm wall, inner radius tapering 60 to 75 mm) lofted through 5 sections along an R300 bend of 20 degrees, with an 8 mm half-annulus flange (inner radius +3 into the wall, outer +25 beyond it) extruded from the end plane outward and joined: the flange face lies in the end plane (\"Union: no result\")", + "source": "analytic", + "method": "each section is a half annulus in a plane through the bend axis, centred on the path, so Pappus holds with the section area A(t) = pi/2 (12 r(t) + 36), r(t) = 60 + 15 t: V_tube = R theta * pi/2 (12 * 67.5 + 36), R = 300, theta = 20 degrees = 139161.4. The flange stands outside the tube end plane and touches the tube only along the coplanar end face, so V = V_tube + V_flange, V_flange = pi/2 (106^2 - 78^2) 8 = 64741.9. One body.", + "body_count": 1, + "volume_mm3": 203903.36346053838 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/recipe.json b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/recipe.json new file mode 100644 index 0000000000..6da6e45277 --- /dev/null +++ b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-20deg/recipe.json @@ -0,0 +1,599 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.0, + -1.0, + 0 + ] + }, + "name": "S0" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -66.0 + ], + "through": [ + 66.0, + 0 + ], + "end": [ + 0, + 66.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 66.0 + ], + [ + 0, + 60.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 60.0 + ], + "through": [ + 60.0, + 0 + ], + "end": [ + 0, + -60.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -60.0 + ], + [ + 0, + -66.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 26.146722824, + 1.141590572, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.087155743, + -0.996194698, + 0 + ] + }, + "name": "S1" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -69.75 + ], + "through": [ + 69.75, + 0 + ], + "end": [ + 0, + 69.75 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 69.75 + ], + [ + 0, + 63.75 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 63.75 + ], + "through": [ + 63.75, + 0 + ], + "end": [ + 0, + -63.75 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -63.75 + ], + [ + 0, + -69.75 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 52.0944533, + 4.557674096, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.173648178, + -0.984807753, + 0 + ] + }, + "name": "S2" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -73.5 + ], + "through": [ + 73.5, + 0 + ], + "end": [ + 0, + 73.5 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 73.5 + ], + [ + 0, + 67.5 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 67.5 + ], + "through": [ + 67.5, + 0 + ], + "end": [ + 0, + -67.5 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -67.5 + ], + [ + 0, + -73.5 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 77.645713531, + 10.222252113, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.258819045, + -0.965925826, + 0 + ] + }, + "name": "S3" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -77.25 + ], + "through": [ + 77.25, + 0 + ], + "end": [ + 0, + 77.25 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 77.25 + ], + [ + 0, + 71.25 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 71.25 + ], + "through": [ + 71.25, + 0 + ], + "end": [ + 0, + -71.25 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -71.25 + ], + [ + 0, + -77.25 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 102.606042998, + 18.092213764, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.342020143, + -0.939692621, + 0 + ] + }, + "name": "S4" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -81.0 + ], + "through": [ + 81.0, + 0 + ], + "end": [ + 0, + 81.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 81.0 + ], + [ + 0, + 75.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 75.0 + ], + "through": [ + 75.0, + 0 + ], + "end": [ + 0, + -75.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -75.0 + ], + [ + 0, + -81.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "S0" + }, + { + "sketch": "S1" + }, + { + "sketch": "S2" + }, + { + "sketch": "S3" + }, + { + "sketch": "S4" + } + ], + "operation": "new", + "name": "TubeLoft", + "body_name": "Tube" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 102.606042998, + 18.092213764, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.342020143, + -0.939692621, + 0 + ] + }, + "name": "Flange" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -106.0 + ], + "through": [ + 106.0, + 0 + ], + "end": [ + 0, + 106.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 106.0 + ], + [ + 0, + 78.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 78.0 + ], + "through": [ + 78.0, + 0 + ], + "end": [ + 0, + -78.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -78.0 + ], + [ + 0, + -106.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Flange", + "distance": 8.0, + "operation": "join", + "targets": [ + "Tube" + ], + "name": "JoinFlange" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/expected.json b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/expected.json new file mode 100644 index 0000000000..89fba1fe93 --- /dev/null +++ b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1391", + "tangency-labs/solidcraft#1556" + ], + "what": "a half tube (6 mm wall, inner radius tapering 60 to 75 mm) lofted through 5 sections along an R300 bend of 40 degrees, with an 8 mm half-annulus flange (inner radius +3 into the wall, outer +25 beyond it) extruded from the end plane outward and joined: the flange face lies in the end plane (\"Union: no result\")", + "source": "analytic", + "method": "each section is a half annulus in a plane through the bend axis, centred on the path, so Pappus holds with the section area A(t) = pi/2 (12 r(t) + 36), r(t) = 60 + 15 t: V_tube = R theta * pi/2 (12 * 67.5 + 36), R = 300, theta = 40 degrees = 278322.8. The flange stands outside the tube end plane and touches the tube only along the coplanar end face, so V = V_tube + V_flange, V_flange = pi/2 (106^2 - 78^2) 8 = 64741.9. One body.", + "body_count": 1, + "volume_mm3": 343064.7855158983 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/recipe.json b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/recipe.json new file mode 100644 index 0000000000..b60b9bf85a --- /dev/null +++ b/tests/kernel-cases/sweeps/1391-flange-flush-on-the-end-of-a-bent-tapered-loft-40deg/recipe.json @@ -0,0 +1,599 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.0, + -1.0, + 0 + ] + }, + "name": "S0" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -66.0 + ], + "through": [ + 66.0, + 0 + ], + "end": [ + 0, + 66.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 66.0 + ], + [ + 0, + 60.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 60.0 + ], + "through": [ + 60.0, + 0 + ], + "end": [ + 0, + -60.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -60.0 + ], + [ + 0, + -66.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 52.0944533, + 4.557674096, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.173648178, + -0.984807753, + 0 + ] + }, + "name": "S1" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -69.75 + ], + "through": [ + 69.75, + 0 + ], + "end": [ + 0, + 69.75 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 69.75 + ], + [ + 0, + 63.75 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 63.75 + ], + "through": [ + 63.75, + 0 + ], + "end": [ + 0, + -63.75 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -63.75 + ], + [ + 0, + -69.75 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 102.606042998, + 18.092213764, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.342020143, + -0.939692621, + 0 + ] + }, + "name": "S2" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -73.5 + ], + "through": [ + 73.5, + 0 + ], + "end": [ + 0, + 73.5 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 73.5 + ], + [ + 0, + 67.5 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 67.5 + ], + "through": [ + 67.5, + 0 + ], + "end": [ + 0, + -67.5 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -67.5 + ], + [ + 0, + -73.5 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 150.0, + 40.192378865, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.5, + -0.866025404, + 0 + ] + }, + "name": "S3" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -77.25 + ], + "through": [ + 77.25, + 0 + ], + "end": [ + 0, + 77.25 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 77.25 + ], + [ + 0, + 71.25 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 71.25 + ], + "through": [ + 71.25, + 0 + ], + "end": [ + 0, + -71.25 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -71.25 + ], + [ + 0, + -77.25 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 192.836282906, + 70.186667064, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.64278761, + -0.766044443, + 0 + ] + }, + "name": "S4" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -81.0 + ], + "through": [ + 81.0, + 0 + ], + "end": [ + 0, + 81.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 81.0 + ], + [ + 0, + 75.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 75.0 + ], + "through": [ + 75.0, + 0 + ], + "end": [ + 0, + -75.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -75.0 + ], + [ + 0, + -81.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "S0" + }, + { + "sketch": "S1" + }, + { + "sketch": "S2" + }, + { + "sketch": "S3" + }, + { + "sketch": "S4" + } + ], + "operation": "new", + "name": "TubeLoft", + "body_name": "Tube" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 192.836282906, + 70.186667064, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.64278761, + -0.766044443, + 0 + ] + }, + "name": "Flange" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -106.0 + ], + "through": [ + 106.0, + 0 + ], + "end": [ + 0, + 106.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 106.0 + ], + [ + 0, + 78.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 78.0 + ], + "through": [ + 78.0, + 0 + ], + "end": [ + 0, + -78.0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -78.0 + ], + [ + 0, + -106.0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Flange", + "distance": 8.0, + "operation": "join", + "targets": [ + "Tube" + ], + "name": "JoinFlange" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/expected.json b/tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/expected.json new file mode 100644 index 0000000000..1ccd43fae9 --- /dev/null +++ b/tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1490" + ], + "what": "a wall 2.5 mm thick with a 30 x 20 window cut through it and a loft (34 x 24 growing to 38 x 28 over 3.5 mm) joined into the window so that its strips overhang the wall on both faces (\"Union: no result\" at some wall thicknesses)", + "source": "analytic", + "method": "the loft section is larger than the window at every depth inside the wall, and lies inside the wall face, so inside the 2.5 mm slab the window is filled and nothing else changes: the body is the plain 2.5 x 60 x 40 wall (6000) plus the two overhanging strips of the loft, x from -0.5 to 0 and from 2.5 to 3.0, of area w(x) h(x) with w = 34 + 4 (x + 0.5)/3.5 and h = 24 + 4 (x + 0.5)/3.5: V = 6000 + 938.966.", + "body_count": 1, + "volume_mm3": 6938.965986394556 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/recipe.json b/tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/recipe.json new file mode 100644 index 0000000000..7291c4bdd6 --- /dev/null +++ b/tests/kernel-cases/sweeps/1490-loft-joined-into-a-window-of-a-wall-that-it-overhangs/recipe.json @@ -0,0 +1,168 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 2.5, + "width": 60, + "height": 40, + "corner": [ + 0, + -30, + 0 + ], + "body_name": "Wall" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + -1.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Win" + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + -15, + 10 + ], + "p1": [ + 15, + 30 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Win", + "distance": 5, + "operation": "cut", + "targets": [ + "Wall" + ], + "name": "PleatCut" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + -0.5, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Near" + } + }, + { + "command": "sketch.rectangle.center", + "params": { + "center": [ + 0, + 20 + ], + "corner": [ + 17, + 32 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 3.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Far" + } + }, + { + "command": "sketch.rectangle.center", + "params": { + "center": [ + 0, + 20 + ], + "corner": [ + 19, + 34 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "Near" + }, + { + "sketch": "Far" + } + ], + "operation": "join", + "name": "PleatNear", + "targets": [ + "Wall" + ] + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/expected.json b/tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/expected.json new file mode 100644 index 0000000000..7925000d9f --- /dev/null +++ b/tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1669" + ], + "what": "a closed hollow box (60 x 60 x 40, 2.5 mm walls) with a window cut in one end wall and a loft joined into it, both mirrored about the middle plane x = 30 onto the far wall (\"Union: no result\" on the mirror only)", + "source": "analytic", + "method": "as for one wall: each window is filled by its loft (the loft section is larger than the window), and what is added to the plain hollow case (60 x 60 x 40 minus the 55 x 55 x 35 cavity = 38125) is the overhanging strip of the loft outside the wall (x in [-0.5, 0]) and the strip inside the cavity (x in [2.5, 3]), 938.966 each; the mirror gives the far wall the same: V = 38125 + 2 * 938.966. The windows are filled again, so the cavity is sealed (an internal void: shell count 2, which the rig cannot grade, so valid is false).", + "valid": false, + "body_count": 1, + "volume_mm3": 40002.93197278911 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/recipe.json b/tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/recipe.json new file mode 100644 index 0000000000..bec7d49745 --- /dev/null +++ b/tests/kernel-cases/sweeps/1669-mirrored-window-and-loft-on-a-hollow-case/recipe.json @@ -0,0 +1,214 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 60, + "width": 60, + "height": 40, + "corner": [ + 0, + -30, + 0 + ], + "body_name": "Case" + } + }, + { + "command": "solid.box", + "params": { + "length": 55, + "width": 55, + "height": 35, + "corner": [ + 2.5, + -27.5, + 2.5 + ], + "body_name": "Cavity" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Case", + "tools": [ + "Cavity" + ], + "operation": "cut", + "name": "Hollow" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + -1.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Win" + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + -15, + 10 + ], + "p1": [ + 15, + 30 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Win", + "distance": 3.5, + "operation": "cut", + "targets": [ + "Case" + ], + "name": "PleatCut" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + -0.5, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Near" + } + }, + { + "command": "sketch.rectangle.center", + "params": { + "center": [ + 0, + 20 + ], + "corner": [ + 17, + 32 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 3.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Far" + } + }, + { + "command": "sketch.rectangle.center", + "params": { + "center": [ + 0, + 20 + ], + "corner": [ + 19, + 34 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "Near" + }, + { + "sketch": "Far" + } + ], + "operation": "join", + "name": "PleatNear", + "targets": [ + "Case" + ] + } + }, + { + "command": "solid.mirror", + "params": { + "features": [ + "PleatCut", + "PleatNear" + ], + "plane": { + "origin": [ + 30, + 0, + 0 + ], + "normal": [ + 1, + 0, + 0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/expected.json b/tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/expected.json new file mode 100644 index 0000000000..7d06c9658e --- /dev/null +++ b/tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#2992", + "tangency-labs/solidcraft#1856" + ], + "what": "a disk joined to 36 patterned twisted lofted blades (each a loft of 9 rectangle sections turning 7.5 degrees apart, rooted 2 mm inside the disk): hang of minutes", + "source": "analytic", + "method": "each blade section is a 6 x 3 rectangle (area 18) turning about its own centre, which stays on the vertical line at radius 50: the section area and centre do not change, so a blade above the disk top z = 5 is 18 * (43 - 5) = 684 and its root part is inside the disk. The 36 blades (centres 8.7 apart, reach 3.4 each) do not touch each other, so V = pi 60^2 5 + 36 * 684 = 81172.7.", + "body_count": 1, + "volume_mm3": 81172.66776461627 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/recipe.json b/tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/recipe.json new file mode 100644 index 0000000000..0d89b1dc4a --- /dev/null +++ b/tests/kernel-cases/sweeps/1856-disk-and-36-twisted-lofted-blades-joined/recipe.json @@ -0,0 +1,565 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Disk" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 60 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "distance": 5, + "body_name": "Disk" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 3.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B0" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 47.0, + -1.5 + ], + [ + 53.0, + -1.5 + ], + [ + 53.0, + 1.5 + ], + [ + 47.0, + 1.5 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 8.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B1" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 47.221454704, + -1.878745869 + ], + [ + 53.170123872, + -1.095588715 + ], + [ + 52.778545296, + 1.878745869 + ], + [ + 46.829876128, + 1.095588715 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 13.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B2" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 47.490451089, + -2.225345875 + ], + [ + 53.286006047, + -0.672431604 + ], + [ + 52.509548911, + 2.225345875 + ], + [ + 46.713993953, + 0.672431604 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 18.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B3" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 47.802386551, + -2.533869596 + ], + [ + 53.345663746, + -0.237769002 + ], + [ + 52.197613449, + 2.533869596 + ], + [ + 46.654336254, + 0.237769002 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 23.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B4" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 48.151923789, + -2.799038106 + ], + [ + 53.348076211, + 0.200961894 + ], + [ + 51.848076211, + 2.799038106 + ], + [ + 46.651923789, + -0.200961894 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 28.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B5" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 48.533082123, + -3.016314297 + ], + [ + 53.293202164, + 0.636254277 + ], + [ + 51.466917877, + 3.016314297 + ], + [ + 46.706797836, + -0.636254277 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 33.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B6" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 48.939339828, + -3.181980515 + ], + [ + 53.181980515, + 1.060660172 + ], + [ + 51.060660172, + 3.181980515 + ], + [ + 46.818019485, + -1.060660172 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 38.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B7" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 49.363745723, + -3.293202164 + ], + [ + 53.016314297, + 1.466917877 + ], + [ + 50.636254277, + 3.293202164 + ], + [ + 46.983685703, + -1.466917877 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 43.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "B8" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 49.799038106, + -3.348076211 + ], + [ + 52.799038106, + 1.848076211 + ], + [ + 50.200961894, + 3.348076211 + ], + [ + 47.200961894, + -1.848076211 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "B0" + }, + { + "sketch": "B1" + }, + { + "sketch": "B2" + }, + { + "sketch": "B3" + }, + { + "sketch": "B4" + }, + { + "sketch": "B5" + }, + { + "sketch": "B6" + }, + { + "sketch": "B7" + }, + { + "sketch": "B8" + } + ], + "operation": "join", + "name": "Blade", + "targets": [ + "Disk" + ] + } + }, + { + "command": "solid.pattern.circular", + "params": { + "features": [ + "Blade" + ], + "axis": "Z", + "count": 36 + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/expected.json b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/expected.json new file mode 100644 index 0000000000..4844d8d56f --- /dev/null +++ b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#968", + "tangency-labs/solidcraft#1084" + ], + "what": "a bent tube (circles r 30 lofted through 5 sections along an R100 arc turning 60 degrees) with a bore (r 18, sections running 5 mm of arc past both ends) cut out of it: a hollow elbow (\"no result\" for some section counts, not their neighbours)", + "source": "analytic", + "method": "the wall of a bent tube is a ring section turned about the bend axis, its centre at radius 100: Pappus V = pi (30^2 - 18^2) * 100 * theta with theta = 60 degrees = 189496.4. The bore overshoots both ends along the same arc, so the cut opens the ends and leaves exactly the wall.", + "body_count": 1, + "volume_mm3": 189496.40450091567 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/recipe.json b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/recipe.json new file mode 100644 index 0000000000..506c5674d6 --- /dev/null +++ b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-60deg-5sections/recipe.json @@ -0,0 +1,515 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 100.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 1.0, + 0.0, + 0 + ] + }, + "name": "O0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 96.59258262890683, + 25.881904510252074, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9659258262890683, + 0.25881904510252074, + 0 + ] + }, + "name": "O1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 86.60254037844388, + 49.99999999999999, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.8660254037844387, + 0.49999999999999994, + 0 + ] + }, + "name": "O2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 70.71067811865476, + 70.71067811865474, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.7071067811865476, + 0.7071067811865475, + 0 + ] + }, + "name": "O3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 50.000000000000014, + 86.60254037844386, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.5000000000000001, + 0.8660254037844386, + 0 + ] + }, + "name": "O4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "O0" + }, + { + "sketch": "O1" + }, + { + "sketch": "O2" + }, + { + "sketch": "O3" + }, + { + "sketch": "O4" + } + ], + "operation": "new", + "name": "LoftO", + "body_name": "TubeO" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 99.87502603949663, + -4.997916927067833, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9987502603949663, + -0.04997916927067833, + 0 + ] + }, + "name": "I0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 100.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 1.0, + 0.0, + 0 + ] + }, + "name": "I1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 96.59258262890683, + 25.881904510252074, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9659258262890683, + 0.25881904510252074, + 0 + ] + }, + "name": "I2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 86.60254037844388, + 49.99999999999999, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.8660254037844387, + 0.49999999999999994, + 0 + ] + }, + "name": "I3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 70.71067811865476, + 70.71067811865474, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.7071067811865476, + 0.7071067811865475, + 0 + ] + }, + "name": "I4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 50.000000000000014, + 86.60254037844386, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.5000000000000001, + 0.8660254037844386, + 0 + ] + }, + "name": "I5" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 45.60918999490332, + 88.9932682173703, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.45609189994903315, + 0.889932682173703, + 0 + ] + }, + "name": "I6" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "I0" + }, + { + "sketch": "I1" + }, + { + "sketch": "I2" + }, + { + "sketch": "I3" + }, + { + "sketch": "I4" + }, + { + "sketch": "I5" + }, + { + "sketch": "I6" + } + ], + "operation": "new", + "name": "LoftI", + "body_name": "TubeI" + } + }, + { + "command": "solid.combine", + "params": { + "target": "TubeO", + "tools": [ + "TubeI" + ], + "operation": "cut", + "name": "Hollow" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/expected.json b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/expected.json new file mode 100644 index 0000000000..b596f5d42d --- /dev/null +++ b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#968", + "tangency-labs/solidcraft#1084" + ], + "what": "a bent tube (circles r 30 lofted through 10 sections along an R100 arc turning 90 degrees) with a bore (r 18, sections running 5 mm of arc past both ends) cut out of it: a hollow elbow (\"no result\" for some section counts, not their neighbours)", + "source": "analytic", + "method": "the wall of a bent tube is a ring section turned about the bend axis, its centre at radius 100: Pappus V = pi (30^2 - 18^2) * 100 * theta with theta = 90 degrees = 284244.6. The bore overshoots both ends along the same arc, so the cut opens the ends and leaves exactly the wall.", + "body_count": 1, + "volume_mm3": 284244.6067513735 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/recipe.json b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/recipe.json new file mode 100644 index 0000000000..f93d37168e --- /dev/null +++ b/tests/kernel-cases/sweeps/968-loft-hollow-elbow-90deg-10sections/recipe.json @@ -0,0 +1,915 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 100.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 1.0, + 0.0, + 0 + ] + }, + "name": "O0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 98.4807753012208, + 17.364817766693033, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.984807753012208, + 0.17364817766693033, + 0 + ] + }, + "name": "O1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 93.96926207859084, + 34.20201433256687, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9396926207859084, + 0.3420201433256687, + 0 + ] + }, + "name": "O2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 86.60254037844388, + 49.99999999999999, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.8660254037844387, + 0.49999999999999994, + 0 + ] + }, + "name": "O3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 76.60444431189781, + 64.27876096865393, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.766044443118978, + 0.6427876096865393, + 0 + ] + }, + "name": "O4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 64.27876096865394, + 76.60444431189781, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.6427876096865394, + 0.766044443118978, + 0 + ] + }, + "name": "O5" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 50.000000000000014, + 86.60254037844386, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.5000000000000001, + 0.8660254037844386, + 0 + ] + }, + "name": "O6" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 34.20201433256688, + 93.96926207859083, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.3420201433256688, + 0.9396926207859083, + 0 + ] + }, + "name": "O7" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 17.36481776669304, + 98.4807753012208, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.17364817766693041, + 0.984807753012208, + 0 + ] + }, + "name": "O8" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 6.123233995736766e-15, + 100.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 6.123233995736766e-17, + 1.0, + 0 + ] + }, + "name": "O9" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "O0" + }, + { + "sketch": "O1" + }, + { + "sketch": "O2" + }, + { + "sketch": "O3" + }, + { + "sketch": "O4" + }, + { + "sketch": "O5" + }, + { + "sketch": "O6" + }, + { + "sketch": "O7" + }, + { + "sketch": "O8" + }, + { + "sketch": "O9" + } + ], + "operation": "new", + "name": "LoftO", + "body_name": "TubeO" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 99.87502603949663, + -4.997916927067833, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9987502603949663, + -0.04997916927067833, + 0 + ] + }, + "name": "I0" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 100.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 1.0, + 0.0, + 0 + ] + }, + "name": "I1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 98.4807753012208, + 17.364817766693033, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.984807753012208, + 0.17364817766693033, + 0 + ] + }, + "name": "I2" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 93.96926207859084, + 34.20201433256687, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.9396926207859084, + 0.3420201433256687, + 0 + ] + }, + "name": "I3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 86.60254037844388, + 49.99999999999999, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.8660254037844387, + 0.49999999999999994, + 0 + ] + }, + "name": "I4" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 76.60444431189781, + 64.27876096865393, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.766044443118978, + 0.6427876096865393, + 0 + ] + }, + "name": "I5" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 64.27876096865394, + 76.60444431189781, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.6427876096865394, + 0.766044443118978, + 0 + ] + }, + "name": "I6" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 50.000000000000014, + 86.60254037844386, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.5000000000000001, + 0.8660254037844386, + 0 + ] + }, + "name": "I7" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 34.20201433256688, + 93.96926207859083, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.3420201433256688, + 0.9396926207859083, + 0 + ] + }, + "name": "I8" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 17.36481776669304, + 98.4807753012208, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 0.17364817766693041, + 0.984807753012208, + 0 + ] + }, + "name": "I9" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 6.123233995736766e-15, + 100.0, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + 6.123233995736766e-17, + 1.0, + 0 + ] + }, + "name": "I10" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + -4.997916927067831, + 99.87502603949663, + 0.0 + ], + "x_dir": [ + 0, + 0, + 1 + ], + "y_dir": [ + -0.04997916927067831, + 0.9987502603949663, + 0 + ] + }, + "name": "I11" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 18.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "I0" + }, + { + "sketch": "I1" + }, + { + "sketch": "I2" + }, + { + "sketch": "I3" + }, + { + "sketch": "I4" + }, + { + "sketch": "I5" + }, + { + "sketch": "I6" + }, + { + "sketch": "I7" + }, + { + "sketch": "I8" + }, + { + "sketch": "I9" + }, + { + "sketch": "I10" + }, + { + "sketch": "I11" + } + ], + "operation": "new", + "name": "LoftI", + "body_name": "TubeI" + } + }, + { + "command": "solid.combine", + "params": { + "target": "TubeO", + "tools": [ + "TubeI" + ], + "operation": "cut", + "name": "Hollow" + } + } + ] +} \ No newline at end of file