diff --git a/tests/kernel-cases/sweeps/1853-revolve-cut-half-a-slot-about-its-centreline/expected.json b/tests/kernel-cases/sweeps/1853-revolve-cut-half-a-slot-about-its-centreline/expected.json new file mode 100644 index 000000000..1b1adf0b3 --- /dev/null +++ b/tests/kernel-cases/sweeps/1853-revolve-cut-half-a-slot-about-its-centreline/expected.json @@ -0,0 +1,12 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1853", + "tangency-labs/solidcraft#1866" + ], + "what": "half a slot (r 3, centres 14 apart) revolved a full turn about its own centreline, which lies in the top face of a plate, as a cut (no result after about 10 s of retries)", + "source": "analytic", + "method": "the half slot revolved 360 degrees is a capsule: cylinder r 3, length 14 plus two hemispheres: V = pi 9 14 + 4/3 pi 27 = 508.94. Its axis lies in the plate top face z = 10, so exactly half of it is inside the 40 x 20 x 10 plate: V = 8000 - 508.94 / 2 = 7745.53. Faces: 5 plate faces + top face with the slot outline + half cylinder + 2 quarter spheres = 9.", + "body_count": 1, + "volume_mm3": 7745.530995059226, + "faces": 9 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1853-revolve-cut-half-a-slot-about-its-centreline/recipe.json b/tests/kernel-cases/sweeps/1853-revolve-cut-half-a-slot-about-its-centreline/recipe.json new file mode 100644 index 000000000..abedc1bd0 --- /dev/null +++ b/tests/kernel-cases/sweeps/1853-revolve-cut-half-a-slot-about-its-centreline/recipe.json @@ -0,0 +1,119 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 40, + "width": 20, + "height": 10, + "corner": [ + -20, + -10, + 0 + ], + "body_name": "Plate" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 10.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Slot" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -7, + 3 + ], + [ + 7, + 3 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 7, + 0 + ], + "start": [ + 10, + 0 + ], + "end": [ + 7, + 3 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + -7, + 0 + ], + "start": [ + -7, + 3 + ], + "end": [ + -10, + 0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -10, + 0 + ], + [ + 10, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "x", + "angle": "360 deg", + "operation": "cut" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-180/expected.json b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-180/expected.json new file mode 100644 index 000000000..6153daf9c --- /dev/null +++ b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-180/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1866" + ], + "what": "half a slot (r 3, centres 14 apart; the segment before the axis edge comes back to the axis along an arc) revolved 180 deg about its centreline", + "source": "analytic", + "method": "the profile lies on one side of the axis, so a turn of theta gives theta / 2 pi of the capsule (cylinder r 3, length 14 plus two hemispheres, 508.94): V = 1/2 of it; faces: the cylinder part, two spherical parts and one flat face = 4 (the two end faces of a half turn lie in the one plane through the axis and form a single stadium-shaped face).", + "body_count": 1, + "volume_mm3": 254.46900494077323, + "faces": 4 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-180/recipe.json b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-180/recipe.json new file mode 100644 index 000000000..4da79b3de --- /dev/null +++ b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-180/recipe.json @@ -0,0 +1,105 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Slot" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -7, + 3 + ], + [ + 7, + 3 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 7, + 0 + ], + "start": [ + 10, + 0 + ], + "end": [ + 7, + 3 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + -7, + 0 + ], + "start": [ + -7, + 3 + ], + "end": [ + -10, + 0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -10, + 0 + ], + [ + 10, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "x", + "angle": "180 deg", + "operation": "new" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-90/expected.json b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-90/expected.json new file mode 100644 index 000000000..74306dead --- /dev/null +++ b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-90/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1866" + ], + "what": "half a slot (r 3, centres 14 apart; the segment before the axis edge comes back to the axis along an arc) revolved 90 deg about its centreline", + "source": "analytic", + "method": "the profile lies on one side of the axis, so a turn of theta gives theta / 2 pi of the capsule (cylinder r 3, length 14 plus two hemispheres, 508.94): V = 1/4 of it; faces: the cylinder part, two spherical parts and the two planar end faces = 5.", + "body_count": 1, + "volume_mm3": 127.23450247038662, + "faces": 5 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-90/recipe.json b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-90/recipe.json new file mode 100644 index 000000000..1aba574be --- /dev/null +++ b/tests/kernel-cases/sweeps/1866-revolve-half-slot-profile-90/recipe.json @@ -0,0 +1,105 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Slot" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -7, + 3 + ], + [ + 7, + 3 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 7, + 0 + ], + "start": [ + 10, + 0 + ], + "end": [ + 7, + 3 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + -7, + 0 + ], + "start": [ + -7, + 3 + ], + "end": [ + -10, + 0 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -10, + 0 + ], + [ + 10, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "x", + "angle": "90 deg", + "operation": "new" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/2295-revolve-cut-torus-by-an-overlapping-ring/expected.json b/tests/kernel-cases/sweeps/2295-revolve-cut-torus-by-an-overlapping-ring/expected.json new file mode 100644 index 000000000..84c45c137 --- /dev/null +++ b/tests/kernel-cases/sweeps/2295-revolve-cut-torus-by-an-overlapping-ring/expected.json @@ -0,0 +1,12 @@ +{ + "sources": [ + "tangency-labs/solidcraft#2295" + ], + "what": "a torus (R 10, r 5) cut by a disc of radius 5 centred at (15,0) in the XZ plane revolved about Z (the disc overlaps the torus tube)", + "source": "analytic", + "method": "both are coaxial rings, so the cut removes the revolution of the lens where the two circles (centres 10 and 15, r 5) overlap. Lens area = 2 r^2 acos(d/2r) - d/2 sqrt(4r^2 - d^2) = 30.709, centroid x = 12.5 by symmetry. V = 2 pi^2 10 25 - 2 pi 12.5 A_lens = 2522.9. Area (Pappus for curves): arc of the tube circle outside the disc (240 degrees, centroid x 10 - 5 sin(120)/(2 pi/3)) and arc of the disc circle inside the tube (120 degrees, centroid x 15 - 5 sin(60)/(pi/3)), each turned 2 pi about Z. Two toroidal faces.", + "body_count": 1, + "volume_mm3": 2522.903937393692, + "area_mm2": 1758.767884317251, + "faces": 2 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/2295-revolve-cut-torus-by-an-overlapping-ring/recipe.json b/tests/kernel-cases/sweeps/2295-revolve-cut-torus-by-an-overlapping-ring/recipe.json new file mode 100644 index 000000000..8b9549b26 --- /dev/null +++ b/tests/kernel-cases/sweeps/2295-revolve-cut-torus-by-an-overlapping-ring/recipe.json @@ -0,0 +1,57 @@ +{ + "commands": [ + { + "command": "solid.torus", + "params": { + "major": 10, + "minor": 5, + "body_name": "Torus" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Tool" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 15, + 0 + ], + "radius": 5 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "Z", + "angle": "360 deg", + "operation": "cut" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/2947-revolve-300-degrees-intersected-by-a-plate/expected.json b/tests/kernel-cases/sweeps/2947-revolve-300-degrees-intersected-by-a-plate/expected.json new file mode 100644 index 000000000..e774d912f --- /dev/null +++ b/tests/kernel-cases/sweeps/2947-revolve-300-degrees-intersected-by-a-plate/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#2947", + "tangency-labs/solidcraft#2948" + ], + "what": "a rectangle section revolved 300 degrees about Z, then intersected with a plate (slab |y| <= 5) crossing the ring at the start/end gap side and the far side (boolean gave up: \"loop not inside any face piece\")", + "source": "analytic", + "method": "the ring section r 20..30, z 0..10 turns from +x counter-clockwise through 300 degrees (the gap is -60..0 degrees). The slab |y| <= 5 meets +x (only y >= 0 is covered) and -x (fully covered). Area of annulus part with |y| <= 5, x > 0: F(R) = a sqrt(R^2 - a^2) + R^2 asin(a/R); V = 10 [ (F(30) - F(20)) / 2 + (F(30) - F(20)) ]. The two crossings are disjoint, so two bodies.", + "body_count": 2, + "volume_mm3": 1510.6287024479082 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/2947-revolve-300-degrees-intersected-by-a-plate/recipe.json b/tests/kernel-cases/sweeps/2947-revolve-300-degrees-intersected-by-a-plate/recipe.json new file mode 100644 index 000000000..6833138cb --- /dev/null +++ b/tests/kernel-cases/sweeps/2947-revolve-300-degrees-intersected-by-a-plate/recipe.json @@ -0,0 +1,77 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Sec" + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 20, + 0 + ], + "p1": [ + 30, + 10 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "Z", + "angle": "300 deg", + "operation": "new", + "body_name": "Ring" + } + }, + { + "command": "solid.box", + "params": { + "length": 100, + "width": 10, + "height": 12, + "corner": [ + -50, + -5, + -1 + ], + "body_name": "Plate" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Ring", + "tools": [ + "Plate" + ], + "operation": "intersect" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/450-revolve-spherical-shell-sketched-off-the-origin/expected.json b/tests/kernel-cases/sweeps/450-revolve-spherical-shell-sketched-off-the-origin/expected.json new file mode 100644 index 000000000..54408ad81 --- /dev/null +++ b/tests/kernel-cases/sweeps/450-revolve-spherical-shell-sketched-off-the-origin/expected.json @@ -0,0 +1,25 @@ +{ + "sources": [ + "tangency-labs/solidcraft#450", + "tangency-labs/solidcraft#452" + ], + "what": "a half ring between two arcs (both radial lines on the axis) revolved a full turn from a sketch plane 10 mm above the origin (volume +34 %)", + "source": "analytic", + "method": "the revolve is a hollow ball of radii 40 and 18.5 centred at (0,0,10): V = 4/3 pi (40^3 - 18.5^3), A = 4 pi (40^2 + 18.5^2); two spherical faces, one body with an inner shell.", + "body_count": 1, + "volume_mm3": 241560.72432594837, + "area_mm2": 24407.033325739103, + "faces": 2, + "bbox": { + "min": [ + -40, + -40, + -30 + ], + "max": [ + 40, + 40, + 50 + ] + } +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/450-revolve-spherical-shell-sketched-off-the-origin/recipe.json b/tests/kernel-cases/sweeps/450-revolve-spherical-shell-sketched-off-the-origin/recipe.json new file mode 100644 index 000000000..0c33bdc0c --- /dev/null +++ b/tests/kernel-cases/sweeps/450-revolve-spherical-shell-sketched-off-the-origin/recipe.json @@ -0,0 +1,105 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 10.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "Shell" + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + -40 + ], + "through": [ + 40, + 0 + ], + "end": [ + 0, + 40 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 40 + ], + [ + 0, + 18.5 + ] + ], + "infer": false + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 0, + 18.5 + ], + "through": [ + 18.5, + 0 + ], + "end": [ + 0, + -18.5 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + -18.5 + ], + [ + 0, + -40 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "y", + "angle": "360 deg", + "operation": "new" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/487-cut-disc-by-revolved-adjacent-profiles/expected.json b/tests/kernel-cases/sweeps/487-cut-disc-by-revolved-adjacent-profiles/expected.json new file mode 100644 index 000000000..1c6b3d4c5 --- /dev/null +++ b/tests/kernel-cases/sweeps/487-cut-disc-by-revolved-adjacent-profiles/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#487", + "tangency-labs/solidcraft#490" + ], + "what": "a disc cut by the body made from two adjacent profiles revolved on the axis, around the disc flat end", + "source": "analytic", + "method": "Hand = cylinder r 20 from x = 0 to 60; Holder = disc r 40 from x = -1 to 1; keep_tools keeps Hand. Cut removes r < 20, x in [0,1] from the disc: V(Holder) = pi 40^2 2 - pi 20^2 1. Both bodies exist at the end: Holder 8796.46 and Hand 75398.22; the totals below add them.", + "body_count": 2, + "volume_mm3": 84194.68311620646 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/487-cut-disc-by-revolved-adjacent-profiles/recipe.json b/tests/kernel-cases/sweeps/487-cut-disc-by-revolved-adjacent-profiles/recipe.json new file mode 100644 index 000000000..0a77dff56 --- /dev/null +++ b/tests/kernel-cases/sweeps/487-cut-disc-by-revolved-adjacent-profiles/recipe.json @@ -0,0 +1,152 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "P" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 0 + ], + [ + 60, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 0 + ], + [ + 0, + 20 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 20 + ], + [ + 60, + 20 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 30, + 20 + ], + [ + 30, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 60, + 20 + ], + [ + 60, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "P", + "profiles": [ + 0, + 1 + ], + "axis": "X", + "body_name": "Hand" + } + }, + { + "command": "solid.cylinder", + "params": { + "radius": 40, + "height": 2, + "base": [ + -1, + 0, + 0 + ], + "axis": [ + 1, + 0, + 0 + ], + "body_name": "Holder" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Holder", + "tools": [ + "Hand" + ], + "operation": "cut", + "keep_tools": true + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/487-revolve-two-adjacent-profiles-on-the-axis/expected.json b/tests/kernel-cases/sweeps/487-revolve-two-adjacent-profiles-on-the-axis/expected.json new file mode 100644 index 000000000..ee22b079c --- /dev/null +++ b/tests/kernel-cases/sweeps/487-revolve-two-adjacent-profiles-on-the-axis/expected.json @@ -0,0 +1,13 @@ +{ + "sources": [ + "tangency-labs/solidcraft#487", + "tangency-labs/solidcraft#490" + ], + "what": "two rectangles sharing an edge, both resting on the axis, revolved together (zero-area faces along the axis)", + "source": "analytic", + "method": "the two 30 x 20 rectangles merge into one 60 x 20 region on the axis: a cylinder r = 20, length 60: V = pi 20^2 60, A = 2 pi 20 60 + 2 pi 20^2; 3 faces (side and two disks), none of zero area.", + "body_count": 1, + "volume_mm3": 75398.22368615503, + "area_mm2": 10053.096491487338, + "faces": 3 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/487-revolve-two-adjacent-profiles-on-the-axis/recipe.json b/tests/kernel-cases/sweeps/487-revolve-two-adjacent-profiles-on-the-axis/recipe.json new file mode 100644 index 000000000..bc11d1231 --- /dev/null +++ b/tests/kernel-cases/sweeps/487-revolve-two-adjacent-profiles-on-the-axis/recipe.json @@ -0,0 +1,123 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + }, + "name": "P" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 0 + ], + [ + 60, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 0 + ], + [ + 0, + 20 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 20 + ], + [ + 60, + 20 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 30, + 20 + ], + [ + 30, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 60, + 20 + ], + [ + 60, + 0 + ] + ], + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "P", + "profiles": [ + 0, + 1 + ], + "axis": "X", + "body_name": "Hand" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/494-extrude-the-flange-face-of-a-fresh-revolve/expected.json b/tests/kernel-cases/sweeps/494-extrude-the-flange-face-of-a-fresh-revolve/expected.json new file mode 100644 index 000000000..ae9e52051 --- /dev/null +++ b/tests/kernel-cases/sweeps/494-extrude-the-flange-face-of-a-fresh-revolve/expected.json @@ -0,0 +1,12 @@ +{ + "sources": [ + "tangency-labs/solidcraft#726", + "tangency-labs/solidcraft#494", + "tangency-labs/solidcraft#2114" + ], + "what": "the flange top annulus of a freshly revolved hub (z = 6, r 18..30) picked by a point and extruded 5 mm (the pick found a third of the face: \"the selected planar face no longer exists\")", + "source": "analytic", + "method": "hub = revolve of (8,0) (30,0) (30,6) (18,6) (18,22) (8,22) about Z: V = pi [(30^2 - 8^2) 6 + (18^2 - 8^2) 16] = 28826.6. Extruding the whole annulus z = 6, r 18..30 outward (upward) 5 mm adds pi (30^2 - 18^2) 5 = 9047.8 (the new ring sits on the flange and touches the hub wall r = 18).", + "body_count": 1, + "volume_mm3": 37875.04103167855 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/494-extrude-the-flange-face-of-a-fresh-revolve/recipe.json b/tests/kernel-cases/sweeps/494-extrude-the-flange-face-of-a-fresh-revolve/recipe.json new file mode 100644 index 000000000..ffb458854 --- /dev/null +++ b/tests/kernel-cases/sweeps/494-extrude-the-flange-face-of-a-fresh-revolve/recipe.json @@ -0,0 +1,85 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "P" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 8, + 0 + ], + [ + 30, + 0 + ], + [ + 30, + 6 + ], + [ + 18, + 6 + ], + [ + 18, + 22 + ], + [ + 8, + 22 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "Z", + "angle": "360 deg", + "operation": "new", + "body_name": "Hub" + } + }, + { + "command": "solid.extrude", + "params": { + "face": [ + 12, + 20.784609690826528, + 6 + ], + "distance": 5, + "operation": "join" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/726-revolve-full-turn-planar-faces-whole/expected.json b/tests/kernel-cases/sweeps/726-revolve-full-turn-planar-faces-whole/expected.json new file mode 100644 index 000000000..f68ca1ae5 --- /dev/null +++ b/tests/kernel-cases/sweeps/726-revolve-full-turn-planar-faces-whole/expected.json @@ -0,0 +1,13 @@ +{ + "sources": [ + "tangency-labs/solidcraft#726", + "tangency-labs/solidcraft#1687" + ], + "what": "a flanged hub profile (six edges, none on the axis) revolved a full turn: the planar faces must come out whole, not as three patches", + "source": "analytic", + "method": "profile (8,0) (30,0) (30,6) (18,6) (18,22) (8,22) about the Z axis: V = pi [(30^2 - 8^2) 6 + (18^2 - 8^2) 16] = 28826.6; area = side walls 2 pi (30 6 + 18 16 + 8 22) + annuli pi [(30^2-8^2) + (30^2-18^2) + (18^2-8^2)]. Six whole faces: three annuli and three cylinders.", + "body_count": 1, + "volume_mm3": 28827.254189339943, + "area_mm2": 9299.114254625787, + "faces": 6 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/726-revolve-full-turn-planar-faces-whole/recipe.json b/tests/kernel-cases/sweeps/726-revolve-full-turn-planar-faces-whole/recipe.json new file mode 100644 index 000000000..4b94e0ad9 --- /dev/null +++ b/tests/kernel-cases/sweeps/726-revolve-full-turn-planar-faces-whole/recipe.json @@ -0,0 +1,72 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "P" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 8, + 0 + ], + [ + 30, + 0 + ], + [ + 30, + 6 + ], + [ + 18, + 6 + ], + [ + 18, + 22 + ], + [ + 8, + 22 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "Z", + "angle": "360 deg", + "operation": "new" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/726-revolve-partial-turn-planar-faces-whole/expected.json b/tests/kernel-cases/sweeps/726-revolve-partial-turn-planar-faces-whole/expected.json new file mode 100644 index 000000000..05d7d5a1a --- /dev/null +++ b/tests/kernel-cases/sweeps/726-revolve-partial-turn-planar-faces-whole/expected.json @@ -0,0 +1,13 @@ +{ + "sources": [ + "tangency-labs/solidcraft#726", + "tangency-labs/solidcraft#1718" + ], + "what": "the same flanged hub profile revolved 240 degrees: its planar faces (three annular sectors and two end faces) must come out whole", + "source": "analytic", + "method": "a 240 degree turn is 2/3 of the full body: V = 2/3 * pi [(30^2 - 8^2) 6 + (18^2 - 8^2) 16]; area = 2/3 of the full-turn walls and annuli plus two end faces, each the profile (22 x 6 + 10 x 16 = 292 mm2). Eight faces: three annular sectors, three cylinder sectors, two end faces.", + "body_count": 1, + "volume_mm3": 19218.169459559962, + "area_mm2": 6783.409503083858, + "faces": 8 +} \ No newline at end of file diff --git a/tests/kernel-cases/sweeps/726-revolve-partial-turn-planar-faces-whole/recipe.json b/tests/kernel-cases/sweeps/726-revolve-partial-turn-planar-faces-whole/recipe.json new file mode 100644 index 000000000..80add1291 --- /dev/null +++ b/tests/kernel-cases/sweeps/726-revolve-partial-turn-planar-faces-whole/recipe.json @@ -0,0 +1,72 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "P" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 8, + 0 + ], + [ + 30, + 0 + ], + [ + 30, + 6 + ], + [ + 18, + 6 + ], + [ + 18, + 22 + ], + [ + 8, + 22 + ] + ], + "infer": false, + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "Z", + "angle": "240 deg", + "operation": "new" + } + } + ] +} \ No newline at end of file