Add dual-sink and makeup mirror to KCL samples (#6023)

* add makeup mirror

* m -> M

* add metal sink unit

* Update kcl-samples simulation test output

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Greg Sweeney
2025-03-27 10:57:01 -04:00
committed by GitHub
parent 1dcd3b84b7
commit 4ff38e7f44
20 changed files with 40619 additions and 0 deletions

View File

@ -41,6 +41,8 @@ When you submit a PR to add or modify KCL samples, images and STEP files will be
[![cycloidal-gear](screenshots/cycloidal-gear.png)](cycloidal-gear/main.kcl)
#### [dodecahedron](dodecahedron/main.kcl) ([screenshot](screenshots/dodecahedron.png))
[![dodecahedron](screenshots/dodecahedron.png)](dodecahedron/main.kcl)
#### [dual-basin-utility-sink](dual-basin-utility-sink/main.kcl) ([screenshot](screenshots/dual-basin-utility-sink.png))
[![dual-basin-utility-sink](screenshots/dual-basin-utility-sink.png)](dual-basin-utility-sink/main.kcl)
#### [enclosure](enclosure/main.kcl) ([screenshot](screenshots/enclosure.png))
[![enclosure](screenshots/enclosure.png)](enclosure/main.kcl)
#### [exhaust-manifold](exhaust-manifold/main.kcl) ([screenshot](screenshots/exhaust-manifold.png))
@ -75,6 +77,8 @@ When you submit a PR to add or modify KCL samples, images and STEP files will be
[![kitt](screenshots/kitt.png)](kitt/main.kcl)
#### [lego](lego/main.kcl) ([screenshot](screenshots/lego.png))
[![lego](screenshots/lego.png)](lego/main.kcl)
#### [makeup-mirror](makeup-mirror/main.kcl) ([screenshot](screenshots/makeup-mirror.png))
[![makeup-mirror](screenshots/makeup-mirror.png)](makeup-mirror/main.kcl)
#### [mounting-plate](mounting-plate/main.kcl) ([screenshot](screenshots/mounting-plate.png))
[![mounting-plate](screenshots/mounting-plate.png)](mounting-plate/main.kcl)
#### [multi-axis-robot](multi-axis-robot/main.kcl) ([screenshot](screenshots/multi-axis-robot.png))

View File

@ -0,0 +1,200 @@
// Dual-Basin Utility Sink
// A stainless steel sink unit with dual rectangular basins and six under-counter storage compartments.
@settings(defaultLengthUnit = mm)
// globals
tableHeight = 850
tableWidth = 3400
tableDepth = 400
profileThickness = 13
metalThickness = 2
blockCount = 3
blockWidth = (tableWidth-profileThickness) / 3
blockHeight = tableHeight - metalThickness - 0.5
blockDepth = tableDepth - profileThickness
blockSubdivisionCount = 2
blockSubdivisionWidth = blockWidth / blockSubdivisionCount
// Geometry
floorPlane = startSketchOn(XY)
// legs
legHeight = blockHeight - profileThickness
legCount = blockCount + 1
legBody = startProfileAt([0, 0], floorPlane)
|> yLine(length=profileThickness)
|> xLine(length=profileThickness)
|> yLine(length=-profileThickness)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = legCount, distance = blockWidth)
|> patternLinear2d(axis = [0, 1], instances = 2, distance = blockDepth)
|> extrude(length = legHeight)
// lower belt
lowerBeltHeightAboveTheFloor = 150
lowerBeltLengthX = blockWidth - profileThickness
lowerBeltPlane = startSketchOn(offsetPlane(XY, offset = lowerBeltHeightAboveTheFloor))
lowerBeltBodyX = startProfileAt([profileThickness, 0], lowerBeltPlane)
|> yLine(length=profileThickness)
|> xLine(length=lowerBeltLengthX)
|> yLine(length=-profileThickness)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = blockCount, distance = blockWidth)
|> patternLinear2d(axis = [0, 1], instances = 2, distance = blockDepth)
|> extrude(length = profileThickness)
lowerBeltLengthY = blockDepth - profileThickness
lowerBeltBodyY = startProfileAt([0, profileThickness], lowerBeltPlane)
|> yLine(length=lowerBeltLengthY)
|> xLine(length=profileThickness)
|> yLine(length=-lowerBeltLengthY)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = 2, distance = tableWidth-profileThickness)
|> extrude(length = profileThickness)
// pillars
pillarHeightAboveTheFloor = lowerBeltHeightAboveTheFloor + profileThickness
pillarPlane = startSketchOn(offsetPlane(XY, offset = pillarHeightAboveTheFloor))
pillarTotalHeight = blockHeight - profileThickness - pillarHeightAboveTheFloor
pillarBody = startProfileAt([blockSubdivisionWidth, 0], pillarPlane)
|> yLine(length=profileThickness)
|> xLine(length=profileThickness)
|> yLine(length=-profileThickness)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = blockCount, distance = blockWidth)
|> patternLinear2d(axis = [0, 1], instances = 2, distance = blockDepth)
|> extrude(length = pillarTotalHeight)
// upper belt
upperBeltPlane = startSketchOn(offsetPlane(XY, offset = blockHeight))
upperBeltBodyX = startProfileAt([0, 0], upperBeltPlane)
|> yLine(length=profileThickness)
|> xLine(length=tableWidth)
|> yLine(length=-profileThickness)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [0, 1], instances = 2, distance = blockDepth)
|> extrude(length = -profileThickness)
upperBeltLengthY = blockDepth - profileThickness
upperBeltBodyY = startProfileAt([0, profileThickness], upperBeltPlane)
|> yLine(length=upperBeltLengthY)
|> xLine(length=profileThickness)
|> yLine(length=-upperBeltLengthY)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = 2, distance = tableWidth-profileThickness)
|> extrude(length = -profileThickness)
// sink
tableTopPlane = startSketchOn(offsetPlane(XY, offset = tableHeight))
tableTopBody = startProfileAt([0, 0], tableTopPlane)
|> yLine(length=tableDepth)
|> xLine(length=tableWidth)
|> yLine(length=-tableDepth)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> extrude(length = -metalThickness)
sinkCount = 2
sinkWidth = 1000
sinkLength = 250
sinkDepth = 200
sinkOffsetFront = 40
sinkOffsetLeft = 350
sinkSpacing = tableWidth - sinkWidth - sinkOffsetLeft*2
sinkPlaneOutside = startSketchOn(tableTopBody, 'START')
sinkBodyOutside = startProfileAt([-sinkOffsetLeft, sinkOffsetFront], sinkPlaneOutside)
|> yLine(length=sinkLength)
|> xLine(length=-sinkWidth)
|> yLine(length=-sinkLength)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [-1, 0], instances = sinkCount, distance = sinkSpacing)
|> extrude(length = sinkDepth)
sinkPlaneInside = startSketchOn(tableTopBody, 'END')
sinkBodyInside = startProfileAt([sinkOffsetLeft+metalThickness, sinkOffsetFront+metalThickness], sinkPlaneInside)
|> yLine(length=sinkLength-metalThickness*2)
|> xLine(length=sinkWidth-metalThickness*2)
|> yLine(length=-sinkLength+metalThickness*2)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = sinkCount, distance = sinkSpacing)
|> extrude(length = -sinkDepth)
// door panels
doorGap = 2
doorWidth = blockSubdivisionWidth - profileThickness - doorGap*2
doorStart = profileThickness+doorGap
doorHeightAboveTheFloor = pillarHeightAboveTheFloor + doorGap
doorHeight = blockHeight - doorHeightAboveTheFloor - profileThickness - doorGap
doorCount = blockCount * blockSubdivisionCount
doorPlane = startSketchOn(offsetPlane(XY, offset = doorHeightAboveTheFloor))
doorBody = startProfileAt([doorStart, 0], doorPlane)
|> yLine(length=profileThickness)
|> xLine(length=doorWidth)
|> yLine(length=-profileThickness)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = doorCount, distance = blockSubdivisionWidth)
|> extrude(length = doorHeight)
// side panels
panelWidth = blockDepth - profileThickness - doorGap*2
panelCount = doorCount + 1
panelSpacing = tableWidth - profileThickness
panelBody = startProfileAt([0, doorStart], doorPlane)
|> yLine(length=panelWidth)
|> xLine(length=profileThickness)
|> yLine(length=-panelWidth)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(axis = [1, 0], instances = 2, distance = panelSpacing)
|> extrude(length = doorHeight)
// handle
handleDepth = 40
handleWidth = 120
handleFillet = 20
handleHeightAboveTheFloor = 780
handleOffset = doorStart + doorWidth / 2 - (handleWidth / 2)
handleLengthSegmentA = handleDepth - handleFillet
handleLengthSegmentB = handleWidth - (handleFillet * 2)
handlePlane = startSketchOn(offsetPlane(XY, offset = handleHeightAboveTheFloor))
handleProfilePath = startProfileAt([0 + handleOffset, 0], handlePlane)
|> yLine(length=-handleLengthSegmentA)
|> tangentialArcTo([
handleFillet + handleOffset,
-handleDepth
], %)
|> xLine(length=handleLengthSegmentB)
|> tangentialArcTo([
handleOffset + handleWidth,
-handleLengthSegmentA
], %)
|> yLine(length=handleLengthSegmentA)
handleSectionPlane = startSketchOn(XZ)
handleProfileSection = circle(
handleSectionPlane,
center = [handleOffset, handleHeightAboveTheFloor],
radius = 2)
handleBody = sweep(handleProfileSection, path = handleProfilePath)
|> patternLinear3d(axis = [1, 0, 0], instances = doorCount, distance = blockSubdivisionWidth)

View File

@ -0,0 +1,75 @@
// Makeup Mirror
// A circular vanity mirror mounted on a swiveling arm with pivot joints, used for personal grooming.
// Settings
@settings(defaultLengthUnit = mm)
// hinge
hingeRadius = 8
hingeHeight = hingeRadius * 3
hingeGap = 0.5
// arm
armLength = 170
armRadius = 5
// mirror
mirrorRadius = 170 / 2
mirrorThickness = 10
archToMirrorGap = 5
archThickness = 1
archRadius = mirrorRadius + archToMirrorGap
// Geometry
// hinge
fn hingeFn(x, y, z) {
hingeBody = startSketchOn(offsetPlane(XY, offset = z))
|> circle(center = [x, y], radius = hingeRadius)
|> extrude(length = hingeHeight)
return hingeBody
}
hingePartA1 = hingeFn(0, 0, 0)
hingePartA2 = hingeFn(0, 0, hingeHeight + hingeGap)
hingePartA3 = hingeFn(0, 0, hingeHeight * 2 + hingeGap * 2)
hingePartB2 = hingeFn(armLength, 0, hingeHeight + hingeGap)
hingePartB3 = hingeFn(armLength, 0, hingeHeight * 2 + hingeGap * 2)
hingePartC2 = hingeFn(armLength, -armLength, hingeHeight * 2 + hingeGap * 2)
hingePartC3 = hingeFn(armLength, -armLength, hingeHeight * 3 + hingeGap * 3)
// arm
fn armFn(plane, offset, altitude) {
armBody = startSketchOn(plane)
|> circle(center = [offset, altitude], radius = armRadius)
|> extrude(length = armLength)
return armBody
}
armPartA = armFn(YZ, 0, hingeHeight * 1.5 + hingeGap)
armPartB = armFn(XZ, armLength, hingeHeight * 2.5 + hingeGap * 2)
// mirror
fn mirrorFn(plane, offsetX, offsetY, altitude, radius, tiefe, gestellR, gestellD) {
armPlane = startSketchOn(offsetPlane(plane, offset = offsetY - (tiefe / 2)))
armBody = circle(armPlane, center = [offsetX, altitude], radius = radius)
|> extrude(length = tiefe)
archBody = startProfileAt([offsetX-gestellR, altitude], armPlane)
|> xLine(length = gestellD)
|> arcTo({
interior = [offsetX, altitude-gestellR],
end = [offsetX+gestellR, altitude]
}, %)
|> xLine(length = gestellD)
|> arcTo({
interior = [offsetX, altitude-gestellR-gestellD],
end = [profileStartX(%), profileStartY(%)]
}, %)
|> close()
|> extrude(length = tiefe)
return armBody
}
mirror = mirrorFn(XZ, armLength, armLength, hingeHeight * 4 + hingeGap * 3 + mirrorRadius+archToMirrorGap+archThickness, mirrorRadius, mirrorThickness, archRadius, archThickness)

View File

@ -62,6 +62,13 @@
"title": "Hollow Dodecahedron",
"description": "A regular dodecahedron or pentagonal dodecahedron is a dodecahedron composed of regular pentagonal faces, three meeting at each vertex. This example shows constructing the individual faces of the dodecahedron and extruding inwards."
},
{
"file": "main.kcl",
"pathFromProjectDirectoryToFirstFile": "dual-basin-utility-sink/main.kcl",
"multipleFiles": false,
"title": "Dual-Basin Utility Sink",
"description": "A stainless steel sink unit with dual rectangular basins and six under-counter storage compartments."
},
{
"file": "main.kcl",
"pathFromProjectDirectoryToFirstFile": "enclosure/main.kcl",
@ -181,6 +188,13 @@
"title": "Lego Brick",
"description": "A standard Lego brick. This is a small, plastic construction block toy that can be interlocked with other blocks to build various structures, models, and figures. There are a lot of hacks used in this code."
},
{
"file": "main.kcl",
"pathFromProjectDirectoryToFirstFile": "makeup-mirror/main.kcl",
"multipleFiles": false,
"title": "Makeup Mirror",
"description": "A circular vanity mirror mounted on a swiveling arm with pivot joints, used for personal grooming."
},
{
"file": "main.kcl",
"pathFromProjectDirectoryToFirstFile": "mounting-plate/main.kcl",

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Artifact graph flowchart dual-basin-utility-sink.kcl
extension: md
snapshot_kind: binary
---

View File

@ -0,0 +1,726 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[647, 681, 0]"]
3["Segment<br>[687, 717, 0]"]
4["Segment<br>[723, 753, 0]"]
5["Segment<br>[759, 790, 0]"]
6["Segment<br>[796, 852, 0]"]
7["Segment<br>[858, 865, 0]"]
8[Solid2d]
end
subgraph path32 [Path]
32["Path<br>[1258, 1311, 0]"]
33["Segment<br>[1317, 1347, 0]"]
34["Segment<br>[1353, 1383, 0]"]
35["Segment<br>[1389, 1420, 0]"]
36["Segment<br>[1426, 1482, 0]"]
37["Segment<br>[1488, 1495, 0]"]
38[Solid2d]
end
subgraph path59 [Path]
59["Path<br>[1760, 1813, 0]"]
60["Segment<br>[1819, 1849, 0]"]
61["Segment<br>[1855, 1885, 0]"]
62["Segment<br>[1891, 1922, 0]"]
63["Segment<br>[1928, 1984, 0]"]
64["Segment<br>[1990, 1997, 0]"]
65[Solid2d]
end
subgraph path83 [Path]
83["Path<br>[2391, 2446, 0]"]
84["Segment<br>[2452, 2482, 0]"]
85["Segment<br>[2488, 2518, 0]"]
86["Segment<br>[2524, 2555, 0]"]
87["Segment<br>[2561, 2617, 0]"]
88["Segment<br>[2623, 2630, 0]"]
89[Solid2d]
end
subgraph path111 [Path]
111["Path<br>[2932, 2970, 0]"]
112["Segment<br>[2976, 3006, 0]"]
113["Segment<br>[3012, 3036, 0]"]
114["Segment<br>[3042, 3073, 0]"]
115["Segment<br>[3079, 3135, 0]"]
116["Segment<br>[3141, 3148, 0]"]
117[Solid2d]
end
subgraph path134 [Path]
134["Path<br>[3331, 3384, 0]"]
135["Segment<br>[3390, 3420, 0]"]
136["Segment<br>[3426, 3456, 0]"]
137["Segment<br>[3462, 3493, 0]"]
138["Segment<br>[3499, 3555, 0]"]
139["Segment<br>[3561, 3568, 0]"]
140[Solid2d]
end
subgraph path158 [Path]
158["Path<br>[3794, 3831, 0]"]
159["Segment<br>[3837, 3861, 0]"]
160["Segment<br>[3867, 3891, 0]"]
161["Segment<br>[3897, 3922, 0]"]
162["Segment<br>[3928, 3984, 0]"]
163["Segment<br>[3990, 3997, 0]"]
164[Solid2d]
end
subgraph path180 [Path]
180["Path<br>[4275, 4343, 0]"]
181["Segment<br>[4349, 4373, 0]"]
182["Segment<br>[4379, 4403, 0]"]
183["Segment<br>[4409, 4434, 0]"]
184["Segment<br>[4440, 4496, 0]"]
185["Segment<br>[4502, 4509, 0]"]
186[Solid2d]
end
subgraph path202 [Path]
202["Path<br>[4698, 4794, 0]"]
203["Segment<br>[4800, 4841, 0]"]
204["Segment<br>[4847, 4887, 0]"]
205["Segment<br>[4893, 4935, 0]"]
206["Segment<br>[4941, 4997, 0]"]
207["Segment<br>[5003, 5010, 0]"]
208[Solid2d]
end
subgraph path225 [Path]
225["Path<br>[5538, 5579, 0]"]
226["Segment<br>[5585, 5615, 0]"]
227["Segment<br>[5621, 5644, 0]"]
228["Segment<br>[5650, 5681, 0]"]
229["Segment<br>[5687, 5743, 0]"]
230["Segment<br>[5749, 5756, 0]"]
231[Solid2d]
end
subgraph path252 [Path]
252["Path<br>[6039, 6080, 0]"]
253["Segment<br>[6086, 6110, 0]"]
254["Segment<br>[6116, 6146, 0]"]
255["Segment<br>[6152, 6177, 0]"]
256["Segment<br>[6183, 6239, 0]"]
257["Segment<br>[6245, 6252, 0]"]
258[Solid2d]
end
subgraph path276 [Path]
276["Path<br>[6731, 6781, 0]"]
277["Segment<br>[6787, 6822, 0]"]
278["Segment<br>[6828, 6912, 0]"]
279["Segment<br>[6918, 6952, 0]"]
280["Segment<br>[6958, 7050, 0]"]
281["Segment<br>[7056, 7090, 0]"]
end
subgraph path283 [Path]
283["Path<br>[7153, 7250, 0]"]
284["Segment<br>[7153, 7250, 0]"]
285[Solid2d]
end
1["Plane<br>[540, 557, 0]"]
9["Sweep Extrusion<br>[1026, 1053, 0]"]
10[Wall]
11[Wall]
12[Wall]
13[Wall]
14["Cap Start"]
15["Cap End"]
16["SweepEdge Opposite"]
17["SweepEdge Adjacent"]
18["SweepEdge Opposite"]
19["SweepEdge Adjacent"]
20["SweepEdge Opposite"]
21["SweepEdge Adjacent"]
22["SweepEdge Opposite"]
23["SweepEdge Adjacent"]
24["Sweep Extrusion<br>[1026, 1053, 0]"]
25["Sweep Extrusion<br>[1026, 1053, 0]"]
26["Sweep Extrusion<br>[1026, 1053, 0]"]
27["Sweep Extrusion<br>[1026, 1053, 0]"]
28["Sweep Extrusion<br>[1026, 1053, 0]"]
29["Sweep Extrusion<br>[1026, 1053, 0]"]
30["Sweep Extrusion<br>[1026, 1053, 0]"]
31["Plane<br>[1185, 1239, 0]"]
39["Sweep Extrusion<br>[1658, 1692, 0]"]
40[Wall]
41[Wall]
42[Wall]
43[Wall]
44["Cap Start"]
45["Cap End"]
46["SweepEdge Opposite"]
47["SweepEdge Adjacent"]
48["SweepEdge Opposite"]
49["SweepEdge Adjacent"]
50["SweepEdge Opposite"]
51["SweepEdge Adjacent"]
52["SweepEdge Opposite"]
53["SweepEdge Adjacent"]
54["Sweep Extrusion<br>[1658, 1692, 0]"]
55["Sweep Extrusion<br>[1658, 1692, 0]"]
56["Sweep Extrusion<br>[1658, 1692, 0]"]
57["Sweep Extrusion<br>[1658, 1692, 0]"]
58["Sweep Extrusion<br>[1658, 1692, 0]"]
66["Sweep Extrusion<br>[2094, 2128, 0]"]
67[Wall]
68[Wall]
69[Wall]
70[Wall]
71["Cap Start"]
72["Cap End"]
73["SweepEdge Opposite"]
74["SweepEdge Adjacent"]
75["SweepEdge Opposite"]
76["SweepEdge Adjacent"]
77["SweepEdge Opposite"]
78["SweepEdge Adjacent"]
79["SweepEdge Opposite"]
80["SweepEdge Adjacent"]
81["Sweep Extrusion<br>[2094, 2128, 0]"]
82["Plane<br>[2245, 2296, 0]"]
90["Sweep Extrusion<br>[2793, 2828, 0]"]
91[Wall]
92[Wall]
93[Wall]
94[Wall]
95["Cap Start"]
96["Cap End"]
97["SweepEdge Opposite"]
98["SweepEdge Adjacent"]
99["SweepEdge Opposite"]
100["SweepEdge Adjacent"]
101["SweepEdge Opposite"]
102["SweepEdge Adjacent"]
103["SweepEdge Opposite"]
104["SweepEdge Adjacent"]
105["Sweep Extrusion<br>[2793, 2828, 0]"]
106["Sweep Extrusion<br>[2793, 2828, 0]"]
107["Sweep Extrusion<br>[2793, 2828, 0]"]
108["Sweep Extrusion<br>[2793, 2828, 0]"]
109["Sweep Extrusion<br>[2793, 2828, 0]"]
110["Plane<br>[2875, 2912, 0]"]
118["Sweep Extrusion<br>[3228, 3263, 0]"]
119[Wall]
120[Wall]
121[Wall]
122[Wall]
123["Cap Start"]
124["Cap End"]
125["SweepEdge Opposite"]
126["SweepEdge Adjacent"]
127["SweepEdge Opposite"]
128["SweepEdge Adjacent"]
129["SweepEdge Opposite"]
130["SweepEdge Adjacent"]
131["SweepEdge Opposite"]
132["SweepEdge Adjacent"]
133["Sweep Extrusion<br>[3228, 3263, 0]"]
141["Sweep Extrusion<br>[3665, 3700, 0]"]
142[Wall]
143[Wall]
144[Wall]
145[Wall]
146["Cap Start"]
147["Cap End"]
148["SweepEdge Opposite"]
149["SweepEdge Adjacent"]
150["SweepEdge Opposite"]
151["SweepEdge Adjacent"]
152["SweepEdge Opposite"]
153["SweepEdge Adjacent"]
154["SweepEdge Opposite"]
155["SweepEdge Adjacent"]
156["Sweep Extrusion<br>[3665, 3700, 0]"]
157["Plane<br>[3740, 3777, 0]"]
165["Sweep Extrusion<br>[4003, 4036, 0]"]
166[Wall]
167[Wall]
168[Wall]
169[Wall]
170["Cap Start"]
171["Cap End"]
172["SweepEdge Opposite"]
173["SweepEdge Adjacent"]
174["SweepEdge Opposite"]
175["SweepEdge Adjacent"]
176["SweepEdge Opposite"]
177["SweepEdge Adjacent"]
178["SweepEdge Opposite"]
179["SweepEdge Adjacent"]
187["Sweep Extrusion<br>[4599, 4626, 0]"]
188[Wall]
189[Wall]
190[Wall]
191[Wall]
192["Cap End"]
193["SweepEdge Opposite"]
194["SweepEdge Adjacent"]
195["SweepEdge Opposite"]
196["SweepEdge Adjacent"]
197["SweepEdge Opposite"]
198["SweepEdge Adjacent"]
199["SweepEdge Opposite"]
200["SweepEdge Adjacent"]
201["Sweep Extrusion<br>[4599, 4626, 0]"]
209["Sweep Extrusion<br>[5099, 5127, 0]"]
210[Wall]
211[Wall]
212[Wall]
213[Wall]
214["Cap Start"]
215["SweepEdge Opposite"]
216["SweepEdge Adjacent"]
217["SweepEdge Opposite"]
218["SweepEdge Adjacent"]
219["SweepEdge Opposite"]
220["SweepEdge Adjacent"]
221["SweepEdge Opposite"]
222["SweepEdge Adjacent"]
223["Sweep Extrusion<br>[5099, 5127, 0]"]
224["Plane<br>[5476, 5525, 0]"]
232["Sweep Extrusion<br>[5855, 5883, 0]"]
233[Wall]
234[Wall]
235[Wall]
236[Wall]
237["Cap Start"]
238["Cap End"]
239["SweepEdge Opposite"]
240["SweepEdge Adjacent"]
241["SweepEdge Opposite"]
242["SweepEdge Adjacent"]
243["SweepEdge Opposite"]
244["SweepEdge Adjacent"]
245["SweepEdge Opposite"]
246["SweepEdge Adjacent"]
247["Sweep Extrusion<br>[5855, 5883, 0]"]
248["Sweep Extrusion<br>[5855, 5883, 0]"]
249["Sweep Extrusion<br>[5855, 5883, 0]"]
250["Sweep Extrusion<br>[5855, 5883, 0]"]
251["Sweep Extrusion<br>[5855, 5883, 0]"]
259["Sweep Extrusion<br>[6334, 6362, 0]"]
260[Wall]
261[Wall]
262[Wall]
263[Wall]
264["Cap Start"]
265["Cap End"]
266["SweepEdge Opposite"]
267["SweepEdge Adjacent"]
268["SweepEdge Opposite"]
269["SweepEdge Adjacent"]
270["SweepEdge Opposite"]
271["SweepEdge Adjacent"]
272["SweepEdge Opposite"]
273["SweepEdge Adjacent"]
274["Sweep Extrusion<br>[6334, 6362, 0]"]
275["Plane<br>[6657, 6708, 0]"]
282["Plane<br>[7112, 7129, 0]"]
286["Sweep Sweep<br>[7267, 7320, 0]"]
287[Wall]
288["Cap Start"]
289["Cap Start"]
290["SweepEdge Opposite"]
291["SweepEdge Adjacent"]
292["StartSketchOnPlane<br>[1171, 1240, 0]"]
293["StartSketchOnPlane<br>[2231, 2297, 0]"]
294["StartSketchOnPlane<br>[2861, 2913, 0]"]
295["StartSketchOnPlane<br>[3726, 3778, 0]"]
296["StartSketchOnFace<br>[4220, 4256, 0]"]
297["StartSketchOnFace<br>[4646, 4680, 0]"]
298["StartSketchOnPlane<br>[5462, 5526, 0]"]
299["StartSketchOnPlane<br>[6643, 6709, 0]"]
1 --- 2
2 --- 3
2 --- 4
2 --- 5
2 --- 6
2 --- 7
2 ---- 9
2 --- 8
3 --- 13
3 --- 22
3 --- 23
4 --- 12
4 --- 20
4 --- 21
5 --- 11
5 --- 18
5 --- 19
6 --- 10
6 --- 16
6 --- 17
9 --- 10
9 --- 11
9 --- 12
9 --- 13
9 --- 14
9 --- 15
9 --- 16
9 --- 17
9 --- 18
9 --- 19
9 --- 20
9 --- 21
9 --- 22
9 --- 23
31 --- 32
31 --- 59
32 --- 33
32 --- 34
32 --- 35
32 --- 36
32 --- 37
32 ---- 39
32 --- 38
33 --- 43
33 --- 52
33 --- 53
34 --- 42
34 --- 50
34 --- 51
35 --- 41
35 --- 48
35 --- 49
36 --- 40
36 --- 46
36 --- 47
39 --- 40
39 --- 41
39 --- 42
39 --- 43
39 --- 44
39 --- 45
39 --- 46
39 --- 47
39 --- 48
39 --- 49
39 --- 50
39 --- 51
39 --- 52
39 --- 53
59 --- 60
59 --- 61
59 --- 62
59 --- 63
59 --- 64
59 ---- 66
59 --- 65
60 --- 70
60 --- 79
60 --- 80
61 --- 69
61 --- 77
61 --- 78
62 --- 68
62 --- 75
62 --- 76
63 --- 67
63 --- 73
63 --- 74
66 --- 67
66 --- 68
66 --- 69
66 --- 70
66 --- 71
66 --- 72
66 --- 73
66 --- 74
66 --- 75
66 --- 76
66 --- 77
66 --- 78
66 --- 79
66 --- 80
82 --- 83
83 --- 84
83 --- 85
83 --- 86
83 --- 87
83 --- 88
83 ---- 90
83 --- 89
84 --- 94
84 --- 103
84 --- 104
85 --- 93
85 --- 101
85 --- 102
86 --- 92
86 --- 99
86 --- 100
87 --- 91
87 --- 97
87 --- 98
90 --- 91
90 --- 92
90 --- 93
90 --- 94
90 --- 95
90 --- 96
90 --- 97
90 --- 98
90 --- 99
90 --- 100
90 --- 101
90 --- 102
90 --- 103
90 --- 104
110 --- 111
110 --- 134
111 --- 112
111 --- 113
111 --- 114
111 --- 115
111 --- 116
111 ---- 118
111 --- 117
112 --- 122
112 --- 131
112 --- 132
113 --- 121
113 --- 129
113 --- 130
114 --- 120
114 --- 127
114 --- 128
115 --- 119
115 --- 125
115 --- 126
118 --- 119
118 --- 120
118 --- 121
118 --- 122
118 --- 123
118 --- 124
118 --- 125
118 --- 126
118 --- 127
118 --- 128
118 --- 129
118 --- 130
118 --- 131
118 --- 132
134 --- 135
134 --- 136
134 --- 137
134 --- 138
134 --- 139
134 ---- 141
134 --- 140
135 --- 145
135 --- 154
135 --- 155
136 --- 144
136 --- 152
136 --- 153
137 --- 143
137 --- 150
137 --- 151
138 --- 142
138 --- 148
138 --- 149
141 --- 142
141 --- 143
141 --- 144
141 --- 145
141 --- 146
141 --- 147
141 --- 148
141 --- 149
141 --- 150
141 --- 151
141 --- 152
141 --- 153
141 --- 154
141 --- 155
157 --- 158
158 --- 159
158 --- 160
158 --- 161
158 --- 162
158 --- 163
158 ---- 165
158 --- 164
159 --- 169
159 --- 178
159 --- 179
160 --- 168
160 --- 176
160 --- 177
161 --- 167
161 --- 174
161 --- 175
162 --- 166
162 --- 172
162 --- 173
165 --- 166
165 --- 167
165 --- 168
165 --- 169
165 --- 170
165 --- 171
165 --- 172
165 --- 173
165 --- 174
165 --- 175
165 --- 176
165 --- 177
165 --- 178
165 --- 179
170 --- 180
171 --- 202
180 --- 181
180 --- 182
180 --- 183
180 --- 184
180 --- 185
180 ---- 187
180 --- 186
181 --- 188
181 --- 193
181 --- 194
182 --- 189
182 --- 195
182 --- 196
183 --- 190
183 --- 197
183 --- 198
184 --- 191
184 --- 199
184 --- 200
187 --- 188
187 --- 189
187 --- 190
187 --- 191
187 --- 192
187 --- 193
187 --- 194
187 --- 195
187 --- 196
187 --- 197
187 --- 198
187 --- 199
187 --- 200
202 --- 203
202 --- 204
202 --- 205
202 --- 206
202 --- 207
202 ---- 209
202 --- 208
203 --- 213
203 --- 221
203 --- 222
204 --- 212
204 --- 219
204 --- 220
205 --- 211
205 --- 217
205 --- 218
206 --- 210
206 --- 215
206 --- 216
209 --- 210
209 --- 211
209 --- 212
209 --- 213
209 --- 214
209 --- 215
209 --- 216
209 --- 217
209 --- 218
209 --- 219
209 --- 220
209 --- 221
209 --- 222
224 --- 225
224 --- 252
225 --- 226
225 --- 227
225 --- 228
225 --- 229
225 --- 230
225 ---- 232
225 --- 231
226 --- 236
226 --- 245
226 --- 246
227 --- 235
227 --- 243
227 --- 244
228 --- 234
228 --- 241
228 --- 242
229 --- 233
229 --- 239
229 --- 240
232 --- 233
232 --- 234
232 --- 235
232 --- 236
232 --- 237
232 --- 238
232 --- 239
232 --- 240
232 --- 241
232 --- 242
232 --- 243
232 --- 244
232 --- 245
232 --- 246
252 --- 253
252 --- 254
252 --- 255
252 --- 256
252 --- 257
252 ---- 259
252 --- 258
253 --- 263
253 --- 272
253 --- 273
254 --- 262
254 --- 270
254 --- 271
255 --- 261
255 --- 268
255 --- 269
256 --- 260
256 --- 266
256 --- 267
259 --- 260
259 --- 261
259 --- 262
259 --- 263
259 --- 264
259 --- 265
259 --- 266
259 --- 267
259 --- 268
259 --- 269
259 --- 270
259 --- 271
259 --- 272
259 --- 273
275 --- 276
276 --- 277
276 --- 278
276 --- 279
276 --- 280
276 --- 281
282 --- 283
283 --- 284
283 ---- 286
283 --- 285
284 --- 287
284 --- 290
284 --- 291
286 --- 287
286 --- 288
286 --- 289
286 --- 290
286 --- 291
31 <--x 292
82 <--x 293
110 <--x 294
157 <--x 295
170 <--x 296
171 <--x 297
224 <--x 298
275 <--x 299
```

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Artifact graph flowchart makeup-mirror.kcl
extension: md
snapshot_kind: binary
---

View File

@ -0,0 +1,317 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[520, 565, 0]"]
3["Segment<br>[520, 565, 0]"]
4[Solid2d]
end
subgraph path12 [Path]
12["Path<br>[520, 565, 0]"]
13["Segment<br>[520, 565, 0]"]
14[Solid2d]
end
subgraph path22 [Path]
22["Path<br>[520, 565, 0]"]
23["Segment<br>[520, 565, 0]"]
24[Solid2d]
end
subgraph path32 [Path]
32["Path<br>[520, 565, 0]"]
33["Segment<br>[520, 565, 0]"]
34[Solid2d]
end
subgraph path42 [Path]
42["Path<br>[520, 565, 0]"]
43["Segment<br>[520, 565, 0]"]
44[Solid2d]
end
subgraph path52 [Path]
52["Path<br>[520, 565, 0]"]
53["Segment<br>[520, 565, 0]"]
54[Solid2d]
end
subgraph path62 [Path]
62["Path<br>[520, 565, 0]"]
63["Segment<br>[520, 565, 0]"]
64[Solid2d]
end
subgraph path72 [Path]
72["Path<br>[1136, 1191, 0]"]
73["Segment<br>[1136, 1191, 0]"]
74[Solid2d]
end
subgraph path82 [Path]
82["Path<br>[1136, 1191, 0]"]
83["Segment<br>[1136, 1191, 0]"]
84[Solid2d]
end
subgraph path92 [Path]
92["Path<br>[1553, 1616, 0]"]
93["Segment<br>[1553, 1616, 0]"]
94[Solid2d]
end
subgraph path101 [Path]
101["Path<br>[1662, 1716, 0]"]
102["Segment<br>[1724, 1748, 0]"]
103["Segment<br>[1756, 1870, 0]"]
104["Segment<br>[1878, 1902, 0]"]
105["Segment<br>[1910, 2041, 0]"]
106["Segment<br>[2049, 2056, 0]"]
107[Solid2d]
end
1["Plane<br>[484, 511, 0]"]
5["Sweep Extrusion<br>[573, 602, 0]"]
6[Wall]
7["Cap Start"]
8["Cap End"]
9["SweepEdge Opposite"]
10["SweepEdge Adjacent"]
11["Plane<br>[484, 511, 0]"]
15["Sweep Extrusion<br>[573, 602, 0]"]
16[Wall]
17["Cap Start"]
18["Cap End"]
19["SweepEdge Opposite"]
20["SweepEdge Adjacent"]
21["Plane<br>[484, 511, 0]"]
25["Sweep Extrusion<br>[573, 602, 0]"]
26[Wall]
27["Cap Start"]
28["Cap End"]
29["SweepEdge Opposite"]
30["SweepEdge Adjacent"]
31["Plane<br>[484, 511, 0]"]
35["Sweep Extrusion<br>[573, 602, 0]"]
36[Wall]
37["Cap Start"]
38["Cap End"]
39["SweepEdge Opposite"]
40["SweepEdge Adjacent"]
41["Plane<br>[484, 511, 0]"]
45["Sweep Extrusion<br>[573, 602, 0]"]
46[Wall]
47["Cap Start"]
48["Cap End"]
49["SweepEdge Opposite"]
50["SweepEdge Adjacent"]
51["Plane<br>[484, 511, 0]"]
55["Sweep Extrusion<br>[573, 602, 0]"]
56[Wall]
57["Cap Start"]
58["Cap End"]
59["SweepEdge Opposite"]
60["SweepEdge Adjacent"]
61["Plane<br>[484, 511, 0]"]
65["Sweep Extrusion<br>[573, 602, 0]"]
66[Wall]
67["Cap Start"]
68["Cap End"]
69["SweepEdge Opposite"]
70["SweepEdge Adjacent"]
71["Plane<br>[1108, 1128, 0]"]
75["Sweep Extrusion<br>[1199, 1226, 0]"]
76[Wall]
77["Cap Start"]
78["Cap End"]
79["SweepEdge Opposite"]
80["SweepEdge Adjacent"]
81["Plane<br>[1108, 1128, 0]"]
85["Sweep Extrusion<br>[1199, 1226, 0]"]
86[Wall]
87["Cap Start"]
88["Cap End"]
89["SweepEdge Opposite"]
90["SweepEdge Adjacent"]
91["Plane<br>[1489, 1539, 0]"]
95["Sweep Extrusion<br>[1624, 1647, 0]"]
96[Wall]
97["Cap Start"]
98["Cap End"]
99["SweepEdge Opposite"]
100["SweepEdge Adjacent"]
108["Sweep Extrusion<br>[2064, 2087, 0]"]
109[Wall]
110[Wall]
111[Wall]
112[Wall]
113["Cap Start"]
114["Cap End"]
115["SweepEdge Opposite"]
116["SweepEdge Adjacent"]
117["SweepEdge Opposite"]
118["SweepEdge Adjacent"]
119["SweepEdge Opposite"]
120["SweepEdge Adjacent"]
121["SweepEdge Opposite"]
122["SweepEdge Adjacent"]
123["StartSketchOnPlane<br>[470, 512, 0]"]
124["StartSketchOnPlane<br>[470, 512, 0]"]
125["StartSketchOnPlane<br>[470, 512, 0]"]
126["StartSketchOnPlane<br>[470, 512, 0]"]
127["StartSketchOnPlane<br>[470, 512, 0]"]
128["StartSketchOnPlane<br>[470, 512, 0]"]
129["StartSketchOnPlane<br>[470, 512, 0]"]
130["StartSketchOnPlane<br>[1475, 1540, 0]"]
1 --- 2
2 --- 3
2 ---- 5
2 --- 4
3 --- 6
3 --- 9
3 --- 10
5 --- 6
5 --- 7
5 --- 8
5 --- 9
5 --- 10
11 --- 12
12 --- 13
12 ---- 15
12 --- 14
13 --- 16
13 --- 19
13 --- 20
15 --- 16
15 --- 17
15 --- 18
15 --- 19
15 --- 20
21 --- 22
22 --- 23
22 ---- 25
22 --- 24
23 --- 26
23 --- 29
23 --- 30
25 --- 26
25 --- 27
25 --- 28
25 --- 29
25 --- 30
31 --- 32
32 --- 33
32 ---- 35
32 --- 34
33 --- 36
33 --- 39
33 --- 40
35 --- 36
35 --- 37
35 --- 38
35 --- 39
35 --- 40
41 --- 42
42 --- 43
42 ---- 45
42 --- 44
43 --- 46
43 --- 49
43 --- 50
45 --- 46
45 --- 47
45 --- 48
45 --- 49
45 --- 50
51 --- 52
52 --- 53
52 ---- 55
52 --- 54
53 --- 56
53 --- 59
53 --- 60
55 --- 56
55 --- 57
55 --- 58
55 --- 59
55 --- 60
61 --- 62
62 --- 63
62 ---- 65
62 --- 64
63 --- 66
63 --- 69
63 --- 70
65 --- 66
65 --- 67
65 --- 68
65 --- 69
65 --- 70
71 --- 72
72 --- 73
72 ---- 75
72 --- 74
73 --- 76
73 --- 79
73 --- 80
75 --- 76
75 --- 77
75 --- 78
75 --- 79
75 --- 80
81 --- 82
82 --- 83
82 ---- 85
82 --- 84
83 --- 86
83 --- 89
83 --- 90
85 --- 86
85 --- 87
85 --- 88
85 --- 89
85 --- 90
91 --- 92
91 --- 101
92 --- 93
92 ---- 95
92 --- 94
93 --- 96
93 --- 99
93 --- 100
95 --- 96
95 --- 97
95 --- 98
95 --- 99
95 --- 100
101 --- 102
101 --- 103
101 --- 104
101 --- 105
101 --- 106
101 ---- 108
101 --- 107
102 --- 112
102 --- 121
102 --- 122
103 --- 111
103 --- 119
103 --- 120
104 --- 110
104 --- 117
104 --- 118
105 --- 109
105 --- 115
105 --- 116
108 --- 109
108 --- 110
108 --- 111
108 --- 112
108 --- 113
108 --- 114
108 --- 115
108 --- 116
108 --- 117
108 --- 118
108 --- 119
108 --- 120
108 --- 121
108 --- 122
1 <--x 123
11 <--x 124
21 <--x 125
31 <--x 126
41 <--x 127
51 <--x 128
61 <--x 129
91 <--x 130
```

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB