Merge remote-tracking branch 'origin/main' into paultag/import

This commit is contained in:
Paul Tagliamonte
2025-04-01 15:18:23 -04:00
30 changed files with 15454 additions and 6609 deletions

View File

@ -26,11 +26,17 @@
"@typescript-eslint/no-duplicate-enum-values": "error", "@typescript-eslint/no-duplicate-enum-values": "error",
"@typescript-eslint/no-duplicate-type-constituents": "error", "@typescript-eslint/no-duplicate-type-constituents": "error",
"@typescript-eslint/no-empty-object-type": "error", "@typescript-eslint/no-empty-object-type": "error",
"@typescript-eslint/no-extra-non-null-assertion": "error",
"@typescript-eslint/no-floating-promises": "error", "@typescript-eslint/no-floating-promises": "error",
"@typescript-eslint/no-for-in-array": "error",
"no-implied-eval": "off", // This is wrong; use the @typescript-eslint one instead. "no-implied-eval": "off", // This is wrong; use the @typescript-eslint one instead.
"@typescript-eslint/no-implied-eval": "error", "@typescript-eslint/no-implied-eval": "error",
"@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-misused-promises": "error", "@typescript-eslint/no-misused-promises": "error",
"@typescript-eslint/no-namespace": "error", "@typescript-eslint/no-namespace": "error",
"@typescript-eslint/no-non-null-asserted-optional-chain": "error",
"@typescript-eslint/no-redundant-type-constituents": "error",
"@typescript-eslint/no-this-alias": "warn",
"@typescript-eslint/no-unnecessary-type-assertion": "error", "@typescript-eslint/no-unnecessary-type-assertion": "error",
"@typescript-eslint/no-unnecessary-type-constraint": "error", "@typescript-eslint/no-unnecessary-type-constraint": "error",
"no-unused-vars": "off", // This is wrong; use the @typescript-eslint one instead. "no-unused-vars": "off", // This is wrong; use the @typescript-eslint one instead.
@ -41,7 +47,13 @@
"vars": "all", "vars": "all",
"args": "none" "args": "none"
}], }],
"@typescript-eslint/no-unsafe-unary-minus": "error",
"@typescript-eslint/no-wrapper-object-types": "error",
"no-throw-literal": "off", // Use @typescript-eslint/only-throw-error instead.
"@typescript-eslint/only-throw-error": "error",
"@typescript-eslint/prefer-as-const": "warn", "@typescript-eslint/prefer-as-const": "warn",
"@typescript-eslint/prefer-namespace-keyword": "error",
"@typescript-eslint/restrict-plus-operands": "error",
"jsx-a11y/click-events-have-key-events": "off", "jsx-a11y/click-events-have-key-events": "off",
"jsx-a11y/no-autofocus": "off", "jsx-a11y/no-autofocus": "off",
"jsx-a11y/no-noninteractive-element-interactions": "off", "jsx-a11y/no-noninteractive-element-interactions": "off",
@ -50,7 +62,7 @@
{ {
"name": "isNaN", "name": "isNaN",
"message": "Use Number.isNaN() instead." "message": "Use Number.isNaN() instead."
}, }
], ],
"no-restricted-syntax": [ "no-restricted-syntax": [
"error", "error",
@ -64,7 +76,7 @@
"never" "never"
], ],
"react-hooks/exhaustive-deps": "off", "react-hooks/exhaustive-deps": "off",
"suggest-no-throw/suggest-no-throw": "warn", "suggest-no-throw/suggest-no-throw": "error"
}, },
"overrides": [ "overrides": [
{ {
@ -84,7 +96,7 @@
"plugin:testing-library/react" "plugin:testing-library/react"
], ],
"rules": { "rules": {
"suggest-no-throw/suggest-no-throw": "off", "suggest-no-throw/suggest-no-throw": "off"
} }
} }
] ]

View File

@ -124,6 +124,7 @@ export class ElectronZoo {
// We need to expose this in order for some tests that require folder // We need to expose this in order for some tests that require folder
// creation and some code below. // creation and some code below.
// eslint-disable-next-line @typescript-eslint/no-this-alias
const that = this const that = this
const options = { const options = {

View File

@ -37,11 +37,11 @@ export class IntoServer
implements AsyncGenerator<Uint8Array, never, void> implements AsyncGenerator<Uint8Array, never, void>
{ {
private worker: Worker | null = null private worker: Worker | null = null
private type_: String | null = null private type_: string | null = null
private trace: boolean = false private trace: boolean = false
constructor(type_?: String, worker?: Worker, trace?: boolean) { constructor(type_?: string, worker?: Worker, trace?: boolean) {
super() super()
if (worker && type_) { if (worker && type_) {
this.worker = worker this.worker = worker

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -4,72 +4,142 @@
// Set Units // Set Units
@settings(defaultLengthUnit = in) @settings(defaultLengthUnit = in)
// Define constants such as sheet metal thickness, bend radius, flange length, bolt diameter size, etc. // Input bolt pattern dimensions to mount the bracket
thickness = 0.090 mountingBoltDiameter = 1 / 4
bendRad = 0.08 mountingBoltPatternX = 7
outsideBendRad = bendRad + thickness mountingBoltPatternY = 4
flangeLength = 0.5
hatHeight = 3
hatWidth = 5
boltSize = 0.25
flangeWidth = 1.5
// Sketch and extrude the base shape and fillet the inside and outside edges. // Input bolt pattern dimensions to mount a component to the bracket
baseExtrusion = startSketchOn(-XZ) componentBoltDiameter = 3 / 16
|> startProfileAt([0, 0], %) componentBoltPatternX = 2
|> line(end = [0, thickness], tag = $e1) componentBoltPatternY = 3
|> line(end = [flangeLength, 0], tag = $e2)
|> line(end = [0, hatHeight], tag = $e3)
|> line(end = [hatWidth, 0], tag = $e4)
|> line(end = [0, -hatHeight], tag = $e5)
|> line(end = [flangeLength, 0], tag = $e6)
|> line(end = [0, -thickness], tag = $e7)
|> line(end = [-flangeLength - thickness, 0], tag = $e8)
|> line(end = [0, hatHeight], tag = $e9)
|> line(end = [-hatWidth + 2 * thickness, 0], tag = $e10)
|> line(end = [0, -hatHeight], tag = $e11)
|> close(tag = $e12)
|> extrude(length = hatWidth)
|> fillet(radius = bendRad, tags = [getNextAdjacentEdge(e2)])
|> fillet(radius = outsideBendRad, tags = [getNextAdjacentEdge(e3)])
|> fillet(radius = outsideBendRad, tags = [getNextAdjacentEdge(e4)])
|> fillet(radius = bendRad, tags = [getNextAdjacentEdge(e5)])
|> fillet(radius = outsideBendRad, tags = [getNextAdjacentEdge(e8)])
|> fillet(radius = bendRad, tags = [getNextAdjacentEdge(e9)])
|> fillet(radius = bendRad, tags = [getNextAdjacentEdge(e10)])
|> fillet(radius = outsideBendRad, tags = [getNextAdjacentEdge(e11)])
// Define the flanges and place the bolt holes // Define bracket constants such as sheet metal thickness, bend radius, flange length, etc.
flange1 = startSketchOn(XY) hatHeight = 2.5
|> startProfileAt([0, 0], %) bendAngle = 75
|> line(end = [0, hatWidth]) thickness = 0.125
|> line(end = [flangeWidth, 0], tag = $e13) interiorBendRadius = 0.125
|> line(end = [0, -hatWidth], tag = $e14)
// Calculate Remaining Parameters
exteriorBendRadius = interiorBendRadius + thickness
overhang = 3 * mountingBoltDiameter
flangeLength = 6 * mountingBoltDiameter
flangeExtrusion = if mountingBoltPatternY > componentBoltPatternY {
mountingBoltPatternY + overhang * 2
} else {
componentBoltPatternY + overhang * 2
}
// Draw the extrusion profile of the sheet metal bracket
bracketProfile = startSketchOn(XZ)
|> startProfileAt([
-mountingBoltPatternX / 2 - overhang,
0
], %)
|> xLine(length = flangeLength)
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> angledLineToY([bendAngle, hatHeight - thickness], %, $seg01)
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> xLine(endAbsolute = 0, tag = $seg02)
|> xLine(length = segLen(seg02))
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> angledLine([-bendAngle, segLen(seg01)], %)
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> xLine(length = flangeLength)
|> yLine(length = thickness, tag = $seg03)
|> xLine(length = -flangeLength, tag = $seg04)
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> angledLine([180 - bendAngle, segLen(seg01)], %)
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> xLine(endAbsolute = 0, tag = $seg05)
|> xLine(length = -segLen(seg05))
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> angledLine([bendAngle - 180, segLen(seg01)], %)
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> xLine(length = -flangeLength, tag = $seg06)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07)
|> close() |> close()
|> hole(circle(center = [0.75, 1], radius = boltSize), %) |> extrude(length = flangeExtrusion)
|> hole(circle(center = [0.75, 4], radius = boltSize), %)
|> extrude(length = thickness)
|> fillet( |> fillet(
radius = 0.5, radius = flangeLength / 3,
tags = [ tags = [
getNextAdjacentEdge(e13), seg03,
getNextAdjacentEdge(e14) getOppositeEdge(seg03),
seg07,
getOppositeEdge(seg07)
], ],
) )
flange2 = startSketchOn(XY) // Cut the bolt pattern in the left base flange
|> startProfileAt([-6, 0], %) leftFlangeBoltPattern = startSketchOn(bracketProfile, seg04)
|> line(end = [0, hatWidth]) |> circle(center = [-mountingBoltPatternX / 2, overhang], radius = mountingBoltDiameter / 2)
|> line(end = [-flangeWidth, 0], tag = $e15) |> patternLinear2d(
|> line(end = [0, -hatWidth], tag = $e16) %,
|> close() instances = 2,
|> hole(circle(center = [-6.75, 1], radius = boltSize), %) distance = mountingBoltPatternY,
|> hole(circle(center = [-6.75, 4], radius = boltSize), %) axis = [0, 1],
|> extrude(length = thickness)
|> fillet(
radius = 0.25,
tags = [
getNextAdjacentEdge(e15),
getNextAdjacentEdge(e16)
],
) )
|> extrude(length = -thickness)
// Cut the bolt pattern in the right base flange
rightFlangeBoltPattern = startSketchOn(bracketProfile, seg06)
|> circle(center = [mountingBoltPatternX / 2, overhang], radius = mountingBoltDiameter / 2)
|> patternLinear2d(
%,
instances = 2,
distance = mountingBoltPatternY,
axis = [0, 1],
)
|> extrude(length = -thickness)
// Provision the top flange with holes to mount an object
topFlangeBoltPattern = startSketchOn(bracketProfile, seg05)
|> circle(
center = [
-componentBoltPatternX / 2,
-componentBoltPatternY / 2 + flangeExtrusion / 2
],
radius = componentBoltDiameter / 2,
)
|> patternLinear2d(
%,
instances = 2,
distance = componentBoltPatternX,
axis = [1, 0],
)
|> patternLinear2d(
%,
instances = 2,
distance = componentBoltPatternY,
axis = [0, 1],
)
|> extrude(length = -thickness)
// Place a hole at the center of the component bolt pattern to reduce mass
centeredHole = startSketchOn(bracketProfile, seg05)
|> circle(center = [0, flangeExtrusion / 2], radius = 0.75)
|> extrude(length = -thickness)

24
rust/Cargo.lock generated
View File

@ -1780,7 +1780,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-bumper" name = "kcl-bumper"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@ -1791,7 +1791,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-derive-docs" name = "kcl-derive-docs"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"Inflector", "Inflector",
"anyhow", "anyhow",
@ -1810,7 +1810,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-directory-test-macro" name = "kcl-directory-test-macro"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1819,7 +1819,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-language-server" name = "kcl-language-server"
version = "0.2.56" version = "0.2.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@ -1840,7 +1840,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-language-server-release" name = "kcl-language-server-release"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@ -1860,7 +1860,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-lib" name = "kcl-lib"
version = "0.2.56" version = "0.2.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"approx 0.5.1", "approx 0.5.1",
@ -1929,7 +1929,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-python-bindings" name = "kcl-python-bindings"
version = "0.3.56" version = "0.3.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"kcl-lib", "kcl-lib",
@ -1944,7 +1944,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-test-server" name = "kcl-test-server"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"hyper 0.14.32", "hyper 0.14.32",
@ -1957,7 +1957,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-to-core" name = "kcl-to-core"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@ -1971,7 +1971,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-wasm-lib" name = "kcl-wasm-lib"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"bson", "bson",
"console_error_panic_hook", "console_error_panic_hook",
@ -2034,9 +2034,9 @@ dependencies = [
[[package]] [[package]]
name = "kittycad-modeling-cmds" name = "kittycad-modeling-cmds"
version = "0.2.107" version = "0.2.108"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb129c1f4906a76e3518e58f61968f16cb56f1279366415d2bae6059aa68fce8" checksum = "58f5fbcfb0fe3384592829cd1a5109aa45fb6a3ffc5ff2d164d2fd528ffd4641"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"chrono", "chrono",

View File

@ -35,7 +35,7 @@ dashmap = { version = "6.1.0" }
http = "1" http = "1"
indexmap = "2.7.0" indexmap = "2.7.0"
kittycad = { version = "0.3.36", default-features = false, features = ["js", "requests"] } kittycad = { version = "0.3.36", default-features = false, features = ["js", "requests"] }
kittycad-modeling-cmds = { version = "0.2.107", features = ["ts-rs", "websocket"] } kittycad-modeling-cmds = { version = "0.2.108", features = ["ts-rs", "websocket"] }
lazy_static = "1.5.0" lazy_static = "1.5.0"
miette = "7.5.0" miette = "7.5.0"
pyo3 = { version = "0.24.0" } pyo3 = { version = "0.24.0" }

View File

@ -1,7 +1,7 @@
[package] [package]
name = "kcl-bumper" name = "kcl-bumper"
version = "0.1.56" version = "0.1.57"
edition = "2021" edition = "2021"
repository = "https://github.com/KittyCAD/modeling-api" repository = "https://github.com/KittyCAD/modeling-api"
rust-version = "1.76" rust-version = "1.76"

View File

@ -1,7 +1,7 @@
[package] [package]
name = "kcl-derive-docs" name = "kcl-derive-docs"
description = "A tool for generating documentation from Rust derive macros" description = "A tool for generating documentation from Rust derive macros"
version = "0.1.56" version = "0.1.57"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
repository = "https://github.com/KittyCAD/modeling-app" repository = "https://github.com/KittyCAD/modeling-app"

View File

@ -1,7 +1,7 @@
[package] [package]
name = "kcl-directory-test-macro" name = "kcl-directory-test-macro"
description = "A tool for generating tests from a directory of kcl files" description = "A tool for generating tests from a directory of kcl files"
version = "0.1.56" version = "0.1.57"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
repository = "https://github.com/KittyCAD/modeling-app" repository = "https://github.com/KittyCAD/modeling-app"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "kcl-language-server-release" name = "kcl-language-server-release"
version = "0.1.56" version = "0.1.57"
edition = "2021" edition = "2021"
authors = ["KittyCAD Inc <kcl@kittycad.io>"] authors = ["KittyCAD Inc <kcl@kittycad.io>"]
publish = false publish = false

View File

@ -2,7 +2,7 @@
name = "kcl-language-server" name = "kcl-language-server"
description = "A language server for KCL." description = "A language server for KCL."
authors = ["KittyCAD Inc <kcl@kittycad.io>"] authors = ["KittyCAD Inc <kcl@kittycad.io>"]
version = "0.2.56" version = "0.2.57"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View File

@ -1,7 +1,7 @@
[package] [package]
name = "kcl-lib" name = "kcl-lib"
description = "KittyCAD Language implementation and tools" description = "KittyCAD Language implementation and tools"
version = "0.2.56" version = "0.2.57"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
repository = "https://github.com/KittyCAD/modeling-app" repository = "https://github.com/KittyCAD/modeling-app"

View File

@ -138,8 +138,6 @@ async fn inner_chamfer(
radius: LengthUnit(length), radius: LengthUnit(length),
tolerance: LengthUnit(DEFAULT_TOLERANCE), // We can let the user set this in the future. tolerance: LengthUnit(DEFAULT_TOLERANCE), // We can let the user set this in the future.
cut_type: CutType::Chamfer, cut_type: CutType::Chamfer,
// We make this a none so that we can remove it in the future.
face_id: None,
}), }),
) )
.await?; .await?;

View File

@ -167,8 +167,6 @@ async fn inner_fillet(
radius: LengthUnit(radius), radius: LengthUnit(radius),
tolerance: LengthUnit(tolerance.unwrap_or(DEFAULT_TOLERANCE)), tolerance: LengthUnit(tolerance.unwrap_or(DEFAULT_TOLERANCE)),
cut_type: CutType::Fillet, cut_type: CutType::Fillet,
// We make this a none so that we can remove it in the future.
face_id: None,
}), }),
) )
.await?; .await?;

View File

@ -1,141 +1,145 @@
```mermaid ```mermaid
flowchart LR flowchart LR
subgraph path2 [Path] subgraph path2 [Path]
2["Path<br>[728, 753, 0]"] 2["Path<br>[1227, 1308, 0]"]
3["Segment<br>[759, 796, 0]"] 3["Segment<br>[1314, 1342, 0]"]
4["Segment<br>[802, 842, 0]"] 4["Segment<br>[1348, 1436, 0]"]
5["Segment<br>[848, 885, 0]"] 5["Segment<br>[1442, 1502, 0]"]
6["Segment<br>[891, 927, 0]"] 6["Segment<br>[1508, 1597, 0]"]
7["Segment<br>[933, 971, 0]"] 7["Segment<br>[1603, 1639, 0]"]
8["Segment<br>[977, 1017, 0]"] 8["Segment<br>[1645, 1674, 0]"]
9["Segment<br>[1023, 1061, 0]"] 9["Segment<br>[1680, 1769, 0]"]
10["Segment<br>[1067, 1120, 0]"] 10["Segment<br>[1775, 1817, 0]"]
11["Segment<br>[1126, 1163, 0]"] 11["Segment<br>[1823, 1911, 0]"]
12["Segment<br>[1169, 1223, 0]"] 12["Segment<br>[1917, 1945, 0]"]
13["Segment<br>[1229, 1268, 0]"] 13["Segment<br>[1951, 1990, 0]"]
14["Segment<br>[1274, 1291, 0]"] 14["Segment<br>[1996, 2039, 0]"]
15[Solid2d] 15["Segment<br>[2045, 2134, 0]"]
16["Segment<br>[2140, 2187, 0]"]
17["Segment<br>[2193, 2281, 0]"]
18["Segment<br>[2287, 2323, 0]"]
19["Segment<br>[2329, 2359, 0]"]
20["Segment<br>[2365, 2453, 0]"]
21["Segment<br>[2459, 2506, 0]"]
22["Segment<br>[2512, 2601, 0]"]
23["Segment<br>[2607, 2650, 0]"]
24["Segment<br>[2656, 2726, 0]"]
25["Segment<br>[2732, 2739, 0]"]
26[Solid2d]
end end
subgraph path56 [Path] subgraph path94 [Path]
56["Path<br>[1947, 1972, 0]"] 94["Path<br>[3071, 3160, 0]"]
57["Segment<br>[1978, 2003, 0]"] 95["Segment<br>[3071, 3160, 0]"]
58["Segment<br>[2009, 2049, 0]"] 96[Solid2d]
59["Segment<br>[2055, 2093, 0]"]
60["Segment<br>[2099, 2106, 0]"]
61[Solid2d]
end end
subgraph path62 [Path] subgraph path102 [Path]
62["Path<br>[2117, 2162, 0]"] 102["Path<br>[3435, 3523, 0]"]
63["Segment<br>[2117, 2162, 0]"] 103["Segment<br>[3435, 3523, 0]"]
64[Solid2d] 104[Solid2d]
end end
subgraph path65 [Path] subgraph path110 [Path]
65["Path<br>[2177, 2222, 0]"] 110["Path<br>[3805, 3985, 0]"]
66["Segment<br>[2177, 2222, 0]"] 111["Segment<br>[3805, 3985, 0]"]
67[Solid2d] 112[Solid2d]
end end
subgraph path84 [Path] subgraph path120 [Path]
84["Path<br>[2430, 2456, 0]"] 120["Path<br>[4401, 4457, 0]"]
85["Segment<br>[2462, 2487, 0]"] 121["Segment<br>[4401, 4457, 0]"]
86["Segment<br>[2493, 2534, 0]"] 122[Solid2d]
87["Segment<br>[2540, 2578, 0]"]
88["Segment<br>[2584, 2591, 0]"]
89[Solid2d]
end end
subgraph path90 [Path] 1["Plane<br>[1204, 1221, 0]"]
90["Path<br>[2602, 2648, 0]"] 27["Sweep Extrusion<br>[2745, 2778, 0]"]
91["Segment<br>[2602, 2648, 0]"]
92[Solid2d]
end
subgraph path93 [Path]
93["Path<br>[2663, 2709, 0]"]
94["Segment<br>[2663, 2709, 0]"]
95[Solid2d]
end
1["Plane<br>[704, 722, 0]"]
16["Sweep Extrusion<br>[1297, 1323, 0]"]
17[Wall]
18[Wall]
19[Wall]
20[Wall]
21[Wall]
22[Wall]
23[Wall]
24[Wall]
25[Wall]
26[Wall]
27[Wall]
28[Wall] 28[Wall]
29["Cap Start"] 29[Wall]
30["Cap End"] 30[Wall]
31["SweepEdge Opposite"] 31[Wall]
32["SweepEdge Adjacent"] 32[Wall]
33["SweepEdge Opposite"] 33[Wall]
34["SweepEdge Adjacent"] 34[Wall]
35["SweepEdge Opposite"] 35[Wall]
36["SweepEdge Adjacent"] 36[Wall]
37["SweepEdge Opposite"] 37[Wall]
38["SweepEdge Adjacent"] 38[Wall]
39["SweepEdge Opposite"] 39[Wall]
40["SweepEdge Adjacent"] 40[Wall]
41["SweepEdge Opposite"] 41[Wall]
42["SweepEdge Adjacent"] 42[Wall]
43["SweepEdge Opposite"] 43[Wall]
44["SweepEdge Adjacent"] 44[Wall]
45["SweepEdge Opposite"] 45[Wall]
46["SweepEdge Adjacent"] 46[Wall]
47["SweepEdge Opposite"] 47[Wall]
48["SweepEdge Adjacent"] 48["Cap Start"]
49["SweepEdge Opposite"] 49["Cap End"]
50["SweepEdge Adjacent"] 50["SweepEdge Opposite"]
51["SweepEdge Opposite"] 51["SweepEdge Adjacent"]
52["SweepEdge Adjacent"] 52["SweepEdge Opposite"]
53["SweepEdge Opposite"] 53["SweepEdge Adjacent"]
54["SweepEdge Adjacent"] 54["SweepEdge Opposite"]
55["Plane<br>[1924, 1941, 0]"] 55["SweepEdge Adjacent"]
68["Sweep Extrusion<br>[2232, 2259, 0]"] 56["SweepEdge Opposite"]
69[Wall] 57["SweepEdge Adjacent"]
70[Wall] 58["SweepEdge Opposite"]
71[Wall] 59["SweepEdge Adjacent"]
72[Wall] 60["SweepEdge Opposite"]
73["Cap Start"] 61["SweepEdge Adjacent"]
74["Cap End"] 62["SweepEdge Opposite"]
75["SweepEdge Opposite"] 63["SweepEdge Adjacent"]
76["SweepEdge Adjacent"] 64["SweepEdge Opposite"]
77["SweepEdge Opposite"] 65["SweepEdge Adjacent"]
78["SweepEdge Adjacent"] 66["SweepEdge Opposite"]
79["SweepEdge Opposite"] 67["SweepEdge Adjacent"]
80["SweepEdge Adjacent"] 68["SweepEdge Opposite"]
81["SweepEdge Opposite"] 69["SweepEdge Adjacent"]
82["SweepEdge Adjacent"] 70["SweepEdge Opposite"]
83["Plane<br>[2407, 2424, 0]"] 71["SweepEdge Adjacent"]
96["Sweep Extrusion<br>[2719, 2746, 0]"] 72["SweepEdge Opposite"]
97[Wall] 73["SweepEdge Adjacent"]
74["SweepEdge Opposite"]
75["SweepEdge Adjacent"]
76["SweepEdge Opposite"]
77["SweepEdge Adjacent"]
78["SweepEdge Opposite"]
79["SweepEdge Adjacent"]
80["SweepEdge Opposite"]
81["SweepEdge Adjacent"]
82["SweepEdge Opposite"]
83["SweepEdge Adjacent"]
84["SweepEdge Opposite"]
85["SweepEdge Adjacent"]
86["SweepEdge Opposite"]
87["SweepEdge Adjacent"]
88["SweepEdge Opposite"]
89["SweepEdge Adjacent"]
90["EdgeCut Fillet<br>[2784, 2955, 0]"]
91["EdgeCut Fillet<br>[2784, 2955, 0]"]
92["EdgeCut Fillet<br>[2784, 2955, 0]"]
93["EdgeCut Fillet<br>[2784, 2955, 0]"]
97["Sweep Extrusion<br>[3289, 3317, 0]"]
98[Wall] 98[Wall]
99[Wall] 99["SweepEdge Opposite"]
100[Wall] 100["SweepEdge Adjacent"]
101["Cap Start"] 101["Sweep Extrusion<br>[3289, 3317, 0]"]
102["Cap End"] 105["Sweep Extrusion<br>[3652, 3680, 0]"]
103["SweepEdge Opposite"] 106[Wall]
104["SweepEdge Adjacent"]
105["SweepEdge Opposite"]
106["SweepEdge Adjacent"]
107["SweepEdge Opposite"] 107["SweepEdge Opposite"]
108["SweepEdge Adjacent"] 108["SweepEdge Adjacent"]
109["SweepEdge Opposite"] 109["Sweep Extrusion<br>[3652, 3680, 0]"]
110["SweepEdge Adjacent"] 113["Sweep Extrusion<br>[4239, 4267, 0]"]
111["EdgeCut Fillet<br>[1329, 1387, 0]"] 114[Wall]
112["EdgeCut Fillet<br>[1393, 1458, 0]"] 115["SweepEdge Opposite"]
113["EdgeCut Fillet<br>[1464, 1529, 0]"] 116["SweepEdge Adjacent"]
114["EdgeCut Fillet<br>[1535, 1593, 0]"] 117["Sweep Extrusion<br>[4239, 4267, 0]"]
115["EdgeCut Fillet<br>[1599, 1664, 0]"] 118["Sweep Extrusion<br>[4239, 4267, 0]"]
116["EdgeCut Fillet<br>[1670, 1728, 0]"] 119["Sweep Extrusion<br>[4239, 4267, 0]"]
117["EdgeCut Fillet<br>[1734, 1793, 0]"] 123["Sweep Extrusion<br>[4463, 4491, 0]"]
118["EdgeCut Fillet<br>[1799, 1865, 0]"] 124[Wall]
119["EdgeCut Fillet<br>[2265, 2395, 0]"] 125["SweepEdge Opposite"]
120["EdgeCut Fillet<br>[2265, 2395, 0]"] 126["SweepEdge Adjacent"]
121["EdgeCut Fillet<br>[2752, 2883, 0]"] 127["StartSketchOnFace<br>[3029, 3065, 0]"]
122["EdgeCut Fillet<br>[2752, 2883, 0]"] 128["StartSketchOnFace<br>[3393, 3429, 0]"]
129["StartSketchOnFace<br>[3763, 3799, 0]"]
130["StartSketchOnFace<br>[4359, 4395, 0]"]
1 --- 2 1 --- 2
2 --- 3 2 --- 3
2 --- 4 2 --- 4
@ -149,170 +153,187 @@ flowchart LR
2 --- 12 2 --- 12
2 --- 13 2 --- 13
2 --- 14 2 --- 14
2 ---- 16
2 --- 15 2 --- 15
2 --- 16
2 --- 17
2 --- 18
2 --- 19
2 --- 20
2 --- 21
2 --- 22
2 --- 23
2 --- 24
2 --- 25
2 ---- 27
2 --- 26
3 --- 28 3 --- 28
3 --- 53 3 --- 50
3 --- 54 3 --- 51
4 --- 27 4 --- 29
4 --- 51
4 --- 52 4 --- 52
5 --- 26 4 --- 53
5 --- 49 5 --- 30
5 --- 50 5 --- 54
6 --- 25 5 --- 55
6 --- 47 6 --- 31
6 --- 48 6 --- 56
7 --- 24 6 --- 57
7 --- 45 7 --- 32
7 --- 46 7 --- 58
8 --- 23 7 --- 59
8 --- 43 9 --- 33
8 --- 44 9 --- 60
9 --- 22 9 --- 61
9 --- 41 10 --- 34
9 --- 42 10 --- 62
10 --- 21 10 --- 63
10 --- 39 11 --- 35
10 --- 40 11 --- 64
11 --- 20 11 --- 65
11 --- 37
11 --- 38
12 --- 19
12 --- 35
12 --- 36 12 --- 36
13 --- 18 12 --- 66
13 --- 33 12 --- 67
13 --- 34 13 --- 37
14 --- 17 13 --- 68
14 --- 31 13 --- 69
14 --- 32 13 --- 90
16 --- 17 14 --- 38
16 --- 18 14 --- 70
16 --- 19 14 --- 71
16 --- 20 15 --- 39
16 --- 21 15 --- 72
16 --- 22 15 --- 73
16 --- 23
16 --- 24
16 --- 25
16 --- 26
16 --- 27
16 --- 28
16 --- 29
16 --- 30
16 --- 31
16 --- 32
16 --- 33
16 --- 34
16 --- 35
16 --- 36
16 --- 37
16 --- 38
16 --- 39
16 --- 40 16 --- 40
16 --- 41 16 --- 74
16 --- 42 16 --- 75
16 --- 43 17 --- 41
16 --- 44 17 --- 76
16 --- 45 17 --- 77
16 --- 46 18 --- 42
16 --- 47 18 --- 78
16 --- 48 18 --- 79
16 --- 49 20 --- 43
16 --- 50 20 --- 80
16 --- 51 20 --- 81
16 --- 52 21 --- 44
16 --- 53 21 --- 82
16 --- 54 21 --- 83
55 --- 56 22 --- 45
55 --- 62 22 --- 84
55 --- 65 22 --- 85
56 --- 57 23 --- 46
56 --- 58 23 --- 86
56 --- 59 23 --- 87
56 --- 60 24 --- 47
56 ---- 68 24 --- 88
56 --- 61 24 --- 89
57 --- 72 24 --- 92
57 --- 81 27 --- 28
57 --- 82 27 --- 29
58 --- 71 27 --- 30
58 --- 79 27 --- 31
58 --- 80 27 --- 32
59 --- 70 27 --- 33
59 --- 77 27 --- 34
59 --- 78 27 --- 35
60 --- 69 27 --- 36
60 --- 75 27 --- 37
60 --- 76 27 --- 38
62 --- 63 27 --- 39
62 --- 64 27 --- 40
65 --- 66 27 --- 41
65 --- 67 27 --- 42
68 --- 69 27 --- 43
68 --- 70 27 --- 44
68 --- 71 27 --- 45
68 --- 72 27 --- 46
68 --- 73 27 --- 47
68 --- 74 27 --- 48
68 --- 75 27 --- 49
68 --- 76 27 --- 50
68 --- 77 27 --- 51
68 --- 78 27 --- 52
68 --- 79 27 --- 53
68 --- 80 27 --- 54
68 --- 81 27 --- 55
68 --- 82 27 --- 56
83 --- 84 27 --- 57
83 --- 90 27 --- 58
83 --- 93 27 --- 59
84 --- 85 27 --- 60
84 --- 86 27 --- 61
84 --- 87 27 --- 62
84 --- 88 27 --- 63
84 ---- 96 27 --- 64
84 --- 89 27 --- 65
85 --- 97 27 --- 66
85 --- 103 27 --- 67
85 --- 104 27 --- 68
86 --- 98 27 --- 69
86 --- 105 27 --- 70
86 --- 106 27 --- 71
87 --- 99 27 --- 72
87 --- 107 27 --- 73
87 --- 108 27 --- 74
88 --- 100 27 --- 75
88 --- 109 27 --- 76
88 --- 110 27 --- 77
90 --- 91 27 --- 78
90 --- 92 27 --- 79
93 --- 94 27 --- 80
93 --- 95 27 --- 81
96 --- 97 27 --- 82
96 --- 98 27 --- 83
96 --- 99 27 --- 84
96 --- 100 27 --- 85
96 --- 101 27 --- 86
96 --- 102 27 --- 87
96 --- 103 27 --- 88
96 --- 104 27 --- 89
96 --- 105 38 --- 94
96 --- 106 42 --- 110
96 --- 107 42 --- 120
96 --- 108 46 --- 102
96 --- 109 68 <--x 91
96 --- 110 88 <--x 93
52 <--x 111 94 --- 95
50 <--x 112 94 ---- 97
48 <--x 113 94 --- 96
46 <--x 114 95 --- 98
40 <--x 115 95 --- 99
38 <--x 116 95 --- 100
36 <--x 117 97 --- 98
34 <--x 118 97 --- 99
80 <--x 119 97 --- 100
78 <--x 120 102 --- 103
106 <--x 121 102 ---- 105
108 <--x 122 102 --- 104
103 --- 106
103 --- 107
103 --- 108
105 --- 106
105 --- 107
105 --- 108
110 --- 111
110 ---- 113
110 --- 112
111 --- 114
111 --- 115
111 --- 116
113 --- 114
113 --- 115
113 --- 116
120 --- 121
120 ---- 123
120 --- 122
121 --- 124
121 --- 125
121 --- 126
123 --- 124
123 --- 125
123 --- 126
38 <--x 127
46 <--x 128
42 <--x 129
42 <--x 130
``` ```

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -1,6 +1,6 @@
[package] [package]
name = "kcl-python-bindings" name = "kcl-python-bindings"
version = "0.3.56" version = "0.3.57"
edition = "2021" edition = "2021"
repository = "https://github.com/kittycad/modeling-app" repository = "https://github.com/kittycad/modeling-app"

View File

@ -1,7 +1,7 @@
[package] [package]
name = "kcl-test-server" name = "kcl-test-server"
description = "A test server for KCL" description = "A test server for KCL"
version = "0.1.56" version = "0.1.57"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"

View File

@ -1,7 +1,7 @@
[package] [package]
name = "kcl-to-core" name = "kcl-to-core"
description = "Utility methods to convert kcl to engine core executable tests" description = "Utility methods to convert kcl to engine core executable tests"
version = "0.1.56" version = "0.1.57"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
repository = "https://github.com/KittyCAD/modeling-app" repository = "https://github.com/KittyCAD/modeling-app"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "kcl-wasm-lib" name = "kcl-wasm-lib"
version = "0.1.56" version = "0.1.57"
edition = "2021" edition = "2021"
repository = "https://github.com/KittyCAD/modeling-app" repository = "https://github.com/KittyCAD/modeling-app"
rust-version = "1.83" rust-version = "1.83"

View File

@ -261,7 +261,7 @@ export class SceneInfra {
return null return null
} }
hoveredObject: null | any = null hoveredObject: null | Object3D<Object3DEventMap> = null
raycaster = new Raycaster() raycaster = new Raycaster()
planeRaycaster = new Raycaster() planeRaycaster = new Raycaster()
currentMouseVector = new Vector2() currentMouseVector = new Vector2()
@ -487,11 +487,13 @@ export class SceneInfra {
if (this.hoveredObject !== firstIntersectObject) { if (this.hoveredObject !== firstIntersectObject) {
const hoveredObj = this.hoveredObject const hoveredObj = this.hoveredObject
this.hoveredObject = null this.hoveredObject = null
if (hoveredObj) {
await this.onMouseLeave({ await this.onMouseLeave({
selected: hoveredObj, selected: hoveredObj,
mouseEvent: mouseEvent, mouseEvent: mouseEvent,
intersectionPoint, intersectionPoint,
}) })
}
this.hoveredObject = firstIntersectObject this.hoveredObject = firstIntersectObject
await this.onMouseEnter({ await this.onMouseEnter({
selected: this.hoveredObject, selected: this.hoveredObject,

View File

@ -175,8 +175,11 @@ export const FileMachineProvider = ({
commandBarActor.send({ type: 'Close' }) commandBarActor.send({ type: 'Close' })
navigate( navigate(
`..${PATHS.FILE}/${encodeURIComponent( `..${PATHS.FILE}/${encodeURIComponent(
// TODO: Should this be context.selectedDirectory.path?
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
context.selectedDirectory + context.selectedDirectory +
window.electron.path.sep + window.electron.path.sep +
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
event.output.name event.output.name
)}` )}`
) )

View File

@ -591,6 +591,7 @@ class EngineConnection extends EventTarget {
* did not establish. * did not establish.
*/ */
connect(reconnecting?: boolean): Promise<void> { connect(reconnecting?: boolean): Promise<void> {
// eslint-disable-next-line @typescript-eslint/no-this-alias
const that = this const that = this
return new Promise((resolve) => { return new Promise((resolve) => {
if (this.isConnecting() || this.isReady()) { if (this.isConnecting() || this.isReady()) {

View File

@ -274,11 +274,17 @@ export const parse = (code: string | Error): ParseResult | Error => {
} }
} }
// Parse and throw an exception if there are any errors (probably not suitable for use outside of testing). /**
export const assertParse = (code: string): Node<Program> => { * Parse and throw an exception if there are any errors (probably not suitable for use outside of testing).
*/
export function assertParse(code: string): Node<Program> {
const result = parse(code) const result = parse(code)
// eslint-disable-next-line suggest-no-throw/suggest-no-throw // eslint-disable-next-line suggest-no-throw/suggest-no-throw
if (err(result) || !resultIsOk(result)) throw result if (err(result)) throw result
if (!resultIsOk(result)) {
// eslint-disable-next-line suggest-no-throw/suggest-no-throw
throw new Error('parse result contains errors', { cause: result })
}
return result.program return result.program
} }
@ -565,8 +571,8 @@ export function base64Decode(base64: string): ArrayBuffer | Error {
const decoded = base64_decode(base64) const decoded = base64_decode(base64)
return new Uint8Array(decoded).buffer return new Uint8Array(decoded).buffer
} catch (e) { } catch (e) {
console.error('Caught error decoding base64 string: ' + e) console.error('Caught error decoding base64 string', e)
return new Error('Caught error decoding base64 string: ' + e) return new Error('Caught error decoding base64 string', { cause: e })
} }
} }

View File

@ -11,7 +11,7 @@ import type { WebContentSendPayload } from './menu/channels'
const typeSafeIpcRendererOn = ( const typeSafeIpcRendererOn = (
channel: Channel, channel: Channel,
listener: (event: IpcRendererEvent, ...args: any[]) => Promise<void> | any listener: (event: IpcRendererEvent, ...args: any[]) => void
) => ipcRenderer.on(channel, listener) ) => ipcRenderer.on(channel, listener)
const resizeWindow = (width: number, height: number) => const resizeWindow = (width: number, height: number) =>
@ -163,7 +163,7 @@ const listMachines = async (
}) })
} }
const getMachineApiIp = async (): Promise<String | null> => const getMachineApiIp = async (): Promise<string | null> =>
ipcRenderer.invoke('find_machine_api') ipcRenderer.invoke('find_machine_api')
const getArgvParsed = () => { const getArgvParsed = () => {