Compare commits

..

1 Commits

Author SHA1 Message Date
083103144a add test
Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-05-20 11:04:53 -07:00
69 changed files with 3664 additions and 8915 deletions

View File

@ -11,8 +11,7 @@ layout: manual
circle( circle(
@sketch_or_surface: Sketch | Plane | Face, @sketch_or_surface: Sketch | Plane | Face,
center: Point2d, center: Point2d,
radius?: number(Length), radius: number(Length),
diameter?: number(Length),
tag?: tag, tag?: tag,
): Sketch ): Sketch
``` ```
@ -26,8 +25,7 @@ the provided (x, y) origin point.
|----------|------|-------------|----------| |----------|------|-------------|----------|
| `sketch_or_surface` | [`Sketch`](/docs/kcl-std/types/std-types-Sketch) or [`Plane`](/docs/kcl-std/types/std-types-Plane) or [`Face`](/docs/kcl-std/types/std-types-Face) | Sketch to extend, or plane or surface to sketch on. | Yes | | `sketch_or_surface` | [`Sketch`](/docs/kcl-std/types/std-types-Sketch) or [`Plane`](/docs/kcl-std/types/std-types-Plane) or [`Face`](/docs/kcl-std/types/std-types-Face) | Sketch to extend, or plane or surface to sketch on. | Yes |
| `center` | [`Point2d`](/docs/kcl-std/types/std-types-Point2d) | The center of the circle. | Yes | | `center` | [`Point2d`](/docs/kcl-std/types/std-types-Point2d) | The center of the circle. | Yes |
| `radius` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | The radius of the circle. Incompatible with `diameter`. | No | | `radius` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | The radius of the circle. | Yes |
| `diameter` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | The diameter of the circle. Incompatible with `radius`. | No |
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | Create a new tag which refers to this circle. | No | | [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | Create a new tag which refers to this circle. | No |
### Returns ### Returns
@ -53,7 +51,7 @@ exampleSketch = startSketchOn(XZ)
|> line(end = [0, 30]) |> line(end = [0, 30])
|> line(end = [-30, 0]) |> line(end = [-30, 0])
|> close() |> close()
|> subtract2d(tool = circle(center = [0, 15], diameter = 10)) |> subtract2d(tool = circle(center = [0, 15], radius = 5))
example = extrude(exampleSketch, length = 5) example = extrude(exampleSketch, length = 5)
``` ```

View File

@ -45,16 +45,15 @@ test.describe('Command bar tests', () => {
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
commandName: 'Extrude', commandName: 'Extrude',
currentArgKey: 'sketches', currentArgKey: 'length',
currentArgValue: '', currentArgValue: '5',
headerArguments: { headerArguments: {
Profiles: '', Profiles: '1 profile',
Length: '', Length: '',
}, },
highlightedHeaderArg: 'Profiles', highlightedHeaderArg: 'length',
}) })
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'review', stage: 'review',
commandName: 'Extrude', commandName: 'Extrude',

View File

@ -1134,7 +1134,6 @@ sketch001 = startSketchOn(XZ)
// Wait for the selection to register (TODO: we need a definitive way to wait for this) // Wait for the selection to register (TODO: we need a definitive way to wait for this)
await page.waitForTimeout(200) await page.waitForTimeout(200)
await toolbar.extrudeButton.click() await toolbar.extrudeButton.click()
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
currentArgKey: 'length', currentArgKey: 'length',
@ -1356,7 +1355,9 @@ sketch001 = startSketchOn(XZ)
const u = await getUtils(page) const u = await getUtils(page)
const projectLink = page.getByRole('link', { name: 'cube' }) const projectLink = page.getByRole('link', { name: 'cube' })
const gizmo = page.locator('[aria-label*=gizmo]') const gizmo = page.locator('[aria-label*=gizmo]')
const resetCameraButton = page.getByRole('button', { name: 'Reset view' }) const resetCameraButton = page.getByRole('button', {
name: 'Reset view',
})
const locationToHaveColor = async ( const locationToHaveColor = async (
position: { x: number; y: number }, position: { x: number; y: number },
color: [number, number, number] color: [number, number, number]

View File

@ -74,15 +74,6 @@ test.describe('Point-and-click tests', () => {
await test.step('do extrude flow and check extrude code is added to editor', async () => { await test.step('do extrude flow and check extrude code is added to editor', async () => {
await toolbar.extrudeButton.click() await toolbar.extrudeButton.click()
await cmdBar.expectState({
stage: 'arguments',
currentArgKey: 'sketches',
currentArgValue: '',
headerArguments: { Profiles: '', Length: '' },
highlightedHeaderArg: 'Profiles',
commandName: 'Extrude',
})
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
currentArgKey: 'length', currentArgKey: 'length',
@ -1654,15 +1645,6 @@ sketch002 = startSketchOn(plane001)
await test.step(`Go through the command bar flow with preselected sketches`, async () => { await test.step(`Go through the command bar flow with preselected sketches`, async () => {
await toolbar.loftButton.click() await toolbar.loftButton.click()
await cmdBar.expectState({
stage: 'arguments',
currentArgKey: 'sketches',
currentArgValue: '',
headerArguments: { Profiles: '' },
highlightedHeaderArg: 'Profiles',
commandName: 'Loft',
})
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'review', stage: 'review',
headerArguments: { Profiles: '2 profiles' }, headerArguments: { Profiles: '2 profiles' },
@ -2110,18 +2092,6 @@ extrude001 = extrude(sketch001, length = -12)
await test.step(`Apply fillet to the preselected edge`, async () => { await test.step(`Apply fillet to the preselected edge`, async () => {
await page.waitForTimeout(100) await page.waitForTimeout(100)
await toolbar.filletButton.click() await toolbar.filletButton.click()
await cmdBar.expectState({
commandName: 'Fillet',
highlightedHeaderArg: 'selection',
currentArgKey: 'selection',
currentArgValue: '',
headerArguments: {
Selection: '',
Radius: '',
},
stage: 'arguments',
})
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
commandName: 'Fillet', commandName: 'Fillet',
highlightedHeaderArg: 'radius', highlightedHeaderArg: 'radius',
@ -2651,18 +2621,6 @@ extrude001 = extrude(profile001, length = 5)
await test.step(`Apply fillet`, async () => { await test.step(`Apply fillet`, async () => {
await page.waitForTimeout(100) await page.waitForTimeout(100)
await toolbar.filletButton.click() await toolbar.filletButton.click()
await cmdBar.expectState({
commandName: 'Fillet',
highlightedHeaderArg: 'selection',
currentArgKey: 'selection',
currentArgValue: '',
headerArguments: {
Selection: '',
Radius: '',
},
stage: 'arguments',
})
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
commandName: 'Fillet', commandName: 'Fillet',
highlightedHeaderArg: 'radius', highlightedHeaderArg: 'radius',
@ -2768,19 +2726,6 @@ extrude001 = extrude(sketch001, length = -12)
await test.step(`Apply chamfer to the preselected edge`, async () => { await test.step(`Apply chamfer to the preselected edge`, async () => {
await page.waitForTimeout(100) await page.waitForTimeout(100)
await toolbar.chamferButton.click() await toolbar.chamferButton.click()
await cmdBar.expectState({
commandName: 'Chamfer',
highlightedHeaderArg: 'selection',
currentArgKey: 'selection',
currentArgValue: '',
headerArguments: {
Selection: '',
Length: '',
},
stage: 'arguments',
})
await cmdBar.progressCmdBar()
await page.waitForTimeout(1000)
await cmdBar.expectState({ await cmdBar.expectState({
commandName: 'Chamfer', commandName: 'Chamfer',
highlightedHeaderArg: 'length', highlightedHeaderArg: 'length',
@ -3264,8 +3209,6 @@ extrude001 = extrude(sketch001, length = 30)
await test.step(`Go through the command bar flow with a preselected face (cap)`, async () => { await test.step(`Go through the command bar flow with a preselected face (cap)`, async () => {
await toolbar.shellButton.click() await toolbar.shellButton.click()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await page.waitForTimeout(500)
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'review', stage: 'review',
headerArguments: { headerArguments: {
@ -3699,12 +3642,13 @@ tag=$rectangleSegmentC002,
// revolve // revolve
await editor.scrollToText(codeToSelection) await editor.scrollToText(codeToSelection)
await page.getByText(codeToSelection).click() await page.getByText(codeToSelection).click()
// Wait for the selection to register (TODO: we need a definitive way to wait for this)
await page.waitForTimeout(200)
await toolbar.revolveButton.click() await toolbar.revolveButton.click()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar()
const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = X)` const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = X)`
expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy()
@ -4633,18 +4577,6 @@ path001 = startProfile(sketch001, at = [0, 0])
await test.step('Go through command bar flow', async () => { await test.step('Go through command bar flow', async () => {
await toolbar.extrudeButton.click() await toolbar.extrudeButton.click()
await cmdBar.expectState({
stage: 'arguments',
currentArgKey: 'sketches',
currentArgValue: '',
headerArguments: {
Profiles: '',
Length: '',
},
highlightedHeaderArg: 'Profiles',
commandName: 'Extrude',
})
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
currentArgKey: 'length', currentArgKey: 'length',
@ -4727,19 +4659,6 @@ path001 = startProfile(sketch001, at = [0, 0])
await test.step('Go through command bar flow', async () => { await test.step('Go through command bar flow', async () => {
await toolbar.sweepButton.click() await toolbar.sweepButton.click()
await cmdBar.expectState({
stage: 'arguments',
currentArgKey: 'sketches',
currentArgValue: '',
headerArguments: {
Profiles: '',
Path: '',
Sectional: '',
},
highlightedHeaderArg: 'Profiles',
commandName: 'Sweep',
})
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
currentArgKey: 'path', currentArgKey: 'path',
@ -4824,19 +4743,6 @@ path001 = startProfile(sketch001, at = [0, 0])
await test.step('Go through command bar flow', async () => { await test.step('Go through command bar flow', async () => {
await toolbar.closePane('code') await toolbar.closePane('code')
await toolbar.revolveButton.click() await toolbar.revolveButton.click()
await cmdBar.expectState({
stage: 'arguments',
currentArgKey: 'sketches',
currentArgValue: '',
headerArguments: {
Profiles: '',
AxisOrEdge: '',
Angle: '',
},
highlightedHeaderArg: 'Profiles',
commandName: 'Revolve',
})
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
currentArgKey: 'axisOrEdge', currentArgKey: 'axisOrEdge',

View File

@ -11,7 +11,6 @@ import {
getPlaywrightDownloadDir, getPlaywrightDownloadDir,
getUtils, getUtils,
isOutOfViewInScrollContainer, isOutOfViewInScrollContainer,
runningOnWindows,
} from '@e2e/playwright/test-utils' } from '@e2e/playwright/test-utils'
import { expect, test } from '@e2e/playwright/zoo-test' import { expect, test } from '@e2e/playwright/zoo-test'
@ -1980,6 +1979,7 @@ test(
} }
) )
// Flaky
test( test(
'Original project name persist after onboarding', 'Original project name persist after onboarding',
{ tag: '@electron' }, { tag: '@electron' },
@ -2066,9 +2066,13 @@ test(
) )
test( test(
'import from nested directory', 'nested dir import works on windows',
{ tag: ['@electron', '@windows', '@macos'] }, { tag: ['@electron', '@windows'] },
async ({ scene, cmdBar, context, page }) => { async ({ scene, cmdBar, context, page }, testInfo) => {
// Skip if on non-windows
if (process.platform !== 'win32') {
test.skip()
}
await context.folderSetupFn(async (dir) => { await context.folderSetupFn(async (dir) => {
const bracketDir = path.join(dir, 'bracket') const bracketDir = path.join(dir, 'bracket')
await fsp.mkdir(bracketDir, { recursive: true }) await fsp.mkdir(bracketDir, { recursive: true })
@ -2081,9 +2085,9 @@ test(
) )
await fsp.writeFile( await fsp.writeFile(
path.join(bracketDir, 'main.kcl'), path.join(bracketDir, 'main.kcl'),
runningOnWindows() `import 'nested\\main.kcl' as thing
? `import 'nested\\main.kcl' as thing\n\nthing`
: `import 'nested/main.kcl' as thing\n\nthing` thing`
) )
}) })

View File

@ -1016,7 +1016,6 @@ profile001 = startProfile(sketch001, at = [${roundOff(scale * 69.6)}, ${roundOff
// sketch selection should already have been made. // sketch selection should already have been made.
// otherwise the cmdbar would be waiting for a selection. // otherwise the cmdbar would be waiting for a selection.
await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
currentArgKey: 'length', currentArgKey: 'length',

View File

@ -103,8 +103,6 @@ test.describe('Testing loading external models', () => {
file: 'ball-bearing' + FILE_EXT, file: 'ball-bearing' + FILE_EXT,
title: 'Ball Bearing', title: 'Ball Bearing',
file1: 'ball-bearing-1' + FILE_EXT, file1: 'ball-bearing-1' + FILE_EXT,
folderName: 'ball-bearing',
folderName1: 'ball-bearing-1',
} }
const projectCard = page.getByRole('link', { name: 'bracket' }) const projectCard = page.getByRole('link', { name: 'bracket' })
const overwriteWarning = page.getByText( const overwriteWarning = page.getByText(
@ -156,10 +154,8 @@ test.describe('Testing loading external models', () => {
await test.step(`Ensure we made and opened a new file`, async () => { await test.step(`Ensure we made and opened a new file`, async () => {
await editor.expectEditor.toContain('// ' + sampleOne.title) await editor.expectEditor.toContain('// ' + sampleOne.title)
await expect( await expect(newlyCreatedFile(sampleOne.file)).toBeVisible()
page.getByTestId('file-tree-item').getByText(sampleOne.folderName) await expect(projectMenuButton).toContainText(sampleOne.file)
).toBeVisible()
await expect(projectMenuButton).toContainText('main.kcl')
}) })
await test.step(`Load a KCL sample with the command palette`, async () => { await test.step(`Load a KCL sample with the command palette`, async () => {
@ -173,10 +169,8 @@ test.describe('Testing loading external models', () => {
await test.step(`Ensure we made and opened a new file with a unique name`, async () => { await test.step(`Ensure we made and opened a new file with a unique name`, async () => {
await editor.expectEditor.toContain('// ' + sampleOne.title) await editor.expectEditor.toContain('// ' + sampleOne.title)
await expect( await expect(newlyCreatedFile(sampleOne.file1)).toBeVisible()
page.getByTestId('file-tree-item').getByText(sampleOne.folderName1) await expect(projectMenuButton).toContainText(sampleOne.file1)
).toBeVisible()
await expect(projectMenuButton).toContainText('main.kcl')
}) })
} }
) )

View File

@ -984,12 +984,12 @@ test.describe('Mocked Text-to-CAD API tests', { tag: ['@skipWin'] }, () => {
) )
await expect(page.getByTestId('app-header-file-name')).toBeVisible() await expect(page.getByTestId('app-header-file-name')).toBeVisible()
await expect(page.getByTestId('app-header-file-name')).toContainText( await expect(page.getByTestId('app-header-file-name')).toContainText(
'main.kcl' '2x2x2-cube.kcl'
) )
await u.openFilePanel() await u.openFilePanel()
await expect( await expect(
page.getByTestId('file-tree-item').getByText('2x2x2-cube') page.getByTestId('file-tree-item').getByText('2x2x2-cube.kcl')
).toBeVisible() ).toBeVisible()
} }
) )
@ -1184,13 +1184,13 @@ test.describe('Mocked Text-to-CAD API tests', { tag: ['@skipWin'] }, () => {
) )
await expect(page.getByTestId('app-header-file-name')).toBeVisible() await expect(page.getByTestId('app-header-file-name')).toBeVisible()
await expect(page.getByTestId('app-header-file-name')).toContainText( await expect(page.getByTestId('app-header-file-name')).toContainText(
'main.kcl' '2x2x2-cube.kcl'
) )
// Check file is created // Check file is created
await u.openFilePanel() await u.openFilePanel()
await expect( await expect(
page.getByTestId('file-tree-item').getByText('2x2x2-cube') page.getByTestId('file-tree-item').getByText('2x2x2-cube.kcl')
).toBeVisible() ).toBeVisible()
} }
) )
@ -1476,13 +1476,13 @@ test.describe('Mocked Text-to-CAD API tests', { tag: ['@skipWin'] }, () => {
) )
await expect(page.getByTestId('app-header-file-name')).toBeVisible() await expect(page.getByTestId('app-header-file-name')).toBeVisible()
await expect(page.getByTestId('app-header-file-name')).toContainText( await expect(page.getByTestId('app-header-file-name')).toContainText(
'main.kcl' '2x2x2-cube.kcl'
) )
// Check file is created // Check file is created
await u.openFilePanel() await u.openFilePanel()
await expect( await expect(
page.getByTestId('file-tree-item').getByText('2x2x2-cube') page.getByTestId('file-tree-item').getByText('2x2x2-cube.kcl')
).toBeVisible() ).toBeVisible()
await expect( await expect(
page.getByTestId('file-tree-item').getByText('main.kcl') page.getByTestId('file-tree-item').getByText('main.kcl')

View File

@ -573,7 +573,6 @@ profile001 = startProfile(sketch002, at = [-12.34, 12.34])
await expect(page.getByTestId('command-bar')).toBeVisible() await expect(page.getByTestId('command-bar')).toBeVisible()
await page.waitForTimeout(100) await page.waitForTimeout(100)
await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await expect(page.getByText('Confirm Extrude')).toBeVisible() await expect(page.getByText('Confirm Extrude')).toBeVisible()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()

View File

@ -33,9 +33,14 @@ stemLoftProfile2 = startSketchOn(offsetPlane(XY, offset = 75))
// Draw the third profile for the lofted femur // Draw the third profile for the lofted femur
p3Z = 110 p3Z = 110
p3A = 25 p3A = 25
plane003 = {
origin = [0, 0.0, p3Z],
xAxis = [cos(p3A), 0, sin(p3A)],
yAxis = [0.0, 1.0, 0.0]
}
l3 = 32 l3 = 32
r3 = 4 r3 = 4
stemLoftProfile3 = startSketchOn(XY) stemLoftProfile3 = startSketchOn(plane003)
|> startProfile(at = [-15.5, -l3 / 2]) |> startProfile(at = [-15.5, -l3 / 2])
|> yLine(length = l3, tag = $seg03) |> yLine(length = l3, tag = $seg03)
|> tangentialArc(angle = -120, radius = r3) |> tangentialArc(angle = -120, radius = r3)
@ -44,14 +49,18 @@ stemLoftProfile3 = startSketchOn(XY)
|> angledLine(angle = 30, length = -segLen(seg03)) |> angledLine(angle = 30, length = -segLen(seg03))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p3Z)
|> rotate(pitch = -p3A)
// Draw the fourth profile for the lofted femur // Draw the fourth profile for the lofted femur
p4Z = 130 p4Z = 130
p4A = 36.5 p4A = 36.5
plane004 = {
origin = [0, 0.0, p4Z],
xAxis = [cos(p4A), 0, sin(p4A)],
yAxis = [0.0, 1.0, 0.0]
}
l4 = 16 l4 = 16
r4 = 5 r4 = 5
stemLoftProfile4 = startSketchOn(XY) stemLoftProfile4 = startSketchOn(plane004)
|> startProfile(at = [-23, -l4 / 2]) |> startProfile(at = [-23, -l4 / 2])
|> yLine(length = l4, tag = $seg04) |> yLine(length = l4, tag = $seg04)
|> tangentialArc(angle = -120, radius = r4) |> tangentialArc(angle = -120, radius = r4)
@ -60,14 +69,18 @@ stemLoftProfile4 = startSketchOn(XY)
|> angledLine(angle = 30, length = -segLen(seg04)) |> angledLine(angle = 30, length = -segLen(seg04))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p4Z)
|> rotate(pitch = -p4A)
// Draw the first profile for the femoral stem // Draw the first profile for the femoral stem
p5Z = 140 p5Z = 140
p5A = 36.5 p5A = 36.5
plane005 = {
origin = [0, 0.0, p5Z],
xAxis = [cos(p5A), 0, sin(p5A)],
yAxis = [0.0, 1.0, 0.0]
}
l5 = 1.6 l5 = 1.6
r5 = 1.6 r5 = 1.6
stemLoftProfile5 = startSketchOn(XY) stemLoftProfile5 = startSketchOn(plane005)
|> startProfile(at = [-19.5, -l5 / 2]) |> startProfile(at = [-19.5, -l5 / 2])
|> yLine(length = l5, tag = $seg05) |> yLine(length = l5, tag = $seg05)
|> tangentialArc(angle = -120, radius = r5) |> tangentialArc(angle = -120, radius = r5)
@ -76,14 +89,18 @@ stemLoftProfile5 = startSketchOn(XY)
|> angledLine(angle = 30, length = -segLen(seg05)) |> angledLine(angle = 30, length = -segLen(seg05))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p5Z)
|> rotate(pitch = -p5A)
// Draw the second profile for the femoral stem // Draw the second profile for the femoral stem
p6Z = 145 p6Z = 145
p6A = 36.5 p6A = 36.5
plane006 = {
origin = [0, 0.0, p6Z],
xAxis = [cos(p6A), 0, sin(p6A)],
yAxis = [0.0, 1.0, 0.0]
}
l6 = 1 l6 = 1
r6 = 3 r6 = 3
stemLoftProfile6 = startSketchOn(XY) stemLoftProfile6 = startSketchOn(plane006)
|> startProfile(at = [-23.4, -l6 / 2]) |> startProfile(at = [-23.4, -l6 / 2])
|> yLine(length = l6, tag = $seg06) |> yLine(length = l6, tag = $seg06)
|> tangentialArc(angle = -120, radius = r6) |> tangentialArc(angle = -120, radius = r6)
@ -92,24 +109,27 @@ stemLoftProfile6 = startSketchOn(XY)
|> angledLine(angle = 30, length = -segLen(seg06)) |> angledLine(angle = 30, length = -segLen(seg06))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p6Z)
|> rotate(pitch = -p6A) // Draw the third profile for the femoral stem
stemTab = clone(stemLoftProfile6)
|> extrude(%, length = 6)
// Loft the femur using all profiles in sequence // Loft the femur using all profiles in sequence
femur = loft([ femur = loft([
stemLoftProfile1, stemLoftProfile1,
stemLoftProfile2, stemLoftProfile2,
stemLoftProfile3, stemLoftProfile3,
stemLoftProfile4 stemLoftProfile4
]) ])
// Loft the femoral stem // Loft the femoral stem
femoralStem = loft([ femoralStem = loft([
clone(stemLoftProfile4), clone(stemLoftProfile4),
stemLoftProfile5, stemLoftProfile5,
clone(stemLoftProfile6) stemLoftProfile6
]) ])
// Draw the third profile for the femoral stem
stemTab = stemLoftProfile6
|> extrude(length = 6)
// Revolve a hollow socket to represent the femoral head // Revolve a hollow socket to represent the femoral head
femoralHead = startSketchOn(XZ) femoralHead = startSketchOn(XZ)
|> startProfile(at = [4, 0]) |> startProfile(at = [4, 0])

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
public/kcma-logomark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

46
public/kcma-logomark.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

13
public/zma-logomark.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -631,8 +631,6 @@ impl FnData {
return "clone(${0:part001})".to_owned(); return "clone(${0:part001})".to_owned();
} else if self.name == "hole" { } else if self.name == "hole" {
return "hole(${0:holeSketch}, ${1:%})".to_owned(); return "hole(${0:holeSketch}, ${1:%})".to_owned();
} else if self.name == "circle" {
return "circle(center = [${0:3.14}, ${1:3.14}], diameter = ${2:3.14})".to_owned();
} }
let mut args = Vec::new(); let mut args = Vec::new();
let mut index = 0; let mut index = 0;

View File

@ -1018,7 +1018,7 @@ mod tests {
let snippet = circle_fn.to_autocomplete_snippet(); let snippet = circle_fn.to_autocomplete_snippet();
assert_eq!( assert_eq!(
snippet, snippet,
r#"circle(center = [${0:3.14}, ${1:3.14}], diameter = ${2:3.14})"# r#"circle(center = [${0:3.14}, ${1:3.14}], radius = ${2:3.14})"#
); );
} }

View File

@ -3360,29 +3360,8 @@ mod nested_windows_main_kcl {
super::execute(TEST_NAME, true).await super::execute(TEST_NAME, true).await
} }
} }
mod subtract_regression11 { mod nested_assembly {
const TEST_NAME: &str = "subtract_regression11"; const TEST_NAME: &str = "nested_assembly";
/// Test parsing KCL.
#[test]
fn parse() {
super::parse(TEST_NAME)
}
/// Test that parsing and unparsing KCL produces the original KCL input.
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
/// Test that KCL is executed correctly.
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression12 {
const TEST_NAME: &str = "subtract_regression12";
/// Test parsing KCL. /// Test parsing KCL.
#[test] #[test]

View File

@ -44,11 +44,10 @@ pub enum SketchOrSurface {
pub async fn circle(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn circle(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let sketch_or_surface = args.get_unlabeled_kw_arg("sketchOrSurface")?; let sketch_or_surface = args.get_unlabeled_kw_arg("sketchOrSurface")?;
let center = args.get_kw_arg_typed("center", &RuntimeType::point2d(), exec_state)?; let center = args.get_kw_arg_typed("center", &RuntimeType::point2d(), exec_state)?;
let radius: Option<TyF64> = args.get_kw_arg_opt_typed("radius", &RuntimeType::length(), exec_state)?; let radius: TyF64 = args.get_kw_arg_typed("radius", &RuntimeType::length(), exec_state)?;
let diameter: Option<TyF64> = args.get_kw_arg_opt_typed("diameter", &RuntimeType::length(), exec_state)?;
let tag = args.get_kw_arg_opt(NEW_TAG_KW)?; let tag = args.get_kw_arg_opt(NEW_TAG_KW)?;
let sketch = inner_circle(sketch_or_surface, center, radius, diameter, tag, exec_state, args).await?; let sketch = inner_circle(sketch_or_surface, center, radius, tag, exec_state, args).await?;
Ok(KclValue::Sketch { Ok(KclValue::Sketch {
value: Box::new(sketch), value: Box::new(sketch),
}) })
@ -57,8 +56,7 @@ pub async fn circle(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
async fn inner_circle( async fn inner_circle(
sketch_or_surface: SketchOrSurface, sketch_or_surface: SketchOrSurface,
center: [TyF64; 2], center: [TyF64; 2],
radius: Option<TyF64>, radius: TyF64,
diameter: Option<TyF64>,
tag: Option<TagNode>, tag: Option<TagNode>,
exec_state: &mut ExecState, exec_state: &mut ExecState,
args: Args, args: Args,
@ -70,25 +68,6 @@ async fn inner_circle(
let (center_u, ty) = untype_point(center.clone()); let (center_u, ty) = untype_point(center.clone());
let units = ty.expect_length(); let units = ty.expect_length();
let radius = match (radius, diameter) {
(Some(radius), None) => radius,
(None, Some(mut diameter)) => {
diameter.n /= 2.0;
diameter
}
(None, None) => {
return Err(KclError::Type(KclErrorDetails::new(
"This function needs either `diameter` or `radius`".to_string(),
vec![args.source_range],
)))
}
(Some(_), Some(_)) => {
return Err(KclError::Type(KclErrorDetails::new(
"You cannot specify both `diameter` and `radius`, please remove one".to_string(),
vec![args.source_range],
)))
}
};
let from = [center_u[0] + radius.to_length_units(units), center_u[1]]; let from = [center_u[0] + radius.to_length_units(units), center_u[1]];
let from_t = [TyF64::new(from[0], ty.clone()), TyF64::new(from[1], ty)]; let from_t = [TyF64::new(from[0], ty.clone()), TyF64::new(from[1], ty)];

View File

@ -24,7 +24,7 @@
/// |> line(end = [0, 30]) /// |> line(end = [0, 30])
/// |> line(end = [-30, 0]) /// |> line(end = [-30, 0])
/// |> close() /// |> close()
/// |> subtract2d(tool = circle(center = [0, 15], diameter = 10)) /// |> subtract2d(tool = circle(center = [0, 15], radius = 5))
/// ///
/// example = extrude(exampleSketch, length = 5) /// example = extrude(exampleSketch, length = 5)
/// ``` /// ```
@ -34,10 +34,8 @@ export fn circle(
@sketch_or_surface: Sketch | Plane | Face, @sketch_or_surface: Sketch | Plane | Face,
/// The center of the circle. /// The center of the circle.
center: Point2d, center: Point2d,
/// The radius of the circle. Incompatible with `diameter`. /// The radius of the circle.
radius?: number(Length), radius: number(Length),
/// The diameter of the circle. Incompatible with `radius`.
diameter?: number(Length),
/// Create a new tag which refers to this circle. /// Create a new tag which refers to this circle.
tag?: tag, tag?: tag,
): Sketch {} ): Sketch {}

View File

@ -185,20 +185,21 @@ flowchart LR
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
86["Cap Start"] 86["Cap Start"]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
87["Cap End"] 87["Cap Start"]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
88["Cap End"] 88["Cap End"]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
89["Cap End"] 89["Cap End"]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
90["SweepEdge Opposite"] 90["Cap End"]
%% face_code_ref=Missing NodePath
91["SweepEdge Opposite"] 91["SweepEdge Opposite"]
92["SweepEdge Opposite"] 92["SweepEdge Opposite"]
93["SweepEdge Opposite"] 93["SweepEdge Opposite"]
94["SweepEdge Opposite"] 94["SweepEdge Opposite"]
95["SweepEdge Opposite"] 95["SweepEdge Opposite"]
96["SweepEdge Opposite"] 96["SweepEdge Opposite"]
97["SweepEdge Adjacent"] 97["SweepEdge Opposite"]
98["SweepEdge Adjacent"] 98["SweepEdge Adjacent"]
99["SweepEdge Adjacent"] 99["SweepEdge Adjacent"]
100["SweepEdge Adjacent"] 100["SweepEdge Adjacent"]
@ -213,14 +214,15 @@ flowchart LR
109["SweepEdge Adjacent"] 109["SweepEdge Adjacent"]
110["SweepEdge Adjacent"] 110["SweepEdge Adjacent"]
111["SweepEdge Adjacent"] 111["SweepEdge Adjacent"]
112["EdgeCut Fillet<br>[2999, 3289, 0]"] 112["SweepEdge Adjacent"]
%% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
113["EdgeCut Fillet<br>[2999, 3289, 0]"] 113["EdgeCut Fillet<br>[2999, 3289, 0]"]
%% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
114["EdgeCut Fillet<br>[2999, 3289, 0]"] 114["EdgeCut Fillet<br>[2999, 3289, 0]"]
%% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
115["EdgeCut Fillet<br>[2999, 3289, 0]"] 115["EdgeCut Fillet<br>[2999, 3289, 0]"]
%% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
116["EdgeCut Fillet<br>[2999, 3289, 0]"]
%% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
1 --- 8 1 --- 8
1 --- 9 1 --- 9
1 --- 13 1 --- 13
@ -281,84 +283,84 @@ flowchart LR
20 ---- 64 20 ---- 64
82 --- 20 82 --- 20
27 --- 83 27 --- 83
27 x--> 86 27 x--> 87
27 --- 96 27 --- 97
27 --- 111 27 --- 112
28 --- 68 28 --- 68
28 x--> 85 28 x--> 85
28 --- 90 28 --- 91
28 --- 97 28 --- 98
31 --- 70 31 --- 70
31 x--> 84 31 x--> 84
31 --- 94 31 --- 95
31 --- 101 31 --- 102
32 --- 71 32 --- 71
32 x--> 84 32 x--> 84
32 --- 93 32 --- 94
32 --- 100 32 --- 101
33 --- 69 33 --- 69
33 x--> 84 33 x--> 84
33 --- 92 33 --- 93
33 --- 99 33 --- 100
34 --- 72 34 --- 72
34 x--> 84 34 x--> 84
34 --- 91 34 --- 92
34 --- 98 34 --- 99
62 <--x 36 62 <--x 36
36 --- 78 36 --- 78
36 x--> 103 36 x--> 104
62 <--x 37 62 <--x 37
37 --- 77 37 --- 77
37 --- 103 37 --- 104
62 <--x 38 62 <--x 38
38 --- 82 38 --- 82
38 --- 104 38 --- 105
62 <--x 39 62 <--x 39
39 --- 79 39 --- 79
39 --- 105 39 --- 106
62 <--x 40 62 <--x 40
40 --- 74 40 --- 74
40 --- 106 40 --- 107
62 <--x 41 62 <--x 41
41 --- 81 41 --- 81
41 --- 107 41 --- 108
62 <--x 42 62 <--x 42
42 --- 76 42 --- 76
42 --- 108 42 --- 109
62 <--x 43 62 <--x 43
43 --- 75 43 --- 75
43 --- 109 43 --- 110
62 <--x 44 62 <--x 44
44 --- 80 44 --- 80
44 --- 110 44 --- 111
45 --- 73 45 --- 73
45 x--> 82 45 x--> 82
45 --- 95 45 --- 96
45 --- 102 45 --- 103
59 --- 68 59 --- 68
59 --- 85 59 --- 85
59 --- 88 59 --- 89
59 --- 90 59 --- 91
59 --- 97 59 --- 98
60 --- 83 60 --- 83
60 --- 86 60 --- 87
60 --- 89 60 --- 90
60 --- 96 60 --- 97
60 --- 111 60 --- 112
61 --- 69 61 --- 69
61 --- 70 61 --- 70
61 --- 71 61 --- 71
61 --- 72 61 --- 72
61 --- 84 61 --- 84
61 --- 87 61 --- 88
61 --- 91
61 --- 92 61 --- 92
61 --- 93 61 --- 93
61 --- 94 61 --- 94
61 --- 98 61 --- 95
61 --- 99 61 --- 99
61 --- 100 61 --- 100
61 --- 101 61 --- 101
61 --- 102
62 --- 74 62 --- 74
62 --- 75 62 --- 75
62 --- 76 62 --- 76
@ -368,7 +370,6 @@ flowchart LR
62 --- 80 62 --- 80
62 --- 81 62 --- 81
62 --- 82 62 --- 82
62 --- 103
62 --- 104 62 --- 104
62 --- 105 62 --- 105
62 --- 106 62 --- 106
@ -376,52 +377,54 @@ flowchart LR
62 --- 108 62 --- 108
62 --- 109 62 --- 109
62 --- 110 62 --- 110
62 --- 111
64 --- 73 64 --- 73
64 --- 95 64 --- 86
64 --- 102 64 --- 96
68 --- 90 64 --- 103
68 --- 97 68 --- 91
69 --- 92 68 --- 98
69 --- 99 69 --- 93
100 <--x 69 69 --- 100
70 --- 94 101 <--x 69
98 <--x 70 70 --- 95
70 --- 101 99 <--x 70
71 --- 93 70 --- 102
71 --- 100 71 --- 94
101 <--x 71 71 --- 101
72 --- 91 102 <--x 71
72 --- 98 72 --- 92
99 <--x 72 72 --- 99
73 --- 95 100 <--x 72
73 --- 102 73 --- 96
95 <--x 74 73 --- 103
105 <--x 74 106 <--x 74
74 --- 106 74 --- 107
108 <--x 75 109 <--x 75
75 --- 109 75 --- 110
107 <--x 76 108 <--x 76
76 --- 108 76 --- 109
77 --- 103 77 --- 104
78 --- 103 78 --- 104
110 <--x 78 111 <--x 78
104 <--x 79 105 <--x 79
79 --- 105 79 --- 106
109 <--x 80 110 <--x 80
80 --- 110 80 --- 111
106 <--x 81 107 <--x 81
81 --- 107 81 --- 108
82 --- 104 82 --- 105
83 --- 96 83 --- 97
83 --- 111 83 --- 112
91 <--x 87 96 <--x 86
92 <--x 87 92 <--x 88
93 <--x 87 93 <--x 88
94 <--x 87 94 <--x 88
90 <--x 88 95 <--x 88
96 <--x 89 91 <--x 89
98 <--x 113 97 <--x 90
99 <--x 112 99 <--x 114
100 <--x 115 100 <--x 113
101 <--x 114 101 <--x 116
102 <--x 115
``` ```

View File

@ -1172,7 +1172,7 @@ description: Variables in memory after executing brake-rotor.kcl
} }
}, },
"height": -7.0, "height": -7.0,
"startCapId": null, "startCapId": "[uuid]",
"endCapId": null, "endCapId": null,
"units": { "units": {
"type": "Mm" "type": "Mm"
@ -1606,7 +1606,7 @@ description: Variables in memory after executing brake-rotor.kcl
} }
}, },
"height": -7.0, "height": -7.0,
"startCapId": null, "startCapId": "[uuid]",
"endCapId": null, "endCapId": null,
"units": { "units": {
"type": "Mm" "type": "Mm"
@ -2040,7 +2040,7 @@ description: Variables in memory after executing brake-rotor.kcl
} }
}, },
"height": -7.0, "height": -7.0,
"startCapId": null, "startCapId": "[uuid]",
"endCapId": null, "endCapId": null,
"units": { "units": {
"type": "Mm" "type": "Mm"
@ -2474,7 +2474,7 @@ description: Variables in memory after executing brake-rotor.kcl
} }
}, },
"height": -7.0, "height": -7.0,
"startCapId": null, "startCapId": "[uuid]",
"endCapId": null, "endCapId": null,
"units": { "units": {
"type": "Mm" "type": "Mm"
@ -2908,7 +2908,7 @@ description: Variables in memory after executing brake-rotor.kcl
} }
}, },
"height": -7.0, "height": -7.0,
"startCapId": null, "startCapId": "[uuid]",
"endCapId": null, "endCapId": null,
"units": { "units": {
"type": "Mm" "type": "Mm"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -412,12 +412,12 @@ description: Artifact commands prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 110.0
}, },
"x_axis": { "x_axis": {
"x": 1.0, "x": 0.9063,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 0.4226
}, },
"y_axis": { "y_axis": {
"x": 0.0, "x": 0.0,
@ -439,9 +439,9 @@ description: Artifact commands prosthetic-hip.kcl
"animated": false, "animated": false,
"adjust_camera": false, "adjust_camera": false,
"planar_normal": { "planar_normal": {
"x": 0.0, "x": -0.4226,
"y": 0.0, "y": 0.0,
"z": 1.0 "z": 0.9063
} }
} }
}, },
@ -458,6 +458,15 @@ description: Artifact commands prosthetic-hip.kcl
} }
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -580,54 +589,6 @@ description: Artifact commands prosthetic-hip.kcl
"path_id": "[uuid]" "path_id": "[uuid]"
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": {
"property": {
"x": 0.0,
"y": 0.0,
"z": 110.0
},
"set": false,
"is_local": true
},
"rotate_rpy": null,
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": null,
"rotate_rpy": {
"property": {
"x": 0.0,
"y": -25.0,
"z": 0.0
},
"set": false,
"is_local": true
},
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -636,12 +597,12 @@ description: Artifact commands prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 130.0
}, },
"x_axis": { "x_axis": {
"x": 1.0, "x": 0.8039,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 0.5948
}, },
"y_axis": { "y_axis": {
"x": 0.0, "x": 0.0,
@ -663,9 +624,9 @@ description: Artifact commands prosthetic-hip.kcl
"animated": false, "animated": false,
"adjust_camera": false, "adjust_camera": false,
"planar_normal": { "planar_normal": {
"x": 0.0, "x": -0.5948,
"y": 0.0, "y": 0.0,
"z": 1.0 "z": 0.8039
} }
} }
}, },
@ -682,6 +643,15 @@ description: Artifact commands prosthetic-hip.kcl
} }
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -804,54 +774,6 @@ description: Artifact commands prosthetic-hip.kcl
"path_id": "[uuid]" "path_id": "[uuid]"
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": {
"property": {
"x": 0.0,
"y": 0.0,
"z": 130.0
},
"set": false,
"is_local": true
},
"rotate_rpy": null,
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": null,
"rotate_rpy": {
"property": {
"x": 0.0,
"y": -36.5,
"z": 0.0
},
"set": false,
"is_local": true
},
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -860,12 +782,12 @@ description: Artifact commands prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 140.0
}, },
"x_axis": { "x_axis": {
"x": 1.0, "x": 0.8039,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 0.5948
}, },
"y_axis": { "y_axis": {
"x": 0.0, "x": 0.0,
@ -887,9 +809,9 @@ description: Artifact commands prosthetic-hip.kcl
"animated": false, "animated": false,
"adjust_camera": false, "adjust_camera": false,
"planar_normal": { "planar_normal": {
"x": 0.0, "x": -0.5948,
"y": 0.0, "y": 0.0,
"z": 1.0 "z": 0.8039
} }
} }
}, },
@ -906,6 +828,15 @@ description: Artifact commands prosthetic-hip.kcl
} }
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -1028,54 +959,6 @@ description: Artifact commands prosthetic-hip.kcl
"path_id": "[uuid]" "path_id": "[uuid]"
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": {
"property": {
"x": 0.0,
"y": 0.0,
"z": 140.0
},
"set": false,
"is_local": true
},
"rotate_rpy": null,
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": null,
"rotate_rpy": {
"property": {
"x": 0.0,
"y": -36.5,
"z": 0.0
},
"set": false,
"is_local": true
},
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -1084,12 +967,12 @@ description: Artifact commands prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 145.0
}, },
"x_axis": { "x_axis": {
"x": 1.0, "x": 0.8039,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 0.5948
}, },
"y_axis": { "y_axis": {
"x": 0.0, "x": 0.0,
@ -1111,9 +994,9 @@ description: Artifact commands prosthetic-hip.kcl
"animated": false, "animated": false,
"adjust_camera": false, "adjust_camera": false,
"planar_normal": { "planar_normal": {
"x": 0.0, "x": -0.5948,
"y": 0.0, "y": 0.0,
"z": 1.0 "z": 0.8039
} }
} }
}, },
@ -1130,6 +1013,15 @@ description: Artifact commands prosthetic-hip.kcl
} }
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -1252,163 +1144,6 @@ description: Artifact commands prosthetic-hip.kcl
"path_id": "[uuid]" "path_id": "[uuid]"
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": {
"property": {
"x": 0.0,
"y": 0.0,
"z": 145.0
},
"set": false,
"is_local": true
},
"rotate_rpy": null,
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "set_object_transform",
"object_id": "[uuid]",
"transforms": [
{
"translate": null,
"rotate_rpy": {
"property": {
"x": 0.0,
"y": -36.5,
"z": 0.0
},
"set": false,
"is_local": true
},
"rotate_angle_axis": null,
"scale": null
}
]
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "loft",
"section_ids": [
"[uuid]",
"[uuid]",
"[uuid]",
"[uuid]"
],
"v_degree": 2,
"bez_approximate_rational": false,
"base_curve_index": null,
"tolerance": 0.0000001
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "loft",
"section_ids": [
"[uuid]",
"[uuid]",
"[uuid]"
],
"v_degree": 2,
"bez_approximate_rational": false,
"base_curve_index": null,
"tolerance": 0.0000001
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "entity_clone",
"entity_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "entity_get_all_child_uuids",
"entity_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "entity_get_all_child_uuids",
"entity_id": "[uuid]"
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],
@ -1443,9 +1178,9 @@ description: Artifact commands prosthetic-hip.kcl
"animated": false, "animated": false,
"adjust_camera": false, "adjust_camera": false,
"planar_normal": { "planar_normal": {
"x": 0.0, "x": -0.5948,
"y": 0.0, "y": 0.0,
"z": 1.0 "z": 0.8039
} }
} }
}, },
@ -1493,6 +1228,115 @@ description: Artifact commands prosthetic-hip.kcl
"edge_id": "[uuid]" "edge_id": "[uuid]"
} }
}, },
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "loft",
"section_ids": [
"[uuid]",
"[uuid]",
"[uuid]",
"[uuid]"
],
"v_degree": 2,
"bez_approximate_rational": false,
"base_curve_index": null,
"tolerance": 0.0000001
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "loft",
"section_ids": [
"[uuid]",
"[uuid]",
"[uuid]"
],
"v_degree": 2,
"bez_approximate_rational": false,
"base_curve_index": null,
"tolerance": 0.0000001
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "entity_clone",
"entity_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "entity_get_all_child_uuids",
"entity_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "entity_get_all_child_uuids",
"entity_id": "[uuid]"
}
},
{ {
"cmdId": "[uuid]", "cmdId": "[uuid]",
"range": [], "range": [],

View File

@ -17,7 +17,7 @@ flowchart LR
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
26["Segment<br>[676, 683, 0]"] 26["Segment<br>[676, 683, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
79[Solid2d] 80[Solid2d]
end end
subgraph path12 [Path] subgraph path12 [Path]
12["Path<br>[816, 848, 0]"] 12["Path<br>[816, 848, 0]"]
@ -36,161 +36,161 @@ flowchart LR
%% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
33["Segment<br>[1161, 1168, 0]"] 33["Segment<br>[1161, 1168, 0]"]
%% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
85[Solid2d]
end
subgraph path13 [Path]
13["Path<br>[1293, 1328, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
34["Segment<br>[1334, 1366, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
35["Segment<br>[1372, 1412, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
36["Segment<br>[1418, 1465, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
37["Segment<br>[1471, 1511, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
38["Segment<br>[1517, 1564, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
39["Segment<br>[1570, 1635, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
40["Segment<br>[1641, 1648, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
78[Solid2d]
end
subgraph path14 [Path]
14["Path<br>[1825, 1858, 0]"]
%% [ProgramBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
41["Segment<br>[2171, 2178, 0]"]
%% [ProgramBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
80[Solid2d]
end
subgraph path15 [Path]
15["Path<br>[2357, 2392, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
42["Segment<br>[2398, 2430, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
43["Segment<br>[2436, 2476, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
44["Segment<br>[2482, 2529, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
45["Segment<br>[2535, 2575, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
46["Segment<br>[2581, 2628, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
47["Segment<br>[2634, 2699, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
48["Segment<br>[2705, 2712, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
84[Solid2d] 84[Solid2d]
end end
subgraph path16 [Path] subgraph path13 [Path]
16["Path<br>[2888, 2923, 0]"] 13["Path<br>[1401, 1436, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
49["Segment<br>[2929, 2961, 0]"] 34["Segment<br>[1442, 1474, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
50["Segment<br>[2967, 3007, 0]"] 35["Segment<br>[1480, 1520, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
51["Segment<br>[3013, 3060, 0]"] 36["Segment<br>[1526, 1573, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
52["Segment<br>[3066, 3106, 0]"] 37["Segment<br>[1579, 1619, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
53["Segment<br>[3112, 3159, 0]"] 38["Segment<br>[1625, 1672, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
54["Segment<br>[3165, 3230, 0]"] 39["Segment<br>[1678, 1743, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
55["Segment<br>[3236, 3243, 0]"] 40["Segment<br>[1749, 1756, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
77[Solid2d] 77[Solid2d]
end end
subgraph path17 [Path] subgraph path14 [Path]
17["Path<br>[3755, 3780, 0]"] 14["Path<br>[1992, 2025, 0]"]
%% [ProgramBodyItem { index: 17 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
41["Segment<br>[2338, 2345, 0]"]
%% [ProgramBodyItem { index: 17 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
85[Solid2d]
end
subgraph path15 [Path]
15["Path<br>[2583, 2618, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
42["Segment<br>[2624, 2656, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
43["Segment<br>[2662, 2702, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
44["Segment<br>[2708, 2755, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
45["Segment<br>[2761, 2801, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
46["Segment<br>[2807, 2854, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
47["Segment<br>[2860, 2925, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
48["Segment<br>[2931, 2938, 0]"]
%% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
79[Solid2d]
end
subgraph path16 [Path]
16["Path<br>[3173, 3208, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
56["Segment<br>[3786, 3805, 0]"] 49["Segment<br>[3214, 3246, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
57["Segment<br>[3811, 3848, 0]"] 50["Segment<br>[3252, 3292, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
58["Segment<br>[3854, 3891, 0]"] 51["Segment<br>[3298, 3345, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
59["Segment<br>[3897, 3915, 0]"] 52["Segment<br>[3351, 3391, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
60["Segment<br>[3921, 3959, 0]"] 53["Segment<br>[3397, 3444, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
61["Segment<br>[3965, 4030, 0]"] 54["Segment<br>[3450, 3515, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
62["Segment<br>[4036, 4043, 0]"] 55["Segment<br>[3521, 3528, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
78[Solid2d]
end
subgraph path17 [Path]
17["Path<br>[3998, 4023, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
56["Segment<br>[4029, 4048, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
57["Segment<br>[4054, 4091, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
58["Segment<br>[4097, 4134, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
59["Segment<br>[4140, 4158, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
60["Segment<br>[4164, 4202, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
61["Segment<br>[4208, 4273, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
62["Segment<br>[4279, 4286, 0]"]
%% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
81[Solid2d] 81[Solid2d]
end end
subgraph path18 [Path] subgraph path18 [Path]
18["Path<br>[4272, 4300, 0]"] 18["Path<br>[4515, 4543, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
63["Segment<br>[4306, 4325, 0]"] 63["Segment<br>[4549, 4568, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
64["Segment<br>[4331, 4349, 0]"] 64["Segment<br>[4574, 4592, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
65["Segment<br>[4355, 4396, 0]"] 65["Segment<br>[4598, 4639, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
66["Segment<br>[4402, 4423, 0]"] 66["Segment<br>[4645, 4666, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
67["Segment<br>[4429, 4449, 0]"] 67["Segment<br>[4672, 4692, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
68["Segment<br>[4455, 4520, 0]"] 68["Segment<br>[4698, 4763, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
69["Segment<br>[4526, 4533, 0]"] 69["Segment<br>[4769, 4776, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
82[Solid2d] 82[Solid2d]
end end
subgraph path19 [Path] subgraph path19 [Path]
19["Path<br>[4756, 4786, 0]"] 19["Path<br>[4999, 5029, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
70["Segment<br>[4792, 4809, 0]"] 70["Segment<br>[5035, 5052, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
71["Segment<br>[4815, 4833, 0]"] 71["Segment<br>[5058, 5076, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
72["Segment<br>[4839, 4877, 0]"] 72["Segment<br>[5082, 5120, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
73["Segment<br>[4883, 4909, 0]"] 73["Segment<br>[5126, 5152, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
74["Segment<br>[4915, 4934, 0]"] 74["Segment<br>[5158, 5177, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
75["Segment<br>[4940, 5005, 0]"] 75["Segment<br>[5183, 5248, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
76["Segment<br>[5011, 5018, 0]"] 76["Segment<br>[5254, 5261, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
83[Solid2d] 83[Solid2d]
end end
1["Plane<br>[308, 325, 0]"] 1["Plane<br>[308, 325, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
2["Plane<br>[781, 809, 0]"] 2["Plane<br>[781, 809, 0]"]
%% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg] %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg]
3["Plane<br>[1270, 1287, 0]"] 3["Plane<br>[1372, 1395, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
4["Plane<br>[1802, 1819, 0]"] 4["Plane<br>[1963, 1986, 0]"]
%% [ProgramBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 17 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
5["Plane<br>[2334, 2351, 0]"] 5["Plane<br>[2554, 2577, 0]"]
%% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
6["Plane<br>[2865, 2882, 0]"] 6["Plane<br>[3144, 3167, 0]"]
%% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
7["Plane<br>[3732, 3749, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
8["Plane<br>[4249, 4266, 0]"] 7["Plane<br>[3975, 3992, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
9["Plane<br>[4733, 4750, 0]"] 8["Plane<br>[4492, 4509, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
9["Plane<br>[4976, 4993, 0]"]
%% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
10["StartSketchOnPlane<br>[767, 810, 0]"] 10["StartSketchOnPlane<br>[767, 810, 0]"]
%% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
86["Sweep Loft<br>[3351, 3439, 0]"] 86["Sweep Extrusion<br>[3616, 3638, 0]"]
%% [ProgramBodyItem { index: 26 }, VariableDeclarationDeclaration, VariableDeclarationInit] %% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
87["Sweep Loft<br>[3479, 3561, 0]"] 87["Sweep Loft<br>[3698, 3786, 0]"]
%% [ProgramBodyItem { index: 27 }, VariableDeclarationDeclaration, VariableDeclarationInit] %% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit]
88["Sweep Extrusion<br>[3641, 3660, 0]"] 88["Sweep Loft<br>[3827, 3902, 0]"]
%% [ProgramBodyItem { index: 28 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 32 }, VariableDeclarationDeclaration, VariableDeclarationInit]
89["Sweep Revolve<br>[4049, 4079, 0]"] 89["Sweep Revolve<br>[4292, 4322, 0]"]
%% [ProgramBodyItem { index: 29 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] %% [ProgramBodyItem { index: 33 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }]
90["Sweep Revolve<br>[4539, 4569, 0]"] 90["Sweep Revolve<br>[4782, 4812, 0]"]
%% [ProgramBodyItem { index: 30 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] %% [ProgramBodyItem { index: 34 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }]
91["Sweep Revolve<br>[5024, 5054, 0]"] 91["Sweep Revolve<br>[5267, 5297, 0]"]
%% [ProgramBodyItem { index: 31 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] %% [ProgramBodyItem { index: 35 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }]
92[Wall] 92[Wall]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
93[Wall] 93[Wall]
@ -239,38 +239,30 @@ flowchart LR
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
115[Wall] 115[Wall]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
116[Wall] 116["Cap Start"]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
117[Wall] 117["Cap End"]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
118[Wall] 118["SweepEdge Opposite"]
%% face_code_ref=Missing NodePath 119["SweepEdge Opposite"]
119[Wall] 120["SweepEdge Opposite"]
%% face_code_ref=Missing NodePath 121["SweepEdge Opposite"]
120[Wall] 122["SweepEdge Opposite"]
%% face_code_ref=Missing NodePath 123["SweepEdge Opposite"]
121[Wall] 124["SweepEdge Adjacent"]
%% face_code_ref=Missing NodePath 125["SweepEdge Adjacent"]
122["Cap Start"] 126["SweepEdge Adjacent"]
%% face_code_ref=Missing NodePath 127["SweepEdge Adjacent"]
123["Cap Start"] 128["SweepEdge Adjacent"]
%% face_code_ref=Missing NodePath 129["SweepEdge Adjacent"]
124["Cap End"] 130["SweepEdge Adjacent"]
%% face_code_ref=Missing NodePath 131["SweepEdge Adjacent"]
125["Cap End"] 132["SweepEdge Adjacent"]
%% face_code_ref=Missing NodePath 133["SweepEdge Adjacent"]
126["SweepEdge Opposite"] 134["SweepEdge Adjacent"]
127["SweepEdge Opposite"] 135["SweepEdge Adjacent"]
128["SweepEdge Opposite"] 136["SweepEdge Adjacent"]
129["SweepEdge Opposite"] 137["SweepEdge Adjacent"]
130["SweepEdge Opposite"]
131["SweepEdge Opposite"]
132["SweepEdge Opposite"]
133["SweepEdge Opposite"]
134["SweepEdge Opposite"]
135["SweepEdge Opposite"]
136["SweepEdge Opposite"]
137["SweepEdge Opposite"]
138["SweepEdge Adjacent"] 138["SweepEdge Adjacent"]
139["SweepEdge Adjacent"] 139["SweepEdge Adjacent"]
140["SweepEdge Adjacent"] 140["SweepEdge Adjacent"]
@ -280,26 +272,6 @@ flowchart LR
144["SweepEdge Adjacent"] 144["SweepEdge Adjacent"]
145["SweepEdge Adjacent"] 145["SweepEdge Adjacent"]
146["SweepEdge Adjacent"] 146["SweepEdge Adjacent"]
147["SweepEdge Adjacent"]
148["SweepEdge Adjacent"]
149["SweepEdge Adjacent"]
150["SweepEdge Adjacent"]
151["SweepEdge Adjacent"]
152["SweepEdge Adjacent"]
153["SweepEdge Adjacent"]
154["SweepEdge Adjacent"]
155["SweepEdge Adjacent"]
156["SweepEdge Adjacent"]
157["SweepEdge Adjacent"]
158["SweepEdge Adjacent"]
159["SweepEdge Adjacent"]
160["SweepEdge Adjacent"]
161["SweepEdge Adjacent"]
162["SweepEdge Adjacent"]
163["SweepEdge Adjacent"]
164["SweepEdge Adjacent"]
165["SweepEdge Adjacent"]
166["SweepEdge Adjacent"]
1 --- 11 1 --- 11
2 <--x 10 2 <--x 10
2 --- 12 2 --- 12
@ -317,8 +289,8 @@ flowchart LR
11 --- 24 11 --- 24
11 --- 25 11 --- 25
11 --- 26 11 --- 26
11 --- 79 11 --- 80
11 ---- 86 11 ---- 87
12 --- 27 12 --- 27
12 --- 28 12 --- 28
12 --- 29 12 --- 29
@ -326,8 +298,8 @@ flowchart LR
12 --- 31 12 --- 31
12 --- 32 12 --- 32
12 --- 33 12 --- 33
12 --- 85 12 --- 84
12 x---> 86 12 x---> 87
13 --- 34 13 --- 34
13 --- 35 13 --- 35
13 --- 36 13 --- 36
@ -335,17 +307,17 @@ flowchart LR
13 --- 38 13 --- 38
13 --- 39 13 --- 39
13 --- 40 13 --- 40
13 --- 78 13 --- 77
13 x---> 86 13 x---> 87
14 --- 41 14 --- 41
14 --- 80 14 --- 85
14 x---> 86 14 x---> 87
14 x--> 132 14 x--> 118
14 x--> 133 14 x--> 119
14 x--> 134 14 x--> 120
14 x--> 135 14 x--> 121
14 x--> 136 14 x--> 122
14 x--> 137 14 x--> 123
15 --- 42 15 --- 42
15 --- 43 15 --- 43
15 --- 44 15 --- 44
@ -353,8 +325,8 @@ flowchart LR
15 --- 46 15 --- 46
15 --- 47 15 --- 47
15 --- 48 15 --- 48
15 --- 84 15 --- 79
15 x---> 87 15 x---> 88
16 --- 49 16 --- 49
16 --- 50 16 --- 50
16 --- 51 16 --- 51
@ -362,8 +334,8 @@ flowchart LR
16 --- 53 16 --- 53
16 --- 54 16 --- 54
16 --- 55 16 --- 55
16 --- 77 16 --- 78
16 ---- 88 16 x---> 88
17 --- 56 17 --- 56
17 --- 57 17 --- 57
17 --- 58 17 --- 58
@ -391,263 +363,195 @@ flowchart LR
19 --- 76 19 --- 76
19 --- 83 19 --- 83
19 ---- 91 19 ---- 91
20 --- 109 20 --- 103
20 x--> 122 20 x--> 116
20 --- 132 20 --- 118
20 --- 150 20 --- 130
21 --- 107 21 --- 101
21 x--> 122 21 x--> 116
21 --- 133 21 --- 119
21 --- 151 21 --- 131
22 --- 106 22 --- 100
22 x--> 122 22 x--> 116
22 --- 134 22 --- 120
22 --- 152 22 --- 132
23 --- 108 23 --- 102
23 x--> 122 23 x--> 116
23 --- 135 23 --- 121
23 --- 153 23 --- 133
24 --- 105 24 --- 99
24 x--> 122 24 x--> 116
24 --- 136 24 --- 122
24 --- 154 24 --- 134
25 --- 104 25 --- 98
25 x--> 122 25 x--> 116
25 --- 137 25 --- 123
25 --- 155 25 --- 135
49 --- 94
49 x--> 123
49 --- 131
49 --- 143
50 --- 95
50 x--> 123
50 --- 130
50 --- 142
51 --- 96
51 x--> 123
51 --- 129
51 --- 141
52 --- 97
52 x--> 123
52 --- 128
52 --- 140
53 --- 92
53 x--> 123
53 --- 127
53 --- 139
54 --- 93
54 x--> 123
54 --- 126
54 --- 138
89 <--x 56 89 <--x 56
56 --- 115 56 --- 109
56 x--> 156 56 x--> 136
89 <--x 57 89 <--x 57
57 --- 114 57 --- 108
57 --- 156 57 --- 136
89 <--x 58 89 <--x 58
58 --- 110 58 --- 104
58 --- 157 58 --- 137
89 <--x 59 89 <--x 59
59 --- 113 59 --- 107
59 --- 158 59 --- 138
89 <--x 60 89 <--x 60
60 --- 112 60 --- 106
60 --- 159 60 --- 139
89 <--x 61 89 <--x 61
61 --- 111 61 --- 105
61 --- 160 61 --- 140
90 <--x 63 90 <--x 63
63 --- 102 63 --- 96
63 --- 144 63 --- 124
90 <--x 64 90 <--x 64
64 --- 98 64 --- 92
64 --- 145 64 --- 125
90 <--x 65 90 <--x 65
65 --- 99 65 --- 93
65 --- 146 65 --- 126
90 <--x 66 90 <--x 66
66 --- 103 66 --- 97
66 --- 147 66 --- 127
90 <--x 67 90 <--x 67
67 --- 101 67 --- 95
67 --- 148 67 --- 128
90 <--x 68 90 <--x 68
68 --- 100 68 --- 94
68 --- 149 68 --- 129
91 <--x 70 91 <--x 70
70 --- 118 70 --- 112
70 --- 161 70 --- 141
91 <--x 71 91 <--x 71
71 --- 121 71 --- 115
71 --- 162 71 --- 142
91 <--x 72 91 <--x 72
72 --- 120 72 --- 114
72 --- 163 72 --- 143
91 <--x 73 91 <--x 73
73 --- 116 73 --- 110
73 --- 164 73 --- 144
91 <--x 74 91 <--x 74
74 --- 119 74 --- 113
74 --- 165 74 --- 145
91 <--x 75 91 <--x 75
75 --- 117 75 --- 111
75 --- 166 75 --- 146
86 --- 104 87 --- 98
86 --- 105 87 --- 99
86 --- 106 87 --- 100
86 --- 107 87 --- 101
86 --- 108 87 --- 102
86 --- 109 87 --- 103
86 --- 122 87 --- 116
86 --- 124 87 --- 117
86 --- 132 87 --- 118
86 --- 133 87 --- 119
86 --- 134 87 --- 120
86 --- 135 87 --- 121
86 --- 136 87 --- 122
86 --- 137 87 --- 123
86 --- 150 87 --- 130
86 --- 151 87 --- 131
86 --- 152 87 --- 132
86 --- 153 87 --- 133
86 --- 154 87 --- 134
86 --- 155 87 --- 135
88 --- 92 89 --- 104
88 --- 93 89 --- 105
88 --- 94 89 --- 106
88 --- 95 89 --- 107
88 --- 96 89 --- 108
88 --- 97 89 --- 109
88 --- 123 89 --- 136
88 --- 125 89 --- 137
88 --- 126 89 --- 138
88 --- 127 89 --- 139
88 --- 128 89 --- 140
88 --- 129 90 --- 92
88 --- 130 90 --- 93
88 --- 131 90 --- 94
88 --- 138 90 --- 95
88 --- 139 90 --- 96
88 --- 140 90 --- 97
88 --- 141 90 --- 124
88 --- 142 90 --- 125
88 --- 143 90 --- 126
89 --- 110 90 --- 127
89 --- 111 90 --- 128
89 --- 112 90 --- 129
89 --- 113 91 --- 110
89 --- 114 91 --- 111
89 --- 115 91 --- 112
89 --- 156 91 --- 113
89 --- 157 91 --- 114
89 --- 158 91 --- 115
89 --- 159 91 --- 141
89 --- 160 91 --- 142
90 --- 98 91 --- 143
90 --- 99 91 --- 144
90 --- 100 91 --- 145
90 --- 101 91 --- 146
90 --- 102 124 <--x 92
90 --- 103 92 --- 125
90 --- 144 125 <--x 93
90 --- 145
90 --- 146
90 --- 147
90 --- 148
90 --- 149
91 --- 116
91 --- 117
91 --- 118
91 --- 119
91 --- 120
91 --- 121
91 --- 161
91 --- 162
91 --- 163
91 --- 164
91 --- 165
91 --- 166
92 --- 127
92 --- 139
140 <--x 92
93 --- 126 93 --- 126
93 --- 138 128 <--x 94
139 <--x 93 94 --- 129
94 --- 131 127 <--x 95
138 <--x 94 95 --- 128
94 --- 143 96 --- 124
95 --- 130 129 <--x 96
95 --- 142 126 <--x 97
143 <--x 95 97 --- 127
96 --- 129 98 --- 123
96 --- 141 130 <--x 98
142 <--x 96 98 --- 135
97 --- 128 99 --- 122
97 --- 140 99 --- 134
141 <--x 97 135 <--x 99
144 <--x 98 100 --- 120
98 --- 145 100 --- 132
145 <--x 99 133 <--x 100
99 --- 146 101 --- 119
148 <--x 100 101 --- 131
100 --- 149 132 <--x 101
147 <--x 101 102 --- 121
101 --- 148 102 --- 133
102 --- 144 134 <--x 102
149 <--x 102 103 --- 118
146 <--x 103 103 --- 130
103 --- 147 131 <--x 103
104 --- 137 104 --- 137
150 <--x 104 139 <--x 105
104 --- 155 105 --- 140
105 --- 136 138 <--x 106
105 --- 154 106 --- 139
155 <--x 105 137 <--x 107
106 --- 134 107 --- 138
106 --- 152 108 --- 136
153 <--x 106 109 --- 136
107 --- 133 140 <--x 109
107 --- 151 143 <--x 110
152 <--x 107 110 --- 144
108 --- 135 145 <--x 111
108 --- 153 111 --- 146
154 <--x 108 112 --- 141
109 --- 132 146 <--x 112
109 --- 150 144 <--x 113
151 <--x 109 113 --- 145
110 --- 157 142 <--x 114
159 <--x 111 114 --- 143
111 --- 160 141 <--x 115
158 <--x 112 115 --- 142
112 --- 159 118 <--x 117
157 <--x 113 119 <--x 117
113 --- 158 120 <--x 117
114 --- 156 121 <--x 117
115 --- 156 122 <--x 117
160 <--x 115 123 <--x 117
163 <--x 116
116 --- 164
165 <--x 117
117 --- 166
118 --- 161
166 <--x 118
164 <--x 119
119 --- 165
162 <--x 120
120 --- 163
161 <--x 121
121 --- 162
132 <--x 124
133 <--x 124
134 <--x 124
135 <--x 124
136 <--x 124
137 <--x 124
126 <--x 125
127 <--x 125
128 <--x 125
129 <--x 125
130 <--x 125
131 <--x 125
``` ```

File diff suppressed because it is too large Load Diff

View File

@ -64,131 +64,538 @@ description: Operations executed prosthetic-hip.kcl
"name": "startSketchOn", "name": "startSketchOn",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "Plane", "type": "Object",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "loft",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "loft",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "clone",
"unlabeledArg": {
"value": {
"type": "Sketch",
"value": { "value": {
"artifactId": "[uuid]" "origin": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 110.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.9063077870366499,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.42261826174069944,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Object",
"value": {
"origin": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 130.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.8038568606172173,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.5948227867513413,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Object",
"value": {
"origin": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 140.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.8038568606172173,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.5948227867513413,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Object",
"value": {
"origin": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 145.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.8038568606172173,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.5948227867513413,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
} }
}, },
"sourceRange": [] "sourceRange": []
@ -243,6 +650,91 @@ description: Operations executed prosthetic-hip.kcl
}, },
"sourceRange": [] "sourceRange": []
}, },
{
"type": "StdLibCall",
"name": "loft",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "loft",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "clone",
"unlabeledArg": {
"value": {
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{ {
"type": "StdLibCall", "type": "StdLibCall",
"name": "startSketchOn", "name": "startSketchOn",

View File

@ -556,9 +556,9 @@ description: Variables in memory after executing prosthetic-hip.kcl
-8.0 -8.0
], ],
"tag": { "tag": {
"commentStart": 1889, "commentStart": 2056,
"end": 1895, "end": 2062,
"start": 1889, "start": 2056,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -707,17 +707,17 @@ description: Variables in memory after executing prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 130.0,
"units": { "units": {
"type": "Mm" "type": "Mm"
} }
}, },
"type": "plane", "type": "plane",
"value": "XY", "value": "Custom",
"xAxis": { "xAxis": {
"x": 1.0, "x": 0.8038568606172174,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.5948227867513414,
"units": { "units": {
"type": "Unknown" "type": "Unknown"
} }
@ -1236,6 +1236,514 @@ description: Variables in memory after executing prosthetic-hip.kcl
} }
} }
}, },
"plane003": {
"type": "Object",
"value": {
"origin": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 110.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.9063,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.4226,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"plane004": {
"type": "Object",
"value": {
"origin": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 130.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.8039,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.5948,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"plane005": {
"type": "Object",
"value": {
"origin": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 140.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.8039,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.5948,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"plane006": {
"type": "Object",
"value": {
"origin": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 145.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"xAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.8039,
"ty": {
"type": "Known",
"type": "Count"
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.5948,
"ty": {
"type": "Known",
"type": "Count"
}
}
]
},
"yAxis": {
"type": "HomArray",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"polyethyleneInsert": { "polyethyleneInsert": {
"type": "Solid", "type": "Solid",
"value": { "value": {
@ -2065,9 +2573,9 @@ description: Variables in memory after executing prosthetic-hip.kcl
-16.0 -16.0
], ],
"tag": { "tag": {
"commentStart": 1359, "commentStart": 1467,
"end": 1365, "end": 1473,
"start": 1359, "start": 1467,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -2216,17 +2724,17 @@ description: Variables in memory after executing prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 110.0,
"units": { "units": {
"type": "Mm" "type": "Mm"
} }
}, },
"type": "plane", "type": "plane",
"value": "XY", "value": "Custom",
"xAxis": { "xAxis": {
"x": 1.0, "x": 0.9063077870366499,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.42261826174069944,
"units": { "units": {
"type": "Unknown" "type": "Unknown"
} }
@ -2287,9 +2795,9 @@ description: Variables in memory after executing prosthetic-hip.kcl
-8.0 -8.0
], ],
"tag": { "tag": {
"commentStart": 1889, "commentStart": 2056,
"end": 1895, "end": 2062,
"start": 1889, "start": 2056,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -2438,17 +2946,17 @@ description: Variables in memory after executing prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 130.0,
"units": { "units": {
"type": "Mm" "type": "Mm"
} }
}, },
"type": "plane", "type": "plane",
"value": "XY", "value": "Custom",
"xAxis": { "xAxis": {
"x": 1.0, "x": 0.8038568606172174,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.5948227867513414,
"units": { "units": {
"type": "Unknown" "type": "Unknown"
} }
@ -2509,9 +3017,9 @@ description: Variables in memory after executing prosthetic-hip.kcl
-0.8 -0.8
], ],
"tag": { "tag": {
"commentStart": 2423, "commentStart": 2649,
"end": 2429, "end": 2655,
"start": 2423, "start": 2649,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg05" "value": "seg05"
}, },
@ -2660,17 +3168,17 @@ description: Variables in memory after executing prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 140.0,
"units": { "units": {
"type": "Mm" "type": "Mm"
} }
}, },
"type": "plane", "type": "plane",
"value": "XY", "value": "Custom",
"xAxis": { "xAxis": {
"x": 1.0, "x": 0.8038568606172174,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.5948227867513414,
"units": { "units": {
"type": "Unknown" "type": "Unknown"
} }
@ -2731,9 +3239,9 @@ description: Variables in memory after executing prosthetic-hip.kcl
-0.5 -0.5
], ],
"tag": { "tag": {
"commentStart": 2954, "commentStart": 3239,
"end": 2960, "end": 3245,
"start": 2954, "start": 3239,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg06" "value": "seg06"
}, },
@ -2882,17 +3390,17 @@ description: Variables in memory after executing prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 145.0,
"units": { "units": {
"type": "Mm" "type": "Mm"
} }
}, },
"type": "plane", "type": "plane",
"value": "XY", "value": "Custom",
"xAxis": { "xAxis": {
"x": 1.0, "x": 0.8038568606172174,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.5948227867513414,
"units": { "units": {
"type": "Unknown" "type": "Unknown"
} }
@ -2949,9 +3457,9 @@ description: Variables in memory after executing prosthetic-hip.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2954, "commentStart": 3239,
"end": 2960, "end": 3245,
"start": 2954, "start": 3239,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg06" "value": "seg06"
}, },
@ -3007,9 +3515,9 @@ description: Variables in memory after executing prosthetic-hip.kcl
-0.5 -0.5
], ],
"tag": { "tag": {
"commentStart": 2954, "commentStart": 3239,
"end": 2960, "end": 3245,
"start": 2954, "start": 3239,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg06" "value": "seg06"
}, },
@ -3158,17 +3666,17 @@ description: Variables in memory after executing prosthetic-hip.kcl
"origin": { "origin": {
"x": 0.0, "x": 0.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 145.0,
"units": { "units": {
"type": "Mm" "type": "Mm"
} }
}, },
"type": "plane", "type": "plane",
"value": "XY", "value": "Custom",
"xAxis": { "xAxis": {
"x": 1.0, "x": 0.8038568606172174,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.5948227867513414,
"units": { "units": {
"type": "Unknown" "type": "Unknown"
} }

View File

@ -0,0 +1,184 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Artifact commands nested_main_kcl.kcl
---
[
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "edge_lines_visible",
"hidden": false
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "make_plane",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"x_axis": {
"x": 1.0,
"y": 0.0,
"z": 0.0
},
"y_axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"size": 60.0,
"clobber": false,
"hide": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "close_path",
"path_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "enable_sketch_mode",
"entity_id": "[uuid]",
"ortho": false,
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": 0.0,
"y": 0.0,
"z": 1.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "arc",
"center": {
"x": 15.0,
"y": 0.0
},
"radius": 5.0,
"start": {
"unit": "degrees",
"value": 0.0
},
"end": {
"unit": "degrees",
"value": 360.0
},
"relative": false
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "move_path_pen",
"path": "[uuid]",
"to": {
"x": 20.0,
"y": 0.0,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "sketch_mode_disable"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "start_path"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "revolve",
"target": "[uuid]",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"axis_is_2d": true,
"angle": {
"unit": "degrees",
"value": 360.0
},
"tolerance": 0.0000001,
"opposite": "None"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
}
]

View File

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

View File

@ -0,0 +1,23 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[43, 81, 1]"]
3["Segment<br>[43, 81, 1]"]
4[Solid2d]
end
1["Plane<br>[18, 35, 1]"]
5["Sweep Revolve<br>[89, 142, 1]"]
6[Wall]
%% face_code_ref=Missing NodePath
7["SweepEdge Adjacent"]
1 --- 2
2 --- 3
2 --- 4
2 ---- 5
5 <--x 3
3 --- 6
3 --- 7
5 --- 6
5 --- 7
6 --- 7
```

View File

@ -0,0 +1,73 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Result of parsing nested_main_kcl.kcl
---
{
"Ok": {
"body": [
{
"commentStart": 0,
"end": 0,
"path": {
"type": "Kcl",
"filename": "nested/foo/bar/main.kcl"
},
"selector": {
"type": "None",
"alias": {
"commentStart": 0,
"end": 0,
"name": "bar",
"start": 0,
"type": "Identifier"
}
},
"start": 0,
"type": "ImportStatement",
"type": "ImportStatement"
},
{
"commentStart": 0,
"end": 0,
"expression": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "bar",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"start": 0,
"type": "ExpressionStatement",
"type": "ExpressionStatement"
}
],
"commentStart": 0,
"end": 0,
"nonCodeMeta": {
"nonCodeNodes": {
"0": [
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "NonCodeNode",
"value": {
"type": "newLine"
}
}
]
},
"startNodes": []
},
"start": 0
}
}

View File

@ -0,0 +1,3 @@
import "nested/foo/bar/main.kcl" as bar
bar

View File

@ -0,0 +1,7 @@
// A donut shape.
startSketchOn(XY)
|> circle( center = [15, 0], radius = 5 )
|> revolve(
angle = 360,
axis = Y,
)

View File

@ -0,0 +1,3 @@
import "imported.kcl" as imported
imported

View File

@ -0,0 +1,18 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Operations executed nested_main_kcl.kcl
---
[
{
"type": "GroupBegin",
"group": {
"type": "ModuleInstance",
"name": "main.kcl",
"moduleId": 0
},
"sourceRange": []
},
{
"type": "GroupEnd"
}
]

View File

@ -0,0 +1,10 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Variables in memory after executing nested_main_kcl.kcl
---
{
"bar": {
"type": "Module",
"value": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -0,0 +1,7 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Result of unparsing nested_main_kcl.kcl
---
import "nested/foo/bar/main.kcl" as bar
bar

View File

@ -0,0 +1,8 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Result of unparsing tests/nested_assembly/nested/foo/bar/imported.kcl
---
// A donut shape.
startSketchOn(XY)
|> circle(center = [15, 0], radius = 5)
|> revolve(angle = 360, axis = Y)

View File

@ -0,0 +1,7 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Result of unparsing tests/nested_assembly/nested/foo/bar/main.kcl
---
import "imported.kcl" as imported
imported

View File

@ -1,481 +0,0 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Artifact commands subtract_regression11.kcl
---
[
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "edge_lines_visible",
"hidden": false
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "make_plane",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"x_axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"y_axis": {
"x": 0.0,
"y": 0.0,
"z": 1.0
},
"size": 60.0,
"clobber": false,
"hide": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "enable_sketch_mode",
"entity_id": "[uuid]",
"ortho": false,
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": 1.0,
"y": 0.0,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "move_path_pen",
"path": "[uuid]",
"to": {
"x": 0.0,
"y": 20.0,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "sketch_mode_disable"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "start_path"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 2.25,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.75,
"y": -0.75,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": -38.5,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": -0.75,
"y": -0.75,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": -2.25,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": 40.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "close_path",
"path_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "revolve",
"target": "[uuid]",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"axis_is_2d": true,
"angle": {
"unit": "degrees",
"value": 360.0
},
"tolerance": 0.0000001,
"opposite": "None"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "make_plane",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"x_axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"y_axis": {
"x": 0.0,
"y": 0.0,
"z": 1.0
},
"size": 60.0,
"clobber": false,
"hide": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "enable_sketch_mode",
"entity_id": "[uuid]",
"ortho": false,
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": 1.0,
"y": 0.0,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "move_path_pen",
"path": "[uuid]",
"to": {
"x": 0.65,
"y": 20.1,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "sketch_mode_disable"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "start_path"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": -1.5,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": -1.1,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": 1.5,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 1.1,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "close_path",
"path_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "enable_sketch_mode",
"entity_id": "[uuid]",
"ortho": false,
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": 1.0,
"y": 0.0,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extrude",
"target": "[uuid]",
"distance": 10.0,
"faces": null,
"opposite": {
"Other": 10.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "sketch_mode_disable"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "boolean_subtract",
"target_ids": [
"[uuid]"
],
"tool_ids": [
"[uuid]"
],
"tolerance": 0.0000001
}
}
]

View File

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

View File

@ -1,178 +0,0 @@
```mermaid
flowchart LR
subgraph path3 [Path]
3["Path<br>[88, 127, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
5["Segment<br>[133, 153, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
6["Segment<br>[159, 184, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
7["Segment<br>[190, 211, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
8["Segment<br>[217, 243, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
9["Segment<br>[249, 270, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
10["Segment<br>[276, 294, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
11["Segment<br>[300, 307, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
18[Solid2d]
end
subgraph path4 [Path]
4["Path<br>[428, 470, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
12["Segment<br>[476, 496, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
13["Segment<br>[502, 522, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
14["Segment<br>[528, 547, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
15["Segment<br>[553, 572, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
16["Segment<br>[578, 585, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
17[Solid2d]
end
1["Plane<br>[47, 64, 0]"]
%% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit]
2["Plane<br>[387, 404, 0]"]
%% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit]
19["Sweep Revolve<br>[322, 373, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit]
20["Sweep Extrusion<br>[603, 672, 0]"]
%% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit]
21["CompositeSolid Subtract<br>[683, 726, 0]"]
%% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit]
22[Wall]
%% face_code_ref=Missing NodePath
23[Wall]
%% face_code_ref=Missing NodePath
24[Wall]
%% face_code_ref=Missing NodePath
25[Wall]
%% face_code_ref=Missing NodePath
26[Wall]
%% face_code_ref=Missing NodePath
27[Wall]
%% face_code_ref=Missing NodePath
28[Wall]
%% face_code_ref=Missing NodePath
29[Wall]
%% face_code_ref=Missing NodePath
30[Wall]
%% face_code_ref=Missing NodePath
31["Cap Start"]
%% face_code_ref=Missing NodePath
32["Cap End"]
%% face_code_ref=Missing NodePath
33["SweepEdge Opposite"]
34["SweepEdge Opposite"]
35["SweepEdge Opposite"]
36["SweepEdge Opposite"]
37["SweepEdge Adjacent"]
38["SweepEdge Adjacent"]
39["SweepEdge Adjacent"]
40["SweepEdge Adjacent"]
41["SweepEdge Adjacent"]
42["SweepEdge Adjacent"]
43["SweepEdge Adjacent"]
44["SweepEdge Adjacent"]
1 --- 3
2 --- 4
3 --- 5
3 --- 6
3 --- 7
3 --- 8
3 --- 9
3 --- 10
3 --- 11
3 --- 18
3 ---- 19
3 --- 21
4 --- 12
4 --- 13
4 --- 14
4 --- 15
4 --- 16
4 --- 17
4 ---- 20
4 --- 21
19 <--x 5
5 --- 30
5 --- 41
19 <--x 6
6 --- 28
6 --- 42
19 <--x 7
7 --- 27
7 --- 43
19 <--x 8
8 --- 29
8 --- 44
19 <--x 9
9 --- 26
12 --- 23
12 x--> 31
12 --- 36
12 --- 40
13 --- 25
13 x--> 31
13 --- 35
13 --- 39
14 --- 22
14 x--> 31
14 --- 34
14 --- 38
15 --- 24
15 x--> 31
15 --- 33
15 --- 37
19 --- 26
19 --- 27
19 --- 28
19 --- 29
19 --- 30
19 --- 41
19 --- 42
19 --- 43
19 --- 44
20 --- 22
20 --- 23
20 --- 24
20 --- 25
20 --- 31
20 --- 32
20 --- 33
20 --- 34
20 --- 35
20 --- 36
20 --- 37
20 --- 38
20 --- 39
20 --- 40
22 --- 34
37 <--x 22
22 --- 38
23 --- 36
39 <--x 23
23 --- 40
24 --- 33
24 --- 37
40 <--x 24
25 --- 35
38 <--x 25
25 --- 39
44 <--x 26
42 <--x 27
27 --- 43
41 <--x 28
28 --- 42
43 <--x 29
29 --- 44
30 --- 41
33 <--x 32
34 <--x 32
35 <--x 32
36 <--x 32
```

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
@settings(defaultLengthUnit = mm)
sketch001 = startSketchOn(YZ)
sketch001Profile000 = startProfile(sketch001, at = [0.0, 20])
|> xLine(length = 2.25)
|> line(end = [0.75, -0.75])
|> yLine(length = -38.5)
|> line(end = [-0.75, -0.75])
|> xLine(length = -2.25)
|> yLine(length = 40)
|> close()
revolve000 = revolve(sketch001Profile000, axis = Y, angle = 360)
sketch003 = startSketchOn(YZ)
sketch003Profile000 = startProfile(sketch003, at = [0.65, 20.1])
|> yLine(length = -1.5)
|> xLine(length = -1.1)
|> yLine(length = 1.5)
|> xLine(length = 1.1)
|> close()
cut000Extrude = extrude([sketch003Profile000], length = 10, bidirectionalLength = 10)
cut000 = subtract(revolve000, tools = cut000Extrude)

View File

@ -1,217 +0,0 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Operations executed subtract_regression11.kcl
---
[
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "revolve",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {
"angle": {
"value": {
"type": "Number",
"value": 360.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
"sourceRange": []
},
"axis": {
"value": {
"type": "Object",
"value": {
"direction": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"origin": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "extrude",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {
"bidirectionalLength": {
"value": {
"type": "Number",
"value": 10.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
"sourceRange": []
},
"length": {
"value": {
"type": "Number",
"value": 10.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "subtract",
"unlabeledArg": {
"value": {
"type": "Solid",
"value": {
"artifactId": "[uuid]"
}
},
"sourceRange": []
},
"labeledArgs": {
"tools": {
"value": {
"type": "Solid",
"value": {
"artifactId": "[uuid]"
}
},
"sourceRange": []
}
},
"sourceRange": []
}
]

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@ -1,31 +0,0 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Result of unparsing subtract_regression11.kcl
---
@settings(defaultLengthUnit = mm)
sketch001 = startSketchOn(YZ)
sketch001Profile000 = startProfile(sketch001, at = [0.0, 20])
|> xLine(length = 2.25)
|> line(end = [0.75, -0.75])
|> yLine(length = -38.5)
|> line(end = [-0.75, -0.75])
|> xLine(length = -2.25)
|> yLine(length = 40)
|> close()
revolve000 = revolve(sketch001Profile000, axis = Y, angle = 360)
sketch003 = startSketchOn(YZ)
sketch003Profile000 = startProfile(sketch003, at = [0.65, 20.1])
|> yLine(length = -1.5)
|> xLine(length = -1.1)
|> yLine(length = 1.5)
|> xLine(length = 1.1)
|> close()
cut000Extrude = extrude([sketch003Profile000], length = 10, bidirectionalLength = 10)
cut000 = subtract(revolve000, tools = cut000Extrude)

View File

@ -1,481 +0,0 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Artifact commands subtract_regression12.kcl
---
[
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "edge_lines_visible",
"hidden": false
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_visible",
"object_id": "[uuid]",
"hidden": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "make_plane",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"x_axis": {
"x": 1.0,
"y": 0.0,
"z": 0.0
},
"y_axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"size": 60.0,
"clobber": false,
"hide": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "enable_sketch_mode",
"entity_id": "[uuid]",
"ortho": false,
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": 0.0,
"y": 0.0,
"z": 1.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "move_path_pen",
"path": "[uuid]",
"to": {
"x": 5.588,
"y": 12.7,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "sketch_mode_disable"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "start_path"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": -5.588,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": -25.4,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 2.54,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.635,
"y": 2.54,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": 20.0406,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 2.413,
"y": 2.8194,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "close_path",
"path_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "revolve",
"target": "[uuid]",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"axis_is_2d": true,
"angle": {
"unit": "degrees",
"value": 360.0
},
"tolerance": 0.0000001,
"opposite": "None"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "make_plane",
"origin": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"x_axis": {
"x": 0.0,
"y": 1.0,
"z": 0.0
},
"y_axis": {
"x": 0.0,
"y": 0.0,
"z": 1.0
},
"size": 60.0,
"clobber": false,
"hide": true
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "enable_sketch_mode",
"entity_id": "[uuid]",
"ortho": false,
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": 1.0,
"y": 0.0,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "move_path_pen",
"path": "[uuid]",
"to": {
"x": -15.24,
"y": 0.508,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "sketch_mode_disable"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "start_path"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": -1.016,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 22.86,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": 0.0,
"y": 1.016,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extend_path",
"path": "[uuid]",
"segment": {
"type": "line",
"end": {
"x": -22.86,
"y": 0.0,
"z": 0.0
},
"relative": true
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "close_path",
"path_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "enable_sketch_mode",
"entity_id": "[uuid]",
"ortho": false,
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": 1.0,
"y": 0.0,
"z": 0.0
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "extrude",
"target": "[uuid]",
"distance": 5.08,
"faces": null,
"opposite": {
"Other": 5.08
}
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "object_bring_to_front",
"object_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "sketch_mode_disable"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_adjacency_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "solid3d_get_extrusion_face_info",
"object_id": "[uuid]",
"edge_id": "[uuid]"
}
},
{
"cmdId": "[uuid]",
"range": [],
"command": {
"type": "boolean_subtract",
"target_ids": [
"[uuid]"
],
"tool_ids": [
"[uuid]"
],
"tolerance": 0.0000001
}
}
]

View File

@ -1,180 +0,0 @@
```mermaid
flowchart LR
subgraph path3 [Path]
3["Path<br>[88, 129, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
5["Segment<br>[135, 156, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
6["Segment<br>[162, 180, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
7["Segment<br>[186, 205, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
8["Segment<br>[211, 235, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
9["Segment<br>[241, 262, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
10["Segment<br>[268, 294, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
11["Segment<br>[300, 307, 0]"]
%% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
18[Solid2d]
end
subgraph path4 [Path]
4["Path<br>[428, 470, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
12["Segment<br>[476, 497, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
13["Segment<br>[503, 522, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
14["Segment<br>[528, 548, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
15["Segment<br>[554, 574, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
16["Segment<br>[580, 587, 0]"]
%% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
17[Solid2d]
end
1["Plane<br>[47, 64, 0]"]
%% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit]
2["Plane<br>[387, 404, 0]"]
%% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit]
19["Sweep Revolve<br>[322, 373, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit]
20["Sweep Extrusion<br>[605, 676, 0]"]
%% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit]
21["CompositeSolid Subtract<br>[687, 730, 0]"]
%% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit]
22[Wall]
%% face_code_ref=Missing NodePath
23[Wall]
%% face_code_ref=Missing NodePath
24[Wall]
%% face_code_ref=Missing NodePath
25[Wall]
%% face_code_ref=Missing NodePath
26[Wall]
%% face_code_ref=Missing NodePath
27[Wall]
%% face_code_ref=Missing NodePath
28[Wall]
%% face_code_ref=Missing NodePath
29[Wall]
%% face_code_ref=Missing NodePath
30[Wall]
%% face_code_ref=Missing NodePath
31["Cap Start"]
%% face_code_ref=Missing NodePath
32["Cap End"]
%% face_code_ref=Missing NodePath
33["SweepEdge Opposite"]
34["SweepEdge Opposite"]
35["SweepEdge Opposite"]
36["SweepEdge Opposite"]
37["SweepEdge Adjacent"]
38["SweepEdge Adjacent"]
39["SweepEdge Adjacent"]
40["SweepEdge Adjacent"]
41["SweepEdge Adjacent"]
42["SweepEdge Adjacent"]
43["SweepEdge Adjacent"]
44["SweepEdge Adjacent"]
1 --- 3
2 --- 4
3 --- 5
3 --- 6
3 --- 7
3 --- 8
3 --- 9
3 --- 10
3 --- 11
3 --- 18
3 ---- 19
3 --- 21
4 --- 12
4 --- 13
4 --- 14
4 --- 15
4 --- 16
4 --- 17
4 ---- 20
4 --- 21
19 <--x 5
5 --- 30
19 <--x 7
7 --- 28
7 --- 41
19 <--x 8
8 --- 29
8 --- 42
19 <--x 9
9 --- 27
9 --- 43
19 <--x 10
10 --- 26
10 --- 44
12 --- 23
12 x--> 31
12 --- 33
12 --- 37
13 --- 25
13 x--> 31
13 --- 34
13 --- 38
14 --- 22
14 x--> 31
14 --- 35
14 --- 39
15 --- 24
15 x--> 31
15 --- 36
15 --- 40
19 --- 26
19 --- 27
19 --- 28
19 --- 29
19 --- 30
19 --- 41
19 --- 42
19 --- 43
19 --- 44
20 --- 22
20 --- 23
20 --- 24
20 --- 25
20 --- 31
20 --- 32
20 --- 33
20 --- 34
20 --- 35
20 --- 36
20 --- 37
20 --- 38
20 --- 39
20 --- 40
22 --- 35
38 <--x 22
22 --- 39
23 --- 33
23 --- 37
40 <--x 23
24 --- 36
39 <--x 24
24 --- 40
25 --- 34
37 <--x 25
25 --- 38
42 <--x 26
43 <--x 26
26 x--> 44
41 <--x 27
42 <--x 27
27 x--> 43
28 x--> 41
41 <--x 29
29 x--> 42
43 <--x 30
33 <--x 32
34 <--x 32
35 <--x 32
36 <--x 32
```

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
@settings(defaultLengthUnit = in)
sketch000 = startSketchOn(XY)
sketch000Profile000 = startProfile(sketch000, at = [0.22, 0.5])
|> xLine(length = -0.22)
|> yLine(length = -1)
|> xLine(length = 0.1)
|> line(end = [0.025, 0.1])
|> yLine(length = 0.789)
|> line(end = [0.095, 0.111])
|> close()
revolve000 = revolve(sketch000Profile000, axis = Y, angle = 360)
sketch002 = startSketchOn(YZ)
sketch002Profile000 = startProfile(sketch002, at = [-0.6, 0.02])
|> yLine(length = -0.04)
|> xLine(length = 0.9)
|> yLine(length = 0.04)
|> xLine(length = -0.9)
|> close()
cut000Extrude = extrude([sketch002Profile000], length = 0.2, bidirectionalLength = 0.2)
cut000 = subtract(revolve000, tools = cut000Extrude)

View File

@ -1,217 +0,0 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Operations executed subtract_regression12.kcl
---
[
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "revolve",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {
"angle": {
"value": {
"type": "Number",
"value": 360.0,
"ty": {
"type": "Default",
"len": {
"type": "Inches"
},
"angle": {
"type": "Degrees"
}
}
},
"sourceRange": []
},
"axis": {
"value": {
"type": "Object",
"value": {
"direction": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 1.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
},
"origin": {
"type": "Array",
"value": [
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
},
{
"type": "Number",
"value": 0.0,
"ty": {
"type": "Default",
"len": {
"type": "Mm"
},
"angle": {
"type": "Degrees"
}
}
}
]
}
}
},
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "startSketchOn",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "extrude",
"unlabeledArg": {
"value": {
"type": "Array",
"value": [
{
"type": "Sketch",
"value": {
"artifactId": "[uuid]"
}
}
]
},
"sourceRange": []
},
"labeledArgs": {
"bidirectionalLength": {
"value": {
"type": "Number",
"value": 0.2,
"ty": {
"type": "Default",
"len": {
"type": "Inches"
},
"angle": {
"type": "Degrees"
}
}
},
"sourceRange": []
},
"length": {
"value": {
"type": "Number",
"value": 0.2,
"ty": {
"type": "Default",
"len": {
"type": "Inches"
},
"angle": {
"type": "Degrees"
}
}
},
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "StdLibCall",
"name": "subtract",
"unlabeledArg": {
"value": {
"type": "Solid",
"value": {
"artifactId": "[uuid]"
}
},
"sourceRange": []
},
"labeledArgs": {
"tools": {
"value": {
"type": "Solid",
"value": {
"artifactId": "[uuid]"
}
},
"sourceRange": []
}
},
"sourceRange": []
}
]

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@ -1,31 +0,0 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Result of unparsing subtract_regression12.kcl
---
@settings(defaultLengthUnit = in)
sketch000 = startSketchOn(XY)
sketch000Profile000 = startProfile(sketch000, at = [0.22, 0.5])
|> xLine(length = -0.22)
|> yLine(length = -1)
|> xLine(length = 0.1)
|> line(end = [0.025, 0.1])
|> yLine(length = 0.789)
|> line(end = [0.095, 0.111])
|> close()
revolve000 = revolve(sketch000Profile000, axis = Y, angle = 360)
sketch002 = startSketchOn(YZ)
sketch002Profile000 = startProfile(sketch002, at = [-0.6, 0.02])
|> yLine(length = -0.04)
|> xLine(length = 0.9)
|> yLine(length = 0.04)
|> xLine(length = -0.9)
|> close()
cut000Extrude = extrude([sketch002Profile000], length = 0.2, bidirectionalLength = 0.2)
cut000 = subtract(revolve000, tools = cut000Extrude)

View File

@ -139,8 +139,8 @@ function CommandBarSelectionInput({
data: { data: {
selectionType: 'singleCodeCursor', selectionType: 'singleCodeCursor',
}, },
}) && })
setHasClearedSelection(true) setHasClearedSelection(true)
}, [arg]) }, [arg])
// Watch for outside teardowns of this component // Watch for outside teardowns of this component

View File

@ -406,17 +406,11 @@ export const EngineStream = (props: {
// On various inputs save the camera state, in case we get disconnected. // On various inputs save the camera state, in case we get disconnected.
useEffect(() => { useEffect(() => {
// Only start saving after we are playing the stream (which means
// the scene is ready.)
// Also prevents us from stepping on the toes of the camera restoration.
if (engineStreamState.value !== EngineStreamState.Playing) return
const onInput = () => { const onInput = () => {
// Save the remote camera state to restore on stream restore. // Save the remote camera state to restore on stream restore.
// Fire-and-forget because we don't know when a camera movement is // Fire-and-forget because we don't know when a camera movement is
// completed on the engine side (there are no responses to data channel // completed on the engine side (there are no responses to data channel
// mouse movements.) // mouse movements.)
sceneInfra.camControls.saveRemoteCameraState().catch(trap) sceneInfra.camControls.saveRemoteCameraState().catch(trap)
} }
@ -432,7 +426,7 @@ export const EngineStream = (props: {
window.document.removeEventListener('scroll', onInput) window.document.removeEventListener('scroll', onInput)
window.document.removeEventListener('touchend', onInput) window.document.removeEventListener('touchend', onInput)
} }
}, [engineStreamState.value]) }, [])
const isNetworkOkay = const isNetworkOkay =
overallState === NetworkHealthState.Ok || overallState === NetworkHealthState.Ok ||

View File

@ -1278,12 +1278,12 @@ export const ModelingMachineProvider = ({
) )
} }
} }
// route to main.kcl by default for web and desktop let filePath = file?.path
let filePath: string = PROJECT_ENTRYPOINT // When prompt to edit finishes, try to route to the file they were in otherwise go to main.kcl
const possibleFileName = file?.path if (filePath) {
if (possibleFileName && isDesktop()) { filePath = window.electron.path.relative(basePath, filePath)
// When prompt to edit finishes, try to route to the file they were in otherwise go to main.kcl } else {
filePath = window.electron.path.relative(basePath, possibleFileName) filePath = PROJECT_ENTRYPOINT
} }
return await promptToEditFlow({ return await promptToEditFlow({
projectFiles, projectFiles,

View File

@ -9,11 +9,9 @@ import {
ZOO_STUDIO_PROTOCOL, ZOO_STUDIO_PROTOCOL,
} from '@src/lib/constants' } from '@src/lib/constants'
import { isDesktop } from '@src/lib/isDesktop' import { isDesktop } from '@src/lib/isDesktop'
import { Themes, darkModeMatcher, setThemeClass } from '@src/lib/theme' import { Themes, getSystemTheme } from '@src/lib/theme'
import toast from 'react-hot-toast' import toast from 'react-hot-toast'
import { platform } from '@src/lib/utils' import { platform } from '@src/lib/utils'
import { Logo } from '@src/components/Logo'
import { useEffect } from 'react'
/** /**
* This component is a handler that checks if a certain query parameter * This component is a handler that checks if a certain query parameter
@ -21,23 +19,17 @@ import { useEffect } from 'react'
* want to open the current page in the desktop app. * want to open the current page in the desktop app.
*/ */
export const OpenInDesktopAppHandler = (props: React.PropsWithChildren) => { export const OpenInDesktopAppHandler = (props: React.PropsWithChildren) => {
const theme = getSystemTheme()
const buttonClasses = const buttonClasses =
'bg-transparent flex-0 hover:bg-primary/10 dark:hover:bg-primary/10' 'bg-transparent flex-0 hover:bg-primary/10 dark:hover:bg-primary/10'
const pathLogomarkSvg = `${isDesktop() ? '.' : ''}/zma-logomark${
theme === Themes.Light ? '-dark' : ''
}.svg`
const [searchParams, setSearchParams] = useSearchParams() const [searchParams, setSearchParams] = useSearchParams()
// We also ignore this param on desktop, as it is redundant // We also ignore this param on desktop, as it is redundant
const hasAskToOpenParam = const hasAskToOpenParam =
!isDesktop() && searchParams.has(ASK_TO_OPEN_QUERY_PARAM) !isDesktop() && searchParams.has(ASK_TO_OPEN_QUERY_PARAM)
// Watch the system theme for changes
useEffect(() => {
const listener = (e: MediaQueryListEvent) => {
setThemeClass(e.matches ? Themes.Dark : Themes.Light)
}
darkModeMatcher?.addEventListener('change', listener)
return () => darkModeMatcher?.removeEventListener('change', listener)
}, [])
/** /**
* This function removes the query param to ask to open in desktop app * This function removes the query param to ask to open in desktop app
* and then navigates to the same route but with our custom protocol * and then navigates to the same route but with our custom protocol
@ -81,12 +73,17 @@ export const OpenInDesktopAppHandler = (props: React.PropsWithChildren) => {
appear appear
show={true} show={true}
as="div" as="div"
className="fixed inset-0 grid p-4 place-content-center bg-chalkboard-10 dark:bg-chalkboard-110" className={
theme +
` fixed inset-0 grid p-4 place-content-center ${
theme === Themes.Dark ? '!bg-chalkboard-110 text-chalkboard-20' : ''
}`
}
> >
<Transition.Child <Transition.Child
as="div" as="div"
className={`max-w-3xl py-6 px-10 flex flex-col items-center gap-12 className={`max-w-3xl py-6 px-10 flex flex-col items-center gap-8
mx-auto border rounded-lg shadow-lg bg-chalkboard-10 dark:bg-chalkboard-100`} mx-auto border rounded-lg shadow-lg dark:bg-chalkboard-100`}
enter="ease-out duration-300" enter="ease-out duration-300"
enterFrom="opacity-0 scale-95" enterFrom="opacity-0 scale-95"
enterTo="opacity-100 scale-100" enterTo="opacity-100 scale-100"
@ -95,47 +92,50 @@ export const OpenInDesktopAppHandler = (props: React.PropsWithChildren) => {
leaveTo="opacity-0 scale-95" leaveTo="opacity-0 scale-95"
style={{ zIndex: 10 }} style={{ zIndex: 10 }}
> >
<h1 className="text-2xl text-center "> <div>
<div className="mb-4">Launching </div> <h1 className="text-2xl">
<div className="flex items-center gap-4 flex-wrap text-4xl"> Launching{' '}
<Logo className="w-40" aria-label="Zoo" /> <img
<span>Design Studio</span> src={pathLogomarkSvg}
</div> className="w-48"
</h1> alt="Zoo Design Studio"
<div className="flex flex-col gap-4 items-center"> />
<p className="text-primary">Choose where to open this link...</p> </h1>
<div className="flex flex-col md:flex-row items-start justify-between gap-4 xl:gap-8"> </div>
<div className="flex flex-col gap-2"> <p className="text-primary flex items-center gap-2">
<ActionButton Choose where to open this link...
Element="button" </p>
className={buttonClasses + ' !text-base'} <div className="flex flex-col md:flex-row items-start justify-between gap-4 xl:gap-8">
onClick={onOpenInDesktopApp} <div className="flex flex-col gap-2">
iconEnd={{ icon: 'arrowRight' }}
>
Open in desktop app
</ActionButton>
<ActionButton
Element="externalLink"
className={
buttonClasses +
' text-sm border-transparent justify-center dark:bg-transparent'
}
to={`${VITE_KC_SITE_BASE_URL}/${APP_DOWNLOAD_PATH}`}
iconEnd={{ icon: 'link', bgClassName: '!bg-transparent' }}
>
Download desktop app
</ActionButton>
</div>
<ActionButton <ActionButton
Element="button" Element="button"
className={buttonClasses + ' -order-1 !text-base'} className={buttonClasses + ' !text-base'}
onClick={continueToWebApp} onClick={onOpenInDesktopApp}
iconStart={{ icon: 'arrowLeft' }} iconEnd={{ icon: 'arrowRight' }}
data-testid="continue-to-web-app-button"
> >
Continue to web app Open in desktop app
</ActionButton>
<ActionButton
Element="externalLink"
className={
buttonClasses +
' text-sm border-transparent justify-center dark:bg-transparent'
}
to={`${VITE_KC_SITE_BASE_URL}/${APP_DOWNLOAD_PATH}`}
iconEnd={{ icon: 'link', bgClassName: '!bg-transparent' }}
>
Download desktop app
</ActionButton> </ActionButton>
</div> </div>
<ActionButton
Element="button"
className={buttonClasses + ' -order-1 !text-base'}
onClick={continueToWebApp}
iconStart={{ icon: 'arrowLeft' }}
data-testid="continue-to-web-app-button"
>
Continue to web app
</ActionButton>
</div> </div>
</Transition.Child> </Transition.Child>
</Transition> </Transition>

View File

@ -159,7 +159,6 @@ export function ToastTextToCadSuccess({
projectName, projectName,
fileName, fileName,
isProjectNew, isProjectNew,
rootProjectName,
}: { }: {
toastId: string toastId: string
data: TextToCad_type & { fileName: string } data: TextToCad_type & { fileName: string }
@ -171,7 +170,6 @@ export function ToastTextToCadSuccess({
projectName: string projectName: string
fileName: string fileName: string
isProjectNew: boolean isProjectNew: boolean
rootProjectName: string
}) { }) {
const wrapperRef = useRef<HTMLDivElement | null>(null) const wrapperRef = useRef<HTMLDivElement | null>(null)
const canvasRef = useRef<HTMLCanvasElement | null>(null) const canvasRef = useRef<HTMLCanvasElement | null>(null)
@ -363,23 +361,26 @@ export function ToastTextToCadSuccess({
if (isDesktop()) { if (isDesktop()) {
// Delete the file from the project // Delete the file from the project
if (isProjectNew) { if (projectName && fileName) {
// Delete the entire project if it was newly created from text to CAD // You are in the new workflow for text to cad at the global application level
systemIOActor.send({ if (isProjectNew) {
type: SystemIOMachineEvents.deleteProject, // Delete the entire project if it was newly created from text to CAD
data: { systemIOActor.send({
requestedProjectName: rootProjectName, type: SystemIOMachineEvents.deleteProject,
}, data: {
}) requestedProjectName: projectName,
} else if (projectName && fileName) { },
// deletes the folder when inside the modeling page })
// The TTC Create will make a subdir, delete that dir with the main.kcl as well } else {
systemIOActor.send({ // Only delete the file if the project was preexisting
type: SystemIOMachineEvents.deleteProject, systemIOActor.send({
data: { type: SystemIOMachineEvents.deleteKCLFile,
requestedProjectName: projectName, data: {
}, requestedProjectName: projectName,
}) requestedFileName: fileName,
},
})
}
} }
} }

View File

@ -924,7 +924,7 @@ class EngineConnection extends EventTarget {
}, },
} }
// This is required for when the app is running stand-alone / within desktop app. // This is required for when KCMA is running stand-alone / within desktop app.
// Otherwise when run in a browser, the token is sent implicitly via // Otherwise when run in a browser, the token is sent implicitly via
// the Cookie header. // the Cookie header.
if (this.token) { if (this.token) {
@ -998,7 +998,7 @@ class EngineConnection extends EventTarget {
if (!message.success) { if (!message.success) {
const errorsString = message?.errors const errorsString = message?.errors
?.map((error) => { ?.map((error) => {
return ` - ${error?.error_code || 'Unknown error'}: ${error?.message || 'Unknown message'}` return ` - ${error.error_code}: ${error.message}`
}) })
.join('\n') .join('\n')
if (message.request_id) { if (message.request_id) {
@ -1016,7 +1016,7 @@ class EngineConnection extends EventTarget {
} }
const firstError = message?.errors[0] const firstError = message?.errors[0]
if (firstError?.error_code === 'auth_token_invalid') { if (firstError.error_code === 'auth_token_invalid') {
this.state = { this.state = {
type: EngineConnectionStateType.Disconnecting, type: EngineConnectionStateType.Disconnecting,
value: { value: {
@ -1030,7 +1030,7 @@ class EngineConnection extends EventTarget {
this.disconnectAll() this.disconnectAll()
} }
if (firstError?.error_code === 'internal_api') { if (firstError.error_code === 'internal_api') {
this.state = { this.state = {
type: EngineConnectionStateType.Disconnecting, type: EngineConnectionStateType.Disconnecting,
value: { value: {

View File

@ -10,16 +10,12 @@ import {
kclSamplesManifestWithNoMultipleFiles, kclSamplesManifestWithNoMultipleFiles,
} from '@src/lib/kclSamples' } from '@src/lib/kclSamples'
import { getUniqueProjectName } from '@src/lib/desktopFS' import { getUniqueProjectName } from '@src/lib/desktopFS'
import { IS_ML_EXPERIMENTAL } from '@src/lib/constants' import { IS_ML_EXPERIMENTAL, PROJECT_ENTRYPOINT } from '@src/lib/constants'
import toast from 'react-hot-toast' import toast from 'react-hot-toast'
import { reportRejection } from '@src/lib/trap' import { reportRejection } from '@src/lib/trap'
import { relevantFileExtensions } from '@src/lang/wasmUtils' import { relevantFileExtensions } from '@src/lang/wasmUtils'
import { import { getStringAfterLastSeparator, webSafePathSplit } from '@src/lib/paths'
getStringAfterLastSeparator, import { FILE_EXT } from '@src/lib/constants'
joinOSPaths,
webSafePathSplit,
} from '@src/lib/paths'
import { getAllSubDirectoriesAtProjectRoot } from '@src/machines/systemIO/snapshotContext'
function onSubmitKCLSampleCreation({ function onSubmitKCLSampleCreation({
sample, sample,
@ -73,32 +69,20 @@ function onSubmitKCLSampleCreation({
}) })
} }
/**
* When adding assemblies to an existing project create the assembly into a unique sub directory
*/
if (!isProjectNew) {
requestedFiles.forEach((requestedFile) => {
const subDirectoryName = projectPathPart
const firstLevelDirectories = getAllSubDirectoriesAtProjectRoot({
projectFolderName: requestedFile.requestedProjectName,
})
const uniqueSubDirectoryName = getUniqueProjectName(
subDirectoryName,
firstLevelDirectories
)
requestedFile.requestedProjectName = joinOSPaths(
requestedFile.requestedProjectName,
uniqueSubDirectoryName
)
})
}
if (requestedFiles.length === 1) { if (requestedFiles.length === 1) {
/**
* Navigates to the single file that could be renamed on disk for duplicates
*/
const folderNameBecomesKCLFileName = projectPathPart + FILE_EXT
// If the project is new create the single file as main.kcl
const requestedFileNameWithExtension = isProjectNew
? PROJECT_ENTRYPOINT
: folderNameBecomesKCLFileName
systemIOActor.send({ systemIOActor.send({
type: SystemIOMachineEvents.importFileFromURL, type: SystemIOMachineEvents.importFileFromURL,
data: { data: {
requestedProjectName: requestedFiles[0].requestedProjectName, requestedProjectName: requestedFiles[0].requestedProjectName,
requestedFileNameWithExtension: requestedFiles[0].requestedFileName, requestedFileNameWithExtension: requestedFileNameWithExtension,
requestedCode: requestedFiles[0].requestedCode, requestedCode: requestedFiles[0].requestedCode,
}, },
}) })
@ -294,9 +278,10 @@ export function createApplicationCommands({
return value return value
}, },
options: ({ argumentsToSubmit }) => { options: ({ argumentsToSubmit }) => {
const samples = isDesktop() const samples =
? everyKclSample isDesktop() && argumentsToSubmit.method !== 'existingProject'
: kclSamplesManifestWithNoMultipleFiles ? everyKclSample
: kclSamplesManifestWithNoMultipleFiles
return samples.map((sample) => { return samples.map((sample) => {
return { return {
value: sample.pathFromProjectDirectoryToFirstFile, value: sample.pathFromProjectDirectoryToFirstFile,
@ -311,10 +296,17 @@ export function createApplicationCommands({
skip: true, skip: true,
options: ({ argumentsToSubmit }, _) => { options: ({ argumentsToSubmit }, _) => {
if (isDesktop() && typeof argumentsToSubmit.sample === 'string') { if (isDesktop() && typeof argumentsToSubmit.sample === 'string') {
return [ const kclSample = findKclSample(argumentsToSubmit.sample)
{ name: 'New project', value: 'newProject', isCurrent: true }, if (kclSample && kclSample.files.length > 1) {
{ name: 'Existing project', value: 'existingProject' }, return [
] { name: 'New project', value: 'newProject', isCurrent: true },
]
} else {
return [
{ name: 'New project', value: 'newProject', isCurrent: true },
{ name: 'Existing project', value: 'existingProject' },
]
}
} else { } else {
return [{ name: 'Overwrite', value: 'existingProject' }] return [{ name: 'Overwrite', value: 'existingProject' }]
} }

View File

@ -478,7 +478,7 @@ export const modelingMachineCommandConfig: StateMachineCommandSetConfig<
required: true, required: true,
defaultValue: 'Axis', defaultValue: 'Axis',
options: [ options: [
{ name: 'Sketch Axis', isCurrent: true, value: 'Axis' }, { name: 'Axis', isCurrent: true, value: 'Axis' },
{ name: 'Edge', isCurrent: false, value: 'Edge' }, { name: 'Edge', isCurrent: false, value: 'Edge' },
], ],
hidden: (context) => Boolean(context.argumentsToSubmit.nodeToEdit), hidden: (context) => Boolean(context.argumentsToSubmit.nodeToEdit),
@ -489,7 +489,6 @@ export const modelingMachineCommandConfig: StateMachineCommandSetConfig<
commandContext.argumentsToSubmit.axisOrEdge as string commandContext.argumentsToSubmit.axisOrEdge as string
), ),
inputType: 'options', inputType: 'options',
displayName: 'Sketch Axis',
options: [ options: [
{ name: 'X Axis', isCurrent: true, value: 'X' }, { name: 'X Axis', isCurrent: true, value: 'X' },
{ name: 'Y Axis', isCurrent: false, value: 'Y' }, { name: 'Y Axis', isCurrent: false, value: 'Y' },

View File

@ -6,9 +6,9 @@ import {
ToastTextToCadError, ToastTextToCadError,
ToastTextToCadSuccess, ToastTextToCadSuccess,
} from '@src/components/ToastTextToCad' } from '@src/components/ToastTextToCad'
import { PROJECT_ENTRYPOINT } from '@src/lib/constants' import { FILE_EXT, PROJECT_ENTRYPOINT } from '@src/lib/constants'
import crossPlatformFetch from '@src/lib/crossPlatformFetch' import crossPlatformFetch from '@src/lib/crossPlatformFetch'
import { getUniqueProjectName } from '@src/lib/desktopFS' import { getNextFileName } from '@src/lib/desktopFS'
import { isDesktop } from '@src/lib/isDesktop' import { isDesktop } from '@src/lib/isDesktop'
import { kclManager, systemIOActor } from '@src/lib/singletons' import { kclManager, systemIOActor } from '@src/lib/singletons'
import { import {
@ -17,8 +17,6 @@ import {
} from '@src/machines/systemIO/utils' } from '@src/machines/systemIO/utils'
import { reportRejection } from '@src/lib/trap' import { reportRejection } from '@src/lib/trap'
import { toSync } from '@src/lib/utils' import { toSync } from '@src/lib/utils'
import { getAllSubDirectoriesAtProjectRoot } from '@src/machines/systemIO/snapshotContext'
import { joinOSPaths } from '@src/lib/paths'
export async function submitTextToCadPrompt( export async function submitTextToCadPrompt(
prompt: string, prompt: string,
@ -175,8 +173,7 @@ export async function submitAndAwaitTextToKclSystemIO({
} }
) )
let newFileName = PROJECT_ENTRYPOINT let newFileName = ''
let uniqueProjectName = projectName
const textToCadOutputCreated = await textToCadComplete const textToCadOutputCreated = await textToCadComplete
.catch((e) => { .catch((e) => {
@ -200,28 +197,30 @@ export async function submitAndAwaitTextToKclSystemIO({
const TRUNCATED_PROMPT_LENGTH = 24 const TRUNCATED_PROMPT_LENGTH = 24
// Only add the prompt name if it is a preexisting project // Only add the prompt name if it is a preexisting project
const subDirectoryAsPromptName = `${value.prompt newFileName = `${value.prompt
.slice(0, TRUNCATED_PROMPT_LENGTH) .slice(0, TRUNCATED_PROMPT_LENGTH)
.replace(/\s/gi, '-') .replace(/\s/gi, '-')
.replace(/\W/gi, '-') .replace(/\W/gi, '-')
.toLowerCase()}` .toLowerCase()}${FILE_EXT}`
// If the project is new generate a main.kcl
if (isProjectNew) {
newFileName = PROJECT_ENTRYPOINT
}
if (isDesktop()) { if (isDesktop()) {
if (!isProjectNew) { // We have to preemptively run our unique file name logic,
// If the project is new, use a sub dir // so that we can pass the unique file name to the toast,
const firstLevelDirectories = getAllSubDirectoriesAtProjectRoot({ // and by extension the file-deletion-on-reject logic.
projectFolderName: projectName, newFileName = getNextFileName({
}) entryName: newFileName,
const uniqueSubDirectoryName = getUniqueProjectName( baseDir: projectName,
subDirectoryAsPromptName, }).name
firstLevelDirectories
)
uniqueProjectName = joinOSPaths(projectName, uniqueSubDirectoryName)
}
systemIOActor.send({ systemIOActor.send({
type: SystemIOMachineEvents.createKCLFile, type: SystemIOMachineEvents.createKCLFile,
data: { data: {
requestedProjectName: uniqueProjectName, requestedProjectName: projectName,
requestedCode: value.code, requestedCode: value.code,
requestedFileNameWithExtension: newFileName, requestedFileNameWithExtension: newFileName,
}, },
@ -252,14 +251,11 @@ export async function submitAndAwaitTextToKclSystemIO({
toastId, toastId,
data: textToCadOutputCreated, data: textToCadOutputCreated,
token, token,
// This can be a subdir within the rootProjectName projectName: projectName,
projectName: uniqueProjectName,
fileName: newFileName, fileName: newFileName,
navigate, navigate,
isProjectNew, isProjectNew,
settings, settings,
// This is always the root project name, no subdir
rootProjectName: projectName,
}), }),
{ {
id: toastId, id: toastId,

View File

@ -1,6 +1,4 @@
import type { FileEntry } from '@src/lib/project'
import { systemIOActor } from '@src/lib/singletons' import { systemIOActor } from '@src/lib/singletons'
import { isArray } from '@src/lib/utils'
export const folderSnapshot = () => { export const folderSnapshot = () => {
const { folders } = systemIOActor.getSnapshot().context const { folders } = systemIOActor.getSnapshot().context
@ -11,48 +9,3 @@ export const defaultProjectFolderNameSnapshot = () => {
const { defaultProjectFolderName } = systemIOActor.getSnapshot().context const { defaultProjectFolderName } = systemIOActor.getSnapshot().context
return defaultProjectFolderName return defaultProjectFolderName
} }
/**
* From the application project directory go down to a project folder and list all the folders at that directory level
* application project directory: /home/documents/zoo-modeling-app-projects/
*
* /home/documents/zoo-modeling-app-projects/car-door/
* ├── handle
* ├── main.kcl
* └── window
*
* The two folders are handle and window
*
* @param {Object} params
* @param {string} params.projectFolderName - The name with no path information.
* @returns {FileEntry[]} An array of subdirectory names found at the root level of the specified project folder.
*/
export const getAllSubDirectoriesAtProjectRoot = ({
projectFolderName,
}: { projectFolderName: string }): FileEntry[] => {
const subDirectories: FileEntry[] = []
const { folders } = systemIOActor.getSnapshot().context
const projectFolder = folders.find((folder) => {
return folder.name === projectFolderName
})
// Find the subdirectories
if (projectFolder) {
// 1st level
const children = projectFolder.children
if (children) {
children.forEach((childFileOrDirectory) => {
// 2nd level
const secondLevelChild = childFileOrDirectory.children
// if secondLevelChild is null then it is a file
if (secondLevelChild && isArray(secondLevelChild)) {
// this is a directory!
subDirectories.push(childFileOrDirectory)
}
})
}
}
return subDirectories
}