KCL's `fillet` function takes an array of edges to fillet. Previously this would do `n` fillet API commands, one per edge. This PR combines them all into one call, which should improve performance. You can see the effect in the artifact_commands snapshots, e.g. `rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_commands.snap` Besides performance, this should fix a bug where some KCL fillets would fail, when they should have succeeded. Example from @max-mrgrsk: ```kcl sketch001 = startSketchOn(XY) |> startProfile(at = [-12, -6]) |> line(end = [0, 12], tag = $seg04) |> line(end = [24, 0], tag = $seg03) |> line(end = [0, -12], tag = $seg02) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg01) |> close() extrude001 = extrude( sketch001, length = 12, tagEnd = $capEnd001, tagStart = $capStart001, ) |> fillet( radius = 5, tags = [ getCommonEdge(faces = [seg02, capEnd001]), getCommonEdge(faces = [seg01, capEnd001]), getCommonEdge(faces = [seg03, capEnd001]), getCommonEdge(faces = [seg04, capEnd001]) ], ) ``` This program fails on main, but succeeds on this branch.
15 KiB
15 KiB
flowchart LR
subgraph path9 [Path]
9["Path<br>[947, 993, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
14["Segment<br>[1001, 1023, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
17["Segment<br>[1031, 1061, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
18["Segment<br>[1069, 1113, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
20["Segment<br>[1121, 1148, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
22["Segment<br>[1156, 1200, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
24["Segment<br>[1208, 1215, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
37[Solid2d]
end
subgraph path10 [Path]
10["Path<br>[947, 993, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
15["Segment<br>[1001, 1023, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
16["Segment<br>[1031, 1061, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
19["Segment<br>[1069, 1113, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
21["Segment<br>[1121, 1148, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
23["Segment<br>[1156, 1200, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
25["Segment<br>[1208, 1215, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
39[Solid2d]
end
subgraph path11 [Path]
11["Path<br>[2256, 2344, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
26["Segment<br>[2350, 2414, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
27["Segment<br>[2420, 2484, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
28["Segment<br>[2490, 2543, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
29["Segment<br>[2549, 2570, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
36[Solid2d]
end
subgraph path12 [Path]
12["Path<br>[2901, 3067, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
30["Segment<br>[2901, 3067, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
38[Solid2d]
end
subgraph path13 [Path]
13["Path<br>[4380, 4405, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
31["Segment<br>[4411, 4483, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
32["Segment<br>[4489, 4562, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
33["Segment<br>[4568, 4621, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
34["Segment<br>[4627, 4648, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
35[Solid2d]
end
1["Plane<br>[1301, 1348, 0]"]
%% [ProgramBodyItem { index: 17 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwUnlabeledArg, CallKwUnlabeledArg]
2["Plane<br>[1880, 1927, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwUnlabeledArg, CallKwUnlabeledArg]
3["Plane<br>[2233, 2250, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
4["Plane<br>[4341, 4373, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg]
5["StartSketchOnPlane<br>[919, 939, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
6["StartSketchOnPlane<br>[919, 939, 0]"]
%% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
7["StartSketchOnPlane<br>[4327, 4374, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
8["StartSketchOnFace<br>[2853, 2895, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
40["Sweep Extrusion<br>[1288, 1391, 0]"]
%% [ProgramBodyItem { index: 17 }, VariableDeclarationDeclaration, VariableDeclarationInit]
41["Sweep Revolve<br>[1867, 1958, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit]
42["Sweep Extrusion<br>[2576, 2600, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
43["Sweep Extrusion<br>[3289, 3316, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
44["Sweep Extrusion<br>[3289, 3316, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
45["Sweep Extrusion<br>[3289, 3316, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
46["Sweep Extrusion<br>[3289, 3316, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
47["Sweep Extrusion<br>[4654, 4698, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
48[Wall]
%% face_code_ref=Missing NodePath
49[Wall]
%% face_code_ref=Missing NodePath
50[Wall]
%% face_code_ref=Missing NodePath
51[Wall]
%% face_code_ref=Missing NodePath
52[Wall]
%% face_code_ref=Missing NodePath
53[Wall]
%% face_code_ref=Missing NodePath
54[Wall]
%% face_code_ref=Missing NodePath
55[Wall]
%% face_code_ref=Missing NodePath
56[Wall]
%% face_code_ref=Missing NodePath
57[Wall]
%% face_code_ref=Missing NodePath
58[Wall]
%% face_code_ref=Missing NodePath
59[Wall]
%% face_code_ref=Missing NodePath
60[Wall]
%% face_code_ref=Missing NodePath
61[Wall]
%% face_code_ref=Missing NodePath
62[Wall]
%% face_code_ref=Missing NodePath
63[Wall]
%% face_code_ref=Missing NodePath
64[Wall]
%% face_code_ref=Missing NodePath
65[Wall]
%% face_code_ref=Missing NodePath
66[Wall]
%% face_code_ref=Missing NodePath
67["Cap Start"]
%% face_code_ref=Missing NodePath
68["Cap Start"]
%% face_code_ref=[ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
69["Cap Start"]
%% face_code_ref=Missing NodePath
70["Cap Start"]
%% face_code_ref=Missing NodePath
71["Cap Start"]
%% face_code_ref=Missing NodePath
72["Cap End"]
%% face_code_ref=Missing NodePath
73["Cap End"]
%% face_code_ref=Missing NodePath
74["Cap End"]
%% face_code_ref=Missing NodePath
75["Cap End"]
%% face_code_ref=Missing NodePath
76["SweepEdge Opposite"]
77["SweepEdge Opposite"]
78["SweepEdge Opposite"]
79["SweepEdge Opposite"]
80["SweepEdge Opposite"]
81["SweepEdge Opposite"]
82["SweepEdge Opposite"]
83["SweepEdge Opposite"]
84["SweepEdge Opposite"]
85["SweepEdge Opposite"]
86["SweepEdge Opposite"]
87["SweepEdge Opposite"]
88["SweepEdge Opposite"]
89["SweepEdge Opposite"]
90["SweepEdge Opposite"]
91["SweepEdge Opposite"]
92["SweepEdge Opposite"]
93["SweepEdge Opposite"]
94["SweepEdge Opposite"]
95["SweepEdge Adjacent"]
96["SweepEdge Adjacent"]
97["SweepEdge Adjacent"]
98["SweepEdge Adjacent"]
99["SweepEdge Adjacent"]
100["SweepEdge Adjacent"]
101["SweepEdge Adjacent"]
102["SweepEdge Adjacent"]
103["SweepEdge Adjacent"]
104["SweepEdge Adjacent"]
105["SweepEdge Adjacent"]
106["SweepEdge Adjacent"]
107["SweepEdge Adjacent"]
108["SweepEdge Adjacent"]
109["SweepEdge Adjacent"]
110["SweepEdge Adjacent"]
111["SweepEdge Adjacent"]
112["SweepEdge Adjacent"]
113["SweepEdge Adjacent"]
114["EdgeCut Fillet<br>[2606, 2836, 0]"]
%% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
115["EdgeCut Fillet<br>[4704, 4937, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
1 <--x 6
1 --- 10
2 <--x 5
2 --- 9
3 --- 11
4 <--x 7
4 --- 13
68 x--> 8
9 --- 14
9 --- 17
9 --- 18
9 --- 20
9 --- 22
9 --- 24
9 --- 37
9 ---- 41
10 --- 15
10 --- 16
10 --- 19
10 --- 21
10 --- 23
10 --- 25
10 --- 39
10 ---- 40
11 --- 26
11 --- 27
11 --- 28
11 --- 29
11 --- 36
11 ---- 42
12 --- 30
12 --- 38
12 ---- 45
68 --- 12
13 --- 31
13 --- 32
13 --- 33
13 --- 34
13 --- 35
13 ---- 47
14 --- 55
14 x--> 75
14 --- 81
14 --- 100
15 --- 50
15 x--> 69
15 --- 76
15 --- 95
16 --- 49
16 x--> 69
16 --- 77
16 --- 96
17 --- 56
17 x--> 75
17 --- 82
17 --- 101
18 --- 53
18 x--> 75
18 --- 83
18 --- 102
19 --- 48
19 x--> 69
19 --- 78
19 --- 97
20 --- 57
20 x--> 75
20 --- 84
20 --- 103
21 --- 51
21 x--> 69
21 --- 79
21 --- 98
22 --- 54
22 x--> 75
22 --- 85
22 --- 104
23 --- 52
23 x--> 69
23 --- 80
23 --- 99
26 --- 61
26 x--> 68
26 --- 86
26 --- 105
27 --- 58
27 x--> 68
27 --- 87
27 --- 106
28 --- 60
28 x--> 68
28 --- 88
28 --- 107
29 --- 59
29 x--> 68
29 --- 89
29 --- 108
30 --- 62
30 x--> 68
30 --- 90
30 --- 109
31 --- 63
31 x--> 67
31 --- 91
31 --- 110
32 --- 66
32 x--> 67
32 --- 92
32 --- 111
33 --- 65
33 x--> 67
33 --- 93
33 --- 112
34 --- 64
34 x--> 67
34 --- 94
34 --- 113
40 --- 48
40 --- 49
40 --- 50
40 --- 51
40 --- 52
40 --- 69
40 --- 74
40 --- 76
40 --- 77
40 --- 78
40 --- 79
40 --- 80
40 --- 95
40 --- 96
40 --- 97
40 --- 98
40 --- 99
41 --- 53
41 --- 54
41 --- 55
41 --- 56
41 --- 57
41 --- 70
41 --- 75
41 --- 81
41 --- 82
41 --- 83
41 --- 84
41 --- 85
41 --- 100
41 --- 101
41 --- 102
41 --- 103
41 --- 104
42 --- 58
42 --- 59
42 --- 60
42 --- 61
42 --- 68
42 --- 73
42 --- 86
42 --- 87
42 --- 88
42 --- 89
42 --- 105
42 --- 106
42 --- 107
42 --- 108
45 --- 62
45 --- 71
45 --- 90
45 --- 109
47 --- 63
47 --- 64
47 --- 65
47 --- 66
47 --- 67
47 --- 72
47 --- 91
47 --- 92
47 --- 93
47 --- 94
47 --- 110
47 --- 111
47 --- 112
47 --- 113
48 --- 78
96 <--x 48
48 --- 97
49 --- 77
95 <--x 49
49 --- 96
50 --- 76
50 --- 95
99 <--x 50
51 --- 79
97 <--x 51
51 --- 98
52 --- 80
98 <--x 52
52 --- 99
53 --- 83
101 <--x 53
53 --- 102
54 --- 85
103 <--x 54
54 --- 104
55 --- 81
55 --- 100
104 <--x 55
56 --- 82
100 <--x 56
56 --- 101
57 --- 84
102 <--x 57
57 --- 103
58 --- 87
105 <--x 58
58 --- 106
59 --- 89
107 <--x 59
59 --- 108
60 --- 88
106 <--x 60
60 --- 107
61 --- 86
61 --- 105
108 <--x 61
62 --- 90
62 --- 109
63 --- 91
63 --- 110
113 <--x 63
64 --- 94
112 <--x 64
64 --- 113
65 --- 93
111 <--x 65
65 --- 112
66 --- 92
110 <--x 66
66 --- 111
81 <--x 70
82 <--x 70
83 <--x 70
84 <--x 70
85 <--x 70
90 <--x 71
91 <--x 72
92 <--x 72
93 <--x 72
94 <--x 72
86 <--x 73
87 <--x 73
88 <--x 73
89 <--x 73
76 <--x 74
77 <--x 74
78 <--x 74
79 <--x 74
80 <--x 74
105 <--x 114
110 <--x 115