A hole on a face drills into the material, also in older designs (#950) (#952)

* Hole matrix: placement, types, extents, edits and 0.9.0 designs, with today's failures listed

Each case checks the drill goes into the material, the bore sits on its axis, a blind hole stops
where it should, the removed volume against its analytic value, the face count and that every
body is still one closed valid solid. Failing cases are listed in tests/hole_matrix/known_failures.txt
as a ratchet.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* A hole on a face drills into the material, also in older designs (#950)

Without a direction, solid.hole took the direction from any face whose infinite plane passed
within ten tolerances of the point, the last one found winning: the far side of a thin plate or a
face of another body at the same height could set it, and the wrong direction was saved. It now
uses the face nearest the point, against its outward normal (exact for planes, cylinders and
spheres, so holes on curved faces work without a direction). When a design is evaluated, a face
hole whose saved direction leaves the face it starts on is mirrored into it, so designs saved
with the wrong direction drill into the part.

Fixes #950.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Hole at a point on no face (a planar face's centroid outside it) keeps the plane it lies in

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Record the hole direction fix in the goldens and the action matrix baseline (#950)

Seeds 7, 21, 81 and 85 drill their holes straight into their faces now. In the action matrix,
holes on four faces that used to go the wrong way now build, and two whose correct direction
meets a cut the kernel refuses are marked failing.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Goldens: seeds 7, 21 and 85 drill their holes straight in (#950)

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
This commit is contained in:
bherbruckandClaude Opus 5.5 authored and GitHub committed 2026-10-14 01:45:11 -04:00
1 parent 813bee8914
commit 1ff16cc72b
15 files changed
+1993 -30

No files matched your search

+7 -7
View File
@@ -920,19 +920,19 @@
"Body1/F5:rest:side:0|F5:rest:side:1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:0|F5:rest:side:3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:0|F5:rest:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:1": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:1": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:1|F5:rest:side:2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:1|F5:rest:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:2": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:2|F5:rest:side:3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:2|F5:rest:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:3": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:3": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:3|F5:rest:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:4": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:4|F5:rest:side:5": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:4|F5:rest:side:7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:4|F5:rest:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:5": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:5": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Body1/F5:rest:side:5|F5:rest:side:6": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:5|F5:rest:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F5:rest:side:6": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch",
@@ -953,7 +953,7 @@
"Body1/F6:arm:side:2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch",
"Body1/F6:arm:side:2|F6:arm:side:3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F6:arm:side:2|F6:arm:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F6:arm:side:3": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch",
"Body1/F6:arm:side:3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch",
"Body1/F6:arm:side:3|F6:arm:side:4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F6:arm:side:3|F6:arm:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Body1/F6:arm:side:4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch",
@@ -10259,7 +10259,7 @@
"ClipBody/F4:side:l2": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch",
"ClipBody/F4:side:l2|F4:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"ClipBody/F4:side:l2|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"ClipBody/F4:side:l3": "face.angle_plane face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch",
"ClipBody/F4:side:l3": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch",
"ClipBody/F4:side:l3|F4:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"ClipBody/F4:side:l3|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"ClipBody/F4:side:l4": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch",
@@ -10288,10 +10288,10 @@
"Tool/F2:side:l1|F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Tool/F2:side:l1|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Tool/F2:side:l1|F4:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Tool/F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch",
"Tool/F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch",
"Tool/F2:side:l2|F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Tool/F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Tool/F2:side:l3": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Tool/F2:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch",
"Tool/F2:side:l3|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Tool/F2:side:l3|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
"Tool/F2:side:l3|F4:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project",
+1
View File
@@ -0,0 +1 @@
# Hole matrix cases that fail today (crates/engine/src/hole_matrix_tests.rs). A fix takes its case off.
@@ -0,0 +1,189 @@
{
"features": [
{
"id": 1,
"name": "S",
"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"
}
],
"counters": {
"k": 5,
"l": 4,
"p": 4
},
"curves": [
{
"a": 1,
"b": 2,
"construction": false,
"id": "l1",
"type": "line"
},
{
"a": 2,
"b": 3,
"construction": false,
"id": "l2",
"type": "line"
},
{
"a": 3,
"b": 4,
"construction": false,
"id": "l3",
"type": "line"
},
{
"a": 4,
"b": 1,
"construction": false,
"id": "l4",
"type": "line"
}
],
"points": [
{
"fixed": true,
"id": "origin",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p1",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p2",
"pos": [
40.0,
0.0
]
},
{
"fixed": false,
"id": "p3",
"pos": [
40.0,
30.0
]
},
{
"fixed": false,
"id": "p4",
"pos": [
0.0,
30.0
]
}
]
},
"suppressed": false,
"type": "sketch"
},
{
"body_names": [
"B"
],
"extent": {
"direction": "positive",
"distance": "20"
},
"id": 2,
"name": "Extrude1",
"operation": "new_body",
"param_names": [
"d1"
],
"profiles": {
"type": "all"
},
"sketch": 1,
"suppressed": false,
"type": "extrude"
},
{
"bodies": [
"B"
],
"features": [],
"id": 3,
"name": "Mirror1",
"plane": {
"name": "XY",
"type": "origin"
},
"suppressed": false,
"type": "mirror"
},
{
"depth": "10",
"diameter": "6",
"direction": [
-0.0,
0.0,
1.0
],
"face_names": [
"F2:[email protected]"
],
"hole": {
"type": "simple"
},
"id": 4,
"name": "Hole1",
"param_names": [
"d2",
"d3"
],
"position": [
20.0,
15.0,
-20.0
],
"suppressed": false,
"type": "hole"
}
],
"format": "solidcraft/17",
"name": "mirror_bottom_blind",
"next_id": 5,
"params": [],
"units": "mm"
}
@@ -0,0 +1,323 @@
{
"features": [
{
"id": 1,
"name": "S",
"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"
}
],
"counters": {
"k": 5,
"l": 4,
"p": 4
},
"curves": [
{
"a": 1,
"b": 2,
"construction": false,
"id": "l1",
"type": "line"
},
{
"a": 2,
"b": 3,
"construction": false,
"id": "l2",
"type": "line"
},
{
"a": 3,
"b": 4,
"construction": false,
"id": "l3",
"type": "line"
},
{
"a": 4,
"b": 1,
"construction": false,
"id": "l4",
"type": "line"
}
],
"points": [
{
"fixed": true,
"id": "origin",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p1",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p2",
"pos": [
40.0,
0.0
]
},
{
"fixed": false,
"id": "p3",
"pos": [
40.0,
30.0
]
},
{
"fixed": false,
"id": "p4",
"pos": [
0.0,
30.0
]
}
]
},
"suppressed": false,
"type": "sketch"
},
{
"body_names": [
"B"
],
"extent": {
"direction": "positive",
"distance": "20"
},
"id": 2,
"name": "Extrude1",
"operation": "new_body",
"param_names": [
"d1"
],
"profiles": {
"type": "all"
},
"sketch": 1,
"suppressed": false,
"type": "extrude"
},
{
"id": 3,
"name": "S2",
"plane": {
"plane": {
"origin": [
0.0,
0.0,
20.0
],
"x_dir": [
1.0,
0.0,
0.0
],
"y_dir": [
0.0,
1.0,
0.0
]
},
"type": "custom"
},
"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"
}
],
"counters": {
"k": 4,
"l": 4,
"p": 4
},
"curves": [
{
"a": 1,
"b": 2,
"construction": false,
"id": "l1",
"type": "line"
},
{
"a": 2,
"b": 3,
"construction": false,
"id": "l2",
"type": "line"
},
{
"a": 3,
"b": 4,
"construction": false,
"id": "l3",
"type": "line"
},
{
"a": 4,
"b": 1,
"construction": false,
"id": "l4",
"type": "line"
}
],
"points": [
{
"fixed": true,
"id": "origin",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p1",
"pos": [
60.0,
0.0
]
},
{
"fixed": false,
"id": "p2",
"pos": [
80.0,
0.0
]
},
{
"fixed": false,
"id": "p3",
"pos": [
80.0,
30.0
]
},
{
"fixed": false,
"id": "p4",
"pos": [
60.0,
30.0
]
}
]
},
"suppressed": false,
"type": "sketch"
},
{
"body_names": [
"N"
],
"extent": {
"direction": "positive",
"distance": "20"
},
"id": 4,
"name": "Extrude2",
"operation": "new_body",
"param_names": [
"d2"
],
"profiles": {
"type": "all"
},
"sketch": 3,
"suppressed": false,
"type": "extrude"
},
{
"depth": "10",
"diameter": "6",
"direction": [
-0.0,
0.0,
1.0
],
"face_names": [
"F2:top"
],
"hole": {
"type": "simple"
},
"id": 5,
"name": "Hole1",
"param_names": [
"d3",
"d4"
],
"position": [
20.0,
15.0,
20.0
],
"suppressed": false,
"type": "hole"
}
],
"format": "solidcraft/17",
"name": "neighbour_top_blind",
"next_id": 6,
"params": [],
"units": "mm"
}
@@ -0,0 +1,236 @@
{
"features": [
{
"id": 1,
"name": "S",
"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"
}
],
"counters": {
"k": 5,
"l": 4,
"p": 4
},
"curves": [
{
"a": 1,
"b": 2,
"construction": false,
"id": "l1",
"type": "line"
},
{
"a": 2,
"b": 3,
"construction": false,
"id": "l2",
"type": "line"
},
{
"a": 3,
"b": 4,
"construction": false,
"id": "l3",
"type": "line"
},
{
"a": 4,
"b": 1,
"construction": false,
"id": "l4",
"type": "line"
}
],
"points": [
{
"fixed": true,
"id": "origin",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p1",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p2",
"pos": [
40.0,
0.0
]
},
{
"fixed": false,
"id": "p3",
"pos": [
40.0,
30.0
]
},
{
"fixed": false,
"id": "p4",
"pos": [
0.0,
30.0
]
}
]
},
"suppressed": false,
"type": "sketch"
},
{
"body_names": [
"B"
],
"extent": {
"direction": "positive",
"distance": "20"
},
"id": 2,
"name": "Extrude1",
"operation": "new_body",
"param_names": [
"d1"
],
"profiles": {
"type": "all"
},
"sketch": 1,
"suppressed": false,
"type": "extrude"
},
{
"id": 3,
"name": "P",
"plane": {
"plane": {
"origin": [
0.0,
0.0,
20.0
],
"x_dir": [
1.0,
0.0,
0.0
],
"y_dir": [
0.0,
1.0,
0.0
]
},
"type": "custom"
},
"sketch": {
"constraints": [],
"counters": {},
"curves": [],
"points": [
{
"fixed": true,
"id": "origin",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "q0",
"pos": [
10.0,
10.0
]
},
{
"fixed": false,
"id": "q1",
"pos": [
30.0,
20.0
]
}
]
},
"suppressed": false,
"type": "sketch"
},
{
"depth": "10",
"diameter": "6",
"direction": [
-0.0,
-0.0,
-1.0
],
"hole": {
"type": "simple"
},
"id": 4,
"name": "Hole1",
"param_names": [
"d2",
"d3"
],
"points": {
"ids": [
"q0",
"q1"
],
"sketch": 3
},
"position": [
10.0,
10.0,
20.0
],
"suppressed": false,
"type": "hole"
}
],
"format": "solidcraft/17",
"name": "points_top_blind",
"next_id": 5,
"params": [],
"units": "mm"
}
@@ -0,0 +1,175 @@
{
"features": [
{
"id": 1,
"name": "S",
"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"
}
],
"counters": {
"k": 5,
"l": 4,
"p": 4
},
"curves": [
{
"a": 1,
"b": 2,
"construction": false,
"id": "l1",
"type": "line"
},
{
"a": 2,
"b": 3,
"construction": false,
"id": "l2",
"type": "line"
},
{
"a": 3,
"b": 4,
"construction": false,
"id": "l3",
"type": "line"
},
{
"a": 4,
"b": 1,
"construction": false,
"id": "l4",
"type": "line"
}
],
"points": [
{
"fixed": true,
"id": "origin",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p1",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p2",
"pos": [
150.0,
0.0
]
},
{
"fixed": false,
"id": "p3",
"pos": [
150.0,
100.0
]
},
{
"fixed": false,
"id": "p4",
"pos": [
0.0,
100.0
]
}
]
},
"suppressed": false,
"type": "sketch"
},
{
"body_names": [
"B"
],
"extent": {
"direction": "positive",
"distance": "1.5"
},
"id": 2,
"name": "Extrude1",
"operation": "new_body",
"param_names": [
"d1"
],
"profiles": {
"type": "all"
},
"sketch": 1,
"suppressed": false,
"type": "extrude"
},
{
"depth": "1",
"diameter": "6",
"direction": [
-0.0,
-0.0,
-1.0
],
"face_names": [
"F2:start"
],
"hole": {
"type": "simple"
},
"id": 3,
"name": "Hole1",
"param_names": [
"d2",
"d3"
],
"position": [
50.0,
50.0,
0.0
],
"suppressed": false,
"type": "hole"
}
],
"format": "solidcraft/17",
"name": "thin_plate_bottom_blind",
"next_id": 4,
"params": [],
"units": "mm"
}
+175
View File
@@ -0,0 +1,175 @@
{
"features": [
{
"id": 1,
"name": "S",
"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"
}
],
"counters": {
"k": 5,
"l": 4,
"p": 4
},
"curves": [
{
"a": 1,
"b": 2,
"construction": false,
"id": "l1",
"type": "line"
},
{
"a": 2,
"b": 3,
"construction": false,
"id": "l2",
"type": "line"
},
{
"a": 3,
"b": 4,
"construction": false,
"id": "l3",
"type": "line"
},
{
"a": 4,
"b": 1,
"construction": false,
"id": "l4",
"type": "line"
}
],
"points": [
{
"fixed": true,
"id": "origin",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p1",
"pos": [
0.0,
0.0
]
},
{
"fixed": false,
"id": "p2",
"pos": [
40.0,
0.0
]
},
{
"fixed": false,
"id": "p3",
"pos": [
40.0,
30.0
]
},
{
"fixed": false,
"id": "p4",
"pos": [
0.0,
30.0
]
}
]
},
"suppressed": false,
"type": "sketch"
},
{
"body_names": [
"B"
],
"extent": {
"direction": "positive",
"distance": "20"
},
"id": 2,
"name": "Extrude1",
"operation": "new_body",
"param_names": [
"d1"
],
"profiles": {
"type": "all"
},
"sketch": 1,
"suppressed": false,
"type": "extrude"
},
{
"depth": "10",
"diameter": "6",
"direction": [
-0.0,
-0.0,
-1.0
],
"face_names": [
"F2:top"
],
"hole": {
"type": "simple"
},
"id": 3,
"name": "Hole1",
"param_names": [
"d2",
"d3"
],
"position": [
20.0,
15.0,
20.0
],
"suppressed": false,
"type": "hole"
}
],
"format": "solidcraft/17",
"name": "top_blind",
"next_id": 4,
"params": [],
"units": "mm"
}
+5 -4
View File
@@ -8,7 +8,7 @@
"4": {"area":5813.939544,"bodies":1,"edges":27,"error":null,"faces":11,"outcome":"ok","rejected":0,"shells":1,"steps":["box","cut cylinder","fillet"],"unsupported":0,"volume":28462.605133},
"5": {"area":1696.077144,"bodies":1,"edges":24,"error":"boolean Cut: the operation failed: no result; the operation ","faces":12,"outcome":"failed","rejected":1,"shells":1,"steps":["box","cut cylinder","hole","cut cylinder"],"unsupported":0,"volume":3520.994026},
"6": {"area":11580.298484,"bodies":1,"edges":28,"error":"offset: a corner whose faces don't meet the same way after t","faces":13,"outcome":"failed","rejected":0,"shells":1,"steps":["box","hole","join box","join cylinder","cut cylinder","shell"],"unsupported":1,"volume":69137.260899},
"7": {"area":7365.885875,"bodies":3,"edges":79,"error":null,"faces":34,"outcome":"ok","rejected":0,"shells":3,"steps":["extruded profile","join box","cut cylinder","join box","circular pattern","hole"],"unsupported":0,"volume":32867.700222},
"7": {"area":7462.861065,"bodies":3,"edges":111,"error":null,"faces":32,"outcome":"ok","rejected":0,"shells":3,"steps":["extruded profile","join box","cut cylinder","join box","circular pattern","hole"],"unsupported":0,"volume":32823.69121},
"8": {"area":2865.472237,"bodies":1,"edges":24,"error":null,"faces":10,"outcome":"ok","rejected":0,"shells":1,"steps":["revolved section","cut cylinder"],"unsupported":0,"volume":10024.247951},
"9": {"area":2434.461263,"bodies":1,"edges":38,"error":"lumps: shell boundaries intersect or touch; cavity ownership","faces":17,"outcome":"failed","rejected":0,"shells":2,"steps":["revolved section","chamfer","fillet","join box","cut sphere","rectangular pattern","rectangular pattern","cut box"],"unsupported":4,"volume":6547.123554},
"10": {"area":2786.620097,"bodies":1,"edges":44,"error":null,"faces":18,"outcome":"ok","rejected":1,"shells":1,"steps":["revolved section","cut box","chamfer","hole"],"unsupported":0,"volume":6668.9804},
@@ -22,7 +22,7 @@
"18": {"area":5524.583817,"bodies":4,"edges":98,"error":"boolean Cut: the operation failed: no result","faces":44,"outcome":"failed","rejected":0,"shells":4,"steps":["extruded profile","join cylinder","circular pattern","cut cylinder","hole","cut cylinder","hole","circular pattern"],"unsupported":0,"volume":21568.016672},
"19": {"area":5939.094997,"bodies":1,"edges":68,"error":null,"faces":23,"outcome":"ok","rejected":1,"shells":1,"steps":["revolved section","cut sphere","shell"],"unsupported":0,"volume":2943.015294},
"20": {"area":5727.101189,"bodies":1,"edges":116,"error":null,"faces":45,"outcome":"ok","rejected":1,"shells":1,"steps":["extruded profile","fillet","cut box","cut cylinder","hole","circular pattern","cut box"],"unsupported":0,"volume":17142.727051},
"21": {"area":5968.473058,"bodies":2,"edges":54,"error":null,"faces":21,"outcome":"ok","rejected":1,"shells":2,"steps":["revolved section","join box","hole","fillet","hole","cut box"],"unsupported":0,"volume":18926.835165},
"21": {"area":5857.763125,"bodies":2,"edges":51,"error":null,"faces":22,"outcome":"ok","rejected":0,"shells":2,"steps":["revolved section","join box","hole","fillet","fillet","hole"],"unsupported":0,"volume":18878.613005},
"22": {"area":4634.476813,"bodies":2,"edges":108,"error":null,"faces":40,"outcome":"ok","rejected":0,"shells":2,"steps":["revolved section","join box","join box","join box","rectangular pattern","cut cylinder"],"unsupported":0,"volume":7855.560098},
"23": {"area":1795.696192,"bodies":1,"edges":16,"error":null,"faces":7,"outcome":"ok","rejected":0,"shells":1,"steps":["revolved section","cut sphere"],"unsupported":0,"volume":3198.694598},
"24": {"area":13432.401041,"bodies":1,"edges":86,"error":null,"faces":35,"outcome":"ok","rejected":0,"shells":1,"steps":["revolved section","chamfer","hole","cut box","cut sphere","cut sphere","shell"],"unsupported":0,"volume":9985.17442},
@@ -86,7 +86,7 @@
"82": {"area":3195.487113,"bodies":1,"edges":36,"error":null,"faces":13,"outcome":"ok","rejected":0,"shells":1,"steps":["box","hole","circular pattern","cut box"],"unsupported":0,"volume":5902.162954},
"83": {"area":5125.0,"bodies":1,"edges":28,"error":"offset: a corner whose faces don't meet the same way after t","faces":12,"outcome":"failed","rejected":0,"shells":1,"steps":["box","join box","rectangular pattern","shell"],"unsupported":0,"volume":19250.0},
"84": {"area":4906.192237,"bodies":1,"edges":67,"error":null,"faces":25,"outcome":"ok","rejected":2,"shells":1,"steps":["extruded profile","fillet","hole","hole","cut cylinder","cut box","fillet"],"unsupported":0,"volume":14219.865875},
"85": {"area":3186.31126,"bodies":1,"edges":57,"error":null,"faces":25,"outcome":"ok","rejected":1,"shells":2,"steps":["revolved section","fillet","cut sphere","circular pattern","join cylinder","hole","join box"],"unsupported":0,"volume":7007.218633},
"85": {"area":3309.210936,"bodies":1,"edges":57,"error":null,"faces":24,"outcome":"ok","rejected":1,"shells":2,"steps":["revolved section","fillet","cut sphere","circular pattern","join cylinder","hole","join box"],"unsupported":0,"volume":6904.455565},
"86": {"area":7885.256491,"bodies":1,"edges":66,"error":"offset: a corner whose faces don't meet the same way after t","faces":28,"outcome":"failed","rejected":0,"shells":3,"steps":["extruded profile","join cylinder","join cylinder","circular pattern","rectangular pattern","shell"],"unsupported":2,"volume":21498.10695},
"87": {"area":4853.708989,"bodies":1,"edges":24,"error":null,"faces":10,"outcome":"ok","rejected":0,"shells":1,"steps":["extruded profile","cut box","rectangular pattern"],"unsupported":0,"volume":18568.611108},
"88": {"area":3947.799648,"bodies":1,"edges":18,"error":null,"faces":8,"outcome":"ok","rejected":0,"shells":1,"steps":["box","hole"],"unsupported":0,"volume":12788.04706},
@@ -107,6 +107,7 @@
{"reason":"a fillet that used to be refused as unsupported on seed 64's extruded profile now builds, so the design goes on differently: rounds that meet at corners on curved faces (#851)","seeds":[64]},
{"reason":"#936: fillets and chamfers of smooth seams are refused as invalid picks (rejected) instead of unsupported; nothing else changes","seeds":[10,15,20,21,37,41,50,53,68,81,84,91]},
{"reason":"#946: small tools in large bodies are traced at their own scale; seeds 26 and 85 now build, 18, 43, 61, 63 and 71 fail with a different message, 19 builds two fewer faces (its fillet pick is also refused as in #936)","seeds":[18,19,26,43,61,63,71,85]},
{"reason":"#921 with its grid lines kept to display and export meshes (Booleans mesh as before #921): measured volume and area move by about 1e-6 (seed 94 also as in #936)","seeds":[22,78,94]}
{"reason":"#921 with its grid lines kept to display and export meshes (Booleans mesh as before #921): measured volume and area move by about 1e-6 (seed 94 also as in #936)","seeds":[22,78,94]},
{"reason":"a hole placed on a face without a direction drills into that face (it took the direction from any face whose plane passed through the point, the last one found, such as a side of a patterned box standing on the point's plane): the holes on these seeds now go straight in (#950)","seeds":[7,21,85]}
]
}