Files
modeling-app/src/wasm-lib/kcl/tests/poop_chute/program_memory.snap

1824 lines
46 KiB
Plaintext
Raw Normal View History

---
source: kcl/src/simulation_tests.rs
description: Program memory after executing poop_chute.kcl
---
{
"environments": [
{
"bindings": {
"Fx": {
"type": "Number",
"value": 0.5,
"__meta": [
{
"sourceRange": [
156,
159,
0
]
}
]
},
"Fy": {
"type": "Number",
"value": 0.5,
"__meta": [
{
"sourceRange": [
165,
168,
0
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"__meta": []
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"__meta": []
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"__meta": []
},
"ZERO": {
"type": "Number",
"value": 0.0,
"__meta": []
},
"back_length": {
"type": "Number",
"value": 7.0,
"__meta": [
{
"sourceRange": [
116,
117,
0
]
}
]
},
"back_walls_width": {
"type": "Number",
"value": 2.0,
"__meta": [
{
"sourceRange": [
42,
43,
0
]
}
]
},
"exit_height": {
"type": "Number",
"value": 1.0,
"__meta": [
{
"sourceRange": [
132,
133,
0
]
}
]
},
"filletRadius": {
"type": "Number",
"value": 0.05,
"__meta": [
{
"sourceRange": [
96,
101,
0
]
}
]
},
"front_length": {
"type": "Number",
"value": 6.0,
"__meta": [
{
"sourceRange": [
149,
150,
0
]
}
]
},
"front_walls_width": {
"type": "Number",
"value": 2.5,
"__meta": [
{
"sourceRange": [
64,
67,
0
]
}
]
},
"height": {
"type": "Number",
"value": 5.5,
"__meta": [
{
"sourceRange": [
77,
80,
0
]
}
]
},
"part001": {
"type": "Solid",
"value": {
"type": "Solid",
"id": "[uuid]",
"artifactId": "[uuid]",
"value": [
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
258,
286,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
292,
355,
0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
361,
379,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
385,
410,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
416,
442,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
448,
547,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
553,
578,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
584,
662,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
668,
686,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
692,
705,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
711,
737,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
743,
789,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
795,
803,
0
],
"tag": null,
"type": "extrudePlane"
}
],
"sketch": {
"type": "Sketch",
"id": "[uuid]",
"paths": [
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
258,
286,
0
]
},
"from": [
1.0,
0.0
],
"tag": null,
"to": [
1.0625,
0.0
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
292,
355,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"to": [
2.0,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
361,
379,
0
]
},
"from": [
2.0,
0.9375
],
"tag": null,
"to": [
2.0,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
385,
410,
0
]
},
"from": [
2.0,
5.5
],
"tag": null,
"to": [
1.875,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
416,
442,
0
]
},
"from": [
1.875,
5.5
],
"tag": null,
"to": [
1.875,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
448,
547,
0
]
},
"from": [
1.875,
0.9375
],
"tag": null,
"to": [
1.0625,
0.125
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
553,
578,
0
]
},
"from": [
1.0625,
0.125
],
"tag": null,
"to": [
0.9375,
0.125
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
584,
662,
0
]
},
"from": [
0.9375,
0.125
],
"tag": null,
"to": [
0.125,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
668,
686,
0
]
},
"from": [
0.125,
0.9375
],
"tag": null,
"to": [
0.125,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
692,
705,
0
]
},
"from": [
0.125,
5.5
],
"tag": null,
"to": [
0.0,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
711,
737,
0
]
},
"from": [
0.0,
5.5
],
"tag": null,
"to": [
0.0,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
743,
789,
0
]
},
"from": [
0.0,
0.9375
],
"tag": null,
"to": [
0.9375,
0.0
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
795,
803,
0
]
},
"from": [
0.9375,
0.0
],
"tag": null,
"to": [
1.0,
0.0
],
"type": "ToPoint"
}
],
"on": {
"type": "plane",
"id": "[uuid]",
"artifactId": "[uuid]",
"value": "YZ",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"xAxis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"yAxis": {
"x": 0.0,
"y": 0.0,
"z": 1.0
},
"zAxis": {
"x": -1.0,
"y": 0.0,
"z": 0.0
},
"units": {
"type": "Mm"
},
"__meta": []
},
"start": {
"from": [
1.0,
0.0
],
"to": [
1.0,
0.0
],
"tag": null,
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
208,
252,
0
]
}
},
"tags": {
"seg01": {
"type": "TagIdentifier",
"value": "seg01",
"info": {
"type": "TagEngineInfo",
"id": "[uuid]",
"sketch": "[uuid]",
"path": {
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
292,
355,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"to": [
2.0,
0.9374999999999999
],
"type": "ToPoint"
},
"surface": {
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
292,
355,
0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"type": "extrudePlane"
}
},
"__meta": [
{
"sourceRange": [
348,
354,
0
]
}
]
}
},
"artifactId": "[uuid]",
KCL: Patterns of patterns can use the original sketch/solid as target (#5284) Right now, if you model something like this box with a button: <img width="413" alt="Screenshot 2025-02-06 at 3 08 03 PM" src="https://github.com/user-attachments/assets/04818a70-7cf3-4ee3-b8c5-df5959ac10db" /> Let's say you want to pattern the button, and repeat it a second time. If you try, you'll actually pattern the entire model (box + button). <img width="486" alt="Screenshot 2025-02-06 at 3 08 52 PM" src="https://github.com/user-attachments/assets/09fc28d9-5d80-4ab3-b4dc-b8de2945fcba" /> Why? Because right now, when you sketch on a face (like the button was), both the box and the button share the same ID. All extrusions from a solid will share the same ID, because they all refer to the same composite solid. This is helpful in some ways -- arguably the solid _is_ just one big complex shape now -- but it's not helpful in other ways. What if I want to only pattern the button? Luckily there's an original ID for the button part, which is still stored. So we just need a way to tell the pattern stdlib functions whether to use the target's main ID or its original ID. This PR adds a new optional bool, `useOriginal`, to patterns. It's false by default, to keep backwards-compatibility (make sure that old KCL code doesn't change). This PR is based on https://github.com/KittyCAD/modeling-app/pull/3914. It's based on work Serena and I are doing to fix a bug (engine does not allow patterning a 3D solid which was sketched on a face of another solid). @gserena01 our test program is now: ``` w = 400 case = startSketchOn('XY') |> startProfileAt([-w, -w], %) |> line(endAbsolute = [-w, w]) |> line(endAbsolute = [w, -w]) |> line(endAbsolute = [-w, -w]) |> close() |> extrude(length = 200) bump1 = startSketchOn(case, 'end') |> circle({ center = [-50, -50], radius = 40 }, %) |> extrude(length = 20) // We pass in "bump1" here since we want to pattern just this object on the face. useOriginal = true target = bump1 transform = { axis = [1, 0, 0], instances = 3, distance = -100 } patternLinear3d(transform, target, useOriginal) ``` If you change the `useOriginal = true` to `false` you can see the difference.
2025-02-06 17:46:47 -06:00
"originalId": "[uuid]",
"units": {
"type": "Mm"
},
"__meta": [
{
"sourceRange": [
208,
252,
0
]
}
]
},
"height": 0.0,
"startCapId": "[uuid]",
"endCapId": "[uuid]",
"units": {
"type": "Mm"
},
"__meta": [
{
"sourceRange": [
208,
252,
0
]
}
]
}
},
"seg01": {
"type": "TagIdentifier",
"type": "TagIdentifier",
"value": "seg01",
"info": {
"type": "TagEngineInfo",
"id": "[uuid]",
"sketch": "[uuid]",
"path": {
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
292,
355,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"to": [
2.0,
0.9374999999999999
],
"type": "ToPoint"
},
"surface": {
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
292,
355,
0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"type": "extrudePlane"
}
},
"__meta": [
{
"sourceRange": [
348,
354,
0
]
}
]
},
"seg02": {
"type": "TagIdentifier",
"type": "TagIdentifier",
"value": "seg02",
"info": {
"type": "TagEngineInfo",
"id": "[uuid]",
"sketch": "[uuid]",
"path": {
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1076,
1139,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 1138,
"start": 1132,
"type": "TagDeclarator",
"value": "seg02"
},
"to": [
2.0,
0.9374999999999999
],
"type": "ToPoint"
},
"surface": {
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1076,
1139,
0
],
"tag": {
"end": 1138,
"start": 1132,
"type": "TagDeclarator",
"value": "seg02"
},
"type": "extrudePlane"
}
},
"__meta": [
{
"sourceRange": [
1132,
1138,
0
]
}
]
},
"sketch001": {
"type": "Sketch",
"value": {
"type": "Sketch",
"id": "[uuid]",
"paths": [
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
258,
286,
0
]
},
"from": [
1.0,
0.0
],
"tag": null,
"to": [
1.0625,
0.0
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
292,
355,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"to": [
2.0,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
361,
379,
0
]
},
"from": [
2.0,
0.9375
],
"tag": null,
"to": [
2.0,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
385,
410,
0
]
},
"from": [
2.0,
5.5
],
"tag": null,
"to": [
1.875,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
416,
442,
0
]
},
"from": [
1.875,
5.5
],
"tag": null,
"to": [
1.875,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
448,
547,
0
]
},
"from": [
1.875,
0.9375
],
"tag": null,
"to": [
1.0625,
0.125
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
553,
578,
0
]
},
"from": [
1.0625,
0.125
],
"tag": null,
"to": [
0.9375,
0.125
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
584,
662,
0
]
},
"from": [
0.9375,
0.125
],
"tag": null,
"to": [
0.125,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
668,
686,
0
]
},
"from": [
0.125,
0.9375
],
"tag": null,
"to": [
0.125,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
692,
705,
0
]
},
"from": [
0.125,
5.5
],
"tag": null,
"to": [
0.0,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
711,
737,
0
]
},
"from": [
0.0,
5.5
],
"tag": null,
"to": [
0.0,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
743,
789,
0
]
},
"from": [
0.0,
0.9375
],
"tag": null,
"to": [
0.9375,
0.0
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
795,
803,
0
]
},
"from": [
0.9375,
0.0
],
"tag": null,
"to": [
1.0,
0.0
],
"type": "ToPoint"
}
],
"on": {
"type": "plane",
"id": "[uuid]",
"artifactId": "[uuid]",
"value": "YZ",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"xAxis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"yAxis": {
"x": 0.0,
"y": 0.0,
"z": 1.0
},
"zAxis": {
"x": -1.0,
"y": 0.0,
"z": 0.0
},
"units": {
"type": "Mm"
},
"__meta": []
},
"start": {
"from": [
1.0,
0.0
],
"to": [
1.0,
0.0
],
"tag": null,
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
208,
252,
0
]
}
},
"tags": {
"seg01": {
"type": "TagIdentifier",
"value": "seg01",
"info": {
"type": "TagEngineInfo",
"id": "[uuid]",
"sketch": "[uuid]",
"path": {
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
292,
355,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"to": [
2.0,
0.9374999999999999
],
"type": "ToPoint"
},
"surface": {
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
292,
355,
0
],
"tag": {
"end": 354,
"start": 348,
"type": "TagDeclarator",
"value": "seg01"
},
"type": "extrudePlane"
}
},
"__meta": [
{
"sourceRange": [
348,
354,
0
]
}
]
}
},
"artifactId": "[uuid]",
KCL: Patterns of patterns can use the original sketch/solid as target (#5284) Right now, if you model something like this box with a button: <img width="413" alt="Screenshot 2025-02-06 at 3 08 03 PM" src="https://github.com/user-attachments/assets/04818a70-7cf3-4ee3-b8c5-df5959ac10db" /> Let's say you want to pattern the button, and repeat it a second time. If you try, you'll actually pattern the entire model (box + button). <img width="486" alt="Screenshot 2025-02-06 at 3 08 52 PM" src="https://github.com/user-attachments/assets/09fc28d9-5d80-4ab3-b4dc-b8de2945fcba" /> Why? Because right now, when you sketch on a face (like the button was), both the box and the button share the same ID. All extrusions from a solid will share the same ID, because they all refer to the same composite solid. This is helpful in some ways -- arguably the solid _is_ just one big complex shape now -- but it's not helpful in other ways. What if I want to only pattern the button? Luckily there's an original ID for the button part, which is still stored. So we just need a way to tell the pattern stdlib functions whether to use the target's main ID or its original ID. This PR adds a new optional bool, `useOriginal`, to patterns. It's false by default, to keep backwards-compatibility (make sure that old KCL code doesn't change). This PR is based on https://github.com/KittyCAD/modeling-app/pull/3914. It's based on work Serena and I are doing to fix a bug (engine does not allow patterning a 3D solid which was sketched on a face of another solid). @gserena01 our test program is now: ``` w = 400 case = startSketchOn('XY') |> startProfileAt([-w, -w], %) |> line(endAbsolute = [-w, w]) |> line(endAbsolute = [w, -w]) |> line(endAbsolute = [-w, -w]) |> close() |> extrude(length = 200) bump1 = startSketchOn(case, 'end') |> circle({ center = [-50, -50], radius = 40 }, %) |> extrude(length = 20) // We pass in "bump1" here since we want to pattern just this object on the face. useOriginal = true target = bump1 transform = { axis = [1, 0, 0], instances = 3, distance = -100 } patternLinear3d(transform, target, useOriginal) ``` If you change the `useOriginal = true` to `false` you can see the difference.
2025-02-06 17:46:47 -06:00
"originalId": "[uuid]",
"units": {
"type": "Mm"
},
"__meta": [
{
"sourceRange": [
208,
252,
0
]
}
]
}
},
"sketch002": {
"type": "Solid",
"value": {
"type": "Solid",
"id": "[uuid]",
"artifactId": "[uuid]",
"value": [
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1042,
1070,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1076,
1139,
0
],
"tag": {
"end": 1138,
"start": 1132,
"type": "TagDeclarator",
"value": "seg02"
},
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1145,
1163,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1169,
1194,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1200,
1226,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1232,
1331,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1337,
1362,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1368,
1446,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1452,
1470,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1476,
1489,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1495,
1521,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1527,
1573,
0
],
"tag": null,
"type": "extrudePlane"
},
{
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1579,
1587,
0
],
"tag": null,
"type": "extrudePlane"
}
],
"sketch": {
"type": "Sketch",
"id": "[uuid]",
"paths": [
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1042,
1070,
0
]
},
"from": [
1.0,
0.0
],
"tag": null,
"to": [
1.0625,
0.0
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1076,
1139,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 1138,
"start": 1132,
"type": "TagDeclarator",
"value": "seg02"
},
"to": [
2.0,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1145,
1163,
0
]
},
"from": [
2.0,
0.9375
],
"tag": null,
"to": [
2.0,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1169,
1194,
0
]
},
"from": [
2.0,
5.5
],
"tag": null,
"to": [
1.875,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1200,
1226,
0
]
},
"from": [
1.875,
5.5
],
"tag": null,
"to": [
1.875,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1232,
1331,
0
]
},
"from": [
1.875,
0.9375
],
"tag": null,
"to": [
1.0625,
0.125
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1337,
1362,
0
]
},
"from": [
1.0625,
0.125
],
"tag": null,
"to": [
0.9375,
0.125
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1368,
1446,
0
]
},
"from": [
0.9375,
0.125
],
"tag": null,
"to": [
0.125,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1452,
1470,
0
]
},
"from": [
0.125,
0.9375
],
"tag": null,
"to": [
0.125,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1476,
1489,
0
]
},
"from": [
0.125,
5.5
],
"tag": null,
"to": [
0.0,
5.5
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1495,
1521,
0
]
},
"from": [
0.0,
5.5
],
"tag": null,
"to": [
0.0,
0.9375
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1527,
1573,
0
]
},
"from": [
0.0,
0.9375
],
"tag": null,
"to": [
0.9375,
0.0
],
"type": "ToPoint"
},
{
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1579,
1587,
0
]
},
"from": [
0.9375,
0.0
],
"tag": null,
"to": [
1.0,
0.0
],
"type": "ToPoint"
}
],
"on": {
"type": "plane",
"id": "[uuid]",
"artifactId": "[uuid]",
"value": "YZ",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"xAxis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"yAxis": {
"x": 0.0,
"y": 0.0,
"z": 1.0
},
"zAxis": {
"x": -1.0,
"y": 0.0,
"z": 0.0
},
"units": {
"type": "Mm"
},
"__meta": []
},
"start": {
"from": [
1.0,
0.0
],
"to": [
1.0,
0.0
],
"tag": null,
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
992,
1036,
0
]
}
},
"tags": {
"seg02": {
"type": "TagIdentifier",
"value": "seg02",
"info": {
"type": "TagEngineInfo",
"id": "[uuid]",
"sketch": "[uuid]",
"path": {
"__geoMeta": {
"id": "[uuid]",
"sourceRange": [
1076,
1139,
0
]
},
"from": [
1.0625,
0.0
],
"tag": {
"end": 1138,
"start": 1132,
"type": "TagDeclarator",
"value": "seg02"
},
"to": [
2.0,
0.9374999999999999
],
"type": "ToPoint"
},
"surface": {
"faceId": "[uuid]",
"id": "[uuid]",
"sourceRange": [
1076,
1139,
0
],
"tag": {
"end": 1138,
"start": 1132,
"type": "TagDeclarator",
"value": "seg02"
},
"type": "extrudePlane"
}
},
"__meta": [
{
"sourceRange": [
1132,
1138,
0
]
}
]
}
},
"artifactId": "[uuid]",
KCL: Patterns of patterns can use the original sketch/solid as target (#5284) Right now, if you model something like this box with a button: <img width="413" alt="Screenshot 2025-02-06 at 3 08 03 PM" src="https://github.com/user-attachments/assets/04818a70-7cf3-4ee3-b8c5-df5959ac10db" /> Let's say you want to pattern the button, and repeat it a second time. If you try, you'll actually pattern the entire model (box + button). <img width="486" alt="Screenshot 2025-02-06 at 3 08 52 PM" src="https://github.com/user-attachments/assets/09fc28d9-5d80-4ab3-b4dc-b8de2945fcba" /> Why? Because right now, when you sketch on a face (like the button was), both the box and the button share the same ID. All extrusions from a solid will share the same ID, because they all refer to the same composite solid. This is helpful in some ways -- arguably the solid _is_ just one big complex shape now -- but it's not helpful in other ways. What if I want to only pattern the button? Luckily there's an original ID for the button part, which is still stored. So we just need a way to tell the pattern stdlib functions whether to use the target's main ID or its original ID. This PR adds a new optional bool, `useOriginal`, to patterns. It's false by default, to keep backwards-compatibility (make sure that old KCL code doesn't change). This PR is based on https://github.com/KittyCAD/modeling-app/pull/3914. It's based on work Serena and I are doing to fix a bug (engine does not allow patterning a 3D solid which was sketched on a face of another solid). @gserena01 our test program is now: ``` w = 400 case = startSketchOn('XY') |> startProfileAt([-w, -w], %) |> line(endAbsolute = [-w, w]) |> line(endAbsolute = [w, -w]) |> line(endAbsolute = [-w, -w]) |> close() |> extrude(length = 200) bump1 = startSketchOn(case, 'end') |> circle({ center = [-50, -50], radius = 40 }, %) |> extrude(length = 20) // We pass in "bump1" here since we want to pattern just this object on the face. useOriginal = true target = bump1 transform = { axis = [1, 0, 0], instances = 3, distance = -100 } patternLinear3d(transform, target, useOriginal) ``` If you change the `useOriginal = true` to `false` you can see the difference.
2025-02-06 17:46:47 -06:00
"originalId": "[uuid]",
"units": {
"type": "Mm"
},
"__meta": [
{
"sourceRange": [
992,
1036,
0
]
}
]
},
"height": 1.5,
"startCapId": "[uuid]",
"endCapId": "[uuid]",
"units": {
"type": "Mm"
},
"__meta": [
{
"sourceRange": [
992,
1036,
0
]
}
]
}
},
"wall_thickness": {
"type": "Number",
"value": 0.125,
"__meta": [
{
"sourceRange": [
17,
22,
0
]
}
]
}
},
"snapshots": [],
"parent": null
}
],
"currentEnv": [
0,
0
],
"callStack": []
}