Pieces a cut splits a body into are named after their faces since names follow history (lineage::order_lumps), so they keep their body names when an upstream edit moves the cut. The kernel's shell order named them before, and the two orders can differ: a slot along X through a 40x30x10 block swaps Body1 and Body1 (1). A design saved by an older build stores body names meaning the old order (fillet and chamfer bodies, targets, participants, materials, appearances, joints), so it would act on the other piece. Each feature now says which order names its pieces (Feature::shell_piece_order). The v13 to v14 step sets it on every saved feature, so an older design evaluates as it was saved; features made from now on, in new or old designs, name their pieces after their faces. The corpus gains split-body-pieces, saved by v0.3.2: a fillet, a chamfer and an appearance refer to the two pieces by body name. Without the setting the two pieces swap names (the corpus test fails); with it they stay as saved. Migration tests that compared an upgraded design with the original now expect the setting on its features. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J53sR6gEaVt56soFDpTck8
107 lines
1.3 KiB
JSON
107 lines
1.3 KiB
JSON
{
|
|
"commands": [
|
|
{
|
|
"command": "sketch.create",
|
|
"params": {
|
|
"plane": "XY",
|
|
"name": "Base"
|
|
}
|
|
},
|
|
{
|
|
"command": "sketch.rectangle.two_point",
|
|
"params": {
|
|
"p0": [
|
|
0,
|
|
0
|
|
],
|
|
"p1": [
|
|
40,
|
|
30
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "sketch.finish",
|
|
"params": {}
|
|
},
|
|
{
|
|
"command": "solid.extrude",
|
|
"params": {
|
|
"distance": 10,
|
|
"name": "Block"
|
|
}
|
|
},
|
|
{
|
|
"command": "sketch.create",
|
|
"params": {
|
|
"plane": "XY",
|
|
"name": "SlotSketch"
|
|
}
|
|
},
|
|
{
|
|
"command": "sketch.rectangle.two_point",
|
|
"params": {
|
|
"p0": [
|
|
-5,
|
|
12
|
|
],
|
|
"p1": [
|
|
45,
|
|
18
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "sketch.finish",
|
|
"params": {}
|
|
},
|
|
{
|
|
"command": "solid.extrude",
|
|
"params": {
|
|
"sketch": "SlotSketch",
|
|
"distance": 10,
|
|
"operation": "cut",
|
|
"name": "Slot"
|
|
}
|
|
},
|
|
{
|
|
"command": "solid.fillet",
|
|
"params": {
|
|
"edges": [
|
|
[
|
|
20,
|
|
0,
|
|
10
|
|
]
|
|
],
|
|
"radius": 2,
|
|
"body": "Body1 (1)",
|
|
"name": "NearRound"
|
|
}
|
|
},
|
|
{
|
|
"command": "solid.chamfer",
|
|
"params": {
|
|
"edges": [
|
|
[
|
|
20,
|
|
30,
|
|
10
|
|
]
|
|
],
|
|
"distance": 1.5,
|
|
"body": "Body1",
|
|
"name": "FarBevel"
|
|
}
|
|
},
|
|
{
|
|
"command": "appearance.assign",
|
|
"params": {
|
|
"bodies": [
|
|
"Body1 (1)"
|
|
],
|
|
"color": "#cc3333"
|
|
}
|
|
}
|
|
]
|
|
} |