From a77fa639f31d761a782053e4a70f9053c80be28f Mon Sep 17 00:00:00 2001
From: Pierre Jacquier
Date: Thu, 9 Jan 2025 15:36:50 -0500
Subject: [PATCH 01/63] Point-and-click deletion of lofts, shells, and offset
planes (#4898)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Refactor 'Delete selection' as actor
Will fix #4662
* WIP logging
* WIP: working Solid3dGetExtrusionFaceInfo for loft
* Working wall deletion of loft
* Add offset plane deletion
* Add feature tree deletion of shell
* Clean up
* Revert "Clean up"
This reverts commit 214763cc2bdf6227d8d8abda0f600f4ec5399327.
* Clean up rust changes, taking the sketch with the most paths
* Working cap selection and deletion
* Clean up
* Add test for loft and offset plane deletion via selection
* A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-16-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-macos-8-cores)
* Set reenter: false as it was originally
* Passing test
* Add shell deletion via feature tree test
* Revert the migration to promise actor
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Trigger CI
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Trigger CI
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Trigger CI
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Trigger CI
* Use cmd.id as solid_id after latest engine merge
* Add feature tree deletion of offset plane and fix lint
* Add feature tree deletion of loft
* Clean up
* Better comment
* Lint fix
* Remove sketch sorting
---------
Co-authored-by: github-actions[bot]
---
e2e/playwright/point-click.spec.ts | 88 ++++++++++++++++++++++++++++++
src/lang/modifyAst.ts | 21 ++++++-
src/lang/std/artifactGraph.ts | 31 ++++++++++-
src/wasm-lib/kcl/src/std/loft.rs | 5 +-
4 files changed, 140 insertions(+), 5 deletions(-)
diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts
index f35593b5e1..06fc7938d8 100644
--- a/e2e/playwright/point-click.spec.ts
+++ b/e2e/playwright/point-click.spec.ts
@@ -756,6 +756,17 @@ test(`Offset plane point-and-click`, async ({
})
await scene.expectPixelColor([74, 74, 74], testPoint, 15)
})
+
+ await test.step('Delete offset plane via feature tree selection', async () => {
+ await editor.closePane()
+ const operationButton = await toolbar.getFeatureTreeOperation(
+ 'Offset Plane',
+ 0
+ )
+ await operationButton.click({ button: 'left' })
+ await page.keyboard.press('Backspace')
+ await scene.expectPixelColor([50, 51, 96], testPoint, 15)
+ })
})
const loftPointAndClickCases = [
@@ -851,6 +862,75 @@ loftPointAndClickCases.forEach(({ shouldPreselect }) => {
})
await scene.expectPixelColor([89, 89, 89], testPoint, 15)
})
+
+ await test.step('Delete loft via feature tree selection', async () => {
+ await editor.closePane()
+ const operationButton = await toolbar.getFeatureTreeOperation('Loft', 0)
+ await operationButton.click({ button: 'left' })
+ await page.keyboard.press('Backspace')
+ await scene.expectPixelColor([254, 254, 254], testPoint, 15)
+ })
+ })
+})
+
+// TODO: merge with above test. Right now we're not able to delete a loft
+// right after creation via selection for some reason, so we go with a new instance
+test('Loft and offset plane deletion via selection', async ({
+ context,
+ page,
+ homePage,
+ scene,
+}) => {
+ const initialCode = `sketch001 = startSketchOn('XZ')
+ |> circle({ center = [0, 0], radius = 30 }, %)
+ plane001 = offsetPlane('XZ', 50)
+ sketch002 = startSketchOn(plane001)
+ |> circle({ center = [0, 0], radius = 20 }, %)
+loft001 = loft([sketch001, sketch002])
+`
+ await context.addInitScript((initialCode) => {
+ localStorage.setItem('persistCode', initialCode)
+ }, initialCode)
+ await page.setBodyDimensions({ width: 1000, height: 500 })
+ await homePage.goToModelingScene()
+
+ // One dumb hardcoded screen pixel value
+ const testPoint = { x: 575, y: 200 }
+ const [clickOnSketch1] = scene.makeMouseHelpers(testPoint.x, testPoint.y)
+ const [clickOnSketch2] = scene.makeMouseHelpers(testPoint.x, testPoint.y + 80)
+
+ await test.step(`Delete loft`, async () => {
+ // Check for loft
+ await scene.expectPixelColor([89, 89, 89], testPoint, 15)
+ await clickOnSketch1()
+ await expect(page.locator('.cm-activeLine')).toHaveText(`
+ |> circle({ center = [0, 0], radius = 30 }, %)
+ `)
+ await page.keyboard.press('Backspace')
+ // Check for sketch 1
+ await scene.expectPixelColor([254, 254, 254], testPoint, 15)
+ })
+
+ await test.step('Delete sketch002', async () => {
+ await page.waitForTimeout(1000)
+ await clickOnSketch2()
+ await expect(page.locator('.cm-activeLine')).toHaveText(`
+ |> circle({ center = [0, 0], radius = 20 }, %)
+ `)
+ await page.keyboard.press('Backspace')
+ // Check for plane001
+ await scene.expectPixelColor([228, 228, 228], testPoint, 15)
+ })
+
+ await test.step('Delete plane001', async () => {
+ await page.waitForTimeout(1000)
+ await clickOnSketch2()
+ await expect(page.locator('.cm-activeLine')).toHaveText(`
+ plane001 = offsetPlane('XZ', 50)
+ `)
+ await page.keyboard.press('Backspace')
+ // Check for sketch 1
+ await scene.expectPixelColor([254, 254, 254], testPoint, 15)
})
})
@@ -1030,4 +1110,12 @@ extrude001 = extrude(40, sketch001)
})
await scene.expectPixelColor([49, 49, 49], testPoint, 15)
})
+
+ await test.step('Delete shell via feature tree selection', async () => {
+ await editor.closePane()
+ const operationButton = await toolbar.getFeatureTreeOperation('Shell', 0)
+ await operationButton.click({ button: 'left' })
+ await page.keyboard.press('Backspace')
+ await scene.expectPixelColor([99, 99, 99], testPoint, 15)
+ })
})
diff --git a/src/lang/modifyAst.ts b/src/lang/modifyAst.ts
index 79106a5ed9..dc346c61ab 100644
--- a/src/lang/modifyAst.ts
+++ b/src/lang/modifyAst.ts
@@ -1149,11 +1149,17 @@ export async function deleteFromSelection(
((selection?.artifact?.type === 'wall' ||
selection?.artifact?.type === 'cap') &&
varDec.node.init.type === 'PipeExpression') ||
- selection.artifact?.type === 'sweep'
+ selection.artifact?.type === 'sweep' ||
+ selection.artifact?.type === 'plane' ||
+ !selection.artifact // aka expected to be a shell at this point
) {
let extrudeNameToDelete = ''
let pathToNode: PathToNode | null = null
- if (selection.artifact?.type !== 'sweep') {
+ if (
+ selection.artifact &&
+ selection.artifact.type !== 'sweep' &&
+ selection.artifact.type !== 'plane'
+ ) {
const varDecName = varDec.node.id.name
traverse(astClone, {
enter: (node, path) => {
@@ -1169,6 +1175,17 @@ export async function deleteFromSelection(
pathToNode = path
extrudeNameToDelete = dec.id.name
}
+ if (
+ dec.init.type === 'CallExpression' &&
+ dec.init.callee.name === 'loft' &&
+ dec.init.arguments?.[0].type === 'ArrayExpression' &&
+ dec.init.arguments?.[0].elements.some(
+ (a) => a.type === 'Identifier' && a.name === varDecName
+ )
+ ) {
+ pathToNode = path
+ extrudeNameToDelete = dec.id.name
+ }
}
},
})
diff --git a/src/lang/std/artifactGraph.ts b/src/lang/std/artifactGraph.ts
index f038d94288..9ce7e3763f 100644
--- a/src/lang/std/artifactGraph.ts
+++ b/src/lang/std/artifactGraph.ts
@@ -77,7 +77,7 @@ interface SegmentArtifactRich extends BaseArtifact {
/** A Sweep is a more generic term for extrude, revolve, loft and sweep*/
interface SweepArtifact extends BaseArtifact {
type: 'sweep'
- subType: 'extrusion' | 'revolve'
+ subType: 'extrusion' | 'revolve' | 'loft'
pathId: string
surfaceIds: Array
edgeIds: Array
@@ -85,7 +85,7 @@ interface SweepArtifact extends BaseArtifact {
}
interface SweepArtifactRich extends BaseArtifact {
type: 'sweep'
- subType: 'extrusion' | 'revolve'
+ subType: 'extrusion' | 'revolve' | 'loft'
path: PathArtifact
surfaces: Array
edges: Array
@@ -398,6 +398,33 @@ export function getArtifactsToUpdate({
artifact: { ...path, sweepId: id },
})
return returnArr
+ } else if (
+ cmd.type === 'loft' &&
+ response.type === 'modeling' &&
+ response.data.modeling_response.type === 'loft'
+ ) {
+ returnArr.push({
+ id,
+ artifact: {
+ type: 'sweep',
+ subType: 'loft',
+ id,
+ // TODO: make sure to revisit this choice, don't think it matters for now
+ pathId: cmd.section_ids[0],
+ surfaceIds: [],
+ edgeIds: [],
+ codeRef: { range, pathToNode },
+ },
+ })
+ for (const sectionId of cmd.section_ids) {
+ const path = getArtifact(sectionId)
+ if (path?.type === 'path')
+ returnArr.push({
+ id: sectionId,
+ artifact: { ...path, sweepId: id },
+ })
+ }
+ return returnArr
} else if (
cmd.type === 'solid3d_get_extrusion_face_info' &&
response?.type === 'modeling' &&
diff --git a/src/wasm-lib/kcl/src/std/loft.rs b/src/wasm-lib/kcl/src/std/loft.rs
index a43bbba0b4..bd3e03721a 100644
--- a/src/wasm-lib/kcl/src/std/loft.rs
+++ b/src/wasm-lib/kcl/src/std/loft.rs
@@ -156,5 +156,8 @@ async fn inner_loft(
.await?;
// Using the first sketch as the base curve, idk we might want to change this later.
- do_post_extrude(sketches[0].clone(), 0.0, exec_state, args).await
+ let mut sketch = sketches[0].clone();
+ // Override its id with the loft id so we can get its faces later
+ sketch.id = id;
+ do_post_extrude(sketch, 0.0, exec_state, args).await
}
From 23a42f0195c35b3a62008fd907480d84fb330a17 Mon Sep 17 00:00:00 2001
From: Frank Noirot
Date: Thu, 9 Jan 2025 16:02:05 -0500
Subject: [PATCH 02/63] Bump @kittycad/lib to v2.0.13 (#4988)
---
package.json | 2 +-
src/components/ModelingMachineProvider.tsx | 1 +
yarn.lock | 8 ++++----
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 1a5400cd44..b64b3639e4 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
"@fortawesome/react-fontawesome": "^0.2.0",
"@headlessui/react": "^1.7.19",
"@headlessui/tailwindcss": "^0.2.0",
- "@kittycad/lib": "2.0.12",
+ "@kittycad/lib": "2.0.13",
"@lezer/highlight": "^1.2.1",
"@lezer/lr": "^1.4.1",
"@react-hook/resize-observer": "^2.0.1",
diff --git a/src/components/ModelingMachineProvider.tsx b/src/components/ModelingMachineProvider.tsx
index dc63166602..cdabab9c76 100644
--- a/src/components/ModelingMachineProvider.tsx
+++ b/src/components/ModelingMachineProvider.tsx
@@ -271,6 +271,7 @@ export const ModelingMachineProvider = ({
cmd_id: uuidv4(),
cmd: {
type: 'default_camera_center_to_selection',
+ camera_movement: 'vantage',
},
})
.catch(reportRejection)
diff --git a/yarn.lock b/yarn.lock
index 79d51c73fa..e97fe61d9a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2010,10 +2010,10 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
-"@kittycad/lib@2.0.12":
- version "2.0.12"
- resolved "https://registry.yarnpkg.com/@kittycad/lib/-/lib-2.0.12.tgz#517be58ee8b5f59e5c89bb5076492c960b4ef7d8"
- integrity sha512-1eXIP+JbFvWSWQe//ijBuhlnCLRUnZzNAiOf7oMI0WcRTTn8SD8A+TY+NgK6OVGG12unyTPCVXxRR4Xtm3ahLQ==
+"@kittycad/lib@2.0.13":
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/@kittycad/lib/-/lib-2.0.13.tgz#e20aa17847ab1359065d21bed143ea330cf545d1"
+ integrity sha512-wLn6/iRVdqbRCvf6t2FhNr8No6+I6elpCEVHGUexyHLoE+1XeUS1lHeapQqcfR0pEQiwtGpcKTDfUNSlmnmaFw==
dependencies:
openapi-types "^12.0.0"
ts-node "^10.9.1"
From c9860af29f542370b2384e4e100ba1e34274e935 Mon Sep 17 00:00:00 2001
From: Pierre Jacquier
Date: Thu, 9 Jan 2025 20:20:07 -0500
Subject: [PATCH 03/63] Fix Shell point-and-click picking the wrong face with
piped extrudes (#4981)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [BUG] Shell point and click references the wrong feature
Fixes #4961
* Add test for sketch on face based on extrudes in pipe
* Add no extrude in pipe case
* Lint
* Add scene.waitForExecutionDone()
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Trigger CI
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Trigger CI
* Update src/lang/modifyAst/addShell.ts
Co-authored-by: Frank Noirot
---------
Co-authored-by: github-actions[bot]
Co-authored-by: Frank Noirot
---
e2e/playwright/point-click.spec.ts | 90 ++++++++++++++++++++++++++++++
src/lang/modifyAst/addShell.ts | 22 ++++++--
2 files changed, 106 insertions(+), 6 deletions(-)
diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts
index 06fc7938d8..f57764922d 100644
--- a/e2e/playwright/point-click.spec.ts
+++ b/e2e/playwright/point-click.spec.ts
@@ -1119,3 +1119,93 @@ extrude001 = extrude(40, sketch001)
await scene.expectPixelColor([99, 99, 99], testPoint, 15)
})
})
+
+const shellSketchOnFacesCases = [
+ `sketch001 = startSketchOn('XZ')
+ |> circle({ center = [0, 0], radius = 100 }, %)
+ |> extrude(100, %)
+
+sketch002 = startSketchOn(sketch001, 'END')
+ |> circle({ center = [0, 0], radius = 50 }, %)
+ |> extrude(50, %)
+ `,
+ `sketch001 = startSketchOn('XZ')
+ |> circle({ center = [0, 0], radius = 100 }, %)
+extrude001 = extrude(100, sketch001)
+
+sketch002 = startSketchOn(extrude001, 'END')
+ |> circle({ center = [0, 0], radius = 50 }, %)
+extrude002 = extrude(50, sketch002)
+ `,
+]
+shellSketchOnFacesCases.forEach((initialCode, index) => {
+ const hasExtrudesInPipe = index === 0
+ test(`Shell point-and-click sketch on face (extrudes in pipes: ${hasExtrudesInPipe})`, async ({
+ context,
+ page,
+ homePage,
+ scene,
+ editor,
+ toolbar,
+ cmdBar,
+ }) => {
+ await context.addInitScript((initialCode) => {
+ localStorage.setItem('persistCode', initialCode)
+ }, initialCode)
+ await page.setBodyDimensions({ width: 1000, height: 500 })
+ await homePage.goToModelingScene()
+ await scene.waitForExecutionDone()
+
+ // One dumb hardcoded screen pixel value
+ const testPoint = { x: 550, y: 295 }
+ const [clickOnCap] = scene.makeMouseHelpers(testPoint.x, testPoint.y)
+ const shellDeclaration = `shell001 = shell({ faces = ['end'], thickness = 5 }, ${
+ hasExtrudesInPipe ? 'sketch002' : 'extrude002'
+ })`
+
+ await test.step(`Look for the grey of the shape`, async () => {
+ await toolbar.closePane('code')
+ await scene.expectPixelColor([128, 128, 128], testPoint, 15)
+ })
+
+ await test.step(`Go through the command bar flow, selecting a cap and keeping default thickness`, async () => {
+ await toolbar.shellButton.click()
+ await cmdBar.expectState({
+ stage: 'arguments',
+ currentArgKey: 'selection',
+ currentArgValue: '',
+ headerArguments: {
+ Selection: '',
+ Thickness: '',
+ },
+ highlightedHeaderArg: 'selection',
+ commandName: 'Shell',
+ })
+ await clickOnCap()
+ await cmdBar.progressCmdBar()
+ await page.waitForTimeout(500)
+ await cmdBar.progressCmdBar()
+ await cmdBar.expectState({
+ stage: 'review',
+ headerArguments: {
+ Selection: '1 cap',
+ Thickness: '5',
+ },
+ commandName: 'Shell',
+ })
+ await cmdBar.progressCmdBar()
+ })
+
+ await test.step(`Confirm code is added to the editor, scene has changed`, async () => {
+ await toolbar.openPane('code')
+ await editor.expectEditor.toContain(shellDeclaration)
+ await editor.expectState({
+ diagnostics: [],
+ activeLines: [shellDeclaration],
+ highlightedCode: '',
+ })
+ await toolbar.closePane('code')
+ await scene.expectPixelColor([73, 73, 73], testPoint, 15)
+ })
+ })
+})
diff --git a/src/lang/modifyAst/addShell.ts b/src/lang/modifyAst/addShell.ts
index 229d2ea71e..c010812504 100644
--- a/src/lang/modifyAst/addShell.ts
+++ b/src/lang/modifyAst/addShell.ts
@@ -49,17 +49,27 @@ export function addShell({
return new Error("Couldn't find extrude")
}
- pathToExtrudeNode = extrudeLookupResult.pathToExtrudeNode
- // Get the sketch ref from the selection
// TODO: this assumes the segment is piped directly from the sketch, with no intermediate `VariableDeclarator` between.
// We must find a technique for these situations that is robust to intermediate declarations
- const sketchNode = getNodeFromPath(
+ const extrudeNode = getNodeFromPath(
modifiedAst,
- graphSelection.codeRef.pathToNode,
+ extrudeLookupResult.pathToExtrudeNode,
'VariableDeclarator'
)
- if (err(sketchNode)) {
- return sketchNode
+ const segmentNode = getNodeFromPath(
+ modifiedAst,
+ extrudeLookupResult.pathToSegmentNode,
+ 'VariableDeclarator'
+ )
+ if (err(extrudeNode) || err(segmentNode)) {
+ return new Error("Couldn't find extrude")
+ }
+ if (extrudeNode.node.init.type === 'CallExpression') {
+ pathToExtrudeNode = extrudeLookupResult.pathToExtrudeNode
+ } else if (segmentNode.node.init.type === 'PipeExpression') {
+ pathToExtrudeNode = extrudeLookupResult.pathToSegmentNode
+ } else {
+ return new Error("Couldn't find extrude")
}
const selectedArtifact = graphSelection.artifact
From 3e615dfdbc7798210dab0744267f1937772afd8b Mon Sep 17 00:00:00 2001
From: Frank Noirot
Date: Thu, 9 Jan 2025 22:07:40 -0500
Subject: [PATCH 04/63] Update Katie's name reference and link in onboarding
(#4967)
---
src/routes/Onboarding/Export.tsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/routes/Onboarding/Export.tsx b/src/routes/Onboarding/Export.tsx
index f09827769a..10970f0225 100644
--- a/src/routes/Onboarding/Export.tsx
+++ b/src/routes/Onboarding/Export.tsx
@@ -41,13 +41,13 @@ export default function Export() {
export to almost any CAD software.
- Our teammate David is working on the file format, check out{' '}
+ Our teammate Katie is working on the file format, check out{' '}
- his talk with the Metaverse Standards Forum
+ her standards proposal on GitHub
!
From 4fa7d2d8c8c1a0947b1ca5664f904ae8c12d165a Mon Sep 17 00:00:00 2001
From: Kevin Nadro
Date: Fri, 10 Jan 2025 09:52:04 -0500
Subject: [PATCH 05/63] Feature: new axis and edge selection workflow for point
and click revolve (#4939)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: implemented axis or edge selection workflow in the commandbar
* fix: removing comment
* fix: removing console logs from testing
* fix: fixing lint and tsc errors
* fix: changed copy
* A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-16-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-16-cores)
---------
Co-authored-by: github-actions[bot]
Co-authored-by: Frank Noirot
---
...-via-command-bar-1-Google-Chrome-win32.png | Bin 0 -> 42557 bytes
...-load---solid-2d-1-Google-Chrome-win32.png | Bin 0 -> 47911 bytes
src/lang/modifyAst/addRevolve.ts | 57 +++++++++---------
.../modelingCommandConfig.ts | 30 ++++++++-
src/lib/commandBarConfigs/validators.ts | 4 +-
src/machines/modelingMachine.ts | 6 +-
6 files changed, 63 insertions(+), 34 deletions(-)
create mode 100644 e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-off-to-on-via-command-bar-1-Google-Chrome-win32.png
create mode 100644 e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-win32.png
diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-off-to-on-via-command-bar-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-off-to-on-via-command-bar-1-Google-Chrome-win32.png
new file mode 100644
index 0000000000000000000000000000000000000000..872574dd8bc50d68fd38cd4acf3f12c86a7a0912
GIT binary patch
literal 42557
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
literal 0
HcmV?d00001
diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-win32.png
new file mode 100644
index 0000000000000000000000000000000000000000..313aea3c06ec752c3f20648753a27a23bb0319d5
GIT binary patch
literal 47911
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 |