diff --git a/tests/kernel-cases/booleans/4877-pocket-on-tab-joined-to-chamfered-disc/expected.json b/tests/kernel-cases/booleans/4877-pocket-on-tab-joined-to-chamfered-disc/expected.json new file mode 100644 index 0000000000..71a3a763e6 --- /dev/null +++ b/tests/kernel-cases/booleans/4877-pocket-on-tab-joined-to-chamfered-disc/expected.json @@ -0,0 +1,12 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4877", + "tangency-labs/solidcraft#5413" + ], + "what": "a 0.6 mm pocket cut from the top of a tab joined to a disc with a chamfered bottom edge (the join fell back to truck's tool nudge, which lifted the tab's top by 5e-5 mm): the pocket never opened, it left a sealed void under a 0.00005 mm skin", + "source": "analytic", + "method": "disc r25 h10 less its 1 mm bottom chamfer ring (Pappus: pi*(25-1/3)) plus the tab 20x12x4 less their overlap: Int_0^4 of the tab rectangle's area inside the disc's radius at z (24+z below z = 1, 25 above) (python quadrature); minus the pocket 10x4x0.6 = 24, wholly in the tab outside the disc. One shell: the pocket opens through the tab's top", + "body_count": 1, + "shells": 1, + "volume_mm3": 20403.0482 +} diff --git a/tests/kernel-cases/booleans/4877-pocket-on-tab-joined-to-chamfered-disc/recipe.json b/tests/kernel-cases/booleans/4877-pocket-on-tab-joined-to-chamfered-disc/recipe.json new file mode 100644 index 0000000000..3c457d3302 --- /dev/null +++ b/tests/kernel-cases/booleans/4877-pocket-on-tab-joined-to-chamfered-disc/recipe.json @@ -0,0 +1,79 @@ +{ + "commands": [ + { + "command": "solid.cylinder", + "params": { + "diameter": 50, + "height": 10, + "body_name": "Disc" + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 25, + 0, + 0 + ] + ], + "distance": 1 + } + }, + { + "command": "solid.box", + "params": { + "length": 20, + "width": 12, + "height": 4, + "corner": [ + 0, + -34, + 0 + ], + "operation": "join", + "targets": [ + "Disc" + ] + } + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "Pocket", + "offset": 4 + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 5, + -31 + ], + "p1": [ + 15, + -27 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Pocket", + "distance": 0.6, + "direction": "negative", + "operation": "cut", + "targets": [ + "Disc" + ] + } + } + ] +} diff --git a/tests/kernel-cases/booleans/4879-cut-through-thickened-spline-revolve/expected.json b/tests/kernel-cases/booleans/4879-cut-through-thickened-spline-revolve/expected.json new file mode 100644 index 0000000000..318d76655b --- /dev/null +++ b/tests/kernel-cases/booleans/4879-cut-through-thickened-spline-revolve/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4879", + "tangency-labs/solidcraft#4484" + ], + "what": "a symmetric through-all cut of a window across a thickened (2 mm) surface revolve of a control-point spline (100 deg about X): truck ran ~20 s to 'boolean Cut: no result' (or never finished)", + "source": "invariants", + "method": "the window (x -2..6, z 6..20, through all y) crosses the shell where it is near the XZ plane and leaves it joined round the rest of its 100 deg, so the result is one valid closed body. The spline shell has no closed-form volume", + "body_count": 1 +} diff --git a/tests/kernel-cases/booleans/4879-cut-through-thickened-spline-revolve/recipe.json b/tests/kernel-cases/booleans/4879-cut-through-thickened-spline-revolve/recipe.json new file mode 100644 index 0000000000..78e314f27b --- /dev/null +++ b/tests/kernel-cases/booleans/4879-cut-through-thickened-spline-revolve/recipe.json @@ -0,0 +1,138 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0, + 0, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Profile" + } + }, + { + "command": "sketch.spline.control_point", + "params": { + "points": [ + [ + -10, + 8 + ], + [ + -4, + 12 + ], + [ + 2, + 9 + ], + [ + 8, + 13 + ], + [ + 14, + 10 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "surface.revolve", + "params": { + "sketch": "Profile", + "curves": [ + "s1" + ], + "axis": "X", + "angle": "100 deg" + } + }, + { + "command": "surface.thicken", + "params": { + "bodies": [ + "Body1" + ], + "thickness": "2 mm", + "operation": "new" + } + }, + { + "command": "solid.remove", + "params": { + "bodies": [ + "Body1" + ] + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0, + 0, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Window", + "project_edges": false + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + -2, + 6 + ], + "p1": [ + 6, + 20 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Window", + "distance": 10, + "direction": "symmetric", + "through_all": true, + "operation": "cut" + } + } + ] +} diff --git a/tests/kernel-cases/booleans/4927-slot-cut-through-chamfered-tube-wall/expected.json b/tests/kernel-cases/booleans/4927-slot-cut-through-chamfered-tube-wall/expected.json new file mode 100644 index 0000000000..02c7c4915a --- /dev/null +++ b/tests/kernel-cases/booleans/4927-slot-cut-through-chamfered-tube-wall/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4927" + ], + "what": "a 5 mm slot cut end to end through one wall of a tube (r 20..30 x 100) whose top rims are chamfered (2.5 outside, 4 inside): the cut hung (moving the chamfers after the cut worked)", + "source": "analytic", + "method": "tube pi (30^2-20^2) 100 less the chamfer rings (Pappus: 2 pi (30 - 2.5/3) 2.5^2/2 and 2 pi (20 + 4/3) 4^2/2). The slot y -2.3..2.7, x > 0 through all removes Int_0^100 Int_-2.3^2.7 (sqrt(ro^2-y^2) - sqrt(ri^2-y^2)) dy dz, the radii following the chamfers near the top (python quadrature). The C-shaped tube is one body", + "body_count": 1, + "volume_mm3": 150481.462 +} diff --git a/tests/kernel-cases/booleans/4927-slot-cut-through-chamfered-tube-wall/recipe.json b/tests/kernel-cases/booleans/4927-slot-cut-through-chamfered-tube-wall/recipe.json new file mode 100644 index 0000000000..f2d0eea5db --- /dev/null +++ b/tests/kernel-cases/booleans/4927-slot-cut-through-chamfered-tube-wall/recipe.json @@ -0,0 +1,114 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "Tube" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 30 + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 20 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Tube", + "distance": 100, + "profiles": [ + { + "point": [ + 25, + 0 + ] + } + ], + "body_name": "Clamp" + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 30, + 0, + 100 + ] + ], + "distance": 2.5 + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 20, + 0, + 100 + ] + ], + "distance": 4 + } + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "Slot", + "project_edges": false + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 15, + -2.3 + ], + "p1": [ + 35, + 2.7 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Slot", + "distance": 100, + "through_all": true, + "operation": "cut", + "targets": [ + "Clamp" + ] + } + } + ] +} diff --git a/tests/kernel-cases/booleans/5024-drilled-hole-across-box-edge/expected.json b/tests/kernel-cases/booleans/5024-drilled-hole-across-box-edge/expected.json new file mode 100644 index 0000000000..7776c0508f --- /dev/null +++ b/tests/kernel-cases/booleans/5024-drilled-hole-across-box-edge/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5024" + ], + "what": "a drilled O8 hole, 10 deep with a 118 deg point, placed 1 mm off a 40x30x20 box's top face, across its edge: 17-54 s in truck", + "source": "analytic", + "method": "the hole's axis is at x = -1, y = 15, so only its part at x >= 0 removes material: the circular segment of the O8 section beyond x = 0 (r^2 acos(d/r) - d sqrt(r^2-d^2), d = 1) over the 10 mm to the shoulder, plus the same segment of the point cone's section (radius 4 - s tan59 at s below the shoulder, down to radius 1), integrated (python quadrature). V = 24000 - 172.16874 - 11.10370", + "body_count": 1, + "volume_mm3": 23816.7276 +} diff --git a/tests/kernel-cases/booleans/5024-drilled-hole-across-box-edge/recipe.json b/tests/kernel-cases/booleans/5024-drilled-hole-across-box-edge/recipe.json new file mode 100644 index 0000000000..9718779505 --- /dev/null +++ b/tests/kernel-cases/booleans/5024-drilled-hole-across-box-edge/recipe.json @@ -0,0 +1,26 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 40, + "width": 30, + "height": 20 + } + }, + { + "command": "solid.hole", + "params": { + "position": [ + -1, + 15, + 20 + ], + "diameter": 8, + "depth": 10, + "type": "drilled", + "tip_angle": 118 + } + } + ] +} diff --git a/tests/kernel-cases/booleans/5041-countersink-beside-wall-stays-below-face/expected.json b/tests/kernel-cases/booleans/5041-countersink-beside-wall-stays-below-face/expected.json new file mode 100644 index 0000000000..a50478ef64 --- /dev/null +++ b/tests/kernel-cases/booleans/5041-countersink-beside-wall-stays-below-face/expected.json @@ -0,0 +1,12 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5041" + ], + "what": "a countersunk O6.4 hole (O13.7, 90 deg) through a plate 0.15 mm from a wall standing on it: the countersink tool reached ~0.7 mm above the entry face and notched the wall", + "source": "analytic", + "method": "the countersink's rim (y = 23 + 6.85 = 29.85) stays clear of the wall (y = 30), so nothing above z = 8 changes. Plate 40x40x8 + wall 40x10x30 = 24800; the hole removes the O6.4 cylinder through 8 plus the countersink cone over it (depth (13.7-6.4)/2 = 3.65: pi h/3 (R^2+Rr+r^2) - pi r^2 h). Faces: bottom, the two L-shaped x faces, y=0, y=40 (plate and wall coplanar), the plate top, the wall's -y face and top, the cone and the bore = 10. Area: 7480 - pi 6.85^2 - pi 3.2^2 + pi (6.85+3.2) 3.65 sqrt2 + 2 pi 3.2 (8-3.65). The report's clearance M6 is given as its O6.4 so the answer doesn't depend on the clearance table", + "body_count": 1, + "faces": 10, + "volume_mm3": 24357.7861, + "area_mm2": 7550.8567 +} diff --git a/tests/kernel-cases/booleans/5041-countersink-beside-wall-stays-below-face/recipe.json b/tests/kernel-cases/booleans/5041-countersink-beside-wall-stays-below-face/recipe.json new file mode 100644 index 0000000000..70cbb9c4c6 --- /dev/null +++ b/tests/kernel-cases/booleans/5041-countersink-beside-wall-stays-below-face/recipe.json @@ -0,0 +1,53 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 40, + "width": 40, + "height": 8, + "corner": [ + 0, + 0, + 0 + ], + "name": "Plate" + } + }, + { + "command": "solid.box", + "params": { + "length": 40, + "width": 10, + "height": 30, + "corner": [ + 0, + 30, + 8 + ], + "operation": "join", + "name": "Wall" + } + }, + { + "command": "solid.hole", + "params": { + "position": [ + 20, + 23.0, + 8 + ], + "direction": [ + 0, + 0, + -1 + ], + "diameter": 6.4, + "type": "countersink", + "cs_diameter": 13.7, + "cs_angle": 90, + "name": "CS" + } + } + ] +} diff --git a/tests/kernel-cases/booleans/5126-join-menger-sponge-level-3/expected.json b/tests/kernel-cases/booleans/5126-join-menger-sponge-level-3/expected.json new file mode 100644 index 0000000000..da3a9532b2 --- /dev/null +++ b/tests/kernel-cases/booleans/5126-join-menger-sponge-level-3/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5126" + ], + "what": "a join of the 20 level-2 Menger sponges (45 mm, 5 mm cubes) of a level-3 sponge, touching face to face with the same hole pattern on both faces of each contact: truck failed depending on the tools' order ('coincident faces were left in place', 'shell not oriented and closed')", + "source": "analytic", + "method": "each level-2 sponge is a 45 mm cube less its 3 central 15 mm tunnels and the 24 5 mm tunnels of its sub-cubes: 45^3 * (20/27)^2 = 50000. The 20 sponges of level 3 touch only face to face, so the join is one body of 20 * 50000 = 1000000 (= 135^3 * (20/27)^3). The tools are listed round the bottom ring first, then the rest, as in the failing session", + "body_count": 1, + "volume_mm3": 1000000.0, + "timeout_s": 1200 +} diff --git a/tests/kernel-cases/booleans/5126-join-menger-sponge-level-3/recipe.json b/tests/kernel-cases/booleans/5126-join-menger-sponge-level-3/recipe.json new file mode 100644 index 0000000000..f9e976c767 --- /dev/null +++ b/tests/kernel-cases/booleans/5126-join-menger-sponge-level-3/recipe.json @@ -0,0 +1,9492 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 0, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S000" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 15.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 20.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 20.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + -1, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 15.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 20.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 20.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S000" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 0, + 45 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S001" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 15.0, + 60.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 20.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 20.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + -1, + 60.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + -1, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + -1, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 15.0, + 44 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 5.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 20.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 35.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 5.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 35.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 5.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 20.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 35.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S001" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 0, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S002" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 15.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 5.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 20.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 20.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 35.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + -1, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 15.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 20.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 20.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S002" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 45, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S010" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 60.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 50.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 50.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 50.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 65.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 65.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 80.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 80.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 80.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 44, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 44, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 44, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 44, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 44, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 44, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 44, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 44, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 44, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 60.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 50.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 65.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 80.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 50.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 80.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 50.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 65.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 80.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S010" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 45, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S012" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 60.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 50.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 50.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 50.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 65.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 65.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 80.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 80.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 80.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 44, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 44, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 44, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 44, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 44, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 44, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 44, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 44, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 44, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 60.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 50.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 65.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 80.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 50.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 80.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 50.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 65.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 80.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S012" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 90, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S020" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 105.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 110.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 110.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 89, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 105.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 110.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 110.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S020" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 90, + 45 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S021" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 105.0, + 60.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 110.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 110.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 89, + 60.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 89, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 89, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 105.0, + 44 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 95.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 110.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 125.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 95.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 125.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 95.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 110.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 125.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S021" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 90, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S022" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 105.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 95.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 110.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 110.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + -1, + 125.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 89, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 15.0, + 105.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 110.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 5.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 20.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 110.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 35.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S022" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 45, + 0, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S100" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 15.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 5.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 5.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 5.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 20.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 20.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 35.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 35.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 35.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + -1, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + -1, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + -1, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + 15.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 20.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 20.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S100" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 45, + 0, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S102" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 15.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 5.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 5.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 5.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 20.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 20.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 35.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 35.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 35.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + -1, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + -1, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + -1, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + 15.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 20.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 20.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S102" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 45, + 90, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S120" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 105.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 95.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 95.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 95.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 110.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 110.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 125.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 125.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 125.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + 89, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 89, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 89, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + 105.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 110.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 110.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S120" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 45, + 90, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S122" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 105.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 95.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 95.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 95.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 110.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 110.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 125.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 125.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 44, + 125.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + 89, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 89, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 89, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 60.0, + 105.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 110.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 50.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 65.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 110.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 80.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S122" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 0, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S200" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 15.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 20.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 20.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + -1, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 15.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 20.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 5.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 20.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 35.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S200" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 0, + 45 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S201" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 15.0, + 60.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 20.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 20.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + -1, + 60.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + -1, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + -1, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 15.0, + 44 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 5.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 20.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 35.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 5.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 35.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 5.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 20.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 35.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S201" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 0, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S202" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 15.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 5.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 20.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 20.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 35.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + -1, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + -1, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 15.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 20.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 5.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 20.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 35.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S202" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 45, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S210" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 60.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 50.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 50.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 50.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 65.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 65.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 80.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 80.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 80.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 44, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 44, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 44, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 44, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 44, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 44, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 44, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 44, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 44, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 60.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 50.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 65.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 80.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 50.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 80.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 50.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 65.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 80.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S210" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 45, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S212" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 60.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 50.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 50.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 50.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 65.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 65.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 80.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 80.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 80.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 44, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 44, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 44, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 44, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 44, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 44, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 44, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 44, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 44, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 60.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 50.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 65.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 80.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 50.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 80.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 50.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 65.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 80.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S212" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 90, + 0 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S220" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 105.0, + 15.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 110.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 110.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 5.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 20.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 35.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 89, + 15.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 5.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 20.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 35.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 105.0, + -1 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 110.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 95.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 110.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 125.0, + -1 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S220" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 90, + 45 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S221" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 105.0, + 60.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 110.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 110.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 50.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 65.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 80.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 89, + 60.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 89, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 89, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 50.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 65.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 80.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 105.0, + 44 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 95.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 110.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 125.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 95.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 125.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 95.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 110.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 125.0, + 44 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S221" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 90, + 90, + 90 + ], + "length": 45, + "width": 45, + "height": 45, + "body_name": "S222" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 105.0, + 105.0 + ], + "length": 47, + "width": 15, + "height": 15, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 95.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 110.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 110.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 95.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 110.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 89, + 125.0, + 125.0 + ], + "length": 47, + "width": 5, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 89, + 105.0 + ], + "length": 15, + "width": 47, + "height": 15, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 95.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 110.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 89, + 125.0 + ], + "length": 5, + "width": 47, + "height": 5, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 105.0, + 105.0, + 89 + ], + "length": 15, + "width": 15, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 110.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 95.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 110.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 95.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 110.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 125.0, + 125.0, + 89 + ], + "length": 5, + "width": 5, + "height": 47, + "operation": "cut", + "targets": [ + "S222" + ] + } + }, + { + "command": "solid.combine", + "params": { + "target": "S000", + "tools": [ + "S100", + "S200", + "S210", + "S220", + "S120", + "S020", + "S010", + "S001", + "S002", + "S012", + "S021", + "S022", + "S102", + "S122", + "S201", + "S202", + "S212", + "S221", + "S222" + ], + "operation": "join" + } + } + ] +} diff --git a/tests/kernel-cases/booleans/5149-circular-pattern-of-40-fins-joined-to-plate/expected.json b/tests/kernel-cases/booleans/5149-circular-pattern-of-40-fins-joined-to-plate/expected.json new file mode 100644 index 0000000000..7d6015e877 --- /dev/null +++ b/tests/kernel-cases/booleans/5149-circular-pattern-of-40-fins-joined-to-plate/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5149" + ], + "what": "a 25x2x10 fin standing on a disc plate, circular-patterned 40 times about the plate's axis (joined): 'boolean Union: no result' past about 15 copies", + "source": "analytic", + "method": "fins r 20..45, 2 wide: at r = 20 the 40 copies are 2 pi 20/40 = 3.14 apart, wider than a fin, so none overlap. V = pi 50^2 5 + 40*25*2*10 = 39269.908 + 20000. Faces: the plate's bottom, side and top + 5 per fin = 203", + "body_count": 1, + "faces": 203, + "volume_mm3": 59269.9082 +} diff --git a/tests/kernel-cases/booleans/5149-circular-pattern-of-40-fins-joined-to-plate/recipe.json b/tests/kernel-cases/booleans/5149-circular-pattern-of-40-fins-joined-to-plate/recipe.json new file mode 100644 index 0000000000..a01536d109 --- /dev/null +++ b/tests/kernel-cases/booleans/5149-circular-pattern-of-40-fins-joined-to-plate/recipe.json @@ -0,0 +1,66 @@ +{ + "commands": [ + { + "command": "solid.cylinder", + "params": { + "radius": 50, + "height": 5, + "body_name": "Plate" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "face": [ + 0, + 0, + 5 + ] + }, + "name": "FinSketch", + "project_edges": false + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 20, + -1 + ], + "p1": [ + 45, + 1 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "FinSketch", + "distance": 10, + "operation": "join", + "targets": [ + "Plate" + ], + "name": "Fin" + } + }, + { + "command": "solid.pattern.circular", + "params": { + "features": [ + "Fin" + ], + "axis": "Z", + "count": 40, + "angle": "360 deg" + } + } + ] +} diff --git a/tests/kernel-cases/booleans/5197-join-flush-chord-layers/expected.json b/tests/kernel-cases/booleans/5197-join-flush-chord-layers/expected.json new file mode 100644 index 0000000000..7a99b89cd1 --- /dev/null +++ b/tests/kernel-cases/booleans/5197-join-flush-chord-layers/expected.json @@ -0,0 +1,12 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5197", + "tangency-labs/solidcraft#3396" + ], + "what": "a join of flush layers: a disc r37 (z -1.2..0) carrying 15 of the 19 regions of a sketch of 18 chords (z -3.6..-1.2; four bands left out), on an annulus r35..37 (z -5.6..-3.6) joined to a disc of all the chord regions (z -8..-5.6): SMLib's result came back with 'loop encloses no (u, v) area' though both operands are valid", + "source": "analytic", + "method": "the layers only meet face to face, so V is their sum: Body1 = pi 37^2 1.2 + (pi 37^2 - the four bands y -29..-24, -13..-8, 8..11, 24..27 of the disc, Int 2 sqrt(37^2 - y^2) dy) 2.4; Body2 = pi (37^2-35^2) 2; Body3 = pi 37^2 2.4. The bands run out to the rim, so the space inside r35 under Body1 opens to the outside: one shell (the reporter's 52-command script, generic dimensions)", + "body_count": 1, + "shells": 1, + "volume_mm3": 24340.9358 +} diff --git a/tests/kernel-cases/booleans/5197-join-flush-chord-layers/recipe.json b/tests/kernel-cases/booleans/5197-join-flush-chord-layers/recipe.json new file mode 100644 index 0000000000..246440cc44 --- /dev/null +++ b/tests/kernel-cases/booleans/5197-join-flush-chord-layers/recipe.json @@ -0,0 +1,792 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "S1" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 37 + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -18.57417562100671, + -32 + ], + [ + 18.57417562100671, + -32 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -22.978250586152114, + -29 + ], + [ + 22.978250586152114, + -29 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -28.160255680657446, + -24 + ], + [ + 28.160255680657446, + -24 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -30.463092423455635, + -21 + ], + [ + 30.463092423455635, + -21 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -33.36165463522455, + -16 + ], + [ + 33.36165463522455, + -16 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -34.64101615137755, + -13 + ], + [ + 34.64101615137755, + -13 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.124783736376884, + -8 + ], + [ + 36.124783736376884, + -8 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.66060555964672, + -5 + ], + [ + 36.66060555964672, + -5 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -37.0, + 0 + ], + [ + 37.0, + 0 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.87817782917155, + 3 + ], + [ + 36.87817782917155, + 3 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.124783736376884, + 8 + ], + [ + 36.124783736376884, + 8 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -35.32704346531139, + 11 + ], + [ + 35.32704346531139, + 11 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -33.36165463522455, + 16 + ], + [ + 33.36165463522455, + 16 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -31.74901573277509, + 19 + ], + [ + 31.74901573277509, + 19 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -28.160255680657446, + 24 + ], + [ + 28.160255680657446, + 24 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -25.298221281347036, + 27 + ], + [ + 25.298221281347036, + 27 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -18.57417562100671, + 32 + ], + [ + 18.57417562100671, + 32 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -12.0, + 35 + ], + [ + 12.0, + 35 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "S3" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 37 + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -18.57417562100671, + -32 + ], + [ + 18.57417562100671, + -32 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -22.978250586152114, + -29 + ], + [ + 22.978250586152114, + -29 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -28.160255680657446, + -24 + ], + [ + 28.160255680657446, + -24 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -30.463092423455635, + -21 + ], + [ + 30.463092423455635, + -21 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -33.36165463522455, + -16 + ], + [ + 33.36165463522455, + -16 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -34.64101615137755, + -13 + ], + [ + 34.64101615137755, + -13 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.124783736376884, + -8 + ], + [ + 36.124783736376884, + -8 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.66060555964672, + -5 + ], + [ + 36.66060555964672, + -5 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -37.0, + 0 + ], + [ + 37.0, + 0 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.87817782917155, + 3 + ], + [ + 36.87817782917155, + 3 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -36.124783736376884, + 8 + ], + [ + 36.124783736376884, + 8 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -35.32704346531139, + 11 + ], + [ + 35.32704346531139, + 11 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -33.36165463522455, + 16 + ], + [ + 33.36165463522455, + 16 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -31.74901573277509, + 19 + ], + [ + 31.74901573277509, + 19 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -28.160255680657446, + 24 + ], + [ + 28.160255680657446, + 24 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -25.298221281347036, + 27 + ], + [ + 25.298221281347036, + 27 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -18.57417562100671, + 32 + ], + [ + 18.57417562100671, + 32 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -12.0, + 35 + ], + [ + 12.0, + 35 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "Rings" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 37 + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 35 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Rings", + "profiles": "all", + "distance": 1.2, + "direction": "negative", + "body_name": "Body1" + } + }, + { + "command": "solid.extrude", + "params": { + "sketch": "S1", + "profiles": [ + { + "point": [ + 0, + -34.5 + ] + }, + { + "point": [ + 0, + -30.5 + ] + }, + { + "point": [ + 0, + -22.5 + ] + }, + { + "point": [ + 0, + -18.5 + ] + }, + { + "point": [ + 0, + -14.5 + ] + }, + { + "point": [ + 0, + -6.5 + ] + }, + { + "point": [ + 0, + -2.5 + ] + }, + { + "point": [ + 0, + 1.5 + ] + }, + { + "point": [ + 0, + 5.5 + ] + }, + { + "point": [ + 0, + 13.5 + ] + }, + { + "point": [ + 0, + 17.5 + ] + }, + { + "point": [ + 0, + 21.5 + ] + }, + { + "point": [ + 0, + 29.5 + ] + }, + { + "point": [ + 0, + 33.5 + ] + }, + { + "point": [ + 0, + 36.0 + ] + } + ], + "distance": 2.4, + "direction": "negative", + "from": [ + 0, + 0, + -1.2 + ], + "operation": "join" + } + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Rings", + "profiles": [ + { + "point": [ + 36, + 0 + ] + } + ], + "distance": 2, + "direction": "negative", + "from": [ + 36, + 0, + -3.6 + ], + "operation": "new", + "body_name": "Body2" + } + }, + { + "command": "solid.extrude", + "params": { + "sketch": "S3", + "profiles": "all", + "distance": 2.4, + "direction": "negative", + "from": [ + 36, + 0, + -5.6 + ], + "operation": "new", + "body_name": "Body3" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Body2", + "tools": [ + "Body3" + ], + "operation": "join" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Body1", + "tools": [ + "Body2" + ], + "operation": "join" + } + } + ] +} diff --git a/tests/kernel-cases/booleans/skipped-4161.json b/tests/kernel-cases/booleans/skipped-4161.json index b6e886ec7f..0052fb2d3d 100644 --- a/tests/kernel-cases/booleans/skipped-4161.json +++ b/tests/kernel-cases/booleans/skipped-4161.json @@ -390,5 +390,193 @@ { "source": "tangency-labs/solidcraft#4827", "why": "UI only: draft corner rules in the dialog (feature request)" + }, + { + "source": "tangency-labs/solidcraft#4831", + "why": "no geometry: sketch Mirror about an origin axis (dup of #4193)" + }, + { + "source": "tangency-labs/solidcraft#4852", + "why": "no reproduction: a screw-hole cut in a user's part shown by screenshot; the design is off GitHub" + }, + { + "source": "tangency-labs/solidcraft#4853", + "why": "no geometry: sketch edits on a turned component are slow (evaluation frames)" + }, + { + "source": "tangency-labs/solidcraft#4856", + "why": "no geometry: an M2 thread in a 2 mm hole is refused by design (tap drill 1.6)" + }, + { + "source": "tangency-labs/solidcraft#4862", + "why": "UI only: sketch-on-face contrast" + }, + { + "source": "tangency-labs/solidcraft#4865", + "why": "no geometry: sketch Mirror about an origin axis (dup of #4193)" + }, + { + "source": "tangency-labs/solidcraft#4881", + "why": "no reproduction: an extrude to an imported STEP made from a mesh in another CAD program, no file" + }, + { + "source": "tangency-labs/solidcraft#4883", + "why": "no reproduction: \"couldn't extrude after a loft and patch\", no message or design" + }, + { + "source": "tangency-labs/solidcraft#4885", + "why": "UI only: positioning a hole while placing it (dup of #4384)" + }, + { + "source": "tangency-labs/solidcraft#4910", + "why": "no geometry: the report arrived empty" + }, + { + "source": "tangency-labs/solidcraft#4911", + "why": "no geometry: a join to-object where a cut was meant (\"nothing lies between\"), user error" + }, + { + "source": "tangency-labs/solidcraft#4917", + "why": "no reproduction: an extrude to a curved face on an unknown part, screenshot only" + }, + { + "source": "tangency-labs/solidcraft#4921", + "why": "no reproduction: a 0.6 mm join on a 44-feature user part, no design" + }, + { + "source": "tangency-labs/solidcraft#4922", + "why": "UI only: theme corner radii" + }, + { + "source": "tangency-labs/solidcraft#4928", + "why": "no geometry: plugin commands (RFC)" + }, + { + "source": "tangency-labs/solidcraft#4937", + "why": "no geometry: a Mirror feature can't itself be mirrored yet (a stated limit, dup of #395)" + }, + { + "source": "tangency-labs/solidcraft#4943", + "why": "no reproduction: last command only (a 4 mm cut of two profiles), no design" + }, + { + "source": "tangency-labs/solidcraft#4945", + "why": "no reproduction: last command only (a 10 mm join), no message or design" + }, + { + "source": "tangency-labs/solidcraft#4955", + "why": "UI only: moving a placed hole (dup of #5399)" + }, + { + "source": "tangency-labs/solidcraft#4957", + "why": "no geometry: body auto-names reused after a rename (document)" + }, + { + "source": "tangency-labs/solidcraft#4967", + "why": "UI only: sketch snap to curve intersections" + }, + { + "source": "tangency-labs/solidcraft#4974", + "why": "UI only: a construction plane can't be picked as an extrude's To Object (the command takes it)" + }, + { + "source": "tangency-labs/solidcraft#5002", + "why": "no reproduction: Split Body by an offset plane leaving touching lumps, a user's roof part, no design" + }, + { + "source": "tangency-labs/solidcraft#5032", + "why": "no geometry: sketch mirror lines not offered after the sketch is finished (UI)" + }, + { + "source": "tangency-labs/solidcraft#5039", + "why": "no reproduction: a cylinder joined on a user's swept body; the design was mailed, not attached" + }, + { + "source": "tangency-labs/solidcraft#5040", + "why": "no geometry: an offset plane can't attach to a face after a draft and a shell (document, dup of #4325)" + }, + { + "source": "tangency-labs/solidcraft#5044", + "why": "no reproduction: Draft pick point misses the face on a user's 3-body part" + }, + { + "source": "tangency-labs/solidcraft#5066", + "why": "no geometry: sketch pattern counts lose their parameter (sketch, dup of #5231)" + }, + { + "source": "tangency-labs/solidcraft#5072", + "why": "no reproduction: last command only (a 2 mm cut on 0.16.2), no design" + }, + { + "source": "tangency-labs/solidcraft#5073", + "why": "no reproduction: a slow join of two bodies of a user's part, no design" + }, + { + "source": "tangency-labs/solidcraft#5075", + "why": "no geometry: a cut into a mesh body is refused by design (the part was opened from STL)" + }, + { + "source": "tangency-labs/solidcraft#5078", + "why": "UI only: the Parameters window's size" + }, + { + "source": "tangency-labs/solidcraft#5080", + "why": "UI only: reordering ribbon drop-downs" + }, + { + "source": "tangency-labs/solidcraft#5082", + "why": "UI only: Combine's body inputs not filling (screenshot)" + }, + { + "source": "tangency-labs/solidcraft#5089", + "why": "no geometry: render settings validation" + }, + { + "source": "tangency-labs/solidcraft#5106", + "why": "no reproduction: four circles cut into a user's cylinder at once compute for long, no sizes" + }, + { + "source": "tangency-labs/solidcraft#5111", + "why": "render: Direct3D 12 glitches on a GTX 1060" + }, + { + "source": "tangency-labs/solidcraft#5123", + "why": "no reproduction: a 5 mm join that never finishes on a user's part, screenshot only" + }, + { + "source": "tangency-labs/solidcraft#5135", + "why": "no geometry: a construction axis as the pattern axis (command parameters, fixed in 0.20.0)" + }, + { + "source": "tangency-labs/solidcraft#5136", + "why": "no reproduction: Split Body of a user's profile part by a plane, no design" + }, + { + "source": "tangency-labs/solidcraft#5142", + "why": "UI only: Combine doesn't take bodies picked in the browser (dup of #4452)" + }, + { + "source": "tangency-labs/solidcraft#5156", + "why": "no reproduction: a screenshot only" + }, + { + "source": "tangency-labs/solidcraft#5171", + "why": "no reproduction: last command only (a 26 mm cut on a 56-feature part), no design" + }, + { + "source": "tangency-labs/solidcraft#5172", + "why": "no kernel geometry: extrude without profiles takes every region, islands included (command default)" + }, + { + "source": "tangency-labs/solidcraft#5175", + "why": "no geometry: a joint origin's name given as a face (document)" + }, + { + "source": "tangency-labs/solidcraft#5180", + "why": "no reproduction: a cut on a user's 20 m model never finishes, screenshot only" + }, + { + "source": "tangency-labs/solidcraft#5185", + "why": "no geometry: joint solver work while dragging (performance)" } ] diff --git a/tests/kernel-cases/crashes/5022-snap-fit-near-zero-thickness/expected.json b/tests/kernel-cases/crashes/5022-snap-fit-near-zero-thickness/expected.json new file mode 100644 index 0000000000..ee3244f8f1 --- /dev/null +++ b/tests/kernel-cases/crashes/5022-snap-fit-near-zero-thickness/expected.json @@ -0,0 +1,9 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5022" + ], + "what": "a snap fit 1e-9 mm thick on a box: it got past validation and panicked in the kernel ('tolerance must be no less than 1e-6')", + "source": "invariants", + "method": "a 1e-9 mm wall is no solid: the right answer is a clean refusal, never a panic", + "outcome": "refused" +} diff --git a/tests/kernel-cases/crashes/5022-snap-fit-near-zero-thickness/recipe.json b/tests/kernel-cases/crashes/5022-snap-fit-near-zero-thickness/recipe.json new file mode 100644 index 0000000000..b4b9c6deab --- /dev/null +++ b/tests/kernel-cases/crashes/5022-snap-fit-near-zero-thickness/recipe.json @@ -0,0 +1,32 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 40, + "width": 40, + "height": 4 + } + }, + { + "command": "plastic.snap_fit", + "params": { + "position": [ + 20, + 20, + 4 + ], + "hook": [ + 1, + 0, + 0 + ], + "length": 15, + "thickness": 1e-09, + "width": 6, + "catch_depth": 1, + "catch_length": 3 + } + } + ] +} diff --git a/tests/kernel-cases/crashes/skipped-4161.json b/tests/kernel-cases/crashes/skipped-4161.json index c5e6296ddb..a10915c7d8 100644 --- a/tests/kernel-cases/crashes/skipped-4161.json +++ b/tests/kernel-cases/crashes/skipped-4161.json @@ -126,5 +126,93 @@ { "source": "tangency-labs/solidcraft#4791", "why": "render: capture buffer and GPU hang on Intel/Mesa, no geometry" + }, + { + "source": "tangency-labs/solidcraft#4840", + "why": "no geometry: unclean exit on 0.15.0, gone on 0.19.0" + }, + { + "source": "tangency-labs/solidcraft#4845", + "why": "no reproduction: inspect.clearance between two user bodies, the design is not given" + }, + { + "source": "tangency-labs/solidcraft#4892", + "why": "no geometry: drawing references and updates (feature plan)" + }, + { + "source": "tangency-labs/solidcraft#4931", + "why": "no geometry: unclean exit on 0.12.0 after selections" + }, + { + "source": "tangency-labs/solidcraft#4944", + "why": "no reproduction: timeline.edit of a bore in a user's design, the design is not given" + }, + { + "source": "tangency-labs/solidcraft#4951", + "why": "no geometry: an empty crash report" + }, + { + "source": "tangency-labs/solidcraft#4958", + "why": "render: lost GPU device (wgpu), no geometry" + }, + { + "source": "tangency-labs/solidcraft#4975", + "why": "no geometry: an empty crash report (inspect.interference)" + }, + { + "source": "tangency-labs/solidcraft#4981", + "why": "render: startup on the software fallback renderer, no geometry" + }, + { + "source": "tangency-labs/solidcraft#4993", + "why": "no geometry: unclean exit between commands, no replay" + }, + { + "source": "tangency-labs/solidcraft#5018", + "why": "no reproduction: unclean exit during a fillet on 0.16.2, nothing recorded" + }, + { + "source": "tangency-labs/solidcraft#5021", + "why": "no geometry: a design file's integer coordinates skip the load range check (document)" + }, + { + "source": "tangency-labs/solidcraft#5049", + "why": "render: GPU tessellation buffer padding (an empty vertex list), not the kernel; the STEP file can't be shared" + }, + { + "source": "tangency-labs/solidcraft#5065", + "why": "no geometry: unclean exit after a timeline delete, nothing running" + }, + { + "source": "tangency-labs/solidcraft#5068", + "why": "no reproduction: the display triangulation library's assertion, title only" + }, + { + "source": "tangency-labs/solidcraft#5069", + "why": "no reproduction: the display triangulation library's collinear-edge assertion, title only" + }, + { + "source": "tangency-labs/solidcraft#5079", + "why": "no geometry: the crash journal leaves out component.activate (document)" + }, + { + "source": "tangency-labs/solidcraft#5102", + "why": "no geometry: an empty crash report during startup (surface configure)" + }, + { + "source": "tangency-labs/solidcraft#5122", + "why": "no reproduction: an access violation between commands, title only" + }, + { + "source": "tangency-labs/solidcraft#5125", + "why": "no geometry: unclean exit with no command and no replay" + }, + { + "source": "tangency-labs/solidcraft#5144", + "why": "render: lost GPU device (wgpu), no geometry" + }, + { + "source": "tangency-labs/solidcraft#5189", + "why": "render: lost GPU device (wgpu) in Preferences and the viewport" } ] diff --git a/tests/kernel-cases/fillets/4859-chamfer-inside-corner-of-thin-wall-ring/expected.json b/tests/kernel-cases/fillets/4859-chamfer-inside-corner-of-thin-wall-ring/expected.json new file mode 100644 index 0000000000..a31fa8c8b7 --- /dev/null +++ b/tests/kernel-cases/fillets/4859-chamfer-inside-corner-of-thin-wall-ring/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4859" + ], + "what": "an inside (concave) vertical corner of a 25x15 ring with a 2 mm wall, 10 high, chamfered 2 mm: truck refused it ('2 mm is too large for this chamfer: the result changes 108 mm3')", + "source": "analytic", + "method": "a chamfer of a concave edge fills it: + 2*2/2 * 10 = 20. V = (25*15 - 21*11)*10 + 20 = 1460. Faces: 4 outer, 4 inner, the chamfer, top, bottom = 11", + "body_count": 1, + "faces": 11, + "volume_mm3": 1460.0 +} diff --git a/tests/kernel-cases/fillets/4859-chamfer-inside-corner-of-thin-wall-ring/recipe.json b/tests/kernel-cases/fillets/4859-chamfer-inside-corner-of-thin-wall-ring/recipe.json new file mode 100644 index 0000000000..1c7f9a8d62 --- /dev/null +++ b/tests/kernel-cases/fillets/4859-chamfer-inside-corner-of-thin-wall-ring/recipe.json @@ -0,0 +1,67 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": "XY" + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 0, + 0 + ], + "p1": [ + 25, + 15 + ] + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 2, + 2 + ], + "p1": [ + 23, + 13 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "distance": 10, + "profiles": [ + { + "point": [ + 1, + 7 + ] + } + ] + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 2, + 2, + 5 + ] + ], + "distance": 2 + } + } + ] +} diff --git a/tests/kernel-cases/fillets/4989-chamfer-top-edge-of-drafted-face/expected.json b/tests/kernel-cases/fillets/4989-chamfer-top-edge-of-drafted-face/expected.json new file mode 100644 index 0000000000..41dc60b02f --- /dev/null +++ b/tests/kernel-cases/fillets/4989-chamfer-top-edge-of-drafted-face/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4989" + ], + "what": "the top edge of a face drafted 10 deg (the front of a 40x30x20 block, neutral plane at its base), chamfered 2 mm: refused ('the blend is larger than the neighbouring faces; the largest radius that fits is 0.071 mm')", + "source": "analytic", + "method": "the draft tilts the front face in by 20 tan10 at the top: - 0.5*20*(20 tan10)*40. The edge between the top and the drafted face has an 80 deg wedge; an equal 2 mm chamfer removes the triangle 0.5*2*2*sin80 along its 40 mm (the end faces are square to it). Faces 7", + "body_count": 1, + "faces": 7, + "volume_mm3": 22510.5995 +} diff --git a/tests/kernel-cases/fillets/4989-chamfer-top-edge-of-drafted-face/recipe.json b/tests/kernel-cases/fillets/4989-chamfer-top-edge-of-drafted-face/recipe.json new file mode 100644 index 0000000000..abbbba334e --- /dev/null +++ b/tests/kernel-cases/fillets/4989-chamfer-top-edge-of-drafted-face/recipe.json @@ -0,0 +1,45 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 0, + 0 + ], + "length": 40, + "width": 30, + "height": 20, + "body_name": "Block" + } + }, + { + "command": "solid.draft", + "params": { + "faces": [ + [ + 20, + 0, + 10 + ] + ], + "angle": "10 deg", + "neutral": "XY" + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 20, + 3.52654, + 20 + ] + ], + "distance": 2 + } + } + ] +} diff --git a/tests/kernel-cases/fillets/5129-fillet-concave-edge-where-cylinder-meets-block/expected.json b/tests/kernel-cases/fillets/5129-fillet-concave-edge-where-cylinder-meets-block/expected.json new file mode 100644 index 0000000000..b64754dd2a --- /dev/null +++ b/tests/kernel-cases/fillets/5129-fillet-concave-edge-where-cylinder-meets-block/expected.json @@ -0,0 +1,13 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5129" + ], + "what": "the concave vertical edge where a taller cylinder (r8 x 15) meets a block's side (10 high), filleted r1: refused ('a vertex of the edge chain where other faces meet: both faces next to the edge must be planar'); it worked when both were the same height", + "source": "analytic", + "method": "block 20x20x10 + cylinder pi 64 15 less their overlap (half the cylinder over the block's height, pi 64/2 10). The round fills the corner between the plane x = 20 and the cylinder: its circle (r1) has its centre at (21, 10 - sqrt80), tangent to both; the region between the plane, the cylinder and that circle (polygon clipping, 8192 segments a quarter circle) times the edge's 10 mm, the block's top closing it. Graded to 1e-5 relative, as the round adds 3e-4", + "body_count": 1, + "volume_mm3": 6012.41426, + "tolerance": { + "rel": 1e-05 + } +} diff --git a/tests/kernel-cases/fillets/5129-fillet-concave-edge-where-cylinder-meets-block/recipe.json b/tests/kernel-cases/fillets/5129-fillet-concave-edge-where-cylinder-meets-block/recipe.json new file mode 100644 index 0000000000..0722750eec --- /dev/null +++ b/tests/kernel-cases/fillets/5129-fillet-concave-edge-where-cylinder-meets-block/recipe.json @@ -0,0 +1,47 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 0, + 0 + ], + "length": 20, + "width": 20, + "height": 10, + "body_name": "Block" + } + }, + { + "command": "solid.cylinder", + "params": { + "radius": 8, + "height": 15, + "base": [ + 20, + 10, + 0 + ], + "operation": "join", + "targets": [ + "Block" + ] + } + }, + { + "command": "solid.fillet", + "params": { + "edges": [ + [ + 20, + 2, + 5 + ] + ], + "radius": 1 + } + } + ] +} diff --git a/tests/kernel-cases/fillets/5157-chamfer-bottom-loop-of-box-with-rounded-corners/expected.json b/tests/kernel-cases/fillets/5157-chamfer-bottom-loop-of-box-with-rounded-corners/expected.json new file mode 100644 index 0000000000..23c05bf403 --- /dev/null +++ b/tests/kernel-cases/fillets/5157-chamfer-bottom-loop-of-box-with-rounded-corners/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5157" + ], + "what": "the bottom loop of a 30x20x10 box whose vertical edges are rounded r4, chamfered 1 mm along its tangent chain: truck's corners bulged out instead of following the chamfer", + "source": "analytic", + "method": "rounds: 4 (1-pi/4) 16 10; the chamfer: its 1x1 triangle (area 1/2) along the straight runs (2*22 + 2*12 = 68) and, round each r4 corner, a quarter turn of it about the corner's axis (Pappus, centroid at radius 4 - 1/3): 4 (pi/2)(11/3)(1/2). V = 6000 - rounds - 34 - corners. Faces: top, bottom, 4 sides, 4 rounds, 4 flat and 4 conical chamfer pieces = 18", + "body_count": 1, + "faces": 18, + "volume_mm3": 5817.1357 +} diff --git a/tests/kernel-cases/fillets/5157-chamfer-bottom-loop-of-box-with-rounded-corners/recipe.json b/tests/kernel-cases/fillets/5157-chamfer-bottom-loop-of-box-with-rounded-corners/recipe.json new file mode 100644 index 0000000000..6f6577bcc9 --- /dev/null +++ b/tests/kernel-cases/fillets/5157-chamfer-bottom-loop-of-box-with-rounded-corners/recipe.json @@ -0,0 +1,59 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "corner": [ + -15, + -10, + 0 + ], + "length": 30, + "width": 20, + "height": 10, + "body_name": "Box" + } + }, + { + "command": "solid.fillet", + "params": { + "edges": [ + [ + 15, + 10, + 5 + ], + [ + 15, + -10, + 5 + ], + [ + -15, + 10, + 5 + ], + [ + -15, + -10, + 5 + ] + ], + "radius": 4 + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 0, + -10, + 0 + ] + ], + "distance": 1 + } + } + ] +} diff --git a/tests/kernel-cases/fillets/5158-fillet-adjacent-plate-edges-as-thick-as-plate/expected.json b/tests/kernel-cases/fillets/5158-fillet-adjacent-plate-edges-as-thick-as-plate/expected.json new file mode 100644 index 0000000000..b9cd147aad --- /dev/null +++ b/tests/kernel-cases/fillets/5158-fillet-adjacent-plate-edges-as-thick-as-plate/expected.json @@ -0,0 +1,13 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5158" + ], + "what": "two adjacent top edges of a 2 mm plate (30x31, two O6.35 holes) filleted r2, the plate's own thickness; one hole comes within 1 mm of an edge: refused ('a fillet larger than the faces next to it; the largest radius that fits is 0.963 mm')", + "source": "analytic", + "method": "each round (r = t = 2) removes the corner region (1-pi/4) r^2 along its edge (30 and 31) and uses up the side face; at the corner the two mitred rounds overlap by Int_0^r L(b)^2 db, L(b) = r - sqrt(r^2-(b-r)^2); the round at x = -15 reaches the hole at (-10.8, 8.2), which already took out Int over the hole's part at x < -13 of 2 - sqrt(4 - (x+13)^2) (python quadrature). V = 1860 - 2 pi 3.175^2 2 - removed. Graded to 1e-5", + "body_count": 1, + "volume_mm3": 1681.90376, + "tolerance": { + "rel": 1e-05 + } +} diff --git a/tests/kernel-cases/fillets/5158-fillet-adjacent-plate-edges-as-thick-as-plate/recipe.json b/tests/kernel-cases/fillets/5158-fillet-adjacent-plate-edges-as-thick-as-plate/recipe.json new file mode 100644 index 0000000000..5689e99112 --- /dev/null +++ b/tests/kernel-cases/fillets/5158-fillet-adjacent-plate-edges-as-thick-as-plate/recipe.json @@ -0,0 +1,100 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "Plate" + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + -15, + -15.5 + ], + "p1": [ + 15, + 15.5 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Plate", + "distance": 2 + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "face": [ + 0, + 0, + 2 + ] + }, + "name": "Holes", + "project_edges": false + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + -10.8, + 8.2 + ], + "radius": 3.175 + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 3.2, + 6.4 + ], + "radius": 3.175 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Holes", + "distance": 7.5, + "direction": "negative", + "operation": "cut" + } + }, + { + "command": "solid.fillet", + "params": { + "edges": [ + [ + 0, + 15.5, + 2 + ], + [ + -15, + 0, + 2 + ] + ], + "radius": 2 + } + } + ] +} diff --git a/tests/kernel-cases/fillets/5181-two-distance-chamfer-runs-past-tapered-sides/expected.json b/tests/kernel-cases/fillets/5181-two-distance-chamfer-runs-past-tapered-sides/expected.json new file mode 100644 index 0000000000..246a969e63 --- /dev/null +++ b/tests/kernel-cases/fillets/5181-two-distance-chamfer-runs-past-tapered-sides/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5181" + ], + "what": "a 220 x 11 two-distance chamfer along the bottom edge of a 23 mm plate 100 wide whose sides run straight for 85 mm and then taper to 61.4 at 222.5: refused ('runs past the faces beside the edge into other geometry; the largest size that fits is 85 mm')", + "source": "analytic", + "method": "the plate (profile 100x85 + the trapezoid to 61.351 at 222.5) x 23. The first face is the big face (it faces up most: horizontal, the bottom faces down): 220 up it, 11 into the bottom face. The chamfer plane cuts the wedge 11 (1 - z/220) deep across the full width w(z) (100, then tapering past z = 85): Int_0^220 w(z) 11 (1 - z/220) dz, the tapered sides simply trimmed", + "body_count": 1, + "volume_mm3": 335399.749 +} diff --git a/tests/kernel-cases/fillets/5181-two-distance-chamfer-runs-past-tapered-sides/recipe.json b/tests/kernel-cases/fillets/5181-two-distance-chamfer-runs-past-tapered-sides/recipe.json new file mode 100644 index 0000000000..a5e821eae9 --- /dev/null +++ b/tests/kernel-cases/fillets/5181-two-distance-chamfer-runs-past-tapered-sides/recipe.json @@ -0,0 +1,85 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0, + 0, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Bracket" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -50, + 0 + ], + [ + 50, + 0 + ], + [ + 50, + 85 + ], + [ + 30.675635228421154, + 222.5 + ], + [ + -30.675635228421154, + 222.5 + ], + [ + -50, + 85 + ] + ], + "closed": true + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Bracket", + "distance": 23, + "body_name": "Bracket" + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 0, + 0, + 0 + ] + ], + "distance": 220, + "distance2": 11 + } + } + ] +} diff --git a/tests/kernel-cases/fillets/skipped-4161.json b/tests/kernel-cases/fillets/skipped-4161.json index f8193b5e09..5cb5dcd210 100644 --- a/tests/kernel-cases/fillets/skipped-4161.json +++ b/tests/kernel-cases/fillets/skipped-4161.json @@ -146,5 +146,57 @@ { "source": "tangency-labs/solidcraft#4806", "why": "no reproduction: a 0.2 mm chamfer chain on an unknown part, no design" + }, + { + "source": "tangency-labs/solidcraft#4842", + "why": "no geometry: variable chamfers (feature request)" + }, + { + "source": "tangency-labs/solidcraft#4848", + "why": "no reproduction: a 1 mm chamfer of a curved chain on an unknown part, no design" + }, + { + "source": "tangency-labs/solidcraft#4861", + "why": "UI only: hovered edge contrast" + }, + { + "source": "tangency-labs/solidcraft#4871", + "why": "no reproduction: a join that only touched, fixed on 0.20.0 per the reporter" + }, + { + "source": "tangency-labs/solidcraft#4926", + "why": "no reproduction: two edges on a 14-feature unknown part, no design" + }, + { + "source": "tangency-labs/solidcraft#4986", + "why": "no geometry: Press Pull on chamfers and holes (feature request)" + }, + { + "source": "tangency-labs/solidcraft#5000", + "why": "needs the user design: a 0.02 mm fillet beside a sliver on a key-ring part; the zip holds only a screenshot" + }, + { + "source": "tangency-labs/solidcraft#5001", + "why": "no reproduction: one edge on an unknown part, no design" + }, + { + "source": "tangency-labs/solidcraft#5033", + "why": "no geometry: the tangent chain adds edges the user didn't want (UI; dup of #5328's request)" + }, + { + "source": "tangency-labs/solidcraft#5061", + "why": "needs the user design: a revolved bumper with patterned ribs, chamfers and cuts; no small stand-in" + }, + { + "source": "tangency-labs/solidcraft#5134", + "why": "no geometry: the report arrived empty" + }, + { + "source": "tangency-labs/solidcraft#5141", + "why": "needs the user design: a plate with a triangular rib in a component, a two-distance chamfer cutting too much" + }, + { + "source": "tangency-labs/solidcraft#5173", + "why": "no kernel geometry: an edge pick at a corner point picks one edge silently (command validation)" } ] diff --git a/tests/kernel-cases/import/5193-step-turned-pin-with-flats-round-trip/expected.json b/tests/kernel-cases/import/5193-step-turned-pin-with-flats-round-trip/expected.json new file mode 100644 index 0000000000..d96d498034 --- /dev/null +++ b/tests/kernel-cases/import/5193-step-turned-pin-with-flats-round-trip/expected.json @@ -0,0 +1,25 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5193" + ], + "what": "a turned pin (revolves with two grooves, a stepped bore with a drill point from one end, a stud with chamfered root and tip on the other) with two milled flats, exported to STEP and read back: truck's STEP lost two faces of the flats' neighbours and grew 0.075% (synthetic: the report's own pin, re-dimensioned)", + "source": "analytic", + "method": "the re-imported body is graded. Every section square to Z is a disc of the revolve profile's radius (4, chamfered 0.6 at both ends), less the end bore (r 1.6 from a 118-ish point at x 13..13.9, r 1.9 at the mouth), less the grooves r 3.3..4 (z -2..-6, -18..-18.8), less for z -13..0 the two circular segments beyond |x| = 3.3; the stud z 0..6 is r 2 with 0.25 and 0.4 chamfers. V = Int A(z) dz (python quadrature) = 998.79936 + 74.08360. Graded to 1e-4 relative, below truck's 7.5e-4 change; bbox x, y -4..4, z -24..6", + "body_count": 1, + "volume_mm3": 1072.88296, + "bbox": { + "min": [ + -4.0, + -4.0, + -24.0 + ], + "max": [ + 4.0, + 4.0, + 6.0 + ] + }, + "tolerance": { + "rel": 0.0001 + } +} diff --git a/tests/kernel-cases/import/5193-step-turned-pin-with-flats-round-trip/recipe.json b/tests/kernel-cases/import/5193-step-turned-pin-with-flats-round-trip/recipe.json new file mode 100644 index 0000000000..d35927d95f --- /dev/null +++ b/tests/kernel-cases/import/5193-step-turned-pin-with-flats-round-trip/recipe.json @@ -0,0 +1,465 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0.0, + 0.0, + -1.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "name": "Body" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 0 + ], + [ + 0, + 3.4 + ], + [ + 0.6, + 4 + ], + [ + 23.4, + 4 + ], + [ + 24, + 3.4 + ], + [ + 24, + 0 + ] + ], + "closed": true, + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "Body", + "axis": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "dir": [ + 0.0, + 0.0, + -1.0 + ] + }, + "angle": 360.0, + "operation": "new", + "body_name": "Pin" + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0.0, + 0.0, + -1.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "name": "Groove1", + "project_edges": false + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 2, + 3.3 + ], + "p1": [ + 6, + 4.5 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "Groove1", + "axis": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "dir": [ + 0.0, + 0.0, + -1.0 + ] + }, + "angle": 360.0, + "operation": "cut", + "targets": [ + "Pin" + ] + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0.0, + 0.0, + -1.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "name": "Groove2", + "project_edges": false + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 18, + 3.3 + ], + "p1": [ + 18.8, + 4.5 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "Groove2", + "axis": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "dir": [ + 0.0, + 0.0, + -1.0 + ] + }, + "angle": 360.0, + "operation": "cut", + "targets": [ + "Pin" + ] + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0.0, + 0.0, + -1.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "name": "Bore", + "project_edges": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 24.5, + 0 + ], + [ + 24.5, + 1.9 + ], + [ + 23.7, + 1.9 + ], + [ + 23.7, + 1.6 + ], + [ + 13.9, + 1.6 + ], + [ + 13.0, + 0 + ] + ], + "closed": true, + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "Bore", + "axis": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "dir": [ + 0.0, + 0.0, + -1.0 + ] + }, + "angle": 360.0, + "operation": "cut", + "targets": [ + "Pin" + ] + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "x_dir": [ + 0.0, + 0.0, + -1.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "name": "Stud", + "project_edges": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1.75 + ], + [ + -0.25, + 2 + ], + [ + -5.6, + 2 + ], + [ + -6, + 1.6 + ], + [ + -6, + 0 + ] + ], + "closed": true, + "infer": false + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "Stud", + "axis": { + "origin": [ + 0.0, + 0.0, + 0.0 + ], + "dir": [ + 0.0, + 0.0, + -1.0 + ] + }, + "angle": 360.0, + "operation": "join", + "targets": [ + "Pin" + ] + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0.0, + 0.0, + -13.0 + ], + "x_dir": [ + 1.0, + 0.0, + 0.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "name": "Flats", + "project_edges": false + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 3.3, + -2.5980762113533165 + ], + "p1": [ + 5, + 2.5980762113533165 + ] + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + -5, + -2.5980762113533165 + ], + "p1": [ + -3.3, + 2.5980762113533165 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Flats", + "distance": 13.0, + "operation": "cut", + "targets": [ + "Pin" + ] + } + }, + { + "command": "file.export", + "params": { + "path": "$OUT/kernel-case-5193.step", + "format": "step" + } + }, + { + "command": "file.new", + "params": { + "name": "Reimported" + } + }, + { + "command": "file.insert_step", + "params": { + "path": "$OUT/kernel-case-5193.step" + } + } + ] +} diff --git a/tests/kernel-cases/import/skipped-4161.json b/tests/kernel-cases/import/skipped-4161.json index e37cc35eb4..7643c36eba 100644 --- a/tests/kernel-cases/import/skipped-4161.json +++ b/tests/kernel-cases/import/skipped-4161.json @@ -110,5 +110,21 @@ { "source": "tangency-labs/solidcraft#4814", "why": "no geometry: Convert Mesh needs the mesh's component active (dup of #4609)" + }, + { + "source": "tangency-labs/solidcraft#4898", + "why": "no geometry: SVG curves offset as a mixed chain and moved (sketch, dup of #2149)" + }, + { + "source": "tangency-labs/solidcraft#4918", + "why": "no geometry: Convert Mesh takes constant-section prisms only (dup of #4586)" + }, + { + "source": "tangency-labs/solidcraft#5090", + "why": "no kernel geometry: an open mesh body measures a negative volume (mesh measure)" + }, + { + "source": "tangency-labs/solidcraft#5091", + "why": "no geometry: KiCad board import (feature request)" } ] diff --git a/tests/kernel-cases/sheet-metal/skipped-4161.json b/tests/kernel-cases/sheet-metal/skipped-4161.json index 971ca1b163..6c5fd1c168 100644 --- a/tests/kernel-cases/sheet-metal/skipped-4161.json +++ b/tests/kernel-cases/sheet-metal/skipped-4161.json @@ -30,5 +30,9 @@ { "source": "tangency-labs/solidcraft#4720", "why": "no geometry: two sheet-metal bodies combined lose their flat pattern, as warned (feature request)" + }, + { + "source": "tangency-labs/solidcraft#4968", + "why": "no geometry: included bend angles in sheet-metal exports (feature request)" } ] diff --git a/tests/kernel-cases/shell/4847-join-base-ring-of-shelled-dome-back-into-it/expected.json b/tests/kernel-cases/shell/4847-join-base-ring-of-shelled-dome-back-into-it/expected.json new file mode 100644 index 0000000000..aa0957cafc --- /dev/null +++ b/tests/kernel-cases/shell/4847-join-base-ring-of-shelled-dome-back-into-it/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4847" + ], + "what": "a dome (a quarter disc r20 revolved) shelled 2 mm from its flat base, then the base ring (r 18..20) face-extruded 10 mm back into the dome as a join: ~120 s, then 'boolean Union: no result'", + "source": "analytic", + "method": "shell: (2/3) pi (20^3 - 18^3). The ring's prism r 18..20, z 0..10 lies inside the dome's wall where r^2 + z^2 <= 20^2 (r >= 18 keeps it outside the cavity) and pokes out elsewhere: it adds 760 pi - Int_18^20 2 pi r sqrt(400 - r^2) dr = 760 pi - (2 pi/3) 76^1.5", + "body_count": 1, + "volume_mm3": 5540.612 +} diff --git a/tests/kernel-cases/shell/4847-join-base-ring-of-shelled-dome-back-into-it/recipe.json b/tests/kernel-cases/shell/4847-join-base-ring-of-shelled-dome-back-into-it/recipe.json new file mode 100644 index 0000000000..7c7c430cc9 --- /dev/null +++ b/tests/kernel-cases/shell/4847-join-base-ring-of-shelled-dome-back-into-it/recipe.json @@ -0,0 +1,113 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0, + 0, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Quarter" + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 0 + ], + [ + 20, + 0 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 20, + 0 + ], + "through": [ + 14.142136, + 14.142136 + ], + "end": [ + 0, + 20 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 0, + 20 + ], + [ + 0, + 0 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "Quarter", + "axis": "y", + "body_name": "Dome" + } + }, + { + "command": "solid.shell", + "params": { + "faces": [ + [ + 0, + 0, + 0 + ] + ], + "thickness": 2 + } + }, + { + "command": "solid.extrude", + "params": { + "face": [ + 19, + 0, + 0 + ], + "face_body": "Dome", + "distance": 10, + "direction": "negative", + "operation": "join" + } + } + ] +} diff --git a/tests/kernel-cases/shell/5182-delete-chamfered-hole-of-block/expected.json b/tests/kernel-cases/shell/5182-delete-chamfered-hole-of-block/expected.json new file mode 100644 index 0000000000..47f594ca6c --- /dev/null +++ b/tests/kernel-cases/shell/5182-delete-chamfered-hole-of-block/expected.json @@ -0,0 +1,12 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5182", + "tangency-labs/solidcraft#5368" + ], + "what": "a chamfered O6 through hole in a block (synthetic: the report's part was an imported STEP), its wall and chamfer deleted: refused ('face 8 borders face 7, which is curved; only planar neighbours can extend')", + "source": "analytic", + "method": "the hole's wall and chamfer are all its faces; deleting them heals the block's top and bottom across the hole: a plain 40x40x20 block, V = 32000, 6 faces", + "body_count": 1, + "faces": 6, + "volume_mm3": 32000.0 +} diff --git a/tests/kernel-cases/shell/5182-delete-chamfered-hole-of-block/recipe.json b/tests/kernel-cases/shell/5182-delete-chamfered-hole-of-block/recipe.json new file mode 100644 index 0000000000..51c2c24852 --- /dev/null +++ b/tests/kernel-cases/shell/5182-delete-chamfered-hole-of-block/recipe.json @@ -0,0 +1,60 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "corner": [ + 0, + 0, + 0 + ], + "length": 40, + "width": 40, + "height": 20, + "body_name": "Block" + } + }, + { + "command": "solid.hole", + "params": { + "position": [ + 20, + 20, + 20 + ], + "diameter": 6, + "name": "Hole" + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 23, + 20, + 20 + ] + ], + "distance": 1 + } + }, + { + "command": "face.delete", + "params": { + "faces": [ + [ + 23, + 20, + 10 + ], + [ + 23.5, + 20, + 19.5 + ] + ] + } + } + ] +} diff --git a/tests/kernel-cases/shell/skipped-4161.json b/tests/kernel-cases/shell/skipped-4161.json index 9ca6533e72..e1aa44b30f 100644 --- a/tests/kernel-cases/shell/skipped-4161.json +++ b/tests/kernel-cases/shell/skipped-4161.json @@ -86,5 +86,29 @@ { "source": "tangency-labs/solidcraft#4822", "why": "no reproduction: a screenshot only" + }, + { + "source": "tangency-labs/solidcraft#4886", + "why": "no geometry: sketch offset of a mixed line/spline chain (sketch, a stated limit)" + }, + { + "source": "tangency-labs/solidcraft#4988", + "why": "no geometry: the report arrived empty" + }, + { + "source": "tangency-labs/solidcraft#4990", + "why": "no geometry: the report arrived empty" + }, + { + "source": "tangency-labs/solidcraft#5019", + "why": "no geometry: sketch offset joining coincident ends (sketch)" + }, + { + "source": "tangency-labs/solidcraft#5050", + "why": "no reproduction: shell of a user's revolved free-form profile (a stated limit; a plain tapered cup works); see the case from #4567" + }, + { + "source": "tangency-labs/solidcraft#5076", + "why": "no reproduction: shell of a user's loft (free-form, a stated limit); see the loft shell case from #4743" } ] diff --git a/tests/kernel-cases/sources.json b/tests/kernel-cases/sources.json index 3fd402bdcc..ad4992726b 100644 --- a/tests/kernel-cases/sources.json +++ b/tests/kernel-cases/sources.json @@ -1879,5 +1879,136 @@ "4826": "issue, open", "4827": "issue, open", "4828": "issue, open", - "4829": "issue, open" + "4829": "issue, open", + "4830": "issue, open", + "4831": "issue, open", + "4840": "issue, open", + "4842": "issue, open", + "4845": "issue, open", + "4847": "issue, open", + "4848": "issue, open", + "4852": "issue, open", + "4853": "issue, closed", + "4855": "issue, open", + "4856": "issue, open", + "4859": "issue, open", + "4861": "issue, open", + "4862": "issue, open", + "4865": "issue, open", + "4868": "issue, open", + "4871": "issue, open", + "4877": "issue, open", + "4879": "issue, open", + "4881": "issue, open", + "4883": "issue, open", + "4885": "issue, open", + "4886": "issue, open", + "4889": "issue, closed", + "4892": "issue, open", + "4898": "issue, open", + "4900": "issue, open", + "4910": "issue, closed", + "4911": "issue, open", + "4913": "issue, open", + "4917": "issue, open", + "4918": "issue, closed", + "4921": "issue, open", + "4922": "issue, closed", + "4926": "issue, open", + "4927": "issue, open", + "4928": "issue, open", + "4931": "issue, open", + "4937": "issue, open", + "4942": "issue, closed", + "4943": "issue, open", + "4944": "issue, open", + "4945": "issue, open", + "4946": "issue, open", + "4951": "issue, open", + "4955": "issue, open", + "4957": "issue, closed", + "4958": "issue, closed", + "4961": "issue, closed", + "4963": "issue, open", + "4967": "issue, closed", + "4968": "issue, closed", + "4971": "issue, closed", + "4974": "issue, closed", + "4975": "issue, open", + "4981": "issue, open", + "4986": "issue, open", + "4988": "issue, closed", + "4989": "issue, open", + "4990": "issue, open", + "4993": "issue, open", + "5000": "issue, open", + "5001": "issue, open", + "5002": "issue, open", + "5018": "issue, open", + "5019": "issue, open", + "5021": "issue, closed", + "5022": "issue, closed", + "5023": "issue, closed", + "5024": "issue, open", + "5032": "issue, open", + "5033": "issue, open", + "5035": "issue, open", + "5037": "issue, open", + "5039": "issue, open", + "5040": "issue, open", + "5041": "issue, open", + "5044": "issue, open", + "5049": "issue, closed", + "5050": "issue, open", + "5054": "issue, open", + "5055": "issue, closed", + "5061": "issue, open", + "5065": "issue, open", + "5066": "issue, closed", + "5068": "issue, closed", + "5069": "issue, open", + "5072": "issue, open", + "5073": "issue, open", + "5075": "issue, open", + "5076": "issue, open", + "5077": "issue, open", + "5078": "issue, closed", + "5079": "issue, closed", + "5080": "issue, open", + "5082": "issue, open", + "5089": "issue, closed", + "5090": "issue, open", + "5091": "issue, open", + "5102": "issue, open", + "5106": "issue, closed", + "5111": "issue, open", + "5122": "issue, open", + "5123": "issue, open", + "5125": "issue, open", + "5126": "issue, open", + "5129": "issue, open", + "5134": "issue, open", + "5135": "issue, closed", + "5136": "issue, open", + "5141": "issue, open", + "5142": "issue, open", + "5144": "issue, closed", + "5146": "issue, open", + "5149": "issue, open", + "5156": "issue, open", + "5157": "issue, open", + "5158": "issue, open", + "5171": "issue, open", + "5172": "issue, closed", + "5173": "issue, open", + "5175": "issue, closed", + "5180": "issue, open", + "5181": "issue, open", + "5182": "issue, open", + "5185": "issue, closed", + "5189": "issue, open", + "5192": "issue, open", + "5193": "issue, open", + "5195": "issue, open", + "5197": "issue, open" } diff --git a/tests/kernel-cases/sweeps/5037-sweep-wall-round-rounded-rectangle-rim/expected.json b/tests/kernel-cases/sweeps/5037-sweep-wall-round-rounded-rectangle-rim/expected.json new file mode 100644 index 0000000000..272c54c9cc --- /dev/null +++ b/tests/kernel-cases/sweeps/5037-sweep-wall-round-rounded-rectangle-rim/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5037" + ], + "what": "a box wall swept round a rounded-rectangle rim (lines and r5 arcs) from a profile standing square to the path at its start, joined to the floor: the sweep didn't follow the path (synthetic: the report's card box had a stepped profile)", + "source": "analytic", + "method": "floor 94x64 r7 x 2 (z -2..0). The wall section 2 x 10 is centred on the path, so by Pappus it adds 20 x the path's length 2*80 + 2*50 + 2 pi 5; it stands inside the floor's outline. V = floor + wall", + "body_count": 1, + "volume_mm3": 17776.1946 +} diff --git a/tests/kernel-cases/sweeps/5037-sweep-wall-round-rounded-rectangle-rim/recipe.json b/tests/kernel-cases/sweeps/5037-sweep-wall-round-rounded-rectangle-rim/recipe.json new file mode 100644 index 0000000000..c89099bd5f --- /dev/null +++ b/tests/kernel-cases/sweeps/5037-sweep-wall-round-rounded-rectangle-rim/recipe.json @@ -0,0 +1,240 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "Floor" + } + }, + { + "command": "sketch.rectangle.rounded", + "params": { + "p0": [ + -47, + -32 + ], + "p1": [ + 47, + 32 + ], + "radius": 7 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Floor", + "distance": 2, + "direction": "negative", + "body_name": "Box" + } + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "Rim", + "project_edges": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -40, + -30 + ], + [ + 40, + -30 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 40, + -30 + ], + "through": [ + 43.535534, + -28.535534 + ], + "end": [ + 45, + -25 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 45, + -25 + ], + [ + 45, + 25 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 45, + 25 + ], + "through": [ + 43.535534, + 28.535534 + ], + "end": [ + 40, + 30 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 40, + 30 + ], + [ + -40, + 30 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + -40, + 30 + ], + "through": [ + -43.535534, + 28.535534 + ], + "end": [ + -45, + 25 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -45, + 25 + ], + [ + -45, + -25 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + -45, + -25 + ], + "through": [ + -43.535534, + -28.535534 + ], + "end": [ + -40, + -30 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + -40, + 0, + 0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Wall", + "project_edges": false + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + -31, + 0 + ], + "p1": [ + -29, + 10 + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.sweep", + "params": { + "sketch": "Wall", + "path_sketch": "Rim", + "path": [ + "l1", + "a1", + "l2", + "a2", + "l3", + "a3", + "l4", + "a4" + ], + "operation": "join", + "targets": [ + "Box" + ] + } + } + ] +} diff --git a/tests/kernel-cases/sweeps/5195-revolve-cut-cove-replacing-a-chamfer/expected.json b/tests/kernel-cases/sweeps/5195-revolve-cut-cove-replacing-a-chamfer/expected.json new file mode 100644 index 0000000000..18fda16333 --- /dev/null +++ b/tests/kernel-cases/sweeps/5195-revolve-cut-cove-replacing-a-chamfer/expected.json @@ -0,0 +1,11 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5195" + ], + "what": "a cylinder whose 5 mm chamfered rim is revolve-cut to a concave cove: a quarter-circle arc through the chamfer's two ends, centred on the old corner, the region between it and the old corner (the chamfer's triangle and the lens) cut round 360 deg: 'boolean Cut: no result'", + "source": "analytic", + "method": "cylinder r20 x 30; chamfer and cove together remove the quarter disc r5 at the corner (r 15..20, z 25..30, centred at (20,30)). Pappus: area 25 pi/4, centroid at radius 20 - 4*5/(3 pi): V = pi 400 30 - 2 pi (20 - 20/(3 pi)) 25 pi/4. Faces: side, bottom, top disc r15 and the cove (a torus) = 4", + "body_count": 1, + "faces": 4, + "volume_mm3": 35493.5101 +} diff --git a/tests/kernel-cases/sweeps/5195-revolve-cut-cove-replacing-a-chamfer/recipe.json b/tests/kernel-cases/sweeps/5195-revolve-cut-cove-replacing-a-chamfer/recipe.json new file mode 100644 index 0000000000..fb55e4b99f --- /dev/null +++ b/tests/kernel-cases/sweeps/5195-revolve-cut-cove-replacing-a-chamfer/recipe.json @@ -0,0 +1,130 @@ +{ + "commands": [ + { + "command": "solid.cylinder", + "params": { + "radius": 20, + "height": 30, + "body_name": "Cyl" + } + }, + { + "command": "solid.chamfer", + "params": { + "edges": [ + [ + 20, + 0, + 30 + ] + ], + "distance": 5 + } + }, + { + "command": "sketch.create", + "params": { + "plane": { + "origin": [ + 0, + 0, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + }, + "name": "Cove", + "project_edges": false + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 15, + 30 + ], + [ + 20, + 30 + ], + [ + 20, + 25 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 15, + 30 + ], + "through": [ + 16.464466094067262, + 26.464466094067262 + ], + "end": [ + 20, + 25 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 15, + 30 + ], + [ + 20, + 25 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "sketch": "Cove", + "profiles": [ + { + "point": [ + 19, + 29 + ] + }, + { + "point": [ + 16.6, + 27.0 + ] + } + ], + "axis": "y", + "angle": "360 deg", + "operation": "cut", + "targets": [ + "Cyl" + ] + } + } + ] +} diff --git a/tests/kernel-cases/sweeps/skipped-4161.json b/tests/kernel-cases/sweeps/skipped-4161.json index 07e6753a04..cf6a8761c1 100644 --- a/tests/kernel-cases/sweeps/skipped-4161.json +++ b/tests/kernel-cases/sweeps/skipped-4161.json @@ -110,5 +110,57 @@ { "source": "tangency-labs/solidcraft#4828", "why": "needs the author's real duct part (STEP operands of a user design); a performance case" + }, + { + "source": "tangency-labs/solidcraft#4830", + "why": "UI only: lofting to a point from the dialog (the command already takes an apex)" + }, + { + "source": "tangency-labs/solidcraft#4855", + "why": "needs the user design: a parametric bearing revolve-cut through ten sketch regions" + }, + { + "source": "tangency-labs/solidcraft#4868", + "why": "UI only: home view theme colours" + }, + { + "source": "tangency-labs/solidcraft#4889", + "why": "no reproduction: a screenshot and a video link, no message" + }, + { + "source": "tangency-labs/solidcraft#4900", + "why": "no reproduction: surface loft between splines refused, no message or design" + }, + { + "source": "tangency-labs/solidcraft#4942", + "why": "no reproduction: a loft join between annuli of a user's part, screenshot only" + }, + { + "source": "tangency-labs/solidcraft#4946", + "why": "no reproduction: last command only (a 15 deg symmetric revolve join), no design" + }, + { + "source": "tangency-labs/solidcraft#4961", + "why": "no geometry: Revolve about a construction axis (dup of #4506)" + }, + { + "source": "tangency-labs/solidcraft#5023", + "why": "no geometry: duplicate profile indexes accepted (command validation)" + }, + { + "source": "tangency-labs/solidcraft#5035", + "why": "no reproduction: a slow revolve cut of a polygon profile on an unknown part (0.18.4)" + }, + { + "source": "tangency-labs/solidcraft#5054", + "why": "no geometry: sketches on a patch body's flat face (feature request)" + }, + { + "source": "tangency-labs/solidcraft#5077", + "why": "no geometry: Revolve taking a body face as its profile (feature request, PR #5170)" + }, + { + "source": "tangency-labs/solidcraft#5192", + "why": "no geometry: \"unknown sketch line\" for the axis (command parameters), no design" } ] diff --git a/tests/kernel-cases/threads/5146-join-m23x1-threaded-shaft-onto-wider-base/expected.json b/tests/kernel-cases/threads/5146-join-m23x1-threaded-shaft-onto-wider-base/expected.json new file mode 100644 index 0000000000..5dedb8f884 --- /dev/null +++ b/tests/kernel-cases/threads/5146-join-m23x1-threaded-shaft-onto-wider-base/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#5146" + ], + "what": "a O23 shaft with a modelled M23x1 thread joined onto the O26 cylinder it stands on: SolidCraft ended without a clean exit during the combine", + "source": "invariants", + "method": "the shaft's end face lies on the base's top face, so the join is one solid: one valid closed body, within the case's timeout (modelled threads are slow: 600 s)", + "body_count": 1, + "timeout_s": 600 +} diff --git a/tests/kernel-cases/threads/5146-join-m23x1-threaded-shaft-onto-wider-base/recipe.json b/tests/kernel-cases/threads/5146-join-m23x1-threaded-shaft-onto-wider-base/recipe.json new file mode 100644 index 0000000000..af48bccd95 --- /dev/null +++ b/tests/kernel-cases/threads/5146-join-m23x1-threaded-shaft-onto-wider-base/recipe.json @@ -0,0 +1,48 @@ +{ + "commands": [ + { + "command": "solid.cylinder", + "params": { + "diameter": 26, + "height": 10, + "body_name": "Base" + } + }, + { + "command": "solid.cylinder", + "params": { + "diameter": 23, + "height": 20, + "base": [ + 0, + 0, + 10 + ], + "operation": "new", + "body_name": "Shaft" + } + }, + { + "command": "solid.thread", + "params": { + "face": [ + 11.5, + 0, + 20 + ], + "designation": "M23x1", + "modeled": true + } + }, + { + "command": "solid.combine", + "params": { + "target": "Base", + "tools": [ + "Shaft" + ], + "operation": "join" + } + } + ] +} diff --git a/tests/kernel-cases/threads/skipped-4161.json b/tests/kernel-cases/threads/skipped-4161.json index dc82ef3239..e92dcc657a 100644 --- a/tests/kernel-cases/threads/skipped-4161.json +++ b/tests/kernel-cases/threads/skipped-4161.json @@ -58,5 +58,21 @@ { "source": "tangency-labs/solidcraft#4799", "why": "no geometry: cosmetic threads don't cut the model, by design" + }, + { + "source": "tangency-labs/solidcraft#4913", + "why": "duplicate of threads/3311-two-tapped-holes-both-modelled-threaded: a second modelled thread after the first" + }, + { + "source": "tangency-labs/solidcraft#4963", + "why": "no geometry: a modelled thread needs the tap-drill hole, by design" + }, + { + "source": "tangency-labs/solidcraft#4971", + "why": "no geometry: no coarse M28 in ISO metric (designation; M28x2 works)" + }, + { + "source": "tangency-labs/solidcraft#5055", + "why": "no geometry: no coarse thread past M56 (designation; M75x2 works)" } ]