diff --git a/tests/kernel-cases/crashes/1219-bore-fillet-then-grooves-cut/expected.json b/tests/kernel-cases/crashes/1219-bore-fillet-then-grooves-cut/expected.json new file mode 100644 index 0000000000..92d7a9efb5 --- /dev/null +++ b/tests/kernel-cases/crashes/1219-bore-fillet-then-grooves-cut/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1219" + ], + "what": "24 small grooves cut into a bore whose top edge has an unrelated 1 mm fillet: 73 s and 24 boolean retries instead of 0.2 s", + "source": "analytic", + "method": "block 140x140x25 minus bore r68.2 h25: V0 = 140*140*25 - pi*68.2^2*25 = 124692.46. Fillet R1 on the bore's top edge removes the corner region (square 1x1 minus quarter disc, centroid radii 68.7 and 69.2-4/(3pi)), Pappus: 2pi*(1*68.7 - pi/4*(69.2-4/(3pi))) = 92.26. Each groove is the 0.9x0.6 rectangle (x 67.8..68.7, y +-0.3) cut 4.5 deep (z 19..23.5); only the part outside the bore is material: 0.6*68.7 - 2*F(0.3), F(y)=(y*sqrt(r^2-y^2)+r^2*asin(y/r))/2, = 0.300132 mm2, times 4.5 times 24 = 32.41. The grooves end at z 23.5, below the fillet (z 24-25), so the removals are disjoint: V = 124692.46 - 92.26 - 32.41 = 124567.79", + "body_count": 1, + "volume_mm3": 124567.79 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/1219-bore-fillet-then-grooves-cut/recipe.json b/tests/kernel-cases/crashes/1219-bore-fillet-then-grooves-cut/recipe.json new file mode 100644 index 0000000000..65c86fcc90 --- /dev/null +++ b/tests/kernel-cases/crashes/1219-bore-fillet-then-grooves-cut/recipe.json @@ -0,0 +1,118 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 140, + "width": 140, + "height": 25, + "corner": [ + -70, + -70, + 0 + ], + "name": "Block", + "body_name": "Frame" + } + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "name": "BoreSketch" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "radius": 68.2 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "distance": 25, + "operation": "cut", + "name": "Bore" + } + }, + { + "command": "solid.fillet", + "params": { + "edges": [ + [ + 0, + 68.2, + 25 + ] + ], + "radius": 1, + "name": "BoreRound" + } + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "offset": 19, + "name": "GrooveSketch" + } + }, + { + "command": "sketch.rectangle.two_point", + "params": { + "p0": [ + 67.8, + -0.3 + ], + "p1": [ + 68.7, + 0.3 + ] + } + }, + { + "command": "sketch.pattern.circular", + "params": { + "entities": [ + "l1", + "l2", + "l3", + "l4" + ], + "center": "origin", + "count": 24 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "distance": 4.5, + "operation": "cut", + "targets": [ + "Frame" + ], + "name": "Grooves" + } + }, + { + "command": "document.inspect", + "params": { + "measure": true, + "sketches": false + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/140-join-pad-hanging-past-the-edge/expected.json b/tests/kernel-cases/crashes/140-join-pad-hanging-past-the-edge/expected.json new file mode 100644 index 0000000000..fdb4b36cbc --- /dev/null +++ b/tests/kernel-cases/crashes/140-join-pad-hanging-past-the-edge/expected.json @@ -0,0 +1,23 @@ +{ + "sources": [ + "tangency-labs/solidcraft#140" + ], + "what": "a join whose tool face lies flat on the target but only half backed by it (the pad hangs 10 mm past the edge) must not add material", + "source": "analytic", + "method": "box 40x30x20 plus pad 20x30x10 resting on z=20 from x=30..50, overlapping the base only along a face (10x30 contact). V = 24000 + 6000 = 30000. Area = 5200 + 2200 - 2*300 = 6800 (the contact patch leaves both surfaces).", + "body_count": 1, + "volume_mm3": 30000.0, + "area_mm2": 6800.0, + "bbox": { + "min": [ + 0, + 0, + 0 + ], + "max": [ + 50, + 30, + 30 + ] + } +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/140-join-pad-hanging-past-the-edge/recipe.json b/tests/kernel-cases/crashes/140-join-pad-hanging-past-the-edge/recipe.json new file mode 100644 index 0000000000..813b667ab3 --- /dev/null +++ b/tests/kernel-cases/crashes/140-join-pad-hanging-past-the-edge/recipe.json @@ -0,0 +1,42 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 40, + "width": 30, + "height": 20, + "body_name": "Base" + } + }, + { + "command": "solid.box", + "params": { + "corner": [ + 30, + 0, + 20 + ], + "length": 20, + "width": 30, + "height": 10, + "body_name": "Pad", + "operation": "new" + } + }, + { + "command": "solid.combine", + "params": { + "target": "Base", + "tools": [ + "Pad" + ], + "operation": "join" + } + }, + { + "command": "inspect.measure", + "params": {} + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/1985-step-export-enclosure-screw-hole/expected.json b/tests/kernel-cases/crashes/1985-step-export-enclosure-screw-hole/expected.json new file mode 100644 index 0000000000..7dedebf3c4 --- /dev/null +++ b/tests/kernel-cases/crashes/1985-step-export-enclosure-screw-hole/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1985", + "tangency-labs/solidcraft#2243" + ], + "what": "a small enclosure (rounded box, inner cut, corner gusset with a screw hole, two standoffs, USB cut-out) whose STEP export never finished (the export meshes its own file back)", + "source": "invariants", + "method": "the script builds one connected part: the export must finish, and the part is one valid closed solid", + "body_count": 1 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/1985-step-export-enclosure-screw-hole/recipe.json b/tests/kernel-cases/crashes/1985-step-export-enclosure-screw-hole/recipe.json new file mode 100644 index 0000000000..47688c49c2 --- /dev/null +++ b/tests/kernel-cases/crashes/1985-step-export-enclosure-screw-hole/recipe.json @@ -0,0 +1,846 @@ +{ + "commands": [ + { + "command": "parameters.add", + "params": { + "expression": "74", + "name": "interior_width", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "73", + "name": "interior_depth", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "35", + "name": "interior_height", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "2", + "name": "wall_thickness", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "2.5", + "name": "bottom_thickness", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "3", + "name": "corner_radius", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "2", + "name": "lid_thickness", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "1", + "name": "lid_pad_height", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "0.3", + "name": "lid_pad_gap", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "8", + "name": "gusset_size", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "2.5", + "name": "gusset_screw_d", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "8", + "name": "gusset_screw_depth", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "10", + "name": "flange_extend", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "4.5", + "name": "flange_hole_d", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "5", + "name": "pin_base_d", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "3", + "name": "standoff_height", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "2", + "name": "pin_d", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "1.6", + "name": "pcb_thickness", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "2", + "name": "pin_above", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "interior_width + 2 * wall_thickness", + "name": "outer_width", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "interior_depth + 2 * wall_thickness", + "name": "outer_depth", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "interior_height + bottom_thickness", + "name": "outer_height", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "outer_width + 2 * flange_extend", + "name": "flange_total_width", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "(interior_width - 53.34) / 2", + "name": "board_offset_x", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "1", + "name": "board_offset_y", + "unit": "mm" + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "id": 1, + "name": "Koerper_Skizze", + "plane": { + "name": "XY", + "type": "origin" + }, + "sketch": { + "constraints": [ + { + "id": "k1", + "l": 0, + "type": "horizontal" + }, + { + "id": "k2", + "l": 2, + "type": "horizontal" + }, + { + "id": "k3", + "l": 1, + "type": "vertical" + }, + { + "id": "k4", + "l": 3, + "type": "vertical" + }, + { + "id": "k5", + "p": 0, + "q": 1, + "type": "coincident" + }, + { + "c": 0, + "id": "k6", + "p": 1, + "type": "point_on_curve" + }, + { + "c": 3, + "id": "k7", + "p": 1, + "type": "point_on_curve" + }, + { + "a": 0, + "b": 4, + "id": "k8", + "type": "tangent" + }, + { + "a": 3, + "b": 4, + "id": "k9", + "type": "tangent" + }, + { + "c": 4, + "id": "k10", + "param": "d1", + "type": "radius", + "value": 3.0 + }, + { + "a": 0, + "b": 5, + "id": "k11", + "type": "tangent" + }, + { + "a": 1, + "b": 5, + "id": "k12", + "type": "tangent" + }, + { + "a": 4, + "b": 5, + "id": "k13", + "type": "equal" + }, + { + "a": 1, + "b": 6, + "id": "k14", + "type": "tangent" + }, + { + "a": 2, + "b": 6, + "id": "k15", + "type": "tangent" + }, + { + "a": 4, + "b": 6, + "id": "k16", + "type": "equal" + }, + { + "a": 2, + "b": 7, + "id": "k17", + "type": "tangent" + }, + { + "a": 3, + "b": 7, + "id": "k18", + "type": "tangent" + }, + { + "a": 4, + "b": 7, + "id": "k19", + "type": "equal" + }, + { + "id": "k20", + "l": 0, + "param": "d2", + "type": "length", + "value": 74.0 + }, + { + "id": "k21", + "l": 3, + "param": "d3", + "type": "length", + "value": 73.0 + }, + { + "a": 3, + "b": 8, + "id": "k22", + "type": "collinear" + }, + { + "a": 0, + "b": 9, + "id": "k23", + "type": "collinear" + } + ], + "counters": { + "a": 4, + "corner": 1, + "j": 2, + "k": 23, + "l": 6, + "p": 16 + }, + "curves": [ + { + "a": 2, + "b": 5, + "construction": false, + "id": "l1", + "type": "line" + }, + { + "a": 6, + "b": 8, + "construction": false, + "id": "l2", + "type": "line" + }, + { + "a": 9, + "b": 11, + "construction": false, + "id": "l3", + "type": "line" + }, + { + "a": 12, + "b": 3, + "construction": false, + "id": "l4", + "type": "line" + }, + { + "a": 3, + "b": 2, + "c": 4, + "construction": false, + "id": "a1", + "type": "arc" + }, + { + "a": 5, + "b": 6, + "c": 7, + "construction": false, + "id": "a2", + "type": "arc" + }, + { + "a": 8, + "b": 9, + "c": 10, + "construction": false, + "id": "a3", + "type": "arc" + }, + { + "a": 11, + "b": 12, + "c": 13, + "construction": false, + "id": "a4", + "type": "arc" + }, + { + "a": 14, + "b": 15, + "construction": true, + "id": "l5", + "link": "j1", + "type": "line" + }, + { + "a": 16, + "b": 17, + "construction": true, + "id": "l6", + "link": "j2", + "type": "line" + } + ], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "name": "y", + "type": "sketch_axis" + } + }, + { + "id": "j2", + "kind": "project", + "source": { + "name": "x", + "type": "sketch_axis" + } + } + ], + "points": [ + { + "fixed": true, + "id": "origin", + "pos": [ + 0.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "corner1", + "pos": [ + 0.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "p5", + "pos": [ + 3.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "p6", + "pos": [ + 0.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "a1.center", + "pos": [ + 3.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "p7", + "pos": [ + 77.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "p8", + "pos": [ + 80.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "a2.center", + "pos": [ + 77.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "p9", + "pos": [ + 80.0, + 76.0 + ] + }, + { + "fixed": false, + "id": "p10", + "pos": [ + 77.0, + 79.0 + ] + }, + { + "fixed": false, + "id": "a3.center", + "pos": [ + 77.0, + 76.0 + ] + }, + { + "fixed": false, + "id": "p11", + "pos": [ + 3.0, + 79.0 + ] + }, + { + "fixed": false, + "id": "p12", + "pos": [ + 0.0, + 76.0 + ] + }, + { + "fixed": false, + "id": "a4.center", + "pos": [ + 3.0, + 76.0 + ] + }, + { + "fixed": true, + "id": "p13", + "link": "j1", + "pos": [ + 0.0, + -100.0 + ] + }, + { + "fixed": true, + "id": "p14", + "link": "j1", + "pos": [ + 0.0, + 100.0 + ] + }, + { + "fixed": true, + "id": "p15", + "link": "j2", + "pos": [ + -100.0, + 0.0 + ] + }, + { + "fixed": true, + "id": "p16", + "link": "j2", + "pos": [ + 100.0, + 0.0 + ] + } + ] + }, + "suppressed": false, + "type": "sketch" + }, + "params": [ + { + "expression": "corner_radius", + "name": "d1", + "unit": "mm" + }, + { + "expression": "outer_width - 2*corner_radius", + "name": "d2", + "unit": "mm" + }, + { + "expression": "outer_depth - 2*corner_radius", + "name": "d3", + "unit": "mm" + } + ] + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "body_names": [ + "Unterteil" + ], + "extent": { + "convention": "total_distance", + "direction": "positive", + "distance": "outer_height" + }, + "id": 2, + "name": "Koerper", + "operation": "new_body", + "param_names": [ + "d4" + ], + "profiles": { + "type": "all" + }, + "sketch": 1, + "suppressed": false, + "type": "extrude" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "corner": [ + "wall_thickness", + "wall_thickness", + "bottom_thickness" + ], + "height": "interior_height + 1", + "id": 5, + "length": "interior_width", + "name": "Innenraum", + "operation": "cut", + "param_names": [ + "d10", + "d11", + "d12" + ], + "participants": [ + "Unterteil" + ], + "suppressed": false, + "type": "box", + "width": "interior_depth" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "corner": [ + "wall_thickness + interior_width - gusset_size", + "wall_thickness + interior_depth - gusset_size", + "bottom_thickness" + ], + "height": "interior_height", + "id": 9, + "length": "gusset_size", + "name": "Gusset_11", + "operation": "join", + "param_names": [ + "d22", + "d23", + "d24" + ], + "participants": [ + "Unterteil" + ], + "suppressed": false, + "type": "box", + "width": "gusset_size" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "axis": [ + 0.0, + 0.0, + 1.0 + ], + "base": [ + "wall_thickness + interior_width - gusset_size/2", + "wall_thickness + interior_depth - gusset_size/2", + "outer_height - gusset_screw_depth" + ], + "height": "gusset_screw_depth + 1", + "id": 13, + "name": "Kernloch_11", + "operation": "cut", + "param_names": [ + "d31", + "d32" + ], + "participants": [ + "Unterteil" + ], + "radius": "(gusset_screw_d) / 2", + "suppressed": false, + "type": "cylinder" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "axis": [ + 0.0, + 0.0, + 1.0 + ], + "base": [ + "wall_thickness + board_offset_x + 17.78", + "wall_thickness + board_offset_y + 66.04", + "bottom_thickness" + ], + "height": "standoff_height", + "id": 18, + "name": "PinSockel_2", + "operation": "join", + "param_names": [ + "d41", + "d42" + ], + "participants": [ + "Unterteil" + ], + "radius": "(pin_base_d) / 2", + "suppressed": false, + "type": "cylinder" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "axis": [ + 0.0, + 0.0, + 1.0 + ], + "base": [ + "wall_thickness + board_offset_x + 45.72", + "wall_thickness + board_offset_y + 66.04", + "bottom_thickness" + ], + "height": "standoff_height", + "id": 20, + "name": "PinSockel_3", + "operation": "join", + "param_names": [ + "d45", + "d46" + ], + "participants": [ + "Unterteil" + ], + "radius": "(pin_base_d) / 2", + "suppressed": false, + "type": "cylinder" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "corner": [ + "wall_thickness + board_offset_x + 9", + -1.0, + "bottom_thickness + 2.5" + ], + "height": "6", + "id": 22, + "length": "10", + "name": "Ausschnitt_MicroUSB", + "operation": "cut", + "param_names": [ + "d49", + "d50", + "d51" + ], + "participants": [ + "Unterteil" + ], + "suppressed": false, + "type": "box", + "width": "wall_thickness + 2" + } + } + }, + { + "command": "file.export", + "params": { + "path": "/tmp/kernel-case-1985.step", + "format": "step" + } + }, + { + "command": "inspect.measure", + "params": {} + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/2243-step-export-flanged-enclosure/expected.json b/tests/kernel-cases/crashes/2243-step-export-flanged-enclosure/expected.json new file mode 100644 index 0000000000..93668104cb --- /dev/null +++ b/tests/kernel-cases/crashes/2243-step-export-flanged-enclosure/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#2243", + "tangency-labs/solidcraft#1985" + ], + "what": "a flanged enclosure with two standoffs and no screw hole whose STEP export also never finished", + "source": "invariants", + "method": "one connected part: the export finishes and the part is one valid closed solid", + "body_count": 1 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/2243-step-export-flanged-enclosure/recipe.json b/tests/kernel-cases/crashes/2243-step-export-flanged-enclosure/recipe.json new file mode 100644 index 0000000000..a295dad8bb --- /dev/null +++ b/tests/kernel-cases/crashes/2243-step-export-flanged-enclosure/recipe.json @@ -0,0 +1,1115 @@ +{ + "commands": [ + { + "command": "parameters.add", + "params": { + "expression": "74", + "name": "interior_width", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "73", + "name": "interior_depth", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "30", + "name": "interior_height", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "3", + "name": "wall_thickness", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "2.5", + "name": "bottom_thickness", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "3", + "name": "corner_radius", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "8", + "name": "gusset_size", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "10", + "name": "flange_extend", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "5", + "name": "pin_base_d", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "3", + "name": "standoff_height", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "interior_width + 2 * wall_thickness", + "name": "outer_width", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "interior_depth + 2 * wall_thickness", + "name": "outer_depth", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "interior_height + bottom_thickness", + "name": "outer_height", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "outer_width + 2 * flange_extend", + "name": "flange_total_width", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "(interior_width - 53.34) / 2", + "name": "board_offset_x", + "unit": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "expression": "1", + "name": "board_offset_y", + "unit": "mm" + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "id": 1, + "name": "Koerper_Skizze", + "plane": { + "name": "XY", + "type": "origin" + }, + "sketch": { + "constraints": [ + { + "id": "k1", + "l": 0, + "type": "horizontal" + }, + { + "id": "k2", + "l": 2, + "type": "horizontal" + }, + { + "id": "k3", + "l": 1, + "type": "vertical" + }, + { + "id": "k4", + "l": 3, + "type": "vertical" + }, + { + "id": "k5", + "p": 0, + "q": 1, + "type": "coincident" + }, + { + "c": 0, + "id": "k6", + "p": 1, + "type": "point_on_curve" + }, + { + "c": 3, + "id": "k7", + "p": 1, + "type": "point_on_curve" + }, + { + "a": 0, + "b": 4, + "id": "k8", + "type": "tangent" + }, + { + "a": 3, + "b": 4, + "id": "k9", + "type": "tangent" + }, + { + "c": 4, + "id": "k10", + "param": "d1", + "type": "radius", + "value": 3.0 + }, + { + "a": 0, + "b": 5, + "id": "k11", + "type": "tangent" + }, + { + "a": 1, + "b": 5, + "id": "k12", + "type": "tangent" + }, + { + "a": 4, + "b": 5, + "id": "k13", + "type": "equal" + }, + { + "a": 1, + "b": 6, + "id": "k14", + "type": "tangent" + }, + { + "a": 2, + "b": 6, + "id": "k15", + "type": "tangent" + }, + { + "a": 4, + "b": 6, + "id": "k16", + "type": "equal" + }, + { + "a": 2, + "b": 7, + "id": "k17", + "type": "tangent" + }, + { + "a": 3, + "b": 7, + "id": "k18", + "type": "tangent" + }, + { + "a": 4, + "b": 7, + "id": "k19", + "type": "equal" + }, + { + "id": "k20", + "l": 0, + "param": "d2", + "type": "length", + "value": 74.0 + }, + { + "id": "k21", + "l": 3, + "param": "d3", + "type": "length", + "value": 73.0 + }, + { + "a": 3, + "b": 8, + "id": "k22", + "type": "collinear" + }, + { + "a": 0, + "b": 9, + "id": "k23", + "type": "collinear" + } + ], + "counters": { + "a": 4, + "corner": 1, + "j": 2, + "k": 23, + "l": 6, + "p": 16 + }, + "curves": [ + { + "a": 2, + "b": 5, + "construction": false, + "id": "l1", + "type": "line" + }, + { + "a": 6, + "b": 8, + "construction": false, + "id": "l2", + "type": "line" + }, + { + "a": 9, + "b": 11, + "construction": false, + "id": "l3", + "type": "line" + }, + { + "a": 12, + "b": 3, + "construction": false, + "id": "l4", + "type": "line" + }, + { + "a": 3, + "b": 2, + "c": 4, + "construction": false, + "id": "a1", + "type": "arc" + }, + { + "a": 5, + "b": 6, + "c": 7, + "construction": false, + "id": "a2", + "type": "arc" + }, + { + "a": 8, + "b": 9, + "c": 10, + "construction": false, + "id": "a3", + "type": "arc" + }, + { + "a": 11, + "b": 12, + "c": 13, + "construction": false, + "id": "a4", + "type": "arc" + }, + { + "a": 14, + "b": 15, + "construction": true, + "id": "l5", + "link": "j1", + "type": "line" + }, + { + "a": 16, + "b": 17, + "construction": true, + "id": "l6", + "link": "j2", + "type": "line" + } + ], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "name": "y", + "type": "sketch_axis" + } + }, + { + "id": "j2", + "kind": "project", + "source": { + "name": "x", + "type": "sketch_axis" + } + } + ], + "points": [ + { + "fixed": true, + "id": "origin", + "pos": [ + 0.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "corner1", + "pos": [ + 0.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "p5", + "pos": [ + 3.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "p6", + "pos": [ + 0.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "a1.center", + "pos": [ + 3.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "p7", + "pos": [ + 77.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "p8", + "pos": [ + 80.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "a2.center", + "pos": [ + 77.0, + 3.0 + ] + }, + { + "fixed": false, + "id": "p9", + "pos": [ + 80.0, + 76.0 + ] + }, + { + "fixed": false, + "id": "p10", + "pos": [ + 77.0, + 79.0 + ] + }, + { + "fixed": false, + "id": "a3.center", + "pos": [ + 77.0, + 76.0 + ] + }, + { + "fixed": false, + "id": "p11", + "pos": [ + 3.0, + 79.0 + ] + }, + { + "fixed": false, + "id": "p12", + "pos": [ + 0.0, + 76.0 + ] + }, + { + "fixed": false, + "id": "a4.center", + "pos": [ + 3.0, + 76.0 + ] + }, + { + "fixed": true, + "id": "p13", + "link": "j1", + "pos": [ + 0.0, + -100.0 + ] + }, + { + "fixed": true, + "id": "p14", + "link": "j1", + "pos": [ + 0.0, + 100.0 + ] + }, + { + "fixed": true, + "id": "p15", + "link": "j2", + "pos": [ + -100.0, + 0.0 + ] + }, + { + "fixed": true, + "id": "p16", + "link": "j2", + "pos": [ + 100.0, + 0.0 + ] + } + ] + }, + "suppressed": false, + "type": "sketch" + }, + "params": [ + { + "expression": "corner_radius", + "name": "d1", + "unit": "mm" + }, + { + "expression": "outer_width - 2*corner_radius", + "name": "d2", + "unit": "mm" + }, + { + "expression": "outer_depth - 2*corner_radius", + "name": "d3", + "unit": "mm" + } + ] + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "body_names": [ + "Unterteil" + ], + "extent": { + "convention": "total_distance", + "direction": "positive", + "distance": "outer_height" + }, + "id": 2, + "name": "Koerper", + "operation": "new_body", + "param_names": [ + "d4" + ], + "profiles": { + "type": "all" + }, + "sketch": 1, + "suppressed": false, + "type": "extrude" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "id": 3, + "name": "Flansch_Skizze", + "plane": { + "name": "XY", + "type": "origin" + }, + "sketch": { + "constraints": [ + { + "id": "k1", + "l": 0, + "type": "horizontal" + }, + { + "id": "k2", + "l": 2, + "type": "horizontal" + }, + { + "id": "k3", + "l": 1, + "type": "vertical" + }, + { + "id": "k4", + "l": 3, + "type": "vertical" + }, + { + "a": 0, + "b": 4, + "id": "k5", + "type": "tangent" + }, + { + "a": 3, + "b": 4, + "id": "k6", + "type": "tangent" + }, + { + "c": 4, + "id": "k7", + "param": "d5", + "type": "radius", + "value": 3.0 + }, + { + "a": 0, + "b": 5, + "id": "k8", + "type": "tangent" + }, + { + "a": 1, + "b": 5, + "id": "k9", + "type": "tangent" + }, + { + "a": 4, + "b": 5, + "id": "k10", + "type": "equal" + }, + { + "a": 1, + "b": 6, + "id": "k11", + "type": "tangent" + }, + { + "a": 2, + "b": 6, + "id": "k12", + "type": "tangent" + }, + { + "a": 4, + "b": 6, + "id": "k13", + "type": "equal" + }, + { + "a": 2, + "b": 7, + "id": "k14", + "type": "tangent" + }, + { + "a": 3, + "b": 7, + "id": "k15", + "type": "tangent" + }, + { + "a": 4, + "b": 7, + "id": "k16", + "type": "equal" + }, + { + "id": "k17", + "l": 0, + "param": "d6", + "type": "length", + "value": 94.0 + }, + { + "id": "k18", + "l": 3, + "param": "d7", + "type": "length", + "value": 73.0 + }, + { + "c": 8, + "id": "k19", + "p": 1, + "type": "point_on_curve" + }, + { + "id": "k20", + "p": 0, + "param": "d8", + "q": 2, + "type": "distance_x", + "value": 10.0 + } + ], + "counters": { + "a": 4, + "j": 1, + "k": 20, + "l": 5, + "p": 14 + }, + "curves": [ + { + "a": 1, + "b": 4, + "construction": false, + "id": "l1", + "type": "line" + }, + { + "a": 5, + "b": 7, + "construction": false, + "id": "l2", + "type": "line" + }, + { + "a": 8, + "b": 10, + "construction": false, + "id": "l3", + "type": "line" + }, + { + "a": 11, + "b": 2, + "construction": false, + "id": "l4", + "type": "line" + }, + { + "a": 2, + "b": 1, + "c": 3, + "construction": false, + "id": "a1", + "type": "arc" + }, + { + "a": 4, + "b": 5, + "c": 6, + "construction": false, + "id": "a2", + "type": "arc" + }, + { + "a": 7, + "b": 8, + "c": 9, + "construction": false, + "id": "a3", + "type": "arc" + }, + { + "a": 10, + "b": 11, + "c": 12, + "construction": false, + "id": "a4", + "type": "arc" + }, + { + "a": 13, + "b": 14, + "construction": true, + "id": "l5", + "link": "j1", + "type": "line" + } + ], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "name": "x", + "type": "sketch_axis" + } + } + ], + "points": [ + { + "fixed": true, + "id": "origin", + "pos": [ + 0.0, + 0.0 + ] + }, + { + "fixed": false, + "id": "p5", + "pos": [ + -7.000000000421964, + -9.639689500501904e-11 + ] + }, + { + "fixed": false, + "id": "p6", + "pos": [ + -10.000000000100329, + 2.999999999497484 + ] + }, + { + "fixed": false, + "id": "a1.center", + "pos": [ + -7.000000000350304, + 2.999999999572889 + ] + }, + { + "fixed": false, + "id": "p7", + "pos": [ + 86.99999999951254, + -1.1049218029226348e-10 + ] + }, + { + "fixed": false, + "id": "p8", + "pos": [ + 89.99999999908958, + 2.99999999957527 + ] + }, + { + "fixed": false, + "id": "a2.center", + "pos": [ + 86.99999999945408, + 2.9999999995765445 + ] + }, + { + "fixed": false, + "id": "p9", + "pos": [ + 89.99999999905073, + 75.99999999922994 + ] + }, + { + "fixed": false, + "id": "p10", + "pos": [ + 86.99999999926114, + 78.99999999903463 + ] + }, + { + "fixed": false, + "id": "a3.center", + "pos": [ + 86.99999999926523, + 75.99999999923355 + ] + }, + { + "fixed": false, + "id": "p11", + "pos": [ + -7.0000000004280105, + 78.99999999906302 + ] + }, + { + "fixed": false, + "id": "p12", + "pos": [ + -10.000000000111083, + 75.99999999942932 + ] + }, + { + "fixed": false, + "id": "a4.center", + "pos": [ + -7.000000000426023, + 75.99999999936931 + ] + }, + { + "fixed": true, + "id": "p13", + "link": "j1", + "pos": [ + -100.0, + 0.0 + ] + }, + { + "fixed": true, + "id": "p14", + "link": "j1", + "pos": [ + 100.0, + 0.0 + ] + } + ] + }, + "suppressed": false, + "type": "sketch" + }, + "params": [ + { + "expression": "corner_radius", + "name": "d5", + "unit": "mm" + }, + { + "expression": "flange_total_width - 2*corner_radius", + "name": "d6", + "unit": "mm" + }, + { + "expression": "outer_depth - 2*corner_radius", + "name": "d7", + "unit": "mm" + }, + { + "expression": "flange_extend", + "name": "d8", + "unit": "mm" + } + ] + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "extent": { + "convention": "total_distance", + "direction": "positive", + "distance": "bottom_thickness" + }, + "id": 4, + "name": "Flansch", + "operation": "join", + "param_names": [ + "d9" + ], + "profiles": { + "type": "all" + }, + "sketch": 3, + "suppressed": false, + "targets": [ + "Unterteil" + ], + "type": "extrude" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "corner": [ + "wall_thickness", + "wall_thickness", + "bottom_thickness" + ], + "height": "interior_height + 1", + "id": 5, + "length": "interior_width", + "name": "Innenraum", + "operation": "cut", + "param_names": [ + "d10", + "d11", + "d12" + ], + "participants": [ + "Unterteil" + ], + "suppressed": false, + "type": "box", + "width": "interior_depth" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "corner": [ + "wall_thickness + interior_width - gusset_size", + "wall_thickness + interior_depth - gusset_size", + "bottom_thickness" + ], + "height": "interior_height", + "id": 9, + "length": "gusset_size", + "name": "Gusset_11", + "operation": "join", + "param_names": [ + "d22", + "d23", + "d24" + ], + "participants": [ + "Unterteil" + ], + "suppressed": false, + "type": "box", + "width": "gusset_size" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "axis": [ + 0.0, + 0.0, + 1.0 + ], + "base": [ + "wall_thickness + board_offset_x + 17.78", + "wall_thickness + board_offset_y + 66.04", + "bottom_thickness" + ], + "height": "standoff_height", + "id": 18, + "name": "PinSockel_2", + "operation": "join", + "param_names": [ + "d41", + "d42" + ], + "participants": [ + "Unterteil" + ], + "radius": "(pin_base_d) / 2", + "suppressed": false, + "type": "cylinder" + } + } + }, + { + "command": "timeline.add", + "params": { + "feature": { + "axis": [ + 0.0, + 0.0, + 1.0 + ], + "base": [ + "wall_thickness + board_offset_x + 45.72", + "wall_thickness + board_offset_y + 66.04", + "bottom_thickness" + ], + "height": "standoff_height", + "id": 20, + "name": "PinSockel_3", + "operation": "join", + "param_names": [ + "d45", + "d46" + ], + "participants": [ + "Unterteil" + ], + "radius": "(pin_base_d) / 2", + "suppressed": false, + "type": "cylinder" + } + } + }, + { + "command": "file.export", + "params": { + "path": "/tmp/kernel-case-2243.step", + "format": "step" + } + }, + { + "command": "inspect.measure", + "params": {} + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/2992-join-disk-and-36-twisted-loft-blades/expected.json b/tests/kernel-cases/crashes/2992-join-disk-and-36-twisted-loft-blades/expected.json new file mode 100644 index 0000000000..7a8b8001de --- /dev/null +++ b/tests/kernel-cases/crashes/2992-join-disk-and-36-twisted-loft-blades/expected.json @@ -0,0 +1,9 @@ +{ + "sources": [ + "tangency-labs/solidcraft#2992" + ], + "what": "join of a disk and a circular pattern of 36 twisted lofted blades (embedded 2.54 mm in the disk): blocks for minutes", + "source": "invariants", + "method": "each blade root is embedded in the disk, so the 37 bodies join into one connected solid; the join must finish with one valid closed solid", + "body_count": 1 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/2992-join-disk-and-36-twisted-loft-blades/recipe.json b/tests/kernel-cases/crashes/2992-join-disk-and-36-twisted-loft-blades/recipe.json new file mode 100644 index 0000000000..44e3cbedb1 --- /dev/null +++ b/tests/kernel-cases/crashes/2992-join-disk-and-36-twisted-loft-blades/recipe.json @@ -0,0 +1,471 @@ +{ + "commands": [ + { + "command": "sketch.create", + "params": { + "name": "HP compresseur 1 — disque — profil axial", + "plane": { + "origin": [ + 0, + 0, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 1, + 0 + ] + } + } + }, + { + "command": "sketch.line", + "params": { + "closed": true, + "points": [ + [ + 11.41984, + 88.9 + ], + [ + 11.41984, + 101.6 + ], + [ + 59.95416, + 101.6 + ], + [ + 59.95416, + 88.9 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.revolve", + "params": { + "axis": "X", + "body_name": "HP compresseur 1 — disque", + "name": "HP compresseur 1 — disque", + "sketch": "HP compresseur 1 — disque — profil axial" + } + }, + { + "command": "sketch.create", + "params": { + "name": "HP compresseur 1 — aube — section 1", + "plane": { + "origin": [ + 35.687, + 99.06, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.spline.fit_point", + "params": { + "periodic": true, + "points": [ + [ + -28.87138948, + -20.9762923 + ], + [ + -28.44419823, + -18.52855307 + ], + [ + -26.53108815, + -15.69743162 + ], + [ + -22.61356214, + -11.37514747 + ], + [ + -15.644211, + -5.18190517 + ], + [ + -7.05530744, + 1.2107885 + ], + [ + 3.17203981, + 7.77693192 + ], + [ + 13.81643744, + 13.76905473 + ], + [ + 22.86860424, + 18.30983423 + ], + [ + 28.82733926, + 21.03692222 + ], + [ + 28.91543969, + 20.91566238 + ], + [ + 23.79329117, + 17.03711185 + ], + [ + 15.87870265, + 10.93059018 + ], + [ + 6.36279192, + 3.38523839 + ], + [ + -3.08519731, + -4.25359932 + ], + [ + -11.45413995, + -10.94904321 + ], + [ + -18.87617404, + -16.51922089 + ], + [ + -23.6739244, + -19.62998015 + ], + [ + -26.61596063, + -21.04490625 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "name": "HP compresseur 1 — aube — section 2", + "plane": { + "origin": [ + 35.687, + 245.745, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.spline.fit_point", + "params": { + "periodic": true, + "points": [ + [ + -31.55029053, + -13.98116431 + ], + [ + -30.65021465, + -11.75337891 + ], + [ + -28.26746614, + -9.46429679 + ], + [ + -23.68724912, + -6.17159331 + ], + [ + -15.84223605, + -1.7284767 + ], + [ + -6.4254806, + 2.5749393 + ], + [ + 4.57560867, + 6.71024047 + ], + [ + 15.85467128, + 10.21825916 + ], + [ + 25.33406458, + 12.67675598 + ], + [ + 31.52093009, + 14.04741992 + ], + [ + 31.57965098, + 13.9149087 + ], + [ + 25.95038894, + 11.28594101 + ], + [ + 17.22921681, + 7.11642087 + ], + [ + 6.70231576, + 1.91105314 + ], + [ + -3.7793141, + -3.39647483 + ], + [ + -13.04946071, + -8.03073246 + ], + [ + -21.19619701, + -11.79297191 + ], + [ + -26.36310309, + -13.76173626 + ], + [ + -29.43165371, + -14.50321795 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "name": "HP compresseur 1 — aube — section 3", + "plane": { + "origin": [ + 35.687, + 365.76, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.spline.fit_point", + "params": { + "periodic": true, + "points": [ + [ + -32.54932697, + -8.11545869 + ], + [ + -31.31508433, + -6.13255159 + ], + [ + -28.65078449, + -4.33874353 + ], + [ + -23.71444686, + -1.95112378 + ], + [ + -15.45946156, + 0.99249503 + ], + [ + -5.72271793, + 3.53965294 + ], + [ + 5.50309282, + 5.66103596 + ], + [ + 16.89025502, + 7.13527368 + ], + [ + 26.37864214, + 7.90526159 + ], + [ + 32.53228451, + 8.18381227 + ], + [ + 32.56636943, + 8.0471051 + ], + [ + 26.73639166, + 6.47040661 + ], + [ + 17.68811901, + 3.93521603 + ], + [ + 6.73755393, + 0.7098829 + ], + [ + -4.18673319, + -2.62084535 + ], + [ + -13.83837676, + -5.50932095 + ], + [ + -22.26849929, + -7.75050271 + ], + [ + -27.54538444, + -8.77226094 + ], + [ + -30.60776263, + -8.96946398 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "body_name": "HP compresseur 1 — aube", + "name": "HP compresseur 1 — aube — loft vrillé", + "operation": "new", + "sections": [ + { + "sketch": "HP compresseur 1 — aube — section 1" + }, + { + "sketch": "HP compresseur 1 — aube — section 2" + }, + { + "sketch": "HP compresseur 1 — aube — section 3" + } + ] + } + }, + { + "command": "solid.pattern.circular", + "params": { + "axis": "X", + "bodies": [ + "HP compresseur 1 — aube" + ], + "count": 36 + } + }, + { + "command": "solid.combine", + "params": { + "operation": "join", + "target": "HP compresseur 1 — disque", + "tools": [ + "HP compresseur 1 — aube", + "HP compresseur 1 — aube (2)", + "HP compresseur 1 — aube (3)", + "HP compresseur 1 — aube (4)", + "HP compresseur 1 — aube (5)", + "HP compresseur 1 — aube (6)", + "HP compresseur 1 — aube (7)", + "HP compresseur 1 — aube (8)", + "HP compresseur 1 — aube (9)", + "HP compresseur 1 — aube (10)", + "HP compresseur 1 — aube (11)", + "HP compresseur 1 — aube (12)", + "HP compresseur 1 — aube (13)", + "HP compresseur 1 — aube (14)", + "HP compresseur 1 — aube (15)", + "HP compresseur 1 — aube (16)", + "HP compresseur 1 — aube (17)", + "HP compresseur 1 — aube (18)", + "HP compresseur 1 — aube (19)", + "HP compresseur 1 — aube (20)", + "HP compresseur 1 — aube (21)", + "HP compresseur 1 — aube (22)", + "HP compresseur 1 — aube (23)", + "HP compresseur 1 — aube (24)", + "HP compresseur 1 — aube (25)", + "HP compresseur 1 — aube (26)", + "HP compresseur 1 — aube (27)", + "HP compresseur 1 — aube (28)", + "HP compresseur 1 — aube (29)", + "HP compresseur 1 — aube (30)", + "HP compresseur 1 — aube (31)", + "HP compresseur 1 — aube (32)", + "HP compresseur 1 — aube (33)", + "HP compresseur 1 — aube (34)", + "HP compresseur 1 — aube (35)", + "HP compresseur 1 — aube (36)" + ] + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/3540-cut-with-coincident-cylinder-face/expected.json b/tests/kernel-cases/crashes/3540-cut-with-coincident-cylinder-face/expected.json new file mode 100644 index 0000000000..4baa8950c7 --- /dev/null +++ b/tests/kernel-cases/crashes/3540-cut-with-coincident-cylinder-face/expected.json @@ -0,0 +1,10 @@ +{ + "sources": [ + "tangency-labs/solidcraft#3540" + ], + "what": "a groove cut whose r33 arcs lie exactly on the r33 cylinder of an earlier slot cut and overlap it in Z: minutes of CPU", + "source": "analytic", + "method": "tube r28..33, z -5..10: V = pi*(33^2-28^2)*15. Slots (3 sectors, 26 deg each, r29.5..33, z -3..8): each removes theta/2*(R^2-r^2)*h. Grooves (3 sectors, 69 deg, r30..33, z 4.7..8.3). Each groove overlaps its slot in 25 deg x r30..33 x z 4.7..8 (3.3), counted once. V = 14372.79 - 1637.88 - 1229.09 + 408.21 = 11914.03", + "body_count": 1, + "volume_mm3": 11914.03 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/3540-cut-with-coincident-cylinder-face/recipe.json b/tests/kernel-cases/crashes/3540-cut-with-coincident-cylinder-face/recipe.json new file mode 100644 index 0000000000..39f60dbd83 --- /dev/null +++ b/tests/kernel-cases/crashes/3540-cut-with-coincident-cylinder-face/recipe.json @@ -0,0 +1,471 @@ +{ + "commands": [ + { + "command": "solid.cylinder", + "params": { + "base": [ + 0, + 0, + -5 + ], + "radius": 33, + "height": 15, + "body_name": "Oberteil" + } + }, + { + "command": "solid.cylinder", + "params": { + "base": [ + 0, + 0, + -6 + ], + "radius": 28, + "height": 17, + "operation": "cut", + "targets": [ + "Oberteil" + ] + } + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "offset": -3, + "name": "Slots" + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 7.423384793347543, + 32.154212137912765 + ], + "end": [ + -7.423384793347546, + 32.154212137912765 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 6.636056103144015, + 28.74391691116444 + ], + "end": [ + -6.636056103144019, + 28.74391691116444 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 7.423384793347543, + 32.154212137912765 + ], + [ + 6.636056103144015, + 28.74391691116444 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -7.423384793347546, + 32.154212137912765 + ], + [ + -6.636056103144019, + 28.74391691116444 + ] + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + -31.55805694678017, + -9.648266255850313 + ], + "end": [ + -24.13467215343263, + -22.505945882062445 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + -28.210990300909547, + -8.624965289320734 + ], + "end": [ + -21.574934197765533, + -20.118951621843703 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -31.55805694678017, + -9.648266255850313 + ], + [ + -28.210990300909547, + -8.624965289320734 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -24.13467215343263, + -22.505945882062445 + ], + [ + -21.574934197765533, + -20.118951621843703 + ] + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 24.134672153432632, + -22.50594588206244 + ], + "end": [ + 31.558056946780166, + -9.648266255850325 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 21.574934197765536, + -20.1189516218437 + ], + "end": [ + 28.210990300909543, + -8.624965289320746 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 24.134672153432632, + -22.50594588206244 + ], + [ + 21.574934197765536, + -20.1189516218437 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 31.558056946780166, + -9.648266255850325 + ], + [ + 28.210990300909543, + -8.624965289320746 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Slots", + "profiles": "all", + "distance": 11, + "operation": "cut", + "targets": [ + "Oberteil" + ], + "name": "SlotCut" + } + }, + { + "command": "sketch.create", + "params": { + "plane": "XY", + "offset": 4.7, + "name": "Grooves" + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 6.861085796986062, + 32.27887082421558 + ], + "end": [ + -27.67612874219899, + 17.9730881554959 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 6.237350724532783, + 29.344428022014167 + ], + "end": [ + -25.160117038362717, + 16.33917105045082 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 6.861085796986062, + 32.27887082421558 + ], + [ + 6.237350724532783, + 29.344428022014167 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -27.67612874219899, + 17.9730881554959 + ], + [ + -25.160117038362717, + 16.33917105045082 + ] + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + -31.38486503774007, + -10.19756081437326 + ], + "end": [ + -1.7270865560171622, + -32.95477464690094 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + -28.53169548885461, + -9.270509831248418 + ], + "end": [ + -1.5700786872883292, + -29.958886042637214 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -31.38486503774007, + -10.19756081437326 + ], + [ + -28.53169548885461, + -9.270509831248418 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + -1.7270865560171622, + -32.95477464690094 + ], + [ + -1.5700786872883292, + -29.958886042637214 + ] + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 24.52377924075401, + -22.08131000984232 + ], + "end": [ + 29.403215298216143, + 14.981686491405037 + ] + } + }, + { + "command": "sketch.arc.center_point", + "params": { + "center": [ + 0, + 0 + ], + "start": [ + 22.294344764321828, + -20.073918190765745 + ], + "end": [ + 26.73019572565104, + 13.619714992186397 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 24.52377924075401, + -22.08131000984232 + ], + [ + 22.294344764321828, + -20.073918190765745 + ] + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 29.403215298216143, + 14.981686491405037 + ], + [ + 26.73019572565104, + 13.619714992186397 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Grooves", + "profiles": "all", + "distance": 3.6, + "operation": "cut", + "targets": [ + "Oberteil" + ], + "name": "GrooveCut" + } + }, + { + "command": "inspect.measure", + "params": {} + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/3685-delete-fillet-face-beside-seam/expected.json b/tests/kernel-cases/crashes/3685-delete-fillet-face-beside-seam/expected.json new file mode 100644 index 0000000000..42ad4ea656 --- /dev/null +++ b/tests/kernel-cases/crashes/3685-delete-fillet-face-beside-seam/expected.json @@ -0,0 +1,13 @@ +{ + "sources": [ + "tangency-labs/solidcraft#1559", + "tangency-labs/solidcraft#3685" + ], + "what": "Delete Face on a fillet face next to a face whose edge a boolean/fillet rebuilt as an intersection curve: must never panic (truck: not implemented: intersection curve cannot connect by homotopy)", + "source": "analytic", + "method": "box 40x30x20, one top edge filleted R5 (a point on the round is (35+5/sqrt2, 15, 15+5/sqrt2)), then the round deleted and healed from the neighbouring planes: the original box comes back, V = 40*30*20 = 24000, area 5200, 6 faces. (If the kernel cannot rebuild the face the only other acceptable answer is a clean refusal, never a panic; the grader expects the healed box because healing is well defined here.)", + "body_count": 1, + "volume_mm3": 24000.0, + "area_mm2": 5200.0, + "faces": 6 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/3685-delete-fillet-face-beside-seam/recipe.json b/tests/kernel-cases/crashes/3685-delete-fillet-face-beside-seam/recipe.json new file mode 100644 index 0000000000..34c273fe50 --- /dev/null +++ b/tests/kernel-cases/crashes/3685-delete-fillet-face-beside-seam/recipe.json @@ -0,0 +1,42 @@ +{ + "commands": [ + { + "command": "solid.box", + "params": { + "length": 40, + "width": 30, + "height": 20, + "body_name": "B" + } + }, + { + "command": "solid.fillet", + "params": { + "edges": [ + [ + 40, + 15, + 20 + ] + ], + "radius": 5 + } + }, + { + "command": "face.delete", + "params": { + "faces": [ + [ + 37.5355339, + 15, + 17.5355339 + ] + ] + } + }, + { + "command": "inspect.measure", + "params": {} + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-panics/expected.json b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-panics/expected.json new file mode 100644 index 0000000000..073d941c6d --- /dev/null +++ b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-panics/expected.json @@ -0,0 +1,9 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4092" + ], + "what": "join extrude of a rounded pad over a lofted body with ring and ribs: repeated truck intersection_curve panics, then 'boolean Union: no result'", + "source": "invariants", + "method": "the pad (X -8..8, Y 18..25, Z 36..59) overlaps the body, ribs and ring, so the join is one connected solid; the join must succeed with one valid closed solid and no panic", + "body_count": 1 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-panics/recipe.json b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-panics/recipe.json new file mode 100644 index 0000000000..021260ce6d --- /dev/null +++ b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-panics/recipe.json @@ -0,0 +1,588 @@ +{ + "commands": [ + { + "command": "file.new", + "params": { + "name": "Native_loft_pad_union_original_condition" + } + }, + { + "command": "document.units", + "params": { + "units": "mm" + } + }, + { + "command": "parameters.add", + "params": { + "name": "chamberTop", + "expression": "64 mm" + } + }, + { + "command": "parameters.add", + "params": { + "name": "flangeThickness", + "expression": "4 mm" + } + }, + { + "command": "parameters.add", + "params": { + "name": "lidThickness", + "expression": "3 mm" + } + }, + { + "command": "parameters.add", + "params": { + "name": "ventDiameter", + "expression": "3 mm" + } + }, + { + "command": "parameters.add", + "params": { + "name": "bottleThreadPitch", + "expression": "3.18 mm" + } + }, + { + "command": "parameters.add", + "params": { + "name": "threadRadialClearance", + "expression": "0.25 mm" + } + }, + { + "command": "solid.cylinder", + "params": { + "diameter": "36 mm", + "height": "21 mm", + "base": [ + 0, + 0, + 0 + ], + "operation": "new", + "name": "01_Neck_outer_D36_H21", + "body_name": "NATIVE_CAP_BODY" + } + }, + { + "command": "sketch.create", + "params": { + "name": "02_Outer_transition_round", + "plane": "XY", + "offset": "21 mm" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "diameter": 36 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "name": "03_Outer_transition_ellipse", + "plane": "XY", + "offset": "38 mm" + } + }, + { + "command": "sketch.ellipse", + "params": { + "center": [ + 0, + 0 + ], + "major": [ + 30.0, + 0 + ], + "minor_radius": 20.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "02_Outer_transition_round" + }, + { + "sketch": "03_Outer_transition_ellipse" + } + ], + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "04_Outer_round_to_oval_transition" + } + }, + { + "command": "sketch.create", + "params": { + "name": "05_Upper_chamber_60x40", + "plane": "XY", + "offset": "38 mm" + } + }, + { + "command": "sketch.ellipse", + "params": { + "center": [ + 0, + 0 + ], + "major": [ + 30.0, + 0 + ], + "minor_radius": 20.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "05_Upper_chamber_60x40", + "distance": "chamberTop - 38 mm", + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "06_Upper_chamber_blank" + } + }, + { + "command": "sketch.create", + "params": { + "name": "07_Flange_70x50_R6", + "plane": "XY", + "offset": "60 mm" + } + }, + { + "command": "sketch.rectangle.rounded", + "params": { + "p0": [ + -35, + -25 + ], + "p1": [ + 35, + 25 + ], + "radius": 6 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "07_Flange_70x50_R6", + "distance": "flangeThickness", + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "08_External_bolt_flange" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_outer_D24", + "plane": { + "origin": [ + -5, + 0, + 0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 30, + 47 + ], + "diameter": 24 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_outer_D24", + "distance": 10, + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Handle_outer_D24_thickness10" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_lower_rib_X-8", + "plane": { + "origin": [ + -8, + 0, + 0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 18.0, + 37.5 + ], + "end": [ + 19.5, + 36.0 + ], + "through": [ + 18.439339828220177, + 36.43933982822018 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 19.5, + 36.0 + ], + [ + 24.4516191451179, + 36.0 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 24.4516191451179, + 36.0 + ], + "end": [ + 25.20742568340403, + 38.79566835134765 + ], + "through": [ + 25.89963546529897, + 37.10853003117829 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 25.20742568340403, + 38.79566835134765 + ], + [ + 20.25580653828613, + 41.68411285266642 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 20.25580653828613, + 41.68411285266642 + ], + "end": [ + 18.0, + 40.38844450131877 + ], + "through": [ + 18.75290891031588, + 41.68915773017231 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 18.0, + 40.38844450131877 + ], + [ + 18.0, + 37.5 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_lower_rib_X-8", + "distance": 4, + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Handle_lower_rib_X-8_R1p5_thickness4" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_lower_rib_X4", + "plane": { + "origin": [ + 4, + 0, + 0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 18.0, + 37.5 + ], + "end": [ + 19.5, + 36.0 + ], + "through": [ + 18.439339828220177, + 36.43933982822018 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 19.5, + 36.0 + ], + [ + 24.4516191451179, + 36.0 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 24.4516191451179, + 36.0 + ], + "end": [ + 25.20742568340403, + 38.79566835134765 + ], + "through": [ + 25.89963546529897, + 37.10853003117829 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 25.20742568340403, + 38.79566835134765 + ], + [ + 20.25580653828613, + 41.68411285266642 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 20.25580653828613, + 41.68411285266642 + ], + "end": [ + 18.0, + 40.38844450131877 + ], + "through": [ + 18.75290891031588, + 41.68915773017231 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 18.0, + 40.38844450131877 + ], + [ + 18.0, + 37.5 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_lower_rib_X4", + "distance": 4, + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Handle_lower_rib_X4_R1p5_thickness4" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_root_pad_R3", + "plane": { + "origin": [ + 0, + 18, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.rectangle.rounded", + "params": { + "p0": [ + -8, + 36 + ], + "p1": [ + 8, + 59 + ], + "radius": 3 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_root_pad_R3", + "distance": 7, + "direction": "negative", + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Native_root_pad_R3" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-reduced/expected.json b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-reduced/expected.json new file mode 100644 index 0000000000..0d4fbde596 --- /dev/null +++ b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-reduced/expected.json @@ -0,0 +1,9 @@ +{ + "sources": [ + "tangency-labs/solidcraft#4092" + ], + "what": "the same without the top flange: the join fails with 'boolean Union: no result'", + "source": "invariants", + "method": "the pad (X -8..8, Y 18..25, Z 36..59) overlaps the body, ribs and ring, so the join is one connected solid; the join must succeed with one valid closed solid and no panic", + "body_count": 1 +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-reduced/recipe.json b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-reduced/recipe.json new file mode 100644 index 0000000000..d8152af37b --- /dev/null +++ b/tests/kernel-cases/crashes/4092-loft-ribs-rounded-pad-union-reduced/recipe.json @@ -0,0 +1,508 @@ +{ + "commands": [ + { + "command": "file.new", + "params": { + "name": "Native_loft_pad_union_repro" + } + }, + { + "command": "document.units", + "params": { + "units": "mm" + } + }, + { + "command": "solid.cylinder", + "params": { + "diameter": "36 mm", + "height": "21 mm", + "base": [ + 0, + 0, + 0 + ], + "operation": "new", + "name": "01_Neck_outer_D36_H21", + "body_name": "NATIVE_CAP_BODY" + } + }, + { + "command": "sketch.create", + "params": { + "name": "02_Outer_transition_round", + "plane": "XY", + "offset": "21 mm" + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 0, + 0 + ], + "diameter": 36 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "sketch.create", + "params": { + "name": "03_Outer_transition_ellipse", + "plane": "XY", + "offset": "38 mm" + } + }, + { + "command": "sketch.ellipse", + "params": { + "center": [ + 0, + 0 + ], + "major": [ + 30.0, + 0 + ], + "minor_radius": 20.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.loft", + "params": { + "sections": [ + { + "sketch": "02_Outer_transition_round" + }, + { + "sketch": "03_Outer_transition_ellipse" + } + ], + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "04_Outer_round_to_oval_transition" + } + }, + { + "command": "sketch.create", + "params": { + "name": "05_Upper_chamber_60x40", + "plane": "XY", + "offset": "38 mm" + } + }, + { + "command": "sketch.ellipse", + "params": { + "center": [ + 0, + 0 + ], + "major": [ + 30.0, + 0 + ], + "minor_radius": 20.0 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "05_Upper_chamber_60x40", + "distance": 26, + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "06_Upper_chamber_blank" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_outer_D24", + "plane": { + "origin": [ + -5, + 0, + 0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.circle.center", + "params": { + "center": [ + 30, + 47 + ], + "diameter": 24 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_outer_D24", + "distance": 10, + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Handle_outer_D24_thickness10" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_lower_rib_X-8", + "plane": { + "origin": [ + -8, + 0, + 0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 18.0, + 37.5 + ], + "end": [ + 19.5, + 36.0 + ], + "through": [ + 18.439339828220177, + 36.43933982822018 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 19.5, + 36.0 + ], + [ + 24.4516191451179, + 36.0 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 24.4516191451179, + 36.0 + ], + "end": [ + 25.20742568340403, + 38.79566835134765 + ], + "through": [ + 25.89963546529897, + 37.10853003117829 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 25.20742568340403, + 38.79566835134765 + ], + [ + 20.25580653828613, + 41.68411285266642 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 20.25580653828613, + 41.68411285266642 + ], + "end": [ + 18.0, + 40.38844450131877 + ], + "through": [ + 18.75290891031588, + 41.68915773017231 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 18.0, + 40.38844450131877 + ], + [ + 18.0, + 37.5 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_lower_rib_X-8", + "distance": 4, + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Handle_lower_rib_X-8_R1p5_thickness4" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_lower_rib_X4", + "plane": { + "origin": [ + 4, + 0, + 0 + ], + "x_dir": [ + 0, + 1, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 18.0, + 37.5 + ], + "end": [ + 19.5, + 36.0 + ], + "through": [ + 18.439339828220177, + 36.43933982822018 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 19.5, + 36.0 + ], + [ + 24.4516191451179, + 36.0 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 24.4516191451179, + 36.0 + ], + "end": [ + 25.20742568340403, + 38.79566835134765 + ], + "through": [ + 25.89963546529897, + 37.10853003117829 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 25.20742568340403, + 38.79566835134765 + ], + [ + 20.25580653828613, + 41.68411285266642 + ] + ] + } + }, + { + "command": "sketch.arc.three_point", + "params": { + "start": [ + 20.25580653828613, + 41.68411285266642 + ], + "end": [ + 18.0, + 40.38844450131877 + ], + "through": [ + 18.75290891031588, + 41.68915773017231 + ] + } + }, + { + "command": "sketch.line", + "params": { + "points": [ + [ + 18.0, + 40.38844450131877 + ], + [ + 18.0, + 37.5 + ] + ] + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_lower_rib_X4", + "distance": 4, + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Handle_lower_rib_X4_R1p5_thickness4" + } + }, + { + "command": "sketch.create", + "params": { + "name": "Handle_root_pad_R3", + "plane": { + "origin": [ + 0, + 18, + 0 + ], + "x_dir": [ + 1, + 0, + 0 + ], + "y_dir": [ + 0, + 0, + 1 + ] + } + } + }, + { + "command": "sketch.rectangle.rounded", + "params": { + "p0": [ + -8, + 36 + ], + "p1": [ + 8, + 59 + ], + "radius": 3 + } + }, + { + "command": "sketch.finish", + "params": {} + }, + { + "command": "solid.extrude", + "params": { + "sketch": "Handle_root_pad_R3", + "distance": 7, + "direction": "negative", + "operation": "join", + "targets": [ + "NATIVE_CAP_BODY" + ], + "name": "Native_root_pad_R3" + } + } + ] +} \ No newline at end of file diff --git a/tests/kernel-cases/crashes/skipped.json b/tests/kernel-cases/crashes/skipped.json new file mode 100644 index 0000000000..4b47d8201b --- /dev/null +++ b/tests/kernel-cases/crashes/skipped.json @@ -0,0 +1,182 @@ +[ + { + "source": "tangency-labs/solidcraft#661", + "why": "truck intersection_curve unwrap in solid.hole at a position on a design only in the reporter's crash folder; no recipe to rebuild" + }, + { + "source": "tangency-labs/solidcraft#1023", + "why": "hole hang shown only in a video and a private design file; no recipe to rebuild" + }, + { + "source": "tangency-labs/solidcraft#1024", + "why": "not geometry: Windows heap corruption in the thread unit-test process (dependency/memory bug), and threads are another area (other area: threads)" + }, + { + "source": "tangency-labs/solidcraft#1104", + "why": "truck intersection_curve unwrap in solid.extrude: needs the reporter's private design or replay (only a crash report), so it can't be rebuilt synthetically" + }, + { + "source": "tangency-labs/solidcraft#1123", + "why": "unclean exit in solid.extrude after a slot sketch dragged many times: needs the reporter's private design or replay (only a crash report), so it can't be rebuilt synthetically" + }, + { + "source": "tangency-labs/solidcraft#1147", + "why": "perf only, no wrong result: 1,300-body design built over MCP is slow in the engine and the UI (fixed by #1148/#1152/#1154/#1158)" + }, + { + "source": "tangency-labs/solidcraft#1337", + "why": "extrude 'to object' on an imported STEP bracket: needs the user's STEP file" + }, + { + "source": "tangency-labs/solidcraft#1351", + "why": "unclean exit in solid.combine after a mirror of an extruded sketch: needs the reporter's private design or replay (only a crash report), so it can't be rebuilt synthetically" + }, + { + "source": "tangency-labs/solidcraft#1374", + "why": "other area: tessellation (STEP import meshing runs out of memory on a private 480-solid file; the mesher's curve division)" + }, + { + "source": "tangency-labs/solidcraft#1400", + "why": "other area: tessellation (a far-out boundary parameter spikes a face; meshing takes minutes)" + }, + { + "source": "tangency-labs/solidcraft#1411", + "why": "other area: threads (solid.coil crash, no geometry beyond the command; coil is a helical sweep)" + }, + { + "source": "tangency-labs/solidcraft#1597", + "why": "not geometry: kernel roadmap and contribution guide" + }, + { + "source": "tangency-labs/solidcraft#1856", + "why": "20-tooth lofted helical pinion join is slow: the scripts are only in a downloadable zip (the body gives the join command, not the sketches and lofts); duplicate in spirit of #2992 (case 2992)" + }, + { + "source": "tangency-labs/solidcraft#1957", + "why": "unclean exit in file.export of a bird-house design: needs the reporter's private design or replay (only a crash report), so it can't be rebuilt synthetically; the STEP-export hang family is case 1985" + }, + { + "source": "tangency-labs/solidcraft#2037", + "why": "multi-face extrusion preview/OK freeze and failing cut on an imported STEP model: needs the user's STEP file, and a UI/preview responsiveness report" + }, + { + "source": "tangency-labs/solidcraft#2038", + "why": "other area: threads (second modelled thread on one body; join of two faceted threaded bodies)" + }, + { + "source": "tangency-labs/solidcraft#2451", + "why": "other area: threads (solid.thread unclean exit)" + }, + { + "source": "tangency-labs/solidcraft#2467", + "why": "not geometry: renaming a body recomputes the features after it on the window thread (perf/UI only, no wrong result)" + }, + { + "source": "tangency-labs/solidcraft#2470", + "why": "other area: threads (solid.thread stack overflow on a modelled thread)" + }, + { + "source": "tangency-labs/solidcraft#2508", + "why": "other area: tessellation (bound on runaway closing polylines in the mesher); the STEP export hang itself is case 1985" + }, + { + "source": "tangency-labs/solidcraft#2552", + "why": "other area: threads (solid.coil crash, helical sweep cut; no backtrace)" + }, + { + "source": "tangency-labs/solidcraft#2570", + "why": "loft freeze from a design with an arc profile and a non-convex polyline profile that the report does not give; the web build only" + }, + { + "source": "tangency-labs/solidcraft#2796", + "why": "other area: threads (solid.thread unclean exit)" + }, + { + "source": "tangency-labs/solidcraft#2891", + "why": "other area: sweeps (twisted sweep cut through a tube freezes)" + }, + { + "source": "tangency-labs/solidcraft#2974", + "why": "perf only, no wrong result: a counterbored hole pattern is ~8x slower with a joined cylinder elsewhere; results already match hand calculation" + }, + { + "source": "tangency-labs/solidcraft#3066", + "why": "unclean exit in solid.extrude with a parametric sketch (nozL): needs the reporter's private design or replay (only a crash report), so it can't be rebuilt synthetically" + }, + { + "source": "tangency-labs/solidcraft#3085", + "why": "fillet/chamfer crash after combine with an imported STEP body: needs the user's STEP file (and edge selection is UI)" + }, + { + "source": "tangency-labs/solidcraft#3088", + "why": "other area: threads (solid.coil join crash, no backtrace)" + }, + { + "source": "tangency-labs/solidcraft#3207", + "why": "perf only: faster slow unit tests (clearance, inside_index, fill reference), same answers" + }, + { + "source": "tangency-labs/solidcraft#3368", + "why": "other area: threads (finely faceted booleans, repro is a modelled-thread join; thread cases cover it)" + }, + { + "source": "tangency-labs/solidcraft#3386", + "why": "other area: threads (solid.thread unclean exit)" + }, + { + "source": "tangency-labs/solidcraft#3410", + "why": "other area: threads (faceted-boolean stack overflow on a modelled thread, #2470)" + }, + { + "source": "tangency-labs/solidcraft#3430", + "why": "not a kernel operation: unclean exit at startup in the graphics surface configure on macOS" + }, + { + "source": "tangency-labs/solidcraft#3473", + "why": "unclean exit in a 16-fold circular pattern of a cylinder cut driven by parameters: the recipe is only in an attached replay.json, and the issue gives no dimensions" + }, + { + "source": "tangency-labs/solidcraft#3695", + "why": "other area: sweeps (twisted sweep cut through a tube, bounded intersection work)" + }, + { + "source": "tangency-labs/solidcraft#3731", + "why": "perf only, no wrong result: joins onto drafted walls are 20-100x slower than onto vertical ones (results are correct apart from a 4e-4 mm retry displacement); the 67-flute design takes tens of minutes and a one-line recipe can't pin it" + }, + { + "source": "tangency-labs/solidcraft#3737", + "why": "not geometry: UI highlight work on the main thread while orbiting an imported model (edge highlight)" + }, + { + "source": "tangency-labs/solidcraft#3745", + "why": "not geometry: hover highlight of a large thread freezes the UI (fixed by #3766/#3818)" + }, + { + "source": "tangency-labs/solidcraft#3818", + "why": "not geometry: hover highlight of a helical edge (mesh tangent chain), UI freeze fixed, same results" + }, + { + "source": "tangency-labs/solidcraft#3892", + "why": "not geometry: browser tree frame time on a large nested STEP assembly (UI)" + }, + { + "source": "tangency-labs/solidcraft#3897", + "why": "other area: sweeps (ring profile swept along a short arc with Join freezes)" + }, + { + "source": "tangency-labs/solidcraft#3962", + "why": "unclean exit in solid.combine cut on macOS: needs the reporter's private design or replay (only a crash report), so it can't be rebuilt synthetically" + }, + { + "source": "tangency-labs/solidcraft#4031", + "why": "spade CDT assertion in solid.extrude of a face with Join: needs the reporter's private design or replay (only a crash report), so it can't be rebuilt synthetically (no geometry given)" + }, + { + "source": "tangency-labs/solidcraft#4102", + "why": "booleans on a FreeCAD-exported STEP are ~15x slower: needs the 104 KB FreeCAD STEP file (written by another CAD, can't be rebuilt by hand), results are correct (perf only)" + }, + { + "source": "tangency-labs/solidcraft#4149", + "why": "other area: threads (solid.thread stack overflow on an internal M10x1.5 modelled thread)" + } +] \ No newline at end of file