Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
e7d00f148b | |||
d19a7df7e8 | |||
45fae52afc | |||
270f173aad | |||
ddcff1ba63 | |||
cb1b08d6b6 | |||
533fa749b2 | |||
af492d2cb6 | |||
26fba71abf | |||
859bfc7b28 | |||
3b1d1307c4 | |||
f5a2c84ce2 |
2
Makefile
@ -4,7 +4,7 @@ KCL_WASM_LIB_FILES := $(wildcard rust/**/*.rs)
|
||||
TS_SRC := $(wildcard src/**/*.tsx) $(wildcard src/**/*.ts)
|
||||
XSTATE_TYPEGENS := $(wildcard src/machines/*.typegen.ts)
|
||||
|
||||
dev: node_modules public/wasm_lib_bg.wasm $(XSTATE_TYPEGENS)
|
||||
dev: node_modules public/kcl_wasm_lib_bg.wasm $(XSTATE_TYPEGENS)
|
||||
yarn start
|
||||
|
||||
# I'm sorry this is so specific to my setup you may as well ignore this.
|
||||
|
@ -54,7 +54,7 @@ example = extrude(exampleSketch, length = 5)
|
||||
// Add color to a revolved solid.
|
||||
sketch001 = startSketchOn('XY')
|
||||
|> circle(center = [15, 0], radius = 5)
|
||||
|> revolve({ angle = 360, axis = 'y' }, %)
|
||||
|> revolve(angle = 360, axis = 'y')
|
||||
|> appearance(color = '#ff0000', metalness = 90, roughness = 90)
|
||||
```
|
||||
|
||||
|
@ -12,6 +12,8 @@ You can provide more than one sketch to extrude, and they will all be extruded i
|
||||
extrude(
|
||||
sketches: [Sketch],
|
||||
length: number,
|
||||
tagStart?: TagDeclarator,
|
||||
tagEnd?: TagDeclarator,
|
||||
): [Solid]
|
||||
```
|
||||
|
||||
@ -22,6 +24,8 @@ extrude(
|
||||
|----------|------|-------------|----------|
|
||||
| `sketches` | [`[Sketch]`](/docs/kcl/types/Sketch) | Which sketch or sketches should be extruded | Yes |
|
||||
| `length` | [`number`](/docs/kcl/types/number) | How far to extrude the given sketches | Yes |
|
||||
| `tagStart` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the start of the extrusion, i.e. the original sketch | No |
|
||||
| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the end of the extrusion, i.e. the new face created by extruding the original sketch | No |
|
||||
|
||||
### Returns
|
||||
|
||||
|
@ -15,6 +15,8 @@ loft(
|
||||
bezApproximateRational: bool,
|
||||
baseCurveIndex?: integer,
|
||||
tolerance?: number,
|
||||
tagStart?: TagDeclarator,
|
||||
tagEnd?: TagDeclarator,
|
||||
): Solid
|
||||
```
|
||||
|
||||
@ -28,6 +30,8 @@ loft(
|
||||
| `bezApproximateRational` | [`bool`](/docs/kcl/types/bool) | Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary. | Yes |
|
||||
| `baseCurveIndex` | `integer` | This can be set to override the automatically determined topological base curve, which is usually the first section encountered. | No |
|
||||
| `tolerance` | [`number`](/docs/kcl/types/number) | Tolerance for the loft operation. | No |
|
||||
| `tagStart` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the start of the loft, i.e. the original sketch | No |
|
||||
| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the end of the loft, i.e. the last sketch | No |
|
||||
|
||||
### Returns
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
---
|
||||
title: "scale"
|
||||
excerpt: "Scale a solid."
|
||||
excerpt: "Scale a solid or a sketch."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
Scale a solid.
|
||||
Scale a solid or a sketch.
|
||||
|
||||
By default the transform is applied in local sketch axis, therefore the origin will not move.
|
||||
|
||||
@ -12,10 +12,10 @@ If you want to apply the transform in global space, set `global` to `true`. The
|
||||
|
||||
```js
|
||||
scale(
|
||||
solids: SolidOrImportedGeometry,
|
||||
objects: SolidOrSketchOrImportedGeometry,
|
||||
scale: [number],
|
||||
global?: bool,
|
||||
): SolidOrImportedGeometry
|
||||
): SolidOrSketchOrImportedGeometry
|
||||
```
|
||||
|
||||
|
||||
@ -23,13 +23,13 @@ scale(
|
||||
|
||||
| Name | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `solids` | [`SolidOrImportedGeometry`](/docs/kcl/types/SolidOrImportedGeometry) | The solid or set of solids to scale. | Yes |
|
||||
| `objects` | [`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) | The solid, sketch, or set of solids or sketches to scale. | Yes |
|
||||
| `scale` | [`[number]`](/docs/kcl/types/number) | The scale factor for the x, y, and z axes. | Yes |
|
||||
| `global` | [`bool`](/docs/kcl/types/bool) | If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. | No |
|
||||
|
||||
### Returns
|
||||
|
||||
[`SolidOrImportedGeometry`](/docs/kcl/types/SolidOrImportedGeometry) - Data for a solid or an imported geometry.
|
||||
[`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) - Data for a solid or an imported geometry.
|
||||
|
||||
|
||||
### Examples
|
||||
|
18638
docs/kcl/std.json
@ -16,6 +16,8 @@ sweep(
|
||||
path: SweepPath,
|
||||
sectional?: bool,
|
||||
tolerance?: number,
|
||||
tagStart?: TagDeclarator,
|
||||
tagEnd?: TagDeclarator,
|
||||
): [Solid]
|
||||
```
|
||||
|
||||
@ -28,6 +30,8 @@ sweep(
|
||||
| `path` | [`SweepPath`](/docs/kcl/types/SweepPath) | The path to sweep the sketch along | Yes |
|
||||
| `sectional` | [`bool`](/docs/kcl/types/bool) | If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components. | No |
|
||||
| `tolerance` | [`number`](/docs/kcl/types/number) | Tolerance for this operation | No |
|
||||
| `tagStart` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the start of the sweep, i.e. the original sketch | No |
|
||||
| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the end of the sweep | No |
|
||||
|
||||
### Returns
|
||||
|
||||
|
66
docs/kcl/types/SolidOrSketchOrImportedGeometry.md
Normal file
@ -0,0 +1,66 @@
|
||||
---
|
||||
title: "SolidOrSketchOrImportedGeometry"
|
||||
excerpt: "Data for a solid or an imported geometry."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
Data for a solid or an imported geometry.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**This schema accepts exactly one of the following:**
|
||||
|
||||
Data for an imported geometry.
|
||||
|
||||
**Type:** `object`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Properties
|
||||
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `type` |enum: `importedGeometry`| | No |
|
||||
| `id` |[`string`](/docs/kcl/types/string)| The ID of the imported geometry. | No |
|
||||
| `value` |`[` [`string`](/docs/kcl/types/string) `]`| The original file paths. | No |
|
||||
|
||||
|
||||
----
|
||||
|
||||
**Type:** `[object, array]`
|
||||
|
||||
`[` [`Solid`](/docs/kcl/types/Solid) `]`
|
||||
|
||||
|
||||
|
||||
## Properties
|
||||
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `type` |enum: `solidSet`| | No |
|
||||
|
||||
|
||||
----
|
||||
|
||||
**Type:** `[object, array]`
|
||||
|
||||
`[` [`Sketch`](/docs/kcl/types/Sketch) `]`
|
||||
|
||||
|
||||
|
||||
## Properties
|
||||
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `type` |enum: `sketchSet`| | No |
|
||||
|
||||
|
||||
----
|
||||
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@ import { test, expect } from './zoo-test'
|
||||
import * as fsp from 'fs/promises'
|
||||
import { executorInputPath, getUtils } from './test-utils'
|
||||
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
||||
import path from 'path'
|
||||
import path, { join } from 'path'
|
||||
|
||||
test.describe('Command bar tests', { tag: ['@skipWin'] }, () => {
|
||||
test('Extrude from command bar selects extrude line after', async ({
|
||||
@ -487,4 +487,53 @@ test.describe('Command bar tests', { tag: ['@skipWin'] }, () => {
|
||||
await toolbar.expectFileTreeState(['main.kcl', 'test.kcl'])
|
||||
})
|
||||
})
|
||||
|
||||
test(`Can add a named parameter or constant`, async ({
|
||||
page,
|
||||
homePage,
|
||||
context,
|
||||
cmdBar,
|
||||
scene,
|
||||
editor,
|
||||
}) => {
|
||||
const projectName = 'test'
|
||||
const beforeKclCode = `a = 5
|
||||
b = a * a
|
||||
c = 3 + a`
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const testProject = join(dir, projectName)
|
||||
await fsp.mkdir(testProject, { recursive: true })
|
||||
await fsp.writeFile(join(testProject, 'main.kcl'), beforeKclCode, 'utf-8')
|
||||
})
|
||||
await homePage.openProject(projectName)
|
||||
// TODO: you probably shouldn't need an engine connection to add a parameter,
|
||||
// but you do because all modeling commands have that requirement
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
await test.step(`Go through the command palette flow`, async () => {
|
||||
await cmdBar.cmdBarOpenBtn.click()
|
||||
await cmdBar.chooseCommand('create parameter')
|
||||
await cmdBar.expectState({
|
||||
stage: 'arguments',
|
||||
commandName: 'Create parameter',
|
||||
currentArgKey: 'value',
|
||||
currentArgValue: '5',
|
||||
headerArguments: {
|
||||
Value: '',
|
||||
},
|
||||
highlightedHeaderArg: 'value',
|
||||
})
|
||||
await cmdBar.argumentInput.locator('[contenteditable]').fill(`b - 5`)
|
||||
// TODO: we have no loading indicator for the KCL argument input calculation
|
||||
await page.waitForTimeout(100)
|
||||
await cmdBar.progressCmdBar()
|
||||
await cmdBar.expectState({
|
||||
stage: 'commandBarClosed',
|
||||
})
|
||||
})
|
||||
|
||||
await editor.expectEditor.toContain(
|
||||
`a = 5b = a * amyParameter001 = b - 5c = 3 + a`
|
||||
)
|
||||
})
|
||||
})
|
||||
|
@ -726,10 +726,10 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
|
||||
|> line(end = [2, 0])
|
||||
|> line(end = [0, -10])
|
||||
|> close()
|
||||
|> revolve({
|
||||
axis: revolveAxis,
|
||||
angle: 90
|
||||
}, %)
|
||||
|> revolve(
|
||||
axis = revolveAxis,
|
||||
angle = 90
|
||||
)
|
||||
`
|
||||
)
|
||||
})
|
||||
|
@ -21,7 +21,7 @@ sketch001 = startSketchOn('XZ')
|
||||
|> angledLine([-45, length001], %)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
revolve001 = revolve({ axis = "X" }, sketch001)
|
||||
revolve001 = revolve(sketch001, axis = "X")
|
||||
triangle()
|
||||
|> extrude(length = 30)
|
||||
plane001 = offsetPlane('XY', offset = 10)
|
||||
@ -126,7 +126,7 @@ test.describe('Feature Tree pane', () => {
|
||||
await testViewSource({
|
||||
operationName: 'Revolve',
|
||||
operationIndex: 0,
|
||||
expectedActiveLine: 'revolve001 = revolve({ axis = "X" }, sketch001)',
|
||||
expectedActiveLine: 'revolve001 = revolve(sketch001, axis = "X")',
|
||||
})
|
||||
await testViewSource({
|
||||
operationName: 'Triangle',
|
||||
@ -231,10 +231,10 @@ test.describe('Feature Tree pane', () => {
|
||||
|> circle(center = [0, 0], radius = 5)
|
||||
renamedExtrude = extrude(sketch001, length = ${initialInput})`
|
||||
const newConstantName = 'distance001'
|
||||
const expectedCode = `sketch001 = startSketchOn('XZ')
|
||||
const expectedCode = `${newConstantName} = 23
|
||||
sketch001 = startSketchOn('XZ')
|
||||
|> circle(center = [0, 0], radius = 5)
|
||||
${newConstantName} = 23
|
||||
renamedExtrude = extrude(sketch001, length = ${newConstantName})`
|
||||
renamedExtrude = extrude(sketch001, length = ${newConstantName})`
|
||||
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const testDir = join(dir, 'test-sample')
|
||||
|
@ -850,159 +850,157 @@ openSketch = startSketchOn('XY')
|
||||
})
|
||||
})
|
||||
|
||||
test(`Shift-click to select and deselect sketch segments`, async ({
|
||||
page,
|
||||
homePage,
|
||||
scene,
|
||||
editor,
|
||||
}) => {
|
||||
// Locators
|
||||
const firstPointLocation = { x: 200, y: 100 }
|
||||
const secondPointLocation = { x: 800, y: 100 }
|
||||
const thirdPointLocation = { x: 800, y: 400 }
|
||||
const fristSegmentLocation = { x: 750, y: 100 }
|
||||
const secondSegmentLocation = { x: 800, y: 150 }
|
||||
const planeLocation = { x: 700, y: 200 }
|
||||
test.fixme(
|
||||
`Shift-click to select and deselect sketch segments`,
|
||||
async ({ page, homePage, scene, editor }) => {
|
||||
// Locators
|
||||
const firstPointLocation = { x: 200, y: 100 }
|
||||
const secondPointLocation = { x: 800, y: 100 }
|
||||
const thirdPointLocation = { x: 800, y: 400 }
|
||||
const fristSegmentLocation = { x: 750, y: 100 }
|
||||
const secondSegmentLocation = { x: 800, y: 150 }
|
||||
const planeLocation = { x: 700, y: 200 }
|
||||
|
||||
// Click helpers
|
||||
const [clickFirstPoint] = scene.makeMouseHelpers(
|
||||
firstPointLocation.x,
|
||||
firstPointLocation.y
|
||||
)
|
||||
const [clickSecondPoint] = scene.makeMouseHelpers(
|
||||
secondPointLocation.x,
|
||||
secondPointLocation.y
|
||||
)
|
||||
const [clickThirdPoint] = scene.makeMouseHelpers(
|
||||
thirdPointLocation.x,
|
||||
thirdPointLocation.y
|
||||
)
|
||||
const [clickFirstSegment] = scene.makeMouseHelpers(
|
||||
fristSegmentLocation.x,
|
||||
fristSegmentLocation.y
|
||||
)
|
||||
const [clickSecondSegment] = scene.makeMouseHelpers(
|
||||
secondSegmentLocation.x,
|
||||
secondSegmentLocation.y
|
||||
)
|
||||
const [clickPlane] = scene.makeMouseHelpers(
|
||||
planeLocation.x,
|
||||
planeLocation.y
|
||||
)
|
||||
|
||||
// Colors
|
||||
const edgeColorWhite: [number, number, number] = [220, 220, 220]
|
||||
const edgeColorBlue: [number, number, number] = [20, 20, 200]
|
||||
const backgroundColor: [number, number, number] = [30, 30, 30]
|
||||
const tolerance = 40
|
||||
const timeout = 150
|
||||
|
||||
// Setup
|
||||
await test.step(`Initial test setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// Wait for the scene and stream to load
|
||||
await scene.expectPixelColor(
|
||||
backgroundColor,
|
||||
secondPointLocation,
|
||||
tolerance
|
||||
// Click helpers
|
||||
const [clickFirstPoint] = scene.makeMouseHelpers(
|
||||
firstPointLocation.x,
|
||||
firstPointLocation.y
|
||||
)
|
||||
const [clickSecondPoint] = scene.makeMouseHelpers(
|
||||
secondPointLocation.x,
|
||||
secondPointLocation.y
|
||||
)
|
||||
const [clickThirdPoint] = scene.makeMouseHelpers(
|
||||
thirdPointLocation.x,
|
||||
thirdPointLocation.y
|
||||
)
|
||||
const [clickFirstSegment] = scene.makeMouseHelpers(
|
||||
fristSegmentLocation.x,
|
||||
fristSegmentLocation.y
|
||||
)
|
||||
const [clickSecondSegment] = scene.makeMouseHelpers(
|
||||
secondSegmentLocation.x,
|
||||
secondSegmentLocation.y
|
||||
)
|
||||
const [clickPlane] = scene.makeMouseHelpers(
|
||||
planeLocation.x,
|
||||
planeLocation.y
|
||||
)
|
||||
})
|
||||
|
||||
await test.step('Select and deselect a single sketch segment', async () => {
|
||||
await test.step('Get into sketch mode', async () => {
|
||||
await editor.closePane()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickPlane()
|
||||
await page.waitForTimeout(1000)
|
||||
})
|
||||
await test.step('Draw sketch', async () => {
|
||||
await clickFirstPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickThirdPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Deselect line tool', async () => {
|
||||
const btnLine = page.getByTestId('line')
|
||||
const btnLineAriaPressed = await btnLine.getAttribute('aria-pressed')
|
||||
if (btnLineAriaPressed === 'true') {
|
||||
await btnLine.click()
|
||||
}
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Select the first segment', async () => {
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
// Colors
|
||||
const edgeColorWhite: [number, number, number] = [220, 220, 220]
|
||||
const edgeColorBlue: [number, number, number] = [20, 20, 200]
|
||||
const backgroundColor: [number, number, number] = [30, 30, 30]
|
||||
const tolerance = 40
|
||||
const timeout = 150
|
||||
|
||||
// Setup
|
||||
await test.step(`Initial test setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// Wait for the scene and stream to load
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
backgroundColor,
|
||||
secondPointLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Select the second segment (Shift-click)', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
|
||||
await test.step('Select and deselect a single sketch segment', async () => {
|
||||
await test.step('Get into sketch mode', async () => {
|
||||
await editor.closePane()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickPlane()
|
||||
await page.waitForTimeout(1000)
|
||||
})
|
||||
await test.step('Draw sketch', async () => {
|
||||
await clickFirstPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickThirdPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Deselect line tool', async () => {
|
||||
const btnLine = page.getByTestId('line')
|
||||
const btnLineAriaPressed = await btnLine.getAttribute('aria-pressed')
|
||||
if (btnLineAriaPressed === 'true') {
|
||||
await btnLine.click()
|
||||
}
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Select the first segment', async () => {
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Select the second segment (Shift-click)', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Deselect the first segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Deselect the second segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
})
|
||||
await test.step('Deselect the first segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Deselect the second segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
test(`Offset plane point-and-click`, async ({
|
||||
context,
|
||||
@ -1880,6 +1878,119 @@ fillet04 = fillet(extrude001, radius = 5, tags = [getOppositeEdge(seg02)])
|
||||
})
|
||||
})
|
||||
|
||||
test(`Fillet with large radius should update code even if engine fails`, async ({
|
||||
context,
|
||||
page,
|
||||
homePage,
|
||||
scene,
|
||||
editor,
|
||||
toolbar,
|
||||
cmdBar,
|
||||
}) => {
|
||||
// Create a cube with small edges that will cause some fillets to fail
|
||||
const initialCode = `sketch001 = startSketchOn('XY')
|
||||
profile001 = startProfileAt([0, 0], sketch001)
|
||||
|> yLine(length = -1)
|
||||
|> xLine(length = -10)
|
||||
|> yLine(length = 10)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude001 = extrude(profile001, length = 5)
|
||||
`
|
||||
const taggedSegment = `yLine(length = -1, tag = $seg01)`
|
||||
const filletExpression = `fillet(radius = 1000, tags = [getNextAdjacentEdge(seg01)])`
|
||||
|
||||
// Locators
|
||||
const edgeLocation = { x: 659, y: 313 }
|
||||
const bodyLocation = { x: 594, y: 313 }
|
||||
|
||||
// Colors
|
||||
const edgeColorWhite: [number, number, number] = [248, 248, 248]
|
||||
const edgeColorYellow: [number, number, number] = [251, 251, 120] // Mac:B=251,251,90 Ubuntu:240,241,180, Windows:240,241,180
|
||||
const backgroundColor: [number, number, number] = [30, 30, 30]
|
||||
const bodyColor: [number, number, number] = [155, 155, 155]
|
||||
const lowTolerance = 20
|
||||
const highTolerance = 70
|
||||
|
||||
// Setup
|
||||
await test.step(`Initial test setup`, async () => {
|
||||
await context.addInitScript((initialCode) => {
|
||||
localStorage.setItem('persistCode', initialCode)
|
||||
}, initialCode)
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// verify modeling scene is loaded
|
||||
await scene.expectPixelColor(backgroundColor, edgeLocation, lowTolerance)
|
||||
|
||||
// wait for stream to load
|
||||
await scene.expectPixelColor(bodyColor, bodyLocation, highTolerance)
|
||||
})
|
||||
|
||||
// Test
|
||||
await test.step('Select edges and apply oversized fillet', async () => {
|
||||
await test.step(`Select the edge`, async () => {
|
||||
await scene.expectPixelColor(edgeColorWhite, edgeLocation, lowTolerance)
|
||||
const [clickOnTheEdge] = scene.makeMouseHelpers(
|
||||
edgeLocation.x,
|
||||
edgeLocation.y
|
||||
)
|
||||
await clickOnTheEdge()
|
||||
await scene.expectPixelColor(
|
||||
edgeColorYellow,
|
||||
edgeLocation,
|
||||
highTolerance // Ubuntu color mismatch can require high tolerance
|
||||
)
|
||||
})
|
||||
|
||||
await test.step(`Apply fillet`, async () => {
|
||||
await page.waitForTimeout(100)
|
||||
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({
|
||||
commandName: 'Fillet',
|
||||
highlightedHeaderArg: 'radius',
|
||||
currentArgKey: 'radius',
|
||||
currentArgValue: '5',
|
||||
headerArguments: {
|
||||
Selection: '1 sweepEdge',
|
||||
Radius: '',
|
||||
},
|
||||
stage: 'arguments',
|
||||
})
|
||||
// Set a large radius (1000)
|
||||
await cmdBar.currentArgumentInput.locator('.cm-content').fill('1000')
|
||||
await cmdBar.progressCmdBar()
|
||||
await cmdBar.expectState({
|
||||
commandName: 'Fillet',
|
||||
headerArguments: {
|
||||
Selection: '1 sweepEdge',
|
||||
Radius: '1000',
|
||||
},
|
||||
stage: 'review',
|
||||
})
|
||||
// Apply fillet with large radius
|
||||
await cmdBar.progressCmdBar()
|
||||
})
|
||||
})
|
||||
|
||||
await test.step('Verify code is updated regardless of execution errors', async () => {
|
||||
await editor.expectEditor.toContain(taggedSegment)
|
||||
await editor.expectEditor.toContain(filletExpression)
|
||||
})
|
||||
})
|
||||
|
||||
test(`Chamfer point-and-click`, async ({
|
||||
context,
|
||||
page,
|
||||
@ -2810,7 +2921,7 @@ segAng(rectangleSegmentA002),
|
||||
await cmdBar.progressCmdBar()
|
||||
await cmdBar.progressCmdBar()
|
||||
|
||||
const newCodeToFind = `revolve001 = revolve({ angle = 360, axis = 'X' }, sketch002)`
|
||||
const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = 'X')`
|
||||
expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy()
|
||||
})
|
||||
test('revolve surface around edge from an extruded solid2d', async ({
|
||||
@ -2860,7 +2971,7 @@ radius = 8.69
|
||||
await page.getByText(lineCodeToSelection).click()
|
||||
await cmdBar.progressCmdBar()
|
||||
|
||||
const newCodeToFind = `revolve001 = revolve({angle = 360, axis = getOppositeEdge(rectangleSegmentA001)}, sketch002) `
|
||||
const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = getOppositeEdge(rectangleSegmentA001)) `
|
||||
expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy()
|
||||
})
|
||||
test('revolve sketch circle around line segment from startProfileAt sketch', async ({
|
||||
@ -2911,7 +3022,7 @@ radius = 8.69
|
||||
await page.getByText(lineCodeToSelection).click()
|
||||
await cmdBar.progressCmdBar()
|
||||
|
||||
const newCodeToFind = `revolve001 = revolve({ angle = 360, axis = seg01 }, sketch003)`
|
||||
const newCodeToFind = `revolve001 = revolve(sketch003, angle = 360, axis = seg01)`
|
||||
expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy()
|
||||
})
|
||||
})
|
||||
|
@ -196,64 +196,60 @@ test.describe('Prompt-to-edit tests', { tag: '@skipWin' }, () => {
|
||||
})
|
||||
})
|
||||
|
||||
test(`manual code selection rename`, async ({
|
||||
context,
|
||||
homePage,
|
||||
cmdBar,
|
||||
editor,
|
||||
page,
|
||||
scene,
|
||||
}) => {
|
||||
const body1CapCoords = { x: 571, y: 311 }
|
||||
test.fixme(
|
||||
`manual code selection rename`,
|
||||
async ({ context, homePage, cmdBar, editor, page, scene }) => {
|
||||
const body1CapCoords = { x: 571, y: 311 }
|
||||
|
||||
await context.addInitScript((file) => {
|
||||
localStorage.setItem('persistCode', file)
|
||||
}, file)
|
||||
await homePage.goToModelingScene()
|
||||
await scene.waitForExecutionDone()
|
||||
await context.addInitScript((file) => {
|
||||
localStorage.setItem('persistCode', file)
|
||||
}, file)
|
||||
await homePage.goToModelingScene()
|
||||
await scene.waitForExecutionDone()
|
||||
|
||||
const submittingToast = page.getByText('Submitting to Text-to-CAD API...')
|
||||
const successToast = page.getByText('Prompt to edit successful')
|
||||
const acceptBtn = page.getByRole('button', { name: 'checkmark Accept' })
|
||||
const submittingToast = page.getByText('Submitting to Text-to-CAD API...')
|
||||
const successToast = page.getByText('Prompt to edit successful')
|
||||
const acceptBtn = page.getByRole('button', { name: 'checkmark Accept' })
|
||||
|
||||
await test.step('wait for scene to load and select code in editor', async () => {
|
||||
// Find and select the text "sketch002" in the editor
|
||||
await editor.selectText('sketch002')
|
||||
await test.step('wait for scene to load and select code in editor', async () => {
|
||||
// Find and select the text "sketch002" in the editor
|
||||
await editor.selectText('sketch002')
|
||||
|
||||
// Verify the selection was made
|
||||
await editor.expectState({
|
||||
highlightedCode: '',
|
||||
activeLines: ["sketch002 = startSketchOn('XZ')"],
|
||||
diagnostics: [],
|
||||
// Verify the selection was made
|
||||
await editor.expectState({
|
||||
highlightedCode: '',
|
||||
activeLines: ["sketch002 = startSketchOn('XZ')"],
|
||||
diagnostics: [],
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
await test.step('fire off edit prompt', async () => {
|
||||
await scene.expectPixelColor([134, 134, 134], body1CapCoords, 15)
|
||||
await cmdBar.openCmdBar('promptToEdit')
|
||||
await page
|
||||
.getByTestId('cmd-bar-arg-value')
|
||||
.fill('Please rename to mySketch001')
|
||||
await page.waitForTimeout(100)
|
||||
await cmdBar.progressCmdBar()
|
||||
await expect(submittingToast).toBeVisible()
|
||||
await expect(submittingToast).not.toBeVisible({
|
||||
timeout: 2 * 60_000,
|
||||
await test.step('fire off edit prompt', async () => {
|
||||
await scene.expectPixelColor([134, 134, 134], body1CapCoords, 15)
|
||||
await cmdBar.openCmdBar('promptToEdit')
|
||||
await page
|
||||
.getByTestId('cmd-bar-arg-value')
|
||||
.fill('Please rename to mySketch001')
|
||||
await page.waitForTimeout(100)
|
||||
await cmdBar.progressCmdBar()
|
||||
await expect(submittingToast).toBeVisible()
|
||||
await expect(submittingToast).not.toBeVisible({
|
||||
timeout: 2 * 60_000,
|
||||
})
|
||||
await expect(successToast).toBeVisible()
|
||||
})
|
||||
await expect(successToast).toBeVisible()
|
||||
})
|
||||
|
||||
await test.step('verify rename change and accept it', async () => {
|
||||
await editor.expectEditor.toContain('mySketch001 = startSketchOn')
|
||||
await editor.expectEditor.not.toContain('sketch002 = startSketchOn')
|
||||
await editor.expectEditor.toContain(
|
||||
'extrude002 = extrude(mySketch001, length = 50)'
|
||||
)
|
||||
await test.step('verify rename change and accept it', async () => {
|
||||
await editor.expectEditor.toContain('mySketch001 = startSketchOn')
|
||||
await editor.expectEditor.not.toContain('sketch002 = startSketchOn')
|
||||
await editor.expectEditor.toContain(
|
||||
'extrude002 = extrude(mySketch001, length = 50)'
|
||||
)
|
||||
|
||||
await acceptBtn.click()
|
||||
await expect(successToast).not.toBeVisible()
|
||||
})
|
||||
})
|
||||
await acceptBtn.click()
|
||||
await expect(successToast).not.toBeVisible()
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
test('multiple body selections', async ({
|
||||
context,
|
||||
|
@ -405,8 +405,9 @@ extrude001 = extrude(sketch001, length = 50)
|
||||
await expect(successToastMessage).toBeVisible()
|
||||
}
|
||||
)
|
||||
// We updated this test such that you can have multiple exports going at once.
|
||||
test(
|
||||
'ensure you can not export while an export is already going',
|
||||
'ensure you CAN export while an export is already going',
|
||||
{ tag: ['@skipLinux', '@skipWin'] },
|
||||
async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
@ -441,22 +442,13 @@ extrude001 = extrude(sketch001, length = 50)
|
||||
const alreadyExportingToastMessage = page.getByText(`Already exporting`)
|
||||
const successToastMessage = page.getByText(`Exported successfully`)
|
||||
|
||||
await test.step('Blocked second export', async () => {
|
||||
await test.step('second export', async () => {
|
||||
await clickExportButton(page)
|
||||
|
||||
await expect(exportingToastMessage).toBeVisible()
|
||||
|
||||
await clickExportButton(page)
|
||||
|
||||
await test.step('The second export is blocked', async () => {
|
||||
// Find the toast.
|
||||
// Look out for the toast message
|
||||
await Promise.all([
|
||||
expect(exportingToastMessage.first()).toBeVisible(),
|
||||
expect(alreadyExportingToastMessage).toBeVisible(),
|
||||
])
|
||||
})
|
||||
|
||||
await test.step('The first export still succeeds', async () => {
|
||||
await Promise.all([
|
||||
expect(exportingToastMessage).not.toBeVisible({ timeout: 15_000 }),
|
||||
@ -486,12 +478,12 @@ extrude001 = extrude(sketch001, length = 50)
|
||||
expect(alreadyExportingToastMessage).not.toBeVisible(),
|
||||
])
|
||||
|
||||
await expect(successToastMessage).toBeVisible()
|
||||
await expect(successToastMessage).toHaveCount(2)
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
test(
|
||||
test.fixme(
|
||||
`Network health indicator only appears in modeling view`,
|
||||
{ tag: '@electron' },
|
||||
async ({ context, page }, testInfo) => {
|
||||
|
@ -187,7 +187,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).toBeVisible()
|
||||
})
|
||||
test.describe('Can edit segments by dragging their handles', () => {
|
||||
test.fixme('Can edit segments by dragging their handles', () => {
|
||||
const doEditSegmentsByDraggingHandle = async (
|
||||
page: Page,
|
||||
homePage: HomePageFixture,
|
||||
@ -666,7 +666,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
|> line(end = [12.73, -0.09])
|
||||
|> tangentialArcTo([24.95, -5.38], %)
|
||||
|> close()
|
||||
|> revolve({ axis = "X",}, %)`
|
||||
|> revolve(axis = "X")`
|
||||
)
|
||||
})
|
||||
|
||||
@ -753,7 +753,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
|> tangentialArcTo([24.95, -5.38], %)
|
||||
|> line(end = [1.97, 2.06])
|
||||
|> close()
|
||||
|> revolve({ axis = "X" }, %)`)
|
||||
|> revolve(axis = "X")`)
|
||||
})
|
||||
test('Can add multiple sketches', async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
@ -1200,7 +1200,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff(
|
||||
|> xLine(endAbsolute = 0 + .001)
|
||||
|> yLine(endAbsolute = 0)
|
||||
|> close()
|
||||
|> revolve({ axis = "Y" }, %)
|
||||
|> revolve(axis = "Y")
|
||||
|
||||
return lugSketch
|
||||
}
|
||||
@ -1454,7 +1454,7 @@ test.describe(`Sketching with offset planes`, () => {
|
||||
})
|
||||
|
||||
test.describe('multi-profile sketching', () => {
|
||||
test(
|
||||
test.fixme(
|
||||
`test it removes half-finished expressions when changing tools in sketch mode`,
|
||||
{ tag: ['@skipWin'] },
|
||||
async ({ context, page, scene, toolbar, editor, homePage, cmdBar }) => {
|
||||
@ -2570,10 +2570,11 @@ profile006 = startProfileAt([9.65, 3.82], sketch002)
|
||||
|> line(end = [2.13, -5.57])
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
revolve001 = revolve({
|
||||
revolve001 = revolve(
|
||||
profile004,
|
||||
angle = 45,
|
||||
axis = getNextAdjacentEdge(seg01)
|
||||
}, profile004)
|
||||
)
|
||||
extrude002 = extrude(profile006, length = 4)
|
||||
sketch003 = startSketchOn('-XZ')
|
||||
profile007 = startProfileAt([4.8, 7.55], sketch003)
|
||||
@ -2608,7 +2609,7 @@ profile011 = startProfileAt([5.07, -6.39], sketch003)
|
||||
|> close()
|
||||
extrude003 = extrude(profile011, length = 2.5)
|
||||
// TODO this breaks the test,
|
||||
// revolve002 = revolve({ angle = 45, axis = seg02 }, profile008)
|
||||
// revolve002 = revolve(profile008, angle = 45, axis = seg02)
|
||||
`
|
||||
)
|
||||
})
|
||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
@ -29,5 +29,5 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"kcl_version": "0.2.50"
|
||||
"kcl_version": "0.2.51"
|
||||
}
|
@ -142,10 +142,10 @@ sketch001 = startSketchOn(box, revolveAxis)
|
||||
|> line(end = [2, 0])
|
||||
|> line(end = [0, -10])
|
||||
|> close()
|
||||
|> revolve({
|
||||
axis: revolveAxis,
|
||||
angle: 90
|
||||
}, %)
|
||||
|> revolve(
|
||||
axis = revolveAxis,
|
||||
angle = 90
|
||||
)
|
||||
|
||||
sketch001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0.0, 0.0], %)
|
||||
|
@ -3,7 +3,7 @@ import { commonPoints, getUtils } from './test-utils'
|
||||
import { EngineCommand } from 'lang/std/artifactGraph'
|
||||
import { uuidv4 } from 'lib/utils'
|
||||
|
||||
test.describe('Test network and connection issues', () => {
|
||||
test.fixme('Test network and connection issues', () => {
|
||||
test(
|
||||
'simulate network down and network little widget',
|
||||
{ tag: '@skipLocalEngine' },
|
||||
|
@ -323,7 +323,7 @@ part009 = startSketchOn('XY')
|
||||
|> line(end = [0, pipeLength])
|
||||
|> angledLineToX({ angle = 60, to = pipeLargeDia }, %)
|
||||
|> close()
|
||||
rev = revolve({ axis = 'y' }, part009)
|
||||
rev = revolve(part009, axis = 'y')
|
||||
sketch006 = startSketchOn('XY')
|
||||
profile001 = circle(
|
||||
sketch006,
|
||||
@ -379,7 +379,7 @@ profile003 = startProfileAt([40.16, -120.48], sketch006)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await expect(u.codeLocator).not.toContainText(
|
||||
`rev = revolve({ axis: 'y' }, part009)`
|
||||
`rev = revolve(part009, axis: 'y')`
|
||||
)
|
||||
|
||||
// FIXME (commented section below), this test would select a wall that had a sketch on it, and delete the underlying extrude
|
||||
@ -451,19 +451,15 @@ profile003 = startProfileAt([40.16, -120.48], sketch006)
|
||||
await page.waitForTimeout(200)
|
||||
await expect(u.codeLocator).not.toContainText(codeToBeDeletedSnippet)
|
||||
})
|
||||
test('parent Solid should be select and deletable and uses custom planes to position children', async ({
|
||||
page,
|
||||
homePage,
|
||||
scene,
|
||||
cmdBar,
|
||||
editor,
|
||||
}) => {
|
||||
test.setTimeout(90_000)
|
||||
const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XY')
|
||||
test.fixme(
|
||||
'parent Solid should be select and deletable and uses custom planes to position children',
|
||||
async ({ page, homePage, scene, cmdBar, editor }) => {
|
||||
test.setTimeout(90_000)
|
||||
const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XY')
|
||||
yo = startProfileAt([4.83, 12.56], part001)
|
||||
|> line(end = [15.1, 2.48])
|
||||
|> line(end = [3.15, -9.85], tag = $seg01)
|
||||
@ -494,34 +490,35 @@ profile001 = startProfileAt([7.49, 9.96], sketch001)
|
||||
|> close()
|
||||
|
||||
`
|
||||
)
|
||||
}, KCL_DEFAULT_LENGTH)
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
const extrudeWall = { x: 575, y: 238 }
|
||||
|
||||
// DELETE with selection on face of parent
|
||||
await page.mouse.click(extrudeWall.x, extrudeWall.y)
|
||||
await page.waitForTimeout(100)
|
||||
await expect(page.locator('.cm-activeLine')).toHaveText(
|
||||
'|> line(end = [-15.17, -4.1])'
|
||||
)
|
||||
}, KCL_DEFAULT_LENGTH)
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await u.openAndClearDebugPanel()
|
||||
await page.keyboard.press('Delete')
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]', 10_000)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
const extrudeWall = { x: 575, y: 238 }
|
||||
|
||||
// DELETE with selection on face of parent
|
||||
await page.mouse.click(extrudeWall.x, extrudeWall.y)
|
||||
await page.waitForTimeout(100)
|
||||
await expect(page.locator('.cm-activeLine')).toHaveText(
|
||||
'|> line(end = [-15.17, -4.1])'
|
||||
)
|
||||
await u.openAndClearDebugPanel()
|
||||
await page.keyboard.press('Delete')
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]', 10_000)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await editor.expectEditor.not.toContain(`yoo = extrude(yo, length = 4)`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.expectEditor.toContain(`startSketchOn({plane={origin`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.snapshot()
|
||||
})
|
||||
await editor.expectEditor.not.toContain(`yoo = extrude(yo, length = 4)`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.expectEditor.toContain(`startSketchOn({plane={origin`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.snapshot()
|
||||
}
|
||||
)
|
||||
test('Hovering over 3d features highlights code, clicking puts the cursor in the right place and sends selection id to engine', async ({
|
||||
page,
|
||||
homePage,
|
||||
|
@ -977,67 +977,63 @@ fn cube`
|
||||
/**
|
||||
* This test assumes that the default value of the "highlight edges" setting is "on".
|
||||
*/
|
||||
test(`Toggle stream settings multiple times`, async ({
|
||||
page,
|
||||
scene,
|
||||
homePage,
|
||||
context,
|
||||
toolbar,
|
||||
cmdBar,
|
||||
}, testInfo) => {
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const projectDir = join(dir, 'project-000')
|
||||
await fsp.mkdir(projectDir, { recursive: true })
|
||||
await fsp.copyFile(
|
||||
executorInputPath('cube.kcl'),
|
||||
join(projectDir, 'main.kcl')
|
||||
)
|
||||
})
|
||||
test.fixme(
|
||||
`Toggle stream settings multiple times`,
|
||||
async ({ page, scene, homePage, context, toolbar, cmdBar }, testInfo) => {
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const projectDir = join(dir, 'project-000')
|
||||
await fsp.mkdir(projectDir, { recursive: true })
|
||||
await fsp.copyFile(
|
||||
executorInputPath('cube.kcl'),
|
||||
join(projectDir, 'main.kcl')
|
||||
)
|
||||
})
|
||||
|
||||
await test.step(`First snapshot`, async () => {
|
||||
await homePage.openProject('project-000')
|
||||
await toolbar.closePane('code')
|
||||
await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 20_000 })
|
||||
await scene.clickNoWhere()
|
||||
})
|
||||
await test.step(`First snapshot`, async () => {
|
||||
await homePage.openProject('project-000')
|
||||
await toolbar.closePane('code')
|
||||
await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 20_000 })
|
||||
await scene.clickNoWhere()
|
||||
})
|
||||
|
||||
const toast = (value: boolean) =>
|
||||
page.getByText(
|
||||
`Set highlight edges to "${String(value)}" as a user default`
|
||||
const toast = (value: boolean) =>
|
||||
page.getByText(
|
||||
`Set highlight edges to "${String(value)}" as a user default`
|
||||
)
|
||||
|
||||
await test.step(`Toggle highlightEdges off`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'off' }).click()
|
||||
const falseToast = toast(false)
|
||||
await expect(falseToast).toBeVisible()
|
||||
await falseToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
|
||||
await expect(scene.streamWrapper).not.toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
)
|
||||
|
||||
await test.step(`Toggle highlightEdges off`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'off' }).click()
|
||||
const falseToast = toast(false)
|
||||
await expect(falseToast).toBeVisible()
|
||||
await falseToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
await test.step(`Toggle highlightEdges on`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'on' }).click()
|
||||
const trueToast = toast(true)
|
||||
await expect(trueToast).toBeVisible()
|
||||
await trueToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
|
||||
await expect(scene.streamWrapper).not.toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
)
|
||||
|
||||
await test.step(`Toggle highlightEdges on`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'on' }).click()
|
||||
const trueToast = toast(true)
|
||||
await expect(trueToast).toBeVisible()
|
||||
await trueToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
|
||||
await expect(scene.streamWrapper).toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
)
|
||||
})
|
||||
await expect(scene.streamWrapper).toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
})
|
||||
|
@ -619,7 +619,7 @@ async function sendPromptFromCommandBar(page: Page, promptStr: string) {
|
||||
})
|
||||
}
|
||||
|
||||
test(
|
||||
test.fixme(
|
||||
'Text-to-CAD functionality',
|
||||
{ tag: '@electron' },
|
||||
async ({ context, page }, testInfo) => {
|
||||
|
@ -36,6 +36,7 @@
|
||||
"@xstate/inspect": "^0.8.0",
|
||||
"@xstate/react": "^4.1.1",
|
||||
"bonjour-service": "^1.3.0",
|
||||
"bson": "^6.10.3",
|
||||
"chokidar": "^4.0.1",
|
||||
"codemirror": "^6.0.1",
|
||||
"decamelize": "^6.0.0",
|
||||
@ -212,6 +213,7 @@
|
||||
"typescript-eslint": "^8.26.1",
|
||||
"vite": "^5.4.12",
|
||||
"vite-plugin-package-version": "^1.1.0",
|
||||
"vite-plugin-top-level-await": "^1.5.0",
|
||||
"vite-tsconfig-paths": "^4.3.2",
|
||||
"vitest": "^1.6.1",
|
||||
"vitest-webgl-canvas-mock": "^1.1.0",
|
||||
|
@ -41,7 +41,7 @@ ballsSketch = startSketchOn("XY")
|
||||
|> close()
|
||||
|
||||
// Revolve the ball to make a sphere and pattern around the inside wall
|
||||
balls = revolve({ axis = "X" }, ballsSketch)
|
||||
balls = revolve(ballsSketch, axis = "X")
|
||||
|> patternCircular3d(
|
||||
arcDegrees = 360,
|
||||
axis = [0, 0, 1],
|
||||
@ -66,7 +66,7 @@ chainSketch = startSketchOn("XY")
|
||||
|> close()
|
||||
|
||||
// Revolve the chain sketch
|
||||
chainHead = revolve({ axis = "X" }, chainSketch)
|
||||
chainHead = revolve(chainSketch, axis = "X")
|
||||
|> patternCircular3d(
|
||||
arcDegrees = 360,
|
||||
axis = [0, 0, 1],
|
||||
@ -86,7 +86,7 @@ linkSketch = startSketchOn("XZ")
|
||||
)
|
||||
|
||||
// Revolve the link sketch
|
||||
linkRevolve = revolve({ axis = 'Y', angle = 360 / nBalls }, linkSketch)
|
||||
linkRevolve = revolve(linkSketch, axis = 'Y', angle = 360 / nBalls)
|
||||
|> patternCircular3d(
|
||||
arcDegrees = 360,
|
||||
axis = [0, 0, 1],
|
||||
|
@ -82,5 +82,5 @@ brakeCaliperSketch = startSketchOn('XY')
|
||||
|> close()
|
||||
|
||||
// Revolve the brake caliper sketch
|
||||
revolve({ axis = "Y", angle = -70 }, brakeCaliperSketch)
|
||||
revolve(brakeCaliperSketch, axis = "Y", angle = -70)
|
||||
|> appearance(color = "#c82d2d", metalness = 90, roughness = 90)
|
||||
|
@ -40,5 +40,5 @@ tireSketch = startSketchOn("XY")
|
||||
|> close()
|
||||
|
||||
// Revolve the sketch to create the tire
|
||||
revolve({ axis = "Y" }, tireSketch)
|
||||
revolve(tireSketch, axis = "Y")
|
||||
|> appearance(color = "#0f0f0f", roughness = 80)
|
||||
|
@ -74,7 +74,7 @@ wheelCenterInner = startSketchOn('XY')
|
||||
|> yLine(endAbsolute = 0)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %)
|
||||
|> revolve(axis = 'y')
|
||||
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|
||||
|
||||
wheelCenterOuter = startSketchOn('XY')
|
||||
@ -88,7 +88,7 @@ wheelCenterOuter = startSketchOn('XY')
|
||||
|> yLine(endAbsolute = -wheelWidth / 20)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %)
|
||||
|> revolve(axis = 'y')
|
||||
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|
||||
|
||||
// Write a function that defines the spoke geometry, patterns and extrudes it
|
||||
@ -193,5 +193,5 @@ startSketchOn('XY')
|
||||
|> xLine(length = wheelWidth * 0.03)
|
||||
|> yLine(length = wheelWidth * 0.05)
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %)
|
||||
|> revolve(axis = 'y')
|
||||
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|
||||
|
@ -34,7 +34,7 @@ fn lug(plane, length, diameter) {
|
||||
|> xLine(endAbsolute = lugThreadDiameter)
|
||||
|> yLine(endAbsolute = 0)
|
||||
|> close()
|
||||
|> revolve({ axis = "Y" }, %)
|
||||
|> revolve(axis = "Y")
|
||||
|> appearance(color = "#dbcd70", roughness = 90, metalness = 90)
|
||||
return lugSketch
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
import 'car-wheel.kcl' as carWheel
|
||||
import 'car-wheel.kcl' as carWheel
|
||||
import 'car-rotor.kcl' as carRotor
|
||||
import "brake-caliper.kcl" as brakeCaliper
|
||||
import 'lug-nut.kcl' as lugNut
|
||||
|
@ -23,7 +23,7 @@ sketch001 = startSketchOn('XZ')
|
||||
], %, $rectangleSegmentC001)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
|> revolve({ angle = 360, axis = 'Y' }, %)
|
||||
|> revolve(angle = 360, axis = 'Y')
|
||||
|
||||
// Create an angled plane to sketch the supports
|
||||
plane001 = {
|
||||
@ -135,7 +135,7 @@ sketch005 = startSketchOn('XZ')
|
||||
|> xLine(endAbsolute = 0.15)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %)
|
||||
|> revolve(axis = 'y')
|
||||
|
||||
// Plunger and stem
|
||||
sketch006 = startSketchOn('XZ')
|
||||
@ -148,7 +148,7 @@ sketch006 = startSketchOn('XZ')
|
||||
|> tangentialArc({ radius = 0.6, offset = -90 }, %)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %)
|
||||
|> revolve(axis = 'y')
|
||||
|
||||
// Spiral plate
|
||||
sketch007 = startSketchOn(offsetPlane('XY', offset = 1.12))
|
||||
@ -210,7 +210,7 @@ sketch011 = startSketchOn('XZ')
|
||||
}, %)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %)
|
||||
|> revolve(axis = 'y')
|
||||
|
||||
// Draw and extrude handle
|
||||
sketch012 = startSketchOn(offsetPlane('XZ', offset = handleThickness / 2))
|
||||
|
@ -55,7 +55,7 @@ axis000 = {
|
||||
}
|
||||
|
||||
// create a single corner of the bin
|
||||
singleCorner = revolve({ angle = -90, axis = axis000 }, face(offsetPlane("YZ", offset = cornerRadius)))
|
||||
singleCorner = revolve(face(offsetPlane("YZ", offset = cornerRadius)), angle = -90, axis = axis000)
|
||||
|
||||
// create the corners of the bin
|
||||
corners = patternCircular3d(
|
||||
|
@ -52,7 +52,7 @@ axis000 = {
|
||||
}
|
||||
|
||||
// create a single corner of the bin
|
||||
singleCorner = revolve({ angle = -90, axis = axis000 }, face(offsetPlane("YZ", offset = cornerRadius)))
|
||||
singleCorner = revolve(face(offsetPlane("YZ", offset = cornerRadius)), angle = -90, axis = axis000)
|
||||
|
||||
// create the corners of the bin
|
||||
corners = patternCircular3d(
|
||||
|
@ -75,7 +75,7 @@ axis000 = {
|
||||
}
|
||||
|
||||
// create a single corner of the bin
|
||||
singleCorner = revolve({ angle = -90, axis = axis000 }, face(offsetPlane("YZ", offset = cornerRadius + binTol)))
|
||||
singleCorner = revolve(face(offsetPlane("YZ", offset = cornerRadius + binTol)), angle = -90, axis = axis000)
|
||||
|
||||
// create the corners of the bin
|
||||
corners = patternCircular3d(
|
||||
@ -291,10 +291,10 @@ axis001 = {
|
||||
}
|
||||
|
||||
// create a single corner of the bin
|
||||
lipSingleLengthCorner = revolve({ angle = -90, axis = axis001 }, lipFace(plane000))
|
||||
lipSingleLengthCorner = revolve(lipFace(plane000), angle = -90, axis = axis001)
|
||||
|
||||
// create a single corner of the bin
|
||||
lipSingleWidthCorner = revolve({ angle = 90, axis = axis001 }, lipFace(plane002))
|
||||
lipSingleWidthCorner = revolve(lipFace(plane002), angle = 90, axis = axis001)
|
||||
|
||||
// create the corners of the bin
|
||||
lipCorners000 = patternCircular3d(
|
||||
|
@ -68,7 +68,7 @@ axis000 = {
|
||||
}
|
||||
|
||||
// create a single corner of the bin
|
||||
singleCorner = revolve({ angle = -90, axis = axis000 }, face(offsetPlane("YZ", offset = cornerRadius + binTol)))
|
||||
singleCorner = revolve(face(offsetPlane("YZ", offset = cornerRadius + binTol)), angle = -90, axis = axis000)
|
||||
|
||||
// create the corners of the bin
|
||||
corners = patternCircular3d(
|
||||
|
@ -190,7 +190,7 @@ pipe = startSketchOn('XY')
|
||||
|> line(end = [0, -1])
|
||||
|> angledLine({ angle = 240, length = .5 }, %)
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %)
|
||||
|> revolve(axis = 'y')
|
||||
|> appearance(color = "#7b79d7")
|
||||
|
||||
// Sketch and extrude the wall
|
||||
|
@ -32,4 +32,4 @@ pipeProfile = outerProfile
|
||||
|> hole(innerProfile, %)
|
||||
|
||||
// revolve the pipe profile at the desired angle
|
||||
pipe = revolve({ axis = "Y", angle = bendAngle }, pipeProfile)
|
||||
pipe = revolve(pipeProfile, axis = "Y", angle = bendAngle)
|
||||
|
@ -33,4 +33,4 @@ pipeSketch = startSketchOn('XY')
|
||||
|> close()
|
||||
|
||||
// Revolve the sketch to create the pipe
|
||||
pipe = revolve({ axis = 'y' }, pipeSketch)
|
||||
pipe = revolve(pipeSketch, axis = 'y')
|
||||
|
@ -30,7 +30,8 @@ sketch001 = startSketchOn("-YZ")
|
||||
|> yLine(endAbsolute = segEndY(seg01))
|
||||
|> angledLineToY({ angle = 180 - 60, to = 0 }, %)
|
||||
|> close()
|
||||
part001 = revolve({
|
||||
part001 = revolve(
|
||||
sketch001,
|
||||
angle = 90,
|
||||
axis = {
|
||||
custom = {
|
||||
@ -38,7 +39,7 @@ part001 = revolve({
|
||||
origin = [0.0, height + .0001]
|
||||
}
|
||||
}
|
||||
}, sketch001)
|
||||
)
|
||||
|
||||
sketch002 = startSketchOn('-YZ')
|
||||
|> startProfileAt([wallsWidth / 2, 0], %)
|
||||
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
@ -3073,7 +3073,7 @@ DATA;
|
||||
#3057 = CARTESIAN_POINT('NONE', (0.051104890518972546, -0.039940414856583686, -0.0635));
|
||||
#3058 = CARTESIAN_POINT('NONE', (0.052242074077479335, -0.038876903045998674, -0.0635));
|
||||
#3059 = CARTESIAN_POINT('NONE', (0.05224392753122875, -0.03887516966712757, -0.0635));
|
||||
#3060 = CARTESIAN_POINT('NONE', (0.05311532463588208, -0.03767579444673181, -0.0635));
|
||||
#3060 = CARTESIAN_POINT('NONE', (0.05311532463588208, -0.03767579444673182, -0.0635));
|
||||
#3061 = CARTESIAN_POINT('NONE', (0.05311674489404425, -0.03767383962907501, -0.0635));
|
||||
#3062 = CARTESIAN_POINT('NONE', (0.053776795686355607, -0.03626367057234418, -0.0635));
|
||||
#3063 = CARTESIAN_POINT('NONE', (0.05377787147891932, -0.036261372189549286, -0.0635));
|
||||
@ -3087,7 +3087,7 @@ DATA;
|
||||
#3071 = CARTESIAN_POINT('NONE', (0.053252818350252196, -0.029748655756475863, -0.0635));
|
||||
#3072 = CARTESIAN_POINT('NONE', (0.05233460363130192, -0.028414043632913145, -0.0635));
|
||||
#3073 = CARTESIAN_POINT('NONE', (0.05233310706682834, -0.028411868397590818, -0.0635));
|
||||
#3074 = CARTESIAN_POINT('NONE', (0.05123295226616701, -0.02734405921816657, -0.0635));
|
||||
#3074 = CARTESIAN_POINT('NONE', (0.051232952266167, -0.02734405921816657, -0.0635));
|
||||
#3075 = CARTESIAN_POINT('NONE', (0.05123115916423111, -0.027342318835171704, -0.0635));
|
||||
#3076 = CARTESIAN_POINT('NONE', (0.0499865731843106, -0.02652506813979786, -0.0635));
|
||||
#3077 = CARTESIAN_POINT('NONE', (0.049984544679296, -0.026523736132881105, -0.0635));
|
||||
@ -3105,7 +3105,7 @@ DATA;
|
||||
#3089 = CARTESIAN_POINT('NONE', (0.0407616757108459, -0.02775624333996861, -0.0635));
|
||||
#3090 = CARTESIAN_POINT('NONE', (0.03976400232776854, -0.0288872140372878, -0.0635));
|
||||
#3091 = CARTESIAN_POINT('NONE', (0.03976237625653429, -0.028889057364922765, -0.0635));
|
||||
#3092 = B_SPLINE_CURVE_WITH_KNOTS('NONE', 2, (#3029, #3030, #3031, #3032, #3033, #3034, #3035, #3036, #3037, #3038, #3039, #3040, #3041, #3042, #3043, #3044, #3045, #3046, #3047, #3048, #3049, #3050, #3051, #3052, #3053, #3054, #3055, #3056, #3057, #3058, #3059, #3060, #3061, #3062, #3063, #3064, #3065, #3066, #3067, #3068, #3069, #3070, #3071, #3072, #3073, #3074, #3075, #3076, #3077, #3078, #3079, #3080, #3081, #3082, #3083, #3084, #3085, #3086, #3087, #3088, #3089, #3090, #3091), .UNSPECIFIED., .F., .F., (3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3), (-1, -0.9836065573770492, -0.9672131147540983, -0.9508196721311475, -0.9344262295081968, -0.9180327868852459, -0.9016393442622951, -0.8852459016393442, -0.8688524590163934, -0.8524590163934427, -0.8360655737704918, -0.819672131147541, -0.8032786885245902, -0.7868852459016393, -0.7704918032786885, -0.7540983606557377, -0.7377049180327868, -0.721311475409836, -0.7049180327868853, -0.6885245901639344, -0.6721311475409836, -0.6557377049180328, -0.639344262295082, -0.6229508196721312, -0.6065573770491803, -0.5901639344262295, -0.5737704918032787, -0.5573770491803278, -0.540983606557377, -0.5245901639344261, -0.5081967213114753, -0.49180327868852464, -0.4754098360655738, -0.45901639344262296, -0.4426229508196722, -0.42622950819672134, -0.4098360655737705, -0.39344262295081966, -0.3770491803278689, -0.36065573770491804, -0.3442622950819672, -0.3278688524590164, -0.3114754098360656, -0.29508196721311475, -0.27868852459016397, -0.26229508196721313, -0.24590163934426232, -0.22950819672131148, -0.21311475409836067, -0.19672131147540983, -0.18032786885245902, -0.1639344262295082, -0.14754098360655737, -0.13114754098360656, -0.11475409836065574, -0.09836065573770492, -0.0819672131147541, -0.06557377049180328, -0.04918032786885246, -0.03278688524590164, -0.01639344262295082, -0), .UNSPECIFIED.);
|
||||
#3092 = B_SPLINE_CURVE_WITH_KNOTS('NONE', 2, (#3029, #3030, #3031, #3032, #3033, #3034, #3035, #3036, #3037, #3038, #3039, #3040, #3041, #3042, #3043, #3044, #3045, #3046, #3047, #3048, #3049, #3050, #3051, #3052, #3053, #3054, #3055, #3056, #3057, #3058, #3059, #3060, #3061, #3062, #3063, #3064, #3065, #3066, #3067, #3068, #3069, #3070, #3071, #3072, #3073, #3074, #3075, #3076, #3077, #3078, #3079, #3080, #3081, #3082, #3083, #3084, #3085, #3086, #3087, #3088, #3089, #3090, #3091), .UNSPECIFIED., .F., .F., (3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3), (0, 0.01639344262295082, 0.03278688524590164, 0.04918032786885246, 0.06557377049180328, 0.0819672131147541, 0.09836065573770492, 0.11475409836065574, 0.13114754098360656, 0.14754098360655737, 0.1639344262295082, 0.18032786885245902, 0.19672131147540983, 0.21311475409836067, 0.22950819672131148, 0.24590163934426232, 0.26229508196721313, 0.27868852459016397, 0.29508196721311475, 0.3114754098360656, 0.3278688524590164, 0.3442622950819672, 0.36065573770491804, 0.3770491803278689, 0.39344262295081966, 0.4098360655737705, 0.42622950819672134, 0.4426229508196722, 0.45901639344262296, 0.4754098360655738, 0.49180327868852464, 0.5081967213114753, 0.5245901639344261, 0.540983606557377, 0.5573770491803278, 0.5737704918032787, 0.5901639344262295, 0.6065573770491803, 0.6229508196721312, 0.639344262295082, 0.6557377049180328, 0.6721311475409836, 0.6885245901639344, 0.7049180327868853, 0.721311475409836, 0.7377049180327868, 0.7540983606557377, 0.7704918032786885, 0.7868852459016393, 0.8032786885245902, 0.819672131147541, 0.8360655737704918, 0.8524590163934427, 0.8688524590163934, 0.8852459016393442, 0.9016393442622951, 0.9180327868852459, 0.9344262295081968, 0.9508196721311475, 0.9672131147540983, 0.9836065573770492, 1), .UNSPECIFIED.);
|
||||
#3093 = DIRECTION('NONE', (0, 0, 1));
|
||||
#3094 = VECTOR('NONE', #3093, 1);
|
||||
#3095 = CARTESIAN_POINT('NONE', (0.03976237625653429, -0.028889057364922765, -0.063501));
|
||||
|
@ -39,7 +39,7 @@ DATA;
|
||||
#23 = VERTEX_POINT('NONE', #22);
|
||||
#24 = CARTESIAN_POINT('NONE', (0.009555193704377126, 0.0381, 0.01030836525700516));
|
||||
#25 = VERTEX_POINT('NONE', #24);
|
||||
#26 = CARTESIAN_POINT('NONE', (0.011810999999999978, 0, -0.007619999999999995));
|
||||
#26 = CARTESIAN_POINT('NONE', (0.011810999999999981, 0, -0.0076199999999999974));
|
||||
#27 = VERTEX_POINT('NONE', #26);
|
||||
#28 = CARTESIAN_POINT('NONE', (0.0037719, 0, -0));
|
||||
#29 = VERTEX_POINT('NONE', #28);
|
||||
@ -95,7 +95,7 @@ DATA;
|
||||
#63 = AXIS2_PLACEMENT_3D('NONE', #62, #61, #60);
|
||||
#64 = CIRCLE('NONE', #63, 0.00762);
|
||||
#65 = CARTESIAN_POINT('NONE', (-0.008420618915550801, 0.0381, -0.011114374012594288));
|
||||
#66 = CARTESIAN_POINT('NONE', (-0.016775317593923766, 0.01905, -0.003827032886274202));
|
||||
#66 = CARTESIAN_POINT('NONE', (-0.016775317593923773, 0.01905, -0.003827032886274202));
|
||||
#67 = CARTESIAN_POINT('NONE', (-0.012407746826993343, -0, 0.006362700000000004));
|
||||
#68 = (
|
||||
BOUNDED_CURVE()
|
||||
@ -106,18 +106,18 @@ DATA;
|
||||
RATIONAL_B_SPLINE_CURVE((1, 1, 1))
|
||||
REPRESENTATION_ITEM('NONE')
|
||||
);
|
||||
#69 = DIRECTION('NONE', (-0.8660254037844387, 0, -0.49999999999999967));
|
||||
#69 = DIRECTION('NONE', (-0.8660254037844388, 0, -0.4999999999999997));
|
||||
#70 = DIRECTION('NONE', (0, 1, 0));
|
||||
#71 = CARTESIAN_POINT('NONE', (-0.005808633250155917, -0, 0.010172700000000003));
|
||||
#71 = CARTESIAN_POINT('NONE', (-0.0058086332501559165, -0, 0.010172700000000003));
|
||||
#72 = AXIS2_PLACEMENT_3D('NONE', #71, #70, #69);
|
||||
#73 = CIRCLE('NONE', #72, 0.007620000000000003);
|
||||
#73 = CIRCLE('NONE', #72, 0.007620000000000002);
|
||||
#74 = DIRECTION('NONE', (-0.3420201433256678, 0, 0.9396926207859089));
|
||||
#75 = DIRECTION('NONE', (0, 1.0000000000000002, -0));
|
||||
#76 = CARTESIAN_POINT('NONE', (-0.004068275783674349, 0.0381, -0.023072338489143286));
|
||||
#77 = AXIS2_PLACEMENT_3D('NONE', #76, #75, #74);
|
||||
#78 = CIRCLE('NONE', #77, 0.012725399999999994);
|
||||
#79 = CARTESIAN_POINT('NONE', (0.004111453664630743, 0.0381, -0.013324116532677054));
|
||||
#80 = CARTESIAN_POINT('NONE', (-0.006681894987404381, 0.01905, -0.01585590553916532));
|
||||
#80 = CARTESIAN_POINT('NONE', (-0.006681894987404388, 0.01905, -0.01585590553916532));
|
||||
#81 = CARTESIAN_POINT('NONE', (-0.012407746826993356, -0, -0.006362699999999989));
|
||||
#82 = (
|
||||
BOUNDED_CURVE()
|
||||
@ -128,18 +128,18 @@ DATA;
|
||||
RATIONAL_B_SPLINE_CURVE((1, 1, 1))
|
||||
REPRESENTATION_ITEM('NONE')
|
||||
);
|
||||
#83 = DIRECTION('NONE', (0.8660254037844382, 0, -0.5000000000000007));
|
||||
#84 = DIRECTION('NONE', (0, -0.9999999999999998, 0));
|
||||
#85 = CARTESIAN_POINT('NONE', (-0.023428266500311844, -0, 0.00000000000000001687538997430238));
|
||||
#83 = DIRECTION('NONE', (0.8660254037844384, 0, -0.5000000000000007));
|
||||
#84 = DIRECTION('NONE', (0, -1.0000000000000002, 0));
|
||||
#85 = CARTESIAN_POINT('NONE', (-0.02342826650031185, -0, 0.00000000000000001865174681370263));
|
||||
#86 = AXIS2_PLACEMENT_3D('NONE', #85, #84, #83);
|
||||
#87 = CIRCLE('NONE', #86, 0.012725399999999994);
|
||||
#87 = CIRCLE('NONE', #86, 0.012725400000000001);
|
||||
#88 = DIRECTION('NONE', (-0.6427876096865395, 0, -0.766044443118978));
|
||||
#89 = DIRECTION('NONE', (0, -1.0000000000000002, -0));
|
||||
#90 = CARTESIAN_POINT('NONE', (0.009009495250442175, 0.0381, -0.0074868578761104415));
|
||||
#91 = AXIS2_PLACEMENT_3D('NONE', #90, #89, #88);
|
||||
#92 = CIRCLE('NONE', #91, 0.007620000000000001);
|
||||
#93 = CARTESIAN_POINT('NONE', (0.013907536836253597, 0.0381, -0.0016495992195438261));
|
||||
#94 = CARTESIAN_POINT('NONE', (0.011837890161758862, 0.01905, -0.0125903677404439));
|
||||
#94 = CARTESIAN_POINT('NONE', (0.011837890161758855, 0.01905, -0.0125903677404439));
|
||||
#95 = CARTESIAN_POINT('NONE', (0.0007904803266814893, -0, -0.013982699999999994));
|
||||
#96 = (
|
||||
BOUNDED_CURVE()
|
||||
@ -150,19 +150,19 @@ DATA;
|
||||
RATIONAL_B_SPLINE_CURVE((1, 1, 1))
|
||||
REPRESENTATION_ITEM('NONE')
|
||||
);
|
||||
#97 = DIRECTION('NONE', (0.8660254037844388, -0, -0.49999999999999956));
|
||||
#98 = DIRECTION('NONE', (0, 0.9999999999999999, 0));
|
||||
#99 = CARTESIAN_POINT('NONE', (-0.005808633250155936, 0, -0.010172699999999996));
|
||||
#97 = DIRECTION('NONE', (0.866025403784439, -0, -0.4999999999999996));
|
||||
#98 = DIRECTION('NONE', (0, 1, 0));
|
||||
#99 = CARTESIAN_POINT('NONE', (-0.0058086332501559364, 0, -0.010172699999999996));
|
||||
#100 = AXIS2_PLACEMENT_3D('NONE', #99, #98, #97);
|
||||
#101 = CIRCLE('NONE', #100, 0.007620000000000001);
|
||||
#101 = CIRCLE('NONE', #100, 0.00762);
|
||||
#102 = DIRECTION('NONE', (-0.6427876096865413, 0, -0.7660444431189763));
|
||||
#103 = DIRECTION('NONE', (0, 0.9999999999999999, 0));
|
||||
#104 = CARTESIAN_POINT('NONE', (0.022087266284558753, 0.0381, 0.008098622736922445));
|
||||
#105 = AXIS2_PLACEMENT_3D('NONE', #104, #103, #102);
|
||||
#106 = CIRCLE('NONE', #105, 0.012725400000000064);
|
||||
#107 = CARTESIAN_POINT('NONE', (0.009555193704377126, 0.0381, 0.01030836525700516));
|
||||
#108 = CARTESIAN_POINT('NONE', (0.017208488154790785, 0.01905, 0.00216522897437961));
|
||||
#109 = CARTESIAN_POINT('NONE', (0.011810999999999978, -0, -0.007619999999999995));
|
||||
#108 = CARTESIAN_POINT('NONE', (0.01720848815479078, 0.01905, 0.0021652289743796134));
|
||||
#109 = CARTESIAN_POINT('NONE', (0.011810999999999981, -0, -0.0076199999999999974));
|
||||
#110 = (
|
||||
BOUNDED_CURVE()
|
||||
B_SPLINE_CURVE(2, (#107, #108, #109), .UNSPECIFIED., .F., .F.)
|
||||
@ -172,11 +172,11 @@ DATA;
|
||||
RATIONAL_B_SPLINE_CURVE((1, 1, 1))
|
||||
REPRESENTATION_ITEM('NONE')
|
||||
);
|
||||
#111 = DIRECTION('NONE', (-0.000000000000002373054384915535, 0, 1));
|
||||
#111 = DIRECTION('NONE', (-0.0000000000000018146886472883515, 0, 1));
|
||||
#112 = DIRECTION('NONE', (-0, -1, 0));
|
||||
#113 = CARTESIAN_POINT('NONE', (0.011811000000000009, -0, -0.02034540000000004));
|
||||
#113 = CARTESIAN_POINT('NONE', (0.011811000000000004, -0, -0.020345400000000034));
|
||||
#114 = AXIS2_PLACEMENT_3D('NONE', #113, #112, #111);
|
||||
#115 = CIRCLE('NONE', #114, 0.012725400000000046);
|
||||
#115 = CIRCLE('NONE', #114, 0.012725400000000036);
|
||||
#116 = DIRECTION('NONE', (0, 1, -0));
|
||||
#117 = VECTOR('NONE', #116, 1);
|
||||
#118 = CARTESIAN_POINT('NONE', (0.0037719, -0, 0));
|
||||
@ -256,14 +256,14 @@ DATA;
|
||||
);
|
||||
#177 = CARTESIAN_POINT('NONE', (0.0007904803266815029, -0, 0.013982700000000004));
|
||||
#178 = CARTESIAN_POINT('NONE', (-0.0030195196733185, -0, 0.02058181357683743));
|
||||
#179 = CARTESIAN_POINT('NONE', (-0.009618633250155922, -0, 0.01677181357683742));
|
||||
#179 = CARTESIAN_POINT('NONE', (-0.009618633250155923, -0, 0.01677181357683742));
|
||||
#180 = CARTESIAN_POINT('NONE', (-0.01621774682699334, -0, 0.012961813576837417));
|
||||
#181 = CARTESIAN_POINT('NONE', (-0.012407746826993343, -0, 0.006362700000000004));
|
||||
#182 = CARTESIAN_POINT('NONE', (-0.010343463710053215, 0.01905, 0.013844340424891662));
|
||||
#183 = CARTESIAN_POINT('NONE', (-0.01917915036563614, 0.01905, 0.017060267366826944));
|
||||
#184 = CARTESIAN_POINT('NONE', (-0.02239507730757142, 0.01905, 0.008224580711244014));
|
||||
#184 = CARTESIAN_POINT('NONE', (-0.022395077307571426, 0.01905, 0.008224580711244014));
|
||||
#185 = CARTESIAN_POINT('NONE', (-0.025611004249506707, 0.01905, -0.000611105944338923));
|
||||
#186 = CARTESIAN_POINT('NONE', (-0.016775317593923766, 0.01905, -0.003827032886274202));
|
||||
#186 = CARTESIAN_POINT('NONE', (-0.016775317593923773, 0.01905, -0.003827032886274202));
|
||||
#187 = CARTESIAN_POINT('NONE', (-0.01363300589983399, 0.0381, 0.0032065415281829547));
|
||||
#188 = CARTESIAN_POINT('NONE', (-0.020793463670222608, 0.0381, 0.0006003480360413621));
|
||||
#189 = CARTESIAN_POINT('NONE', (-0.018187270178081014, 0.0381, -0.00656010973434726));
|
||||
@ -278,12 +278,12 @@ DATA;
|
||||
REPRESENTATION_ITEM('NONE')
|
||||
SURFACE()
|
||||
);
|
||||
#193 = CARTESIAN_POINT('NONE', (-0.012407746826993344, -0, 0.006362700000000004));
|
||||
#194 = CARTESIAN_POINT('NONE', (-0.00873424026922052, -0, -0.000000000000000004726054498244314));
|
||||
#193 = CARTESIAN_POINT('NONE', (-0.012407746826993343, -0, 0.006362700000000004));
|
||||
#194 = CARTESIAN_POINT('NONE', (-0.008734240269220523, -0, -0.000000000000000004726054498244314));
|
||||
#195 = CARTESIAN_POINT('NONE', (-0.012407746826993356, -0, -0.006362699999999989));
|
||||
#196 = CARTESIAN_POINT('NONE', (-0.016775317593923766, 0.01905, -0.003827032886274204));
|
||||
#197 = CARTESIAN_POINT('NONE', (-0.008256169858566881, 0.019050000000000004, -0.006927749083260438));
|
||||
#198 = CARTESIAN_POINT('NONE', (-0.006681894987404381, 0.01905, -0.01585590553916532));
|
||||
#196 = CARTESIAN_POINT('NONE', (-0.016775317593923773, 0.01905, -0.003827032886274204));
|
||||
#197 = CARTESIAN_POINT('NONE', (-0.008256169858566887, 0.019050000000000004, -0.006927749083260438));
|
||||
#198 = CARTESIAN_POINT('NONE', (-0.006681894987404388, 0.01905, -0.01585590553916532));
|
||||
#199 = CARTESIAN_POINT('NONE', (-0.008420618915550801, 0.0381, -0.011114374012594288));
|
||||
#200 = CARTESIAN_POINT('NONE', (-0.0015166849060552505, 0.0381, -0.008601547533799802));
|
||||
#201 = CARTESIAN_POINT('NONE', (0.004111453664630743, 0.0381, -0.013324116532677054));
|
||||
@ -298,14 +298,14 @@ DATA;
|
||||
);
|
||||
#203 = CARTESIAN_POINT('NONE', (-0.012407746826993355, -0, -0.006362699999999989));
|
||||
#204 = CARTESIAN_POINT('NONE', (-0.016217746826993354, -0, -0.012961813576837412));
|
||||
#205 = CARTESIAN_POINT('NONE', (-0.009618633250155937, -0, -0.01677181357683742));
|
||||
#206 = CARTESIAN_POINT('NONE', (-0.003019519673318509, -0, -0.020581813576837412));
|
||||
#205 = CARTESIAN_POINT('NONE', (-0.009618633250155936, -0, -0.01677181357683742));
|
||||
#206 = CARTESIAN_POINT('NONE', (-0.0030195196733185095, -0, -0.020581813576837412));
|
||||
#207 = CARTESIAN_POINT('NONE', (0.0007904803266814893, -0, -0.013982699999999994));
|
||||
#208 = CARTESIAN_POINT('NONE', (-0.006681894987404382, 0.01905, -0.01585590553916532));
|
||||
#209 = CARTESIAN_POINT('NONE', (-0.0050491260880436714, 0.019049999999999997, -0.02511579811374694));
|
||||
#210 = CARTESIAN_POINT('NONE', (0.0042107664865379535, 0.01905, -0.02348302921438623));
|
||||
#211 = CARTESIAN_POINT('NONE', (0.01347065906111957, 0.019049999999999997, -0.02185026031502552));
|
||||
#212 = CARTESIAN_POINT('NONE', (0.011837890161758862, 0.01905, -0.0125903677404439));
|
||||
#208 = CARTESIAN_POINT('NONE', (-0.006681894987404389, 0.01905, -0.01585590553916532));
|
||||
#209 = CARTESIAN_POINT('NONE', (-0.005049126088043679, 0.019049999999999997, -0.02511579811374694));
|
||||
#210 = CARTESIAN_POINT('NONE', (0.0042107664865379466, 0.01905, -0.02348302921438623));
|
||||
#211 = CARTESIAN_POINT('NONE', (0.013470659061119567, 0.019049999999999997, -0.02185026031502552));
|
||||
#212 = CARTESIAN_POINT('NONE', (0.011837890161758855, 0.01905, -0.0125903677404439));
|
||||
#213 = CARTESIAN_POINT('NONE', (0.004111453664630743, 0.0381, -0.013324116532677054));
|
||||
#214 = CARTESIAN_POINT('NONE', (0.009948712321197359, 0.0381, -0.018222158118488478));
|
||||
#215 = CARTESIAN_POINT('NONE', (0.014846753907008787, 0.0381, -0.012384899461921867));
|
||||
@ -320,12 +320,12 @@ DATA;
|
||||
REPRESENTATION_ITEM('NONE')
|
||||
SURFACE()
|
||||
);
|
||||
#219 = CARTESIAN_POINT('NONE', (0.0007904803266814876, -0, -0.013982699999999994));
|
||||
#220 = CARTESIAN_POINT('NONE', (0.0044639868844543245, -0, -0.007620000000000015));
|
||||
#221 = CARTESIAN_POINT('NONE', (0.011810999999999978, -0, -0.007619999999999995));
|
||||
#222 = CARTESIAN_POINT('NONE', (0.011837890161758862, 0.01905, -0.0125903677404439));
|
||||
#223 = CARTESIAN_POINT('NONE', (0.010263615290596393, 0.019049999999999994, -0.0036622112845390324));
|
||||
#224 = CARTESIAN_POINT('NONE', (0.017208488154790785, 0.01905, 0.00216522897437961));
|
||||
#219 = CARTESIAN_POINT('NONE', (0.0007904803266814854, -0, -0.013982699999999997));
|
||||
#220 = CARTESIAN_POINT('NONE', (0.004463986884454323, -0, -0.007620000000000017));
|
||||
#221 = CARTESIAN_POINT('NONE', (0.011810999999999981, -0, -0.0076199999999999974));
|
||||
#222 = CARTESIAN_POINT('NONE', (0.011837890161758858, 0.01905, -0.012590367740443899));
|
||||
#223 = CARTESIAN_POINT('NONE', (0.01026361529059639, 0.019049999999999994, -0.0036622112845390306));
|
||||
#224 = CARTESIAN_POINT('NONE', (0.01720848815479078, 0.01905, 0.0021652289743796134));
|
||||
#225 = CARTESIAN_POINT('NONE', (0.013907536836253597, 0.0381, -0.0016495992195438261));
|
||||
#226 = CARTESIAN_POINT('NONE', (0.00827939826556762, 0.038099999999999995, 0.0030729697793334247));
|
||||
#227 = CARTESIAN_POINT('NONE', (0.009555193704377126, 0.0381, 0.01030836525700516));
|
||||
|
@ -161,20 +161,20 @@ DATA;
|
||||
#145 = VERTEX_POINT('NONE', #144);
|
||||
#146 = CARTESIAN_POINT('NONE', (-0.0186055, 0.3859187599240827, -0.2649386954314825));
|
||||
#147 = VERTEX_POINT('NONE', #146);
|
||||
#148 = DIRECTION('NONE', (-0.08428666399522529, 0, 0.9964415478454097));
|
||||
#148 = DIRECTION('NONE', (-0.0842866639952229, 0, 0.99644154784541));
|
||||
#149 = DIRECTION('NONE', (0, 1, -0));
|
||||
#150 = CARTESIAN_POINT('NONE', (0.10987218406621378, 0, 0.024039844328695128));
|
||||
#150 = CARTESIAN_POINT('NONE', (0.10987218406621377, 0, 0.02403984432869508));
|
||||
#151 = AXIS2_PLACEMENT_3D('NONE', #150, #149, #148);
|
||||
#152 = CIRCLE('NONE', #151, 0.007737689870496104);
|
||||
#152 = CIRCLE('NONE', #151, 0.007737689870496156);
|
||||
#153 = DIRECTION('NONE', (0, 1, 0));
|
||||
#154 = VECTOR('NONE', #153, 1);
|
||||
#155 = CARTESIAN_POINT('NONE', (0.11484587524256575, 0, 0.029967258656566655));
|
||||
#156 = LINE('NONE', #155, #154);
|
||||
#157 = DIRECTION('NONE', (-0.08428666399522529, 0, 0.9964415478454097));
|
||||
#157 = DIRECTION('NONE', (-0.0842866639952229, 0, 0.99644154784541));
|
||||
#158 = DIRECTION('NONE', (0, 1, -0));
|
||||
#159 = CARTESIAN_POINT('NONE', (0.10987218406621378, 0.003175, 0.024039844328695128));
|
||||
#159 = CARTESIAN_POINT('NONE', (0.10987218406621377, 0.003175, 0.02403984432869508));
|
||||
#160 = AXIS2_PLACEMENT_3D('NONE', #159, #158, #157);
|
||||
#161 = CIRCLE('NONE', #160, 0.007737689870496104);
|
||||
#161 = CIRCLE('NONE', #160, 0.007737689870496156);
|
||||
#162 = DIRECTION('NONE', (0, 1, 0));
|
||||
#163 = VECTOR('NONE', #162, 1);
|
||||
#164 = CARTESIAN_POINT('NONE', (0.10922000000000001, 0, 0.031750000000000014));
|
||||
@ -1183,11 +1183,11 @@ DATA;
|
||||
#1103 = EDGE_CURVE('NONE', #145, #147, #987, .T.);
|
||||
#1104 = EDGE_CURVE('NONE', #145, #145, #992, .T.);
|
||||
#1105 = EDGE_CURVE('NONE', #147, #147, #997, .T.);
|
||||
#1106 = CARTESIAN_POINT('NONE', (0.10987218406621378, 0.0015874999999999997, 0.024039844328695128));
|
||||
#1106 = CARTESIAN_POINT('NONE', (0.10987218406621377, 0.0015874999999999997, 0.02403984432869508));
|
||||
#1107 = DIRECTION('NONE', (0, 1, -0));
|
||||
#1108 = DIRECTION('NONE', (-0.08428666399522529, 0, 0.9964415478454097));
|
||||
#1108 = DIRECTION('NONE', (-0.0842866639952229, 0, 0.99644154784541));
|
||||
#1109 = AXIS2_PLACEMENT_3D('NONE', #1106, #1107, #1108);
|
||||
#1110 = CYLINDRICAL_SURFACE('NONE', #1109, 0.007737689870496104);
|
||||
#1110 = CYLINDRICAL_SURFACE('NONE', #1109, 0.007737689870496156);
|
||||
#1111 = CARTESIAN_POINT('NONE', (0.12954000000000004, 0.0015874999999999997, 0.04747903462626646));
|
||||
#1112 = DIRECTION('NONE', (0, -1.0000000000000002, -0));
|
||||
#1113 = DIRECTION('NONE', (-0.6427876096865407, 0, -0.766044443118977));
|
||||
|
@ -131,9 +131,9 @@ DATA;
|
||||
#115 = VERTEX_POINT('NONE', #114);
|
||||
#116 = CARTESIAN_POINT('NONE', (-0.0248334258488368, 0, -0.02299722453489577));
|
||||
#117 = VERTEX_POINT('NONE', #116);
|
||||
#118 = CARTESIAN_POINT('NONE', (-0.025166574151163194, 0, -0.013002775465104229));
|
||||
#118 = CARTESIAN_POINT('NONE', (-0.025166574151163194, 0, -0.013002775465104227));
|
||||
#119 = VERTEX_POINT('NONE', #118);
|
||||
#120 = CARTESIAN_POINT('NONE', (-0.025166574151163194, 0.0035, -0.013002775465104229));
|
||||
#120 = CARTESIAN_POINT('NONE', (-0.025166574151163194, 0.0035, -0.013002775465104227));
|
||||
#121 = VERTEX_POINT('NONE', #120);
|
||||
#122 = CARTESIAN_POINT('NONE', (-0.0248334258488368, 0.0035, -0.02299722453489577));
|
||||
#123 = VERTEX_POINT('NONE', #122);
|
||||
@ -778,20 +778,20 @@ DATA;
|
||||
#762 = VECTOR('NONE', #761, 1);
|
||||
#763 = CARTESIAN_POINT('NONE', (-0.055, 0.0035, -0.005000000000000004));
|
||||
#764 = LINE('NONE', #763, #762);
|
||||
#765 = DIRECTION('NONE', (0.033314830232639266, 0, -0.9994449069791544));
|
||||
#766 = DIRECTION('NONE', (0, -1.0000000000000002, 0));
|
||||
#767 = CARTESIAN_POINT('NONE', (-0.024999999999999998, -0, -0.017999999999999995));
|
||||
#765 = DIRECTION('NONE', (0.033314830232639946, 0, -0.9994449069791542));
|
||||
#766 = DIRECTION('NONE', (0, -0.9999999999999999, 0));
|
||||
#767 = CARTESIAN_POINT('NONE', (-0.025, -0, -0.01799999999999999));
|
||||
#768 = AXIS2_PLACEMENT_3D('NONE', #767, #766, #765);
|
||||
#769 = CIRCLE('NONE', #768, 0.005000000000000003);
|
||||
#769 = CIRCLE('NONE', #768, 0.005000000000000007);
|
||||
#770 = DIRECTION('NONE', (0, 1, 0));
|
||||
#771 = VECTOR('NONE', #770, 1);
|
||||
#772 = CARTESIAN_POINT('NONE', (-0.025166574151163194, 0, -0.013002775465104229));
|
||||
#772 = CARTESIAN_POINT('NONE', (-0.025166574151163194, 0, -0.013002775465104227));
|
||||
#773 = LINE('NONE', #772, #771);
|
||||
#774 = DIRECTION('NONE', (0.033314830232639266, 0, -0.9994449069791544));
|
||||
#775 = DIRECTION('NONE', (0, -1.0000000000000002, 0));
|
||||
#776 = CARTESIAN_POINT('NONE', (-0.024999999999999998, 0.0035, -0.017999999999999995));
|
||||
#774 = DIRECTION('NONE', (0.033314830232639946, 0, -0.9994449069791542));
|
||||
#775 = DIRECTION('NONE', (0, -0.9999999999999999, 0));
|
||||
#776 = CARTESIAN_POINT('NONE', (-0.025, 0.0035, -0.01799999999999999));
|
||||
#777 = AXIS2_PLACEMENT_3D('NONE', #776, #775, #774);
|
||||
#778 = CIRCLE('NONE', #777, 0.005000000000000003);
|
||||
#778 = CIRCLE('NONE', #777, 0.005000000000000007);
|
||||
#779 = DIRECTION('NONE', (0, 1, 0));
|
||||
#780 = VECTOR('NONE', #779, 1);
|
||||
#781 = CARTESIAN_POINT('NONE', (-0.0248334258488368, 0, -0.02299722453489577));
|
||||
@ -1209,11 +1209,11 @@ DATA;
|
||||
#1193 = DIRECTION('NONE', (0, 0, 1));
|
||||
#1194 = AXIS2_PLACEMENT_3D('NONE', #1192, #1193, $);
|
||||
#1195 = PLANE('NONE', #1194);
|
||||
#1196 = CARTESIAN_POINT('NONE', (-0.024999999999999998, 0.00175, -0.017999999999999995));
|
||||
#1197 = DIRECTION('NONE', (0, -1.0000000000000002, 0));
|
||||
#1198 = DIRECTION('NONE', (0.033314830232639266, 0, -0.9994449069791544));
|
||||
#1196 = CARTESIAN_POINT('NONE', (-0.025, 0.00175, -0.01799999999999999));
|
||||
#1197 = DIRECTION('NONE', (0, -0.9999999999999999, 0));
|
||||
#1198 = DIRECTION('NONE', (0.033314830232639946, 0, -0.9994449069791542));
|
||||
#1199 = AXIS2_PLACEMENT_3D('NONE', #1196, #1197, #1198);
|
||||
#1200 = CYLINDRICAL_SURFACE('NONE', #1199, 0.005000000000000003);
|
||||
#1200 = CYLINDRICAL_SURFACE('NONE', #1199, 0.005000000000000007);
|
||||
#1201 = CARTESIAN_POINT('NONE', (-0.04016657415116319, 0.00175, -0.013502775465104222));
|
||||
#1202 = DIRECTION('NONE', (0.033314830232638176, -0, -0.9994449069791543));
|
||||
#1203 = AXIS2_PLACEMENT_3D('NONE', #1201, #1202, $);
|
||||
|
@ -19,27 +19,27 @@ DATA;
|
||||
);
|
||||
#4 = CARTESIAN_POINT('NONE', (0.05841999999999999, 0.16256, -0.008255));
|
||||
#5 = VERTEX_POINT('NONE', #4);
|
||||
#6 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.1493519999999996, -0.008255));
|
||||
#6 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.14935199999999962, -0.008255));
|
||||
#7 = VERTEX_POINT('NONE', #6);
|
||||
#8 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.1493519999999996, 0.008255));
|
||||
#8 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.14935199999999962, 0.008255));
|
||||
#9 = VERTEX_POINT('NONE', #8);
|
||||
#10 = CARTESIAN_POINT('NONE', (0.05841999999999999, 0.16256, 0.008255));
|
||||
#11 = VERTEX_POINT('NONE', #10);
|
||||
#12 = CARTESIAN_POINT('NONE', (0.06908799999999998, 0.1493519999999996, -0.008255));
|
||||
#12 = CARTESIAN_POINT('NONE', (0.06908799999999998, 0.14935199999999962, -0.008255));
|
||||
#13 = VERTEX_POINT('NONE', #12);
|
||||
#14 = CARTESIAN_POINT('NONE', (0.06908799999999998, 0.1493519999999996, 0.008255));
|
||||
#14 = CARTESIAN_POINT('NONE', (0.06908799999999998, 0.14935199999999962, 0.008255));
|
||||
#15 = VERTEX_POINT('NONE', #14);
|
||||
#16 = CARTESIAN_POINT('NONE', (0.09042399999999998, 0.1308099999999996, -0.008255));
|
||||
#16 = CARTESIAN_POINT('NONE', (0.09042399999999998, 0.13080999999999965, -0.008255));
|
||||
#17 = VERTEX_POINT('NONE', #16);
|
||||
#18 = CARTESIAN_POINT('NONE', (0.09042399999999998, 0.1308099999999996, 0.008255));
|
||||
#18 = CARTESIAN_POINT('NONE', (0.09042399999999998, 0.13080999999999965, 0.008255));
|
||||
#19 = VERTEX_POINT('NONE', #18);
|
||||
#20 = CARTESIAN_POINT('NONE', (0.09220199999999999, 0.04064000000000004, -0.008255));
|
||||
#20 = CARTESIAN_POINT('NONE', (0.09220199999999999, 0.040640000000000044, -0.008255));
|
||||
#21 = VERTEX_POINT('NONE', #20);
|
||||
#22 = CARTESIAN_POINT('NONE', (0.09220199999999999, 0.04064000000000004, 0.008255));
|
||||
#22 = CARTESIAN_POINT('NONE', (0.09220199999999999, 0.040640000000000044, 0.008255));
|
||||
#23 = VERTEX_POINT('NONE', #22);
|
||||
#24 = CARTESIAN_POINT('NONE', (0.076962, 0.025908000000000028, -0.008255));
|
||||
#24 = CARTESIAN_POINT('NONE', (0.076962, 0.02590800000000003, -0.008255));
|
||||
#25 = VERTEX_POINT('NONE', #24);
|
||||
#26 = CARTESIAN_POINT('NONE', (0.076962, 0.025908000000000028, 0.008255));
|
||||
#26 = CARTESIAN_POINT('NONE', (0.076962, 0.02590800000000003, 0.008255));
|
||||
#27 = VERTEX_POINT('NONE', #26);
|
||||
#28 = CARTESIAN_POINT('NONE', (0.051816, 0.026416000000000033, -0.008255));
|
||||
#29 = VERTEX_POINT('NONE', #28);
|
||||
@ -473,15 +473,15 @@ DATA;
|
||||
#457 = VERTEX_POINT('NONE', #456);
|
||||
#458 = CARTESIAN_POINT('NONE', (0.056007, 0.14478, 0.000000000000000013717758655969163));
|
||||
#459 = VERTEX_POINT('NONE', #458);
|
||||
#460 = DIRECTION('NONE', (0.038433122101202255, -0.9992611746313144, 0));
|
||||
#460 = DIRECTION('NONE', (0.03843312210120234, -0.9992611746313144, 0));
|
||||
#461 = VECTOR('NONE', #460, 1);
|
||||
#462 = CARTESIAN_POINT('NONE', (0.05841999999999999, 0.16256, -0.008255));
|
||||
#463 = LINE('NONE', #462, #461);
|
||||
#464 = DIRECTION('NONE', (0, 0, 1));
|
||||
#465 = VECTOR('NONE', #464, 1);
|
||||
#466 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.1493519999999996, -0.008255));
|
||||
#466 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.14935199999999962, -0.008255));
|
||||
#467 = LINE('NONE', #466, #465);
|
||||
#468 = DIRECTION('NONE', (0.038433122101202255, -0.9992611746313144, 0));
|
||||
#468 = DIRECTION('NONE', (0.03843312210120234, -0.9992611746313144, 0));
|
||||
#469 = VECTOR('NONE', #468, 1);
|
||||
#470 = CARTESIAN_POINT('NONE', (0.05841999999999999, 0.16256, 0.008255));
|
||||
#471 = LINE('NONE', #470, #469);
|
||||
@ -491,58 +491,58 @@ DATA;
|
||||
#475 = LINE('NONE', #474, #473);
|
||||
#476 = DIRECTION('NONE', (1, 0, 0));
|
||||
#477 = VECTOR('NONE', #476, 1);
|
||||
#478 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.1493519999999996, -0.008255));
|
||||
#478 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.14935199999999962, -0.008255));
|
||||
#479 = LINE('NONE', #478, #477);
|
||||
#480 = DIRECTION('NONE', (0, 0, 1));
|
||||
#481 = VECTOR('NONE', #480, 1);
|
||||
#482 = CARTESIAN_POINT('NONE', (0.06908799999999998, 0.1493519999999996, -0.008255));
|
||||
#482 = CARTESIAN_POINT('NONE', (0.06908799999999998, 0.14935199999999962, -0.008255));
|
||||
#483 = LINE('NONE', #482, #481);
|
||||
#484 = DIRECTION('NONE', (1, 0, 0));
|
||||
#485 = VECTOR('NONE', #484, 1);
|
||||
#486 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.1493519999999996, 0.008255));
|
||||
#486 = CARTESIAN_POINT('NONE', (0.05892799999999998, 0.14935199999999962, 0.008255));
|
||||
#487 = LINE('NONE', #486, #485);
|
||||
#488 = DIRECTION('NONE', (-0.0866626263544473, 0.9962377172107816, -0));
|
||||
#489 = DIRECTION('NONE', (0, -0, -0.9999999999999998));
|
||||
#490 = CARTESIAN_POINT('NONE', (0.07079178336201049, 0.12976601099190213, -0.008255));
|
||||
#488 = DIRECTION('NONE', (-0.08666262635444875, 0.9962377172107816, -0));
|
||||
#489 = DIRECTION('NONE', (0, -0, -1));
|
||||
#490 = CARTESIAN_POINT('NONE', (0.07079178336201052, 0.12976601099190216, -0.008255));
|
||||
#491 = AXIS2_PLACEMENT_3D('NONE', #490, #489, #488);
|
||||
#492 = CIRCLE('NONE', #491, 0.01965995531963333);
|
||||
#493 = DIRECTION('NONE', (0, 0, 1));
|
||||
#494 = VECTOR('NONE', #493, 1);
|
||||
#495 = CARTESIAN_POINT('NONE', (0.09042399999999998, 0.1308099999999996, -0.008255));
|
||||
#495 = CARTESIAN_POINT('NONE', (0.09042399999999998, 0.13080999999999965, -0.008255));
|
||||
#496 = LINE('NONE', #495, #494);
|
||||
#497 = DIRECTION('NONE', (-0.0866626263544473, 0.9962377172107816, -0));
|
||||
#498 = DIRECTION('NONE', (0, -0, -0.9999999999999998));
|
||||
#499 = CARTESIAN_POINT('NONE', (0.07079178336201049, 0.12976601099190213, 0.008255));
|
||||
#497 = DIRECTION('NONE', (-0.08666262635444875, 0.9962377172107816, -0));
|
||||
#498 = DIRECTION('NONE', (0, -0, -1));
|
||||
#499 = CARTESIAN_POINT('NONE', (0.07079178336201052, 0.12976601099190216, 0.008255));
|
||||
#500 = AXIS2_PLACEMENT_3D('NONE', #499, #498, #497);
|
||||
#501 = CIRCLE('NONE', #500, 0.01965995531963333);
|
||||
#502 = DIRECTION('NONE', (0.9985890770760726, 0.05310230827711328, -0));
|
||||
#502 = DIRECTION('NONE', (0.9985890770760725, 0.05310230827711449, -0));
|
||||
#503 = DIRECTION('NONE', (-0, 0, -1));
|
||||
#504 = CARTESIAN_POINT('NONE', (-1.2575688405092589, 0.059127329905450624, -0.008255));
|
||||
#504 = CARTESIAN_POINT('NONE', (-1.2575688405092098, 0.059127329905451644, -0.008255));
|
||||
#505 = AXIS2_PLACEMENT_3D('NONE', #504, #503, #502);
|
||||
#506 = CIRCLE('NONE', #505, 1.3498974417547818);
|
||||
#506 = CIRCLE('NONE', #505, 1.3498974417547327);
|
||||
#507 = DIRECTION('NONE', (0, 0, 1));
|
||||
#508 = VECTOR('NONE', #507, 1);
|
||||
#509 = CARTESIAN_POINT('NONE', (0.09220199999999999, 0.04064000000000004, -0.008255));
|
||||
#509 = CARTESIAN_POINT('NONE', (0.09220199999999999, 0.040640000000000044, -0.008255));
|
||||
#510 = LINE('NONE', #509, #508);
|
||||
#511 = DIRECTION('NONE', (0.9985890770760726, 0.05310230827711328, -0));
|
||||
#511 = DIRECTION('NONE', (0.9985890770760725, 0.05310230827711449, -0));
|
||||
#512 = DIRECTION('NONE', (-0, 0, -1));
|
||||
#513 = CARTESIAN_POINT('NONE', (-1.2575688405092589, 0.059127329905450624, 0.008255));
|
||||
#513 = CARTESIAN_POINT('NONE', (-1.2575688405092098, 0.059127329905451644, 0.008255));
|
||||
#514 = AXIS2_PLACEMENT_3D('NONE', #513, #512, #511);
|
||||
#515 = CIRCLE('NONE', #514, 1.3498974417547818);
|
||||
#516 = DIRECTION('NONE', (0.9999062141747909, -0.013695358872168632, -0));
|
||||
#515 = CIRCLE('NONE', #514, 1.3498974417547327);
|
||||
#516 = DIRECTION('NONE', (0.9999062141747909, -0.013695358872166266, -0));
|
||||
#517 = DIRECTION('NONE', (0, 0, -1.0000000000000002));
|
||||
#518 = CARTESIAN_POINT('NONE', (0.07726374957352439, 0.04084460388945755, -0.008255));
|
||||
#518 = CARTESIAN_POINT('NONE', (0.07726374957352439, 0.04084460388945753, -0.008255));
|
||||
#519 = AXIS2_PLACEMENT_3D('NONE', #518, #517, #516);
|
||||
#520 = CIRCLE('NONE', #519, 0.014939651554024935);
|
||||
#520 = CIRCLE('NONE', #519, 0.014939651554024921);
|
||||
#521 = DIRECTION('NONE', (0, 0, 1));
|
||||
#522 = VECTOR('NONE', #521, 1);
|
||||
#523 = CARTESIAN_POINT('NONE', (0.076962, 0.025908000000000028, -0.008255));
|
||||
#523 = CARTESIAN_POINT('NONE', (0.076962, 0.02590800000000003, -0.008255));
|
||||
#524 = LINE('NONE', #523, #522);
|
||||
#525 = DIRECTION('NONE', (0.9999062141747909, -0.013695358872168632, -0));
|
||||
#525 = DIRECTION('NONE', (0.9999062141747909, -0.013695358872166266, -0));
|
||||
#526 = DIRECTION('NONE', (0, 0, -1.0000000000000002));
|
||||
#527 = CARTESIAN_POINT('NONE', (0.07726374957352439, 0.04084460388945755, 0.008255));
|
||||
#527 = CARTESIAN_POINT('NONE', (0.07726374957352439, 0.04084460388945753, 0.008255));
|
||||
#528 = AXIS2_PLACEMENT_3D('NONE', #527, #526, #525);
|
||||
#529 = CIRCLE('NONE', #528, 0.014939651554024935);
|
||||
#529 = CIRCLE('NONE', #528, 0.014939651554024921);
|
||||
#530 = DIRECTION('NONE', (-0.9997960016298644, 0.0201978990228256, 0));
|
||||
#531 = VECTOR('NONE', #530, 1);
|
||||
#532 = CARTESIAN_POINT('NONE', (0.076962, 0.02590800000000003, -0.008255));
|
||||
@ -2369,29 +2369,29 @@ DATA;
|
||||
#2353 = EDGE_CURVE('NONE', #457, #457, #1992, .T.);
|
||||
#2354 = EDGE_CURVE('NONE', #457, #459, #1996, .T.);
|
||||
#2355 = EDGE_CURVE('NONE', #459, #459, #2001, .T.);
|
||||
#2356 = CARTESIAN_POINT('NONE', (0.05867399999999999, 0.1559559999999998, -0));
|
||||
#2356 = CARTESIAN_POINT('NONE', (0.05867399999999998, 0.15595599999999982, -0));
|
||||
#2357 = DIRECTION('NONE', (-0.9992611746313143, -0.038433122101202415, 0));
|
||||
#2358 = AXIS2_PLACEMENT_3D('NONE', #2356, #2357, $);
|
||||
#2359 = PLANE('NONE', #2358);
|
||||
#2360 = CARTESIAN_POINT('NONE', (0.06400799999999998, 0.1493519999999996, -0));
|
||||
#2360 = CARTESIAN_POINT('NONE', (0.06400799999999998, 0.14935199999999962, -0));
|
||||
#2361 = DIRECTION('NONE', (0, -1, 0));
|
||||
#2362 = AXIS2_PLACEMENT_3D('NONE', #2360, #2361, $);
|
||||
#2363 = PLANE('NONE', #2362);
|
||||
#2364 = CARTESIAN_POINT('NONE', (0.07079178336201049, 0.12976601099190213, -0));
|
||||
#2365 = DIRECTION('NONE', (0, -0, -0.9999999999999998));
|
||||
#2366 = DIRECTION('NONE', (-0.0866626263544473, 0.9962377172107816, -0));
|
||||
#2364 = CARTESIAN_POINT('NONE', (0.07079178336201052, 0.12976601099190216, -0));
|
||||
#2365 = DIRECTION('NONE', (0, -0, -1));
|
||||
#2366 = DIRECTION('NONE', (-0.08666262635444875, 0.9962377172107816, -0));
|
||||
#2367 = AXIS2_PLACEMENT_3D('NONE', #2364, #2365, #2366);
|
||||
#2368 = CYLINDRICAL_SURFACE('NONE', #2367, 0.01965995531963333);
|
||||
#2369 = CARTESIAN_POINT('NONE', (-1.2575688405092589, 0.059127329905450624, -0));
|
||||
#2369 = CARTESIAN_POINT('NONE', (-1.2575688405092098, 0.059127329905451644, -0));
|
||||
#2370 = DIRECTION('NONE', (-0, 0, -1));
|
||||
#2371 = DIRECTION('NONE', (0.9985890770760726, 0.05310230827711328, -0));
|
||||
#2371 = DIRECTION('NONE', (0.9985890770760725, 0.05310230827711449, -0));
|
||||
#2372 = AXIS2_PLACEMENT_3D('NONE', #2369, #2370, #2371);
|
||||
#2373 = CYLINDRICAL_SURFACE('NONE', #2372, 1.3498974417547818);
|
||||
#2374 = CARTESIAN_POINT('NONE', (0.07726374957352439, 0.04084460388945755, -0));
|
||||
#2373 = CYLINDRICAL_SURFACE('NONE', #2372, 1.3498974417547327);
|
||||
#2374 = CARTESIAN_POINT('NONE', (0.07726374957352439, 0.04084460388945753, -0));
|
||||
#2375 = DIRECTION('NONE', (0, 0, -1.0000000000000002));
|
||||
#2376 = DIRECTION('NONE', (0.9999062141747909, -0.013695358872168632, -0));
|
||||
#2376 = DIRECTION('NONE', (0.9999062141747909, -0.013695358872166266, -0));
|
||||
#2377 = AXIS2_PLACEMENT_3D('NONE', #2374, #2375, #2376);
|
||||
#2378 = CYLINDRICAL_SURFACE('NONE', #2377, 0.014939651554024935);
|
||||
#2378 = CYLINDRICAL_SURFACE('NONE', #2377, 0.014939651554024921);
|
||||
#2379 = CARTESIAN_POINT('NONE', (0.064389, 0.026162000000000036, -0));
|
||||
#2380 = DIRECTION('NONE', (0.020197899022825535, 0.9997960016298644, -0));
|
||||
#2381 = AXIS2_PLACEMENT_3D('NONE', #2379, #2380, $);
|
||||
|
@ -17,213 +17,213 @@ DATA;
|
||||
GLOBAL_UNIT_ASSIGNED_CONTEXT((#1))
|
||||
REPRESENTATION_CONTEXT('', '3D')
|
||||
);
|
||||
#4 = CARTESIAN_POINT('NONE', (-0.000000000000000006221205739668554, -0.0508, -0));
|
||||
#4 = CARTESIAN_POINT('NONE', (0, 0.0508, -0));
|
||||
#5 = VERTEX_POINT('NONE', #4);
|
||||
#6 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0));
|
||||
#6 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0));
|
||||
#7 = VERTEX_POINT('NONE', #6);
|
||||
#8 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#8 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0.6096));
|
||||
#9 = VERTEX_POINT('NONE', #8);
|
||||
#10 = CARTESIAN_POINT('NONE', (-0.000000000000000006221205739668554, -0.0508, -0.6096));
|
||||
#10 = CARTESIAN_POINT('NONE', (0, 0.0508, -0.6096));
|
||||
#11 = VERTEX_POINT('NONE', #10);
|
||||
#12 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0));
|
||||
#12 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0));
|
||||
#13 = VERTEX_POINT('NONE', #12);
|
||||
#14 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#14 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0.6096));
|
||||
#15 = VERTEX_POINT('NONE', #14);
|
||||
#16 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0));
|
||||
#16 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0));
|
||||
#17 = VERTEX_POINT('NONE', #16);
|
||||
#18 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#18 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#19 = VERTEX_POINT('NONE', #18);
|
||||
#20 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0));
|
||||
#20 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0));
|
||||
#21 = VERTEX_POINT('NONE', #20);
|
||||
#22 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#22 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#23 = VERTEX_POINT('NONE', #22);
|
||||
#24 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0));
|
||||
#24 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0));
|
||||
#25 = VERTEX_POINT('NONE', #24);
|
||||
#26 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0.6096));
|
||||
#26 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#27 = VERTEX_POINT('NONE', #26);
|
||||
#28 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0));
|
||||
#28 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0));
|
||||
#29 = VERTEX_POINT('NONE', #28);
|
||||
#30 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0.6096));
|
||||
#30 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#31 = VERTEX_POINT('NONE', #30);
|
||||
#32 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0));
|
||||
#32 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0));
|
||||
#33 = VERTEX_POINT('NONE', #32);
|
||||
#34 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0.6096));
|
||||
#34 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#35 = VERTEX_POINT('NONE', #34);
|
||||
#36 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0));
|
||||
#36 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0));
|
||||
#37 = VERTEX_POINT('NONE', #36);
|
||||
#38 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0.6096));
|
||||
#38 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#39 = VERTEX_POINT('NONE', #38);
|
||||
#40 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0));
|
||||
#40 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0));
|
||||
#41 = VERTEX_POINT('NONE', #40);
|
||||
#42 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#42 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#43 = VERTEX_POINT('NONE', #42);
|
||||
#44 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0));
|
||||
#44 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0));
|
||||
#45 = VERTEX_POINT('NONE', #44);
|
||||
#46 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#46 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#47 = VERTEX_POINT('NONE', #46);
|
||||
#48 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0));
|
||||
#48 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0));
|
||||
#49 = VERTEX_POINT('NONE', #48);
|
||||
#50 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#50 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0.6096));
|
||||
#51 = VERTEX_POINT('NONE', #50);
|
||||
#52 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0));
|
||||
#52 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0));
|
||||
#53 = VERTEX_POINT('NONE', #52);
|
||||
#54 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#54 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0.6096));
|
||||
#55 = VERTEX_POINT('NONE', #54);
|
||||
#56 = DIRECTION('NONE', (-1, 0.00000000000000020517070925003855, 0));
|
||||
#56 = DIRECTION('NONE', (1, 0, 0));
|
||||
#57 = VECTOR('NONE', #56, 1);
|
||||
#58 = CARTESIAN_POINT('NONE', (-0.000000000000000006221205739668554, -0.0508, -0));
|
||||
#58 = CARTESIAN_POINT('NONE', (0, 0.0508, -0));
|
||||
#59 = LINE('NONE', #58, #57);
|
||||
#60 = DIRECTION('NONE', (0, 0, -1));
|
||||
#61 = VECTOR('NONE', #60, 1);
|
||||
#62 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0));
|
||||
#62 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0));
|
||||
#63 = LINE('NONE', #62, #61);
|
||||
#64 = DIRECTION('NONE', (-1, 0.00000000000000020517070925003855, 0));
|
||||
#64 = DIRECTION('NONE', (1, 0, 0));
|
||||
#65 = VECTOR('NONE', #64, 1);
|
||||
#66 = CARTESIAN_POINT('NONE', (-0.000000000000000006221205739668554, -0.0508, -0.6096));
|
||||
#66 = CARTESIAN_POINT('NONE', (0, 0.0508, -0.6096));
|
||||
#67 = LINE('NONE', #66, #65);
|
||||
#68 = DIRECTION('NONE', (0, 0, -1));
|
||||
#69 = VECTOR('NONE', #68, 1);
|
||||
#70 = CARTESIAN_POINT('NONE', (-0.000000000000000006221205739668554, -0.0508, -0));
|
||||
#70 = CARTESIAN_POINT('NONE', (0, 0.0508, -0));
|
||||
#71 = LINE('NONE', #70, #69);
|
||||
#72 = DIRECTION('NONE', (0, 1, 0));
|
||||
#72 = DIRECTION('NONE', (0, -1, 0));
|
||||
#73 = VECTOR('NONE', #72, 1);
|
||||
#74 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0));
|
||||
#74 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0));
|
||||
#75 = LINE('NONE', #74, #73);
|
||||
#76 = DIRECTION('NONE', (0, 0, -1));
|
||||
#77 = VECTOR('NONE', #76, 1);
|
||||
#78 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0));
|
||||
#78 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0));
|
||||
#79 = LINE('NONE', #78, #77);
|
||||
#80 = DIRECTION('NONE', (0, 1, 0));
|
||||
#80 = DIRECTION('NONE', (0, -1, 0));
|
||||
#81 = VECTOR('NONE', #80, 1);
|
||||
#82 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#82 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0.6096));
|
||||
#83 = LINE('NONE', #82, #81);
|
||||
#84 = DIRECTION('NONE', (1, -0.0000000000000004610713913357407, 0));
|
||||
#84 = DIRECTION('NONE', (-1, 0.00000000000000023053569566787033, 0));
|
||||
#85 = VECTOR('NONE', #84, 1);
|
||||
#86 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0));
|
||||
#86 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0));
|
||||
#87 = LINE('NONE', #86, #85);
|
||||
#88 = DIRECTION('NONE', (0, 0, -1));
|
||||
#89 = VECTOR('NONE', #88, 1);
|
||||
#90 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0));
|
||||
#90 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0));
|
||||
#91 = LINE('NONE', #90, #89);
|
||||
#92 = DIRECTION('NONE', (1, -0.0000000000000004610713913357407, 0));
|
||||
#92 = DIRECTION('NONE', (-1, 0.00000000000000023053569566787033, 0));
|
||||
#93 = VECTOR('NONE', #92, 1);
|
||||
#94 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#94 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0.6096));
|
||||
#95 = LINE('NONE', #94, #93);
|
||||
#96 = DIRECTION('NONE', (0.00000000000000006501542164183402, 1, 0));
|
||||
#96 = DIRECTION('NONE', (0.00000000000000006501542164183402, -1, 0));
|
||||
#97 = VECTOR('NONE', #96, 1);
|
||||
#98 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0));
|
||||
#98 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0));
|
||||
#99 = LINE('NONE', #98, #97);
|
||||
#100 = DIRECTION('NONE', (0, 0, -1));
|
||||
#101 = VECTOR('NONE', #100, 1);
|
||||
#102 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0));
|
||||
#102 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0));
|
||||
#103 = LINE('NONE', #102, #101);
|
||||
#104 = DIRECTION('NONE', (0.00000000000000006501542164183402, 1, 0));
|
||||
#104 = DIRECTION('NONE', (0.00000000000000006501542164183402, -1, 0));
|
||||
#105 = VECTOR('NONE', #104, 1);
|
||||
#106 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#106 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#107 = LINE('NONE', #106, #105);
|
||||
#108 = DIRECTION('NONE', (-1, -0.00000000000000023053569566787033, 0));
|
||||
#108 = DIRECTION('NONE', (1, 0.0000000000000004610713913357407, 0));
|
||||
#109 = VECTOR('NONE', #108, 1);
|
||||
#110 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0));
|
||||
#110 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0));
|
||||
#111 = LINE('NONE', #110, #109);
|
||||
#112 = DIRECTION('NONE', (0, 0, -1));
|
||||
#113 = VECTOR('NONE', #112, 1);
|
||||
#114 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0));
|
||||
#114 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0));
|
||||
#115 = LINE('NONE', #114, #113);
|
||||
#116 = DIRECTION('NONE', (-1, -0.00000000000000023053569566787033, 0));
|
||||
#116 = DIRECTION('NONE', (1, 0.0000000000000004610713913357407, 0));
|
||||
#117 = VECTOR('NONE', #116, 1);
|
||||
#118 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#118 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#119 = LINE('NONE', #118, #117);
|
||||
#120 = DIRECTION('NONE', (0, 1, 0));
|
||||
#120 = DIRECTION('NONE', (0, -1, 0));
|
||||
#121 = VECTOR('NONE', #120, 1);
|
||||
#122 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0));
|
||||
#122 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0));
|
||||
#123 = LINE('NONE', #122, #121);
|
||||
#124 = DIRECTION('NONE', (0, 0, -1));
|
||||
#125 = VECTOR('NONE', #124, 1);
|
||||
#126 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0));
|
||||
#126 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0));
|
||||
#127 = LINE('NONE', #126, #125);
|
||||
#128 = DIRECTION('NONE', (0, 1, 0));
|
||||
#128 = DIRECTION('NONE', (0, -1, 0));
|
||||
#129 = VECTOR('NONE', #128, 1);
|
||||
#130 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0.6096));
|
||||
#130 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#131 = LINE('NONE', #130, #129);
|
||||
#132 = DIRECTION('NONE', (1, 0, 0));
|
||||
#132 = DIRECTION('NONE', (-1, 0, 0));
|
||||
#133 = VECTOR('NONE', #132, 1);
|
||||
#134 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0));
|
||||
#134 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0));
|
||||
#135 = LINE('NONE', #134, #133);
|
||||
#136 = DIRECTION('NONE', (0, 0, -1));
|
||||
#137 = VECTOR('NONE', #136, 1);
|
||||
#138 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0));
|
||||
#138 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0));
|
||||
#139 = LINE('NONE', #138, #137);
|
||||
#140 = DIRECTION('NONE', (1, 0, 0));
|
||||
#140 = DIRECTION('NONE', (-1, 0, 0));
|
||||
#141 = VECTOR('NONE', #140, 1);
|
||||
#142 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0.6096));
|
||||
#142 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#143 = LINE('NONE', #142, #141);
|
||||
#144 = DIRECTION('NONE', (0, -1, 0));
|
||||
#144 = DIRECTION('NONE', (0, 1, 0));
|
||||
#145 = VECTOR('NONE', #144, 1);
|
||||
#146 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0));
|
||||
#146 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0));
|
||||
#147 = LINE('NONE', #146, #145);
|
||||
#148 = DIRECTION('NONE', (0, 0, -1));
|
||||
#149 = VECTOR('NONE', #148, 1);
|
||||
#150 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0));
|
||||
#150 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0));
|
||||
#151 = LINE('NONE', #150, #149);
|
||||
#152 = DIRECTION('NONE', (0, -1, 0));
|
||||
#152 = DIRECTION('NONE', (0, 1, 0));
|
||||
#153 = VECTOR('NONE', #152, 1);
|
||||
#154 = CARTESIAN_POINT('NONE', (0.0338201, 0.0508, -0.6096));
|
||||
#154 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#155 = LINE('NONE', #154, #153);
|
||||
#156 = DIRECTION('NONE', (-1, 0.00000000000000023053569566787033, 0));
|
||||
#156 = DIRECTION('NONE', (1, -0.0000000000000004610713913357407, 0));
|
||||
#157 = VECTOR('NONE', #156, 1);
|
||||
#158 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0));
|
||||
#158 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0));
|
||||
#159 = LINE('NONE', #158, #157);
|
||||
#160 = DIRECTION('NONE', (0, 0, -1));
|
||||
#161 = VECTOR('NONE', #160, 1);
|
||||
#162 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0));
|
||||
#162 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0));
|
||||
#163 = LINE('NONE', #162, #161);
|
||||
#164 = DIRECTION('NONE', (-1, 0.00000000000000023053569566787033, 0));
|
||||
#164 = DIRECTION('NONE', (1, -0.0000000000000004610713913357407, 0));
|
||||
#165 = VECTOR('NONE', #164, 1);
|
||||
#166 = CARTESIAN_POINT('NONE', (0.0338201, 0.043357799999999995, -0.6096));
|
||||
#166 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#167 = LINE('NONE', #166, #165);
|
||||
#168 = DIRECTION('NONE', (0.00000000000000006501542164183402, -1, 0));
|
||||
#168 = DIRECTION('NONE', (0.00000000000000006501542164183402, 1, 0));
|
||||
#169 = VECTOR('NONE', #168, 1);
|
||||
#170 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0));
|
||||
#170 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0));
|
||||
#171 = LINE('NONE', #170, #169);
|
||||
#172 = DIRECTION('NONE', (0, 0, -1));
|
||||
#173 = VECTOR('NONE', #172, 1);
|
||||
#174 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0));
|
||||
#174 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0));
|
||||
#175 = LINE('NONE', #174, #173);
|
||||
#176 = DIRECTION('NONE', (0.00000000000000006501542164183402, -1, 0));
|
||||
#176 = DIRECTION('NONE', (0.00000000000000006501542164183402, 1, 0));
|
||||
#177 = VECTOR('NONE', #176, 1);
|
||||
#178 = CARTESIAN_POINT('NONE', (0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#178 = CARTESIAN_POINT('NONE', (-0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#179 = LINE('NONE', #178, #177);
|
||||
#180 = DIRECTION('NONE', (1, 0.0000000000000004610713913357407, 0));
|
||||
#180 = DIRECTION('NONE', (-1, -0.00000000000000023053569566787033, 0));
|
||||
#181 = VECTOR('NONE', #180, 1);
|
||||
#182 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0));
|
||||
#182 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0));
|
||||
#183 = LINE('NONE', #182, #181);
|
||||
#184 = DIRECTION('NONE', (0, 0, -1));
|
||||
#185 = VECTOR('NONE', #184, 1);
|
||||
#186 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0));
|
||||
#186 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0));
|
||||
#187 = LINE('NONE', #186, #185);
|
||||
#188 = DIRECTION('NONE', (1, 0.0000000000000004610713913357407, 0));
|
||||
#188 = DIRECTION('NONE', (-1, -0.00000000000000023053569566787033, 0));
|
||||
#189 = VECTOR('NONE', #188, 1);
|
||||
#190 = CARTESIAN_POINT('NONE', (0.0037211000000000054, -0.0433578, -0.6096));
|
||||
#190 = CARTESIAN_POINT('NONE', (-0.0037210999999999998, 0.0433578, -0.6096));
|
||||
#191 = LINE('NONE', #190, #189);
|
||||
#192 = DIRECTION('NONE', (0, -1, 0));
|
||||
#192 = DIRECTION('NONE', (0, 1, 0));
|
||||
#193 = VECTOR('NONE', #192, 1);
|
||||
#194 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0));
|
||||
#194 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0));
|
||||
#195 = LINE('NONE', #194, #193);
|
||||
#196 = DIRECTION('NONE', (0, 0, -1));
|
||||
#197 = VECTOR('NONE', #196, 1);
|
||||
#198 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0));
|
||||
#198 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0));
|
||||
#199 = LINE('NONE', #198, #197);
|
||||
#200 = DIRECTION('NONE', (0, -1, 0));
|
||||
#200 = DIRECTION('NONE', (0, 1, 0));
|
||||
#201 = VECTOR('NONE', #200, 1);
|
||||
#202 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04335779999999999, -0.6096));
|
||||
#202 = CARTESIAN_POINT('NONE', (-0.0338201, 0.043357799999999995, -0.6096));
|
||||
#203 = LINE('NONE', #202, #201);
|
||||
#204 = DIRECTION('NONE', (-1, -0.00000000000000020517070925003855, 0));
|
||||
#204 = DIRECTION('NONE', (1, 0, 0));
|
||||
#205 = VECTOR('NONE', #204, 1);
|
||||
#206 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0));
|
||||
#206 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0));
|
||||
#207 = LINE('NONE', #206, #205);
|
||||
#208 = DIRECTION('NONE', (-1, -0.00000000000000020517070925003855, 0));
|
||||
#208 = DIRECTION('NONE', (1, 0, 0));
|
||||
#209 = VECTOR('NONE', #208, 1);
|
||||
#210 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.05079999999999999, -0.6096));
|
||||
#210 = CARTESIAN_POINT('NONE', (-0.0338201, 0.0508, -0.6096));
|
||||
#211 = LINE('NONE', #210, #209);
|
||||
#212 = EDGE_CURVE('NONE', #5, #7, #59, .T.);
|
||||
#213 = EDGE_CURVE('NONE', #7, #9, #63, .T.);
|
||||
@ -264,56 +264,56 @@ DATA;
|
||||
#248 = EDGE_CURVE('NONE', #51, #55, #203, .T.);
|
||||
#249 = EDGE_CURVE('NONE', #53, #5, #207, .T.);
|
||||
#250 = EDGE_CURVE('NONE', #55, #11, #211, .T.);
|
||||
#251 = CARTESIAN_POINT('NONE', (-0.01691004999999998, -0.0508, -0.30480000000000007));
|
||||
#252 = DIRECTION('NONE', (0, -1, -0));
|
||||
#251 = CARTESIAN_POINT('NONE', (0.01691005, 0.0508, -0.3048));
|
||||
#252 = DIRECTION('NONE', (0, 1, 0));
|
||||
#253 = AXIS2_PLACEMENT_3D('NONE', #251, #252, $);
|
||||
#254 = PLANE('NONE', #253);
|
||||
#255 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04707889999999995, -0.30479999999999996));
|
||||
#256 = DIRECTION('NONE', (-1, 0, -0));
|
||||
#255 = CARTESIAN_POINT('NONE', (0.0338201, 0.0470789, -0.3048));
|
||||
#256 = DIRECTION('NONE', (1, 0, 0));
|
||||
#257 = AXIS2_PLACEMENT_3D('NONE', #255, #256, $);
|
||||
#258 = PLANE('NONE', #257);
|
||||
#259 = CARTESIAN_POINT('NONE', (-0.018770600000000033, -0.043357799999999995, -0.30480000000000007));
|
||||
#260 = DIRECTION('NONE', (0, 1, 0));
|
||||
#259 = CARTESIAN_POINT('NONE', (0.018770600000000002, 0.043357799999999995, -0.3048));
|
||||
#260 = DIRECTION('NONE', (0, -1, -0));
|
||||
#261 = AXIS2_PLACEMENT_3D('NONE', #259, #260, $);
|
||||
#262 = PLANE('NONE', #261);
|
||||
#263 = CARTESIAN_POINT('NONE', (-0.0037211000000000024, 0, -0.3048));
|
||||
#264 = DIRECTION('NONE', (-1, 0, -0));
|
||||
#263 = CARTESIAN_POINT('NONE', (0.0037211000000000024, 0, -0.3048));
|
||||
#264 = DIRECTION('NONE', (1, 0, 0));
|
||||
#265 = AXIS2_PLACEMENT_3D('NONE', #263, #264, $);
|
||||
#266 = PLANE('NONE', #265);
|
||||
#267 = CARTESIAN_POINT('NONE', (-0.01877060000000003, 0.0433578, -0.30480000000000007));
|
||||
#268 = DIRECTION('NONE', (0, -1, -0));
|
||||
#267 = CARTESIAN_POINT('NONE', (0.018770600000000002, -0.043357799999999995, -0.3048));
|
||||
#268 = DIRECTION('NONE', (0, 1, 0));
|
||||
#269 = AXIS2_PLACEMENT_3D('NONE', #267, #268, $);
|
||||
#270 = PLANE('NONE', #269);
|
||||
#271 = CARTESIAN_POINT('NONE', (-0.0338201, 0.04707889999999997, -0.30479999999999996));
|
||||
#272 = DIRECTION('NONE', (-1, 0, -0));
|
||||
#271 = CARTESIAN_POINT('NONE', (0.0338201, -0.047078899999999986, -0.30479999999999996));
|
||||
#272 = DIRECTION('NONE', (1, 0, 0));
|
||||
#273 = AXIS2_PLACEMENT_3D('NONE', #271, #272, $);
|
||||
#274 = PLANE('NONE', #273);
|
||||
#275 = CARTESIAN_POINT('NONE', (0, 0.0508, -0.3048));
|
||||
#276 = DIRECTION('NONE', (0, 1, 0));
|
||||
#275 = CARTESIAN_POINT('NONE', (0, -0.05079999999999999, -0.3048));
|
||||
#276 = DIRECTION('NONE', (0, -1, -0));
|
||||
#277 = AXIS2_PLACEMENT_3D('NONE', #275, #276, $);
|
||||
#278 = PLANE('NONE', #277);
|
||||
#279 = CARTESIAN_POINT('NONE', (0.03382009999999999, 0.04707889999999999, -0.30479999999999996));
|
||||
#280 = DIRECTION('NONE', (1, 0, 0));
|
||||
#279 = CARTESIAN_POINT('NONE', (-0.033820100000000006, -0.04707889999999995, -0.30479999999999996));
|
||||
#280 = DIRECTION('NONE', (-1, 0, -0));
|
||||
#281 = AXIS2_PLACEMENT_3D('NONE', #279, #280, $);
|
||||
#282 = PLANE('NONE', #281);
|
||||
#283 = CARTESIAN_POINT('NONE', (0.018770600000000002, 0.043357799999999995, -0.3048));
|
||||
#284 = DIRECTION('NONE', (0, -1, -0));
|
||||
#283 = CARTESIAN_POINT('NONE', (-0.018770600000000033, -0.043357799999999995, -0.30480000000000007));
|
||||
#284 = DIRECTION('NONE', (0, 1, 0));
|
||||
#285 = AXIS2_PLACEMENT_3D('NONE', #283, #284, $);
|
||||
#286 = PLANE('NONE', #285);
|
||||
#287 = CARTESIAN_POINT('NONE', (0.0037211000000000024, 0, -0.3048));
|
||||
#288 = DIRECTION('NONE', (1, 0, 0));
|
||||
#287 = CARTESIAN_POINT('NONE', (-0.0037211000000000024, 0, -0.3048));
|
||||
#288 = DIRECTION('NONE', (-1, 0, -0));
|
||||
#289 = AXIS2_PLACEMENT_3D('NONE', #287, #288, $);
|
||||
#290 = PLANE('NONE', #289);
|
||||
#291 = CARTESIAN_POINT('NONE', (0.018770600000000002, -0.043357799999999995, -0.3048));
|
||||
#292 = DIRECTION('NONE', (0, 1, 0));
|
||||
#291 = CARTESIAN_POINT('NONE', (-0.01877060000000003, 0.0433578, -0.30480000000000007));
|
||||
#292 = DIRECTION('NONE', (0, -1, -0));
|
||||
#293 = AXIS2_PLACEMENT_3D('NONE', #291, #292, $);
|
||||
#294 = PLANE('NONE', #293);
|
||||
#295 = CARTESIAN_POINT('NONE', (0.033820100000000006, -0.04707889999999999, -0.3048));
|
||||
#296 = DIRECTION('NONE', (1, 0, 0));
|
||||
#295 = CARTESIAN_POINT('NONE', (-0.0338201, 0.04707889999999997, -0.30479999999999996));
|
||||
#296 = DIRECTION('NONE', (-1, 0, -0));
|
||||
#297 = AXIS2_PLACEMENT_3D('NONE', #295, #296, $);
|
||||
#298 = PLANE('NONE', #297);
|
||||
#299 = CARTESIAN_POINT('NONE', (0.016910050000000003, -0.0508, -0.3048));
|
||||
#300 = DIRECTION('NONE', (0, -1, -0));
|
||||
#299 = CARTESIAN_POINT('NONE', (-0.016910049999999968, 0.050800000000000005, -0.30480000000000007));
|
||||
#300 = DIRECTION('NONE', (0, 1, 0));
|
||||
#301 = AXIS2_PLACEMENT_3D('NONE', #299, #300, $);
|
||||
#302 = PLANE('NONE', #301);
|
||||
#303 = CARTESIAN_POINT('NONE', (0, 0, -0));
|
||||
|
@ -34,5 +34,5 @@ startSketchOn(knobPlane)
|
||||
}, %)
|
||||
|> xLine(endAbsolute = 0.0001)
|
||||
|> close()
|
||||
|> revolve({ axis = "Y" }, %)
|
||||
|> revolve(axis = "Y")
|
||||
|> appearance(color = '#D0FF01', metalness = 90, roughness = 50)
|
||||
|
21
rust/Cargo.lock
generated
@ -1780,7 +1780,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-bumper"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1791,7 +1791,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-derive-docs"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
dependencies = [
|
||||
"Inflector",
|
||||
"anyhow",
|
||||
@ -1810,7 +1810,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-directory-test-macro"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -1819,7 +1819,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-language-server"
|
||||
version = "0.2.50"
|
||||
version = "0.2.51"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1840,7 +1840,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-language-server-release"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1860,7 +1860,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-lib"
|
||||
version = "0.2.50"
|
||||
version = "0.2.51"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"approx 0.5.1",
|
||||
@ -1928,7 +1928,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-python-bindings"
|
||||
version = "0.3.50"
|
||||
version = "0.3.51"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"kcl-lib",
|
||||
@ -1943,7 +1943,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-test-server"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"hyper 0.14.32",
|
||||
@ -1956,7 +1956,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-to-core"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1970,7 +1970,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-wasm-lib"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
dependencies = [
|
||||
"bson",
|
||||
"console_error_panic_hook",
|
||||
@ -1982,6 +1982,7 @@ dependencies = [
|
||||
"js-sys",
|
||||
"kcl-lib",
|
||||
"kittycad",
|
||||
"kittycad-modeling-cmds",
|
||||
"serde_json",
|
||||
"tokio",
|
||||
"toml",
|
||||
|
@ -30,6 +30,7 @@ debug = "line-tables-only"
|
||||
[workspace.dependencies]
|
||||
async-trait = "0.1.85"
|
||||
anyhow = { version = "1" }
|
||||
bson = { version = "2.13.0", features = ["uuid-1", "chrono"] }
|
||||
clap = { version = "4.5.31", features = ["derive"] }
|
||||
dashmap = { version = "6.1.0" }
|
||||
http = "1"
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
[package]
|
||||
name = "kcl-bumper"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/KittyCAD/modeling-api"
|
||||
rust-version = "1.76"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-derive-docs"
|
||||
description = "A tool for generating documentation from Rust derive macros"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-directory-test-macro"
|
||||
description = "A tool for generating tests from a directory of kcl files"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "kcl-language-server-release"
|
||||
version = "0.1.50"
|
||||
version = "0.1.51"
|
||||
edition = "2021"
|
||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
|
||||
publish = false
|
||||
|
@ -2,7 +2,7 @@
|
||||
name = "kcl-language-server"
|
||||
description = "A language server for KCL."
|
||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
|
||||
version = "0.2.50"
|
||||
version = "0.2.51"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-lib"
|
||||
description = "KittyCAD Language implementation and tools"
|
||||
version = "0.2.50"
|
||||
version = "0.2.51"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
@ -24,6 +24,7 @@ anyhow = { workspace = true, features = ["backtrace"] }
|
||||
async-recursion = "1.1.1"
|
||||
async-trait = { workspace = true }
|
||||
base64 = "0.22.1"
|
||||
bson = { workspace = true }
|
||||
chrono = "0.4.38"
|
||||
clap = { version = "4.5.27", default-features = false, optional = true, features = [
|
||||
"std",
|
||||
@ -95,7 +96,6 @@ wasm-bindgen-futures = "0.4.49"
|
||||
web-sys = { version = "0.3.76", features = ["console"] }
|
||||
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||
bson = { version = "2.13.0", features = ["uuid-1", "chrono"] }
|
||||
tokio = { workspace = true, features = ["full"] }
|
||||
tokio-tungstenite = { version = "0.24.0", features = [
|
||||
"rustls-tls-native-roots",
|
||||
|
@ -876,7 +876,7 @@ async fn kcl_test_simple_revolve() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: 'y'}, %)
|
||||
|> revolve(axis = 'y')
|
||||
|
||||
"#;
|
||||
|
||||
@ -896,7 +896,7 @@ async fn kcl_test_simple_revolve_uppercase() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: 'Y'}, %)
|
||||
|> revolve(axis = 'Y')
|
||||
|
||||
"#;
|
||||
|
||||
@ -916,7 +916,7 @@ async fn kcl_test_simple_revolve_negative() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: '-Y', angle: 180}, %)
|
||||
|> revolve(axis = '-Y', angle = 180)
|
||||
|
||||
"#;
|
||||
|
||||
@ -936,7 +936,7 @@ async fn kcl_test_revolve_bad_angle_low() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: 'y', angle: -455}, %)
|
||||
|> revolve(axis = 'y', angle = -455)
|
||||
|
||||
"#;
|
||||
|
||||
@ -962,7 +962,7 @@ async fn kcl_test_revolve_bad_angle_high() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: 'y', angle: 455}, %)
|
||||
|> revolve(axis = 'y', angle = 455)
|
||||
|
||||
"#;
|
||||
|
||||
@ -988,7 +988,7 @@ async fn kcl_test_simple_revolve_custom_angle() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: 'y', angle: 180}, %)
|
||||
|> revolve(axis = 'y', angle = 180)
|
||||
|
||||
"#;
|
||||
|
||||
@ -1008,7 +1008,7 @@ async fn kcl_test_simple_revolve_custom_axis() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: {custom: {axis: [0, -1], origin: [0,0]}}, angle: 180}, %)
|
||||
|> revolve(axis = {custom: {axis: [0, -1], origin: [0,0]}}, angle = 180)
|
||||
|
||||
"#;
|
||||
|
||||
@ -1032,7 +1032,7 @@ sketch001 = startSketchOn(box, "end")
|
||||
|> line(end = [2, 0])
|
||||
|> line(end = [0, 10])
|
||||
|> close()
|
||||
|> revolve({ axis: getOppositeEdge(revolveAxis), angle: 90 }, %)
|
||||
|> revolve(axis = getOppositeEdge(revolveAxis), angle = 90)
|
||||
|
||||
"#;
|
||||
|
||||
@ -1056,7 +1056,7 @@ sketch001 = startSketchOn(box, revolveAxis)
|
||||
|> line(end = [2, 0])
|
||||
|> line(end = [0, 10])
|
||||
|> close()
|
||||
|> revolve({ axis: revolveAxis, angle: 90 }, %)
|
||||
|> revolve(axis = revolveAxis, angle = 90)
|
||||
|
||||
"#;
|
||||
|
||||
@ -1082,10 +1082,10 @@ async fn kcl_test_revolve_on_face_circle_edge() {
|
||||
|
||||
sketch001 = startSketchOn(box, "END")
|
||||
|> circle(center = [10,10], radius= 4)
|
||||
|> revolve({
|
||||
angle: 90,
|
||||
axis: getOppositeEdge(revolveAxis)
|
||||
}, %)
|
||||
|> revolve(
|
||||
angle = 90,
|
||||
axis = getOppositeEdge(revolveAxis)
|
||||
)
|
||||
"#;
|
||||
|
||||
let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap();
|
||||
@ -1104,10 +1104,10 @@ async fn kcl_test_revolve_on_face_circle() {
|
||||
|
||||
sketch001 = startSketchOn(box, "END")
|
||||
|> circle(center = [10,10], radius= 4 )
|
||||
|> revolve({
|
||||
angle: -90,
|
||||
axis: 'y'
|
||||
}, %)
|
||||
|> revolve(
|
||||
angle = -90,
|
||||
axis = 'y'
|
||||
)
|
||||
"#;
|
||||
|
||||
let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap();
|
||||
@ -1130,10 +1130,10 @@ sketch001 = startSketchOn(box, "end")
|
||||
|> line(end = [2, 0])
|
||||
|> line(end = [0, 10])
|
||||
|> close()
|
||||
|> revolve({
|
||||
axis: 'y',
|
||||
angle: -90,
|
||||
}, %)
|
||||
|> revolve(
|
||||
axis = 'y',
|
||||
angle = -90,
|
||||
)
|
||||
"#;
|
||||
|
||||
let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap();
|
||||
@ -1144,10 +1144,10 @@ sketch001 = startSketchOn(box, "end")
|
||||
async fn kcl_test_basic_revolve_circle() {
|
||||
let code = r#"sketch001 = startSketchOn('XY')
|
||||
|> circle(center = [15, 0], radius= 5)
|
||||
|> revolve({
|
||||
angle: 360,
|
||||
axis: 'y'
|
||||
}, %)
|
||||
|> revolve(
|
||||
angle = 360,
|
||||
axis = 'y'
|
||||
)
|
||||
"#;
|
||||
|
||||
let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap();
|
||||
@ -1166,7 +1166,7 @@ async fn kcl_test_simple_revolve_sketch_on_edge() {
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({axis: 'y', angle: 180}, %)
|
||||
|> revolve(axis = 'y', angle = 180)
|
||||
|
||||
part002 = startSketchOn(part001, 'end')
|
||||
|> startProfileAt([4.5, -5], %)
|
||||
|
@ -133,7 +133,7 @@ impl StdLibFnArg {
|
||||
|| self.type_ == "[Solid]"
|
||||
|| self.type_ == "SketchSurface"
|
||||
|| self.type_ == "SketchOrSurface"
|
||||
|| self.type_ == "SolidOrImportedGeometry"
|
||||
|| self.type_ == "SolidOrSketchOrImportedGeometry"
|
||||
{
|
||||
return Ok(Some((index, format!("{label}${{{}:{}}}", index, "%"))));
|
||||
} else if (self.type_ == "TagDeclarator" || self.type_ == "TagNode") && self.required {
|
||||
@ -1000,12 +1000,7 @@ mod tests {
|
||||
fn get_autocomplete_snippet_revolve() {
|
||||
let revolve_fn: Box<dyn StdLibFn> = Box::new(crate::std::revolve::Revolve);
|
||||
let snippet = revolve_fn.to_autocomplete_snippet().unwrap();
|
||||
assert_eq!(
|
||||
snippet,
|
||||
r#"revolve({
|
||||
axis = ${0:"X"},
|
||||
}, ${1:%})${}"#
|
||||
);
|
||||
assert_eq!(snippet, r#"revolve(${0:%}, axis = ${1:"X"})${}"#);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -104,23 +104,29 @@ impl EngineConnection {
|
||||
})?;
|
||||
|
||||
let value = crate::wasm::JsFuture::from(promise).await.map_err(|e| {
|
||||
KclError::Engine(KclErrorDetails {
|
||||
message: format!("Failed to wait for promise from engine: {:?}", e),
|
||||
source_ranges: vec![source_range],
|
||||
})
|
||||
// Try to parse the error as an engine error.
|
||||
let err_str = e.as_string().unwrap_or_default();
|
||||
if let Ok(kittycad_modeling_cmds::websocket::FailureWebSocketResponse { errors, .. }) =
|
||||
serde_json::from_str(&err_str)
|
||||
{
|
||||
KclError::Engine(KclErrorDetails {
|
||||
message: errors.iter().map(|e| e.message.clone()).collect::<Vec<_>>().join("\n"),
|
||||
source_ranges: vec![source_range],
|
||||
})
|
||||
} else {
|
||||
KclError::Engine(KclErrorDetails {
|
||||
message: format!("Failed to wait for promise from send modeling command: {:?}", e),
|
||||
source_ranges: vec![source_range],
|
||||
})
|
||||
}
|
||||
})?;
|
||||
|
||||
// Parse the value as a string.
|
||||
let s = value.as_string().ok_or_else(|| {
|
||||
KclError::Engine(KclErrorDetails {
|
||||
message: format!("Failed to get string from response from engine: `{:?}`", value),
|
||||
source_ranges: vec![source_range],
|
||||
})
|
||||
})?;
|
||||
// Convert JsValue to a Uint8Array
|
||||
let data = js_sys::Uint8Array::from(value);
|
||||
|
||||
let ws_result: WebSocketResponse = serde_json::from_str(&s).map_err(|e| {
|
||||
let ws_result: WebSocketResponse = bson::from_slice(&data.to_vec()).map_err(|e| {
|
||||
KclError::Engine(KclErrorDetails {
|
||||
message: format!("Failed to deserialize response from engine: {:?}", e),
|
||||
message: format!("Failed to deserialize bson response from engine: {:?}", e),
|
||||
source_ranges: vec![source_range],
|
||||
})
|
||||
})?;
|
||||
|
@ -83,16 +83,17 @@ pub struct ImportedGeometry {
|
||||
#[ts(export)]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
#[allow(clippy::vec_box)]
|
||||
pub enum SolidOrImportedGeometry {
|
||||
pub enum SolidOrSketchOrImportedGeometry {
|
||||
ImportedGeometry(Box<ImportedGeometry>),
|
||||
SolidSet(Vec<Solid>),
|
||||
SketchSet(Vec<Sketch>),
|
||||
}
|
||||
|
||||
impl From<SolidOrImportedGeometry> for crate::execution::KclValue {
|
||||
fn from(value: SolidOrImportedGeometry) -> Self {
|
||||
impl From<SolidOrSketchOrImportedGeometry> for crate::execution::KclValue {
|
||||
fn from(value: SolidOrSketchOrImportedGeometry) -> Self {
|
||||
match value {
|
||||
SolidOrImportedGeometry::ImportedGeometry(s) => crate::execution::KclValue::ImportedGeometry(*s),
|
||||
SolidOrImportedGeometry::SolidSet(mut s) => {
|
||||
SolidOrSketchOrImportedGeometry::ImportedGeometry(s) => crate::execution::KclValue::ImportedGeometry(*s),
|
||||
SolidOrSketchOrImportedGeometry::SolidSet(mut s) => {
|
||||
if s.len() == 1 {
|
||||
crate::execution::KclValue::Solid {
|
||||
value: Box::new(s.pop().unwrap()),
|
||||
@ -107,15 +108,31 @@ impl From<SolidOrImportedGeometry> for crate::execution::KclValue {
|
||||
}
|
||||
}
|
||||
}
|
||||
SolidOrSketchOrImportedGeometry::SketchSet(mut s) => {
|
||||
if s.len() == 1 {
|
||||
crate::execution::KclValue::Sketch {
|
||||
value: Box::new(s.pop().unwrap()),
|
||||
}
|
||||
} else {
|
||||
crate::execution::KclValue::HomArray {
|
||||
value: s
|
||||
.into_iter()
|
||||
.map(|s| crate::execution::KclValue::Sketch { value: Box::new(s) })
|
||||
.collect(),
|
||||
ty: crate::execution::PrimitiveType::Sketch,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl SolidOrImportedGeometry {
|
||||
impl SolidOrSketchOrImportedGeometry {
|
||||
pub(crate) fn ids(&self) -> Vec<uuid::Uuid> {
|
||||
match self {
|
||||
SolidOrImportedGeometry::ImportedGeometry(s) => vec![s.id],
|
||||
SolidOrImportedGeometry::SolidSet(s) => s.iter().map(|s| s.id).collect(),
|
||||
SolidOrSketchOrImportedGeometry::ImportedGeometry(s) => vec![s.id],
|
||||
SolidOrSketchOrImportedGeometry::SolidSet(s) => s.iter().map(|s| s.id).collect(),
|
||||
SolidOrSketchOrImportedGeometry::SketchSet(s) => s.iter().map(|s| s.id).collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -831,8 +831,7 @@ impl ExecutorContext {
|
||||
.await?;
|
||||
let (module_memory, _) = self
|
||||
.exec_module_for_items(id, exec_state, ExecutionKind::Isolated, source_range)
|
||||
.await
|
||||
.unwrap();
|
||||
.await?;
|
||||
|
||||
exec_state.mut_stack().memory.set_std(module_memory);
|
||||
}
|
||||
|
@ -167,7 +167,7 @@ async fn execute_test(test: &Test, render_to_png: bool, export_step: bool) {
|
||||
if render_to_png {
|
||||
twenty_twenty::assert_image(test.output_dir.join(RENDERED_MODEL_NAME), &png, 0.99);
|
||||
}
|
||||
if export_step {
|
||||
if export_step && std::env::var("EXPECTORATE").is_ok() {
|
||||
let step = step.unwrap();
|
||||
// We do not use expectorate here because the output is non-deterministic
|
||||
// due to SSI and GPU.
|
||||
@ -2289,3 +2289,66 @@ mod bad_units_in_annotation {
|
||||
super::execute(TEST_NAME, true).await
|
||||
}
|
||||
}
|
||||
mod translate_after_fillet {
|
||||
const TEST_NAME: &str = "translate_after_fillet";
|
||||
|
||||
/// 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 scale_after_fillet {
|
||||
const TEST_NAME: &str = "scale_after_fillet";
|
||||
|
||||
/// 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 rotate_after_fillet {
|
||||
const TEST_NAME: &str = "rotate_after_fillet";
|
||||
|
||||
/// 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
|
||||
}
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result<KclVal
|
||||
/// // Add color to a revolved solid.
|
||||
/// sketch001 = startSketchOn('XY')
|
||||
/// |> circle( center = [15, 0], radius = 5 )
|
||||
/// |> revolve({ angle = 360, axis = 'y' }, %)
|
||||
/// |> revolve( angle = 360, axis = 'y')
|
||||
/// |> appearance(
|
||||
/// color = '#ff0000',
|
||||
/// metalness = 90,
|
||||
|
@ -376,7 +376,7 @@ impl Args {
|
||||
pub(crate) async fn flush_batch_for_solids(
|
||||
&self,
|
||||
exec_state: &mut ExecState,
|
||||
solids: Vec<Solid>,
|
||||
solids: &[Solid],
|
||||
) -> Result<(), KclError> {
|
||||
// Make sure we don't traverse sketches more than once.
|
||||
let mut traversed_sketches = Vec::new();
|
||||
@ -1239,16 +1239,6 @@ impl<'a> FromKclValue<'a> for super::sketch::ArcToData {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromKclValue<'a> for super::revolve::RevolveData {
|
||||
fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
|
||||
let obj = arg.as_object()?;
|
||||
let angle = obj.get("angle").and_then(|x| x.as_f64());
|
||||
let tolerance = obj.get("tolerance").and_then(|x| x.as_f64());
|
||||
let_field_of!(obj, axis);
|
||||
Some(Self { angle, axis, tolerance })
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromKclValue<'a> for super::sketch::TangentialArcData {
|
||||
fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
|
||||
let obj = arg.as_object()?;
|
||||
@ -1459,13 +1449,27 @@ impl<'a> FromKclValue<'a> for crate::execution::Solid {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromKclValue<'a> for crate::execution::SolidOrImportedGeometry {
|
||||
impl<'a> FromKclValue<'a> for crate::execution::SolidOrSketchOrImportedGeometry {
|
||||
fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
|
||||
match arg {
|
||||
KclValue::Solid { value } => Some(Self::SolidSet(vec![(**value).clone()])),
|
||||
KclValue::HomArray { value, .. } => Some(Self::SolidSet(
|
||||
value.iter().map(|v| v.as_solid().unwrap().clone()).collect(),
|
||||
)),
|
||||
KclValue::Sketch { value } => Some(Self::SketchSet(vec![(**value).clone()])),
|
||||
KclValue::HomArray { value, .. } => {
|
||||
let mut solids = vec![];
|
||||
let mut sketches = vec![];
|
||||
for item in value {
|
||||
match item {
|
||||
KclValue::Solid { value } => solids.push((**value).clone()),
|
||||
KclValue::Sketch { value } => sketches.push((**value).clone()),
|
||||
_ => return None,
|
||||
}
|
||||
}
|
||||
if !solids.is_empty() {
|
||||
Some(Self::SolidSet(solids))
|
||||
} else {
|
||||
Some(Self::SketchSet(sketches))
|
||||
}
|
||||
}
|
||||
KclValue::ImportedGeometry(value) => Some(Self::ImportedGeometry(Box::new(value.clone()))),
|
||||
_ => None,
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ use crate::{
|
||||
kcl_value::{ArrayLen, RuntimeType},
|
||||
ArtifactId, ExecState, ExtrudeSurface, GeoMeta, KclValue, Path, PrimitiveType, Sketch, SketchSurface, Solid,
|
||||
},
|
||||
parsing::ast::types::TagNode,
|
||||
std::Args,
|
||||
};
|
||||
|
||||
@ -33,8 +34,10 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
exec_state,
|
||||
)?;
|
||||
let length = args.get_kw_arg("length")?;
|
||||
let tag_start = args.get_kw_arg_opt("tagStart")?;
|
||||
let tag_end = args.get_kw_arg_opt("tagEnd")?;
|
||||
|
||||
let result = inner_extrude(sketches, length, exec_state, args).await?;
|
||||
let result = inner_extrude(sketches, length, tag_start, tag_end, exec_state, args).await?;
|
||||
|
||||
Ok(result.into())
|
||||
}
|
||||
@ -96,11 +99,16 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
args = {
|
||||
sketches = { docs = "Which sketch or sketches should be extruded"},
|
||||
length = { docs = "How far to extrude the given sketches"},
|
||||
tag_start = { docs = "A named tag for the face at the start of the extrusion, i.e. the original sketch" },
|
||||
tag_end = { docs = "A named tag for the face at the end of the extrusion, i.e. the new face created by extruding the original sketch" },
|
||||
}
|
||||
}]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn inner_extrude(
|
||||
sketches: Vec<Sketch>,
|
||||
length: f64,
|
||||
tag_start: Option<TagNode>,
|
||||
tag_end: Option<TagNode>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<Vec<Solid>, KclError> {
|
||||
@ -121,18 +129,38 @@ async fn inner_extrude(
|
||||
))
|
||||
.await?;
|
||||
|
||||
solids.push(do_post_extrude(sketch.clone(), id.into(), length, exec_state, args.clone()).await?);
|
||||
solids.push(
|
||||
do_post_extrude(
|
||||
sketch,
|
||||
id.into(),
|
||||
length,
|
||||
&NamedCapTags {
|
||||
start: tag_start.as_ref(),
|
||||
end: tag_end.as_ref(),
|
||||
},
|
||||
exec_state,
|
||||
&args,
|
||||
)
|
||||
.await?,
|
||||
);
|
||||
}
|
||||
|
||||
Ok(solids)
|
||||
}
|
||||
|
||||
pub(crate) async fn do_post_extrude(
|
||||
sketch: Sketch,
|
||||
#[derive(Debug, Default)]
|
||||
pub(crate) struct NamedCapTags<'a> {
|
||||
pub start: Option<&'a TagNode>,
|
||||
pub end: Option<&'a TagNode>,
|
||||
}
|
||||
|
||||
pub(crate) async fn do_post_extrude<'a>(
|
||||
sketch: &Sketch,
|
||||
solid_id: ArtifactId,
|
||||
length: f64,
|
||||
named_cap_tags: &'a NamedCapTags<'a>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
args: &Args,
|
||||
) -> Result<Solid, KclError> {
|
||||
// Bring the object to the front of the scene.
|
||||
// See: https://github.com/KittyCAD/modeling-app/issues/806
|
||||
@ -217,10 +245,11 @@ pub(crate) async fn do_post_extrude(
|
||||
sides: face_id_map,
|
||||
start_cap_id,
|
||||
end_cap_id,
|
||||
} = analyze_faces(exec_state, &args, face_infos).await;
|
||||
} = analyze_faces(exec_state, args, face_infos).await;
|
||||
|
||||
// Iterate over the sketch.value array and add face_id to GeoMeta
|
||||
let no_engine_commands = args.ctx.no_engine_commands().await;
|
||||
let new_value = sketch
|
||||
let mut new_value: Vec<ExtrudeSurface> = sketch
|
||||
.paths
|
||||
.iter()
|
||||
.flat_map(|path| {
|
||||
@ -283,6 +312,48 @@ pub(crate) async fn do_post_extrude(
|
||||
})
|
||||
.collect();
|
||||
|
||||
// Add the tags for the start or end caps.
|
||||
if let Some(tag_start) = named_cap_tags.start {
|
||||
let Some(start_cap_id) = start_cap_id else {
|
||||
return Err(KclError::Type(KclErrorDetails {
|
||||
message: format!(
|
||||
"Expected a start cap ID for tag `{}` for extrusion of sketch {:?}",
|
||||
tag_start.name, sketch.id
|
||||
),
|
||||
source_ranges: vec![args.source_range],
|
||||
}));
|
||||
};
|
||||
|
||||
new_value.push(ExtrudeSurface::ExtrudePlane(crate::execution::ExtrudePlane {
|
||||
face_id: start_cap_id,
|
||||
tag: Some(tag_start.clone()),
|
||||
geo_meta: GeoMeta {
|
||||
id: start_cap_id,
|
||||
metadata: args.source_range.into(),
|
||||
},
|
||||
}));
|
||||
}
|
||||
if let Some(tag_end) = named_cap_tags.end {
|
||||
let Some(end_cap_id) = end_cap_id else {
|
||||
return Err(KclError::Type(KclErrorDetails {
|
||||
message: format!(
|
||||
"Expected an end cap ID for tag `{}` for extrusion of sketch {:?}",
|
||||
tag_end.name, sketch.id
|
||||
),
|
||||
source_ranges: vec![args.source_range],
|
||||
}));
|
||||
};
|
||||
|
||||
new_value.push(ExtrudeSurface::ExtrudePlane(crate::execution::ExtrudePlane {
|
||||
face_id: end_cap_id,
|
||||
tag: Some(tag_end.clone()),
|
||||
geo_meta: GeoMeta {
|
||||
id: end_cap_id,
|
||||
metadata: args.source_range.into(),
|
||||
},
|
||||
}));
|
||||
}
|
||||
|
||||
Ok(Solid {
|
||||
// Ok so you would think that the id would be the id of the solid,
|
||||
// that we passed in to the function, but it's actually the id of the
|
||||
|
@ -13,6 +13,7 @@ use crate::{
|
||||
kcl_value::{ArrayLen, RuntimeType},
|
||||
ExecState, KclValue, PrimitiveType, Sketch, Solid,
|
||||
},
|
||||
parsing::ast::types::TagNode,
|
||||
std::{extrude::do_post_extrude, fillet::default_tolerance, Args},
|
||||
};
|
||||
|
||||
@ -36,6 +37,8 @@ pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
|
||||
let base_curve_index: Option<u32> = args.get_kw_arg_opt("baseCurveIndex")?;
|
||||
// Tolerance for the loft operation.
|
||||
let tolerance: Option<f64> = args.get_kw_arg_opt("tolerance")?;
|
||||
let tag_start = args.get_kw_arg_opt("tagStart")?;
|
||||
let tag_end = args.get_kw_arg_opt("tagEnd")?;
|
||||
|
||||
let value = inner_loft(
|
||||
sketches,
|
||||
@ -43,6 +46,8 @@ pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
|
||||
bez_approximate_rational,
|
||||
base_curve_index,
|
||||
tolerance,
|
||||
tag_start,
|
||||
tag_end,
|
||||
exec_state,
|
||||
args,
|
||||
)
|
||||
@ -127,14 +132,19 @@ pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
|
||||
bez_approximate_rational = {docs = "Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary."},
|
||||
base_curve_index = {docs = "This can be set to override the automatically determined topological base curve, which is usually the first section encountered."},
|
||||
tolerance = {docs = "Tolerance for the loft operation."},
|
||||
tag_start = { docs = "A named tag for the face at the start of the loft, i.e. the original sketch" },
|
||||
tag_end = { docs = "A named tag for the face at the end of the loft, i.e. the last sketch" },
|
||||
}
|
||||
}]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn inner_loft(
|
||||
sketches: Vec<Sketch>,
|
||||
v_degree: NonZeroU32,
|
||||
bez_approximate_rational: bool,
|
||||
base_curve_index: Option<u32>,
|
||||
tolerance: Option<f64>,
|
||||
tag_start: Option<TagNode>,
|
||||
tag_end: Option<TagNode>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<Box<Solid>, KclError> {
|
||||
@ -167,6 +177,17 @@ async fn inner_loft(
|
||||
// Override its id with the loft id so we can get its faces later
|
||||
sketch.id = id;
|
||||
Ok(Box::new(
|
||||
do_post_extrude(sketch, id.into(), 0.0, exec_state, args).await?,
|
||||
do_post_extrude(
|
||||
&sketch,
|
||||
id.into(),
|
||||
0.0,
|
||||
&super::extrude::NamedCapTags {
|
||||
start: tag_start.as_ref(),
|
||||
end: tag_end.as_ref(),
|
||||
},
|
||||
exec_state,
|
||||
&args,
|
||||
)
|
||||
.await?,
|
||||
))
|
||||
}
|
||||
|
@ -363,7 +363,7 @@ async fn execute_pattern_transform<T: GeometryTrait>(
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not flush these, then you won't be able to pattern something with fillets.
|
||||
// Flush just the fillets/chamfers that apply to these solids.
|
||||
T::flush_batch(args, exec_state, geo_set.clone()).await?;
|
||||
T::flush_batch(args, exec_state, &geo_set).await?;
|
||||
let starting: Vec<T> = geo_set.into();
|
||||
|
||||
if args.ctx.context_type == crate::execution::ContextType::Mock {
|
||||
@ -614,7 +614,7 @@ trait GeometryTrait: Clone {
|
||||
fn original_id(&self) -> Uuid;
|
||||
fn set_id(&mut self, id: Uuid);
|
||||
fn array_to_point3d(val: &KclValue, source_ranges: Vec<SourceRange>) -> Result<Point3d, KclError>;
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, set: Self::Set) -> Result<(), KclError>;
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, set: &Self::Set) -> Result<(), KclError>;
|
||||
}
|
||||
|
||||
impl GeometryTrait for Sketch {
|
||||
@ -633,7 +633,7 @@ impl GeometryTrait for Sketch {
|
||||
Ok(Point3d { x, y, z: 0.0 })
|
||||
}
|
||||
|
||||
async fn flush_batch(_: &Args, _: &mut ExecState, _: Self::Set) -> Result<(), KclError> {
|
||||
async fn flush_batch(_: &Args, _: &mut ExecState, _: &Self::Set) -> Result<(), KclError> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@ -656,7 +656,7 @@ impl GeometryTrait for Solid {
|
||||
array_to_point3d(val, source_ranges)
|
||||
}
|
||||
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, solid_set: Self::Set) -> Result<(), KclError> {
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, solid_set: &Self::Set) -> Result<(), KclError> {
|
||||
args.flush_batch_for_solids(exec_state, solid_set).await
|
||||
}
|
||||
}
|
||||
@ -1221,7 +1221,7 @@ async fn inner_pattern_circular_3d(
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not flush these, then you won't be able to pattern something with fillets.
|
||||
// Flush just the fillets/chamfers that apply to these solids.
|
||||
args.flush_batch_for_solids(exec_state, solids.clone()).await?;
|
||||
args.flush_batch_for_solids(exec_state, &solids).await?;
|
||||
|
||||
let starting_solids = solids;
|
||||
|
||||
|
@ -4,35 +4,31 @@ use anyhow::Result;
|
||||
use kcl_derive_docs::stdlib;
|
||||
use kcmc::{each_cmd as mcmd, length_unit::LengthUnit, shared::Angle, ModelingCmd};
|
||||
use kittycad_modeling_cmds::{self as kcmc};
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
errors::{KclError, KclErrorDetails},
|
||||
execution::{ExecState, KclValue, Sketch, Solid},
|
||||
execution::{
|
||||
kcl_value::{ArrayLen, RuntimeType},
|
||||
ExecState, KclValue, PrimitiveType, Sketch, Solid,
|
||||
},
|
||||
parsing::ast::types::TagNode,
|
||||
std::{axis_or_reference::Axis2dOrEdgeReference, extrude::do_post_extrude, fillet::default_tolerance, Args},
|
||||
};
|
||||
|
||||
/// Data for revolution surfaces.
|
||||
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
|
||||
#[ts(export)]
|
||||
pub struct RevolveData {
|
||||
/// Angle to revolve (in degrees). Default is 360.
|
||||
#[serde(default)]
|
||||
#[schemars(range(min = -360.0, max = 360.0))]
|
||||
pub angle: Option<f64>,
|
||||
/// Axis of revolution.
|
||||
pub axis: Axis2dOrEdgeReference,
|
||||
/// Tolerance for the revolve operation.
|
||||
#[serde(default)]
|
||||
pub tolerance: Option<f64>,
|
||||
}
|
||||
|
||||
/// Revolve a sketch or set of sketches around an axis.
|
||||
pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let (data, sketches): (RevolveData, _) = args.get_data_and_sketches(exec_state)?;
|
||||
let sketches = args.get_unlabeled_kw_arg_typed(
|
||||
"sketches",
|
||||
&RuntimeType::Array(PrimitiveType::Sketch, ArrayLen::NonEmpty),
|
||||
exec_state,
|
||||
)?;
|
||||
let axis: Axis2dOrEdgeReference = args.get_kw_arg("axis")?;
|
||||
let angle = args.get_kw_arg_opt("angle")?;
|
||||
let tolerance = args.get_kw_arg_opt("tolerance")?;
|
||||
let tag_start = args.get_kw_arg_opt("tagStart")?;
|
||||
let tag_end = args.get_kw_arg_opt("tagEnd")?;
|
||||
|
||||
let value = inner_revolve(data, sketches, exec_state, args).await?;
|
||||
let value = inner_revolve(sketches, axis, angle, tolerance, tag_start, tag_end, exec_state, args).await?;
|
||||
Ok(value.into())
|
||||
}
|
||||
|
||||
@ -60,17 +56,17 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
/// |> line(end = [0, -5.5])
|
||||
/// |> line(end = [-2, 0])
|
||||
/// |> close()
|
||||
/// |> revolve({axis = 'y'}, %) // default angle is 360
|
||||
/// |> revolve(axis = 'y') // default angle is 360
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // A donut shape.
|
||||
/// sketch001 = startSketchOn('XY')
|
||||
/// |> circle( center = [15, 0], radius = 5 )
|
||||
/// |> revolve({
|
||||
/// |> revolve(
|
||||
/// angle = 360,
|
||||
/// axis = 'y'
|
||||
/// }, %)
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
@ -84,7 +80,7 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
/// |> line(end = [0, -5.5])
|
||||
/// |> line(end = [-2, 0])
|
||||
/// |> close()
|
||||
/// |> revolve({axis = 'y', angle = 180}, %)
|
||||
/// |> revolve(axis = 'y', angle = 180)
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
@ -98,7 +94,8 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
/// |> line(end = [0, -5.5])
|
||||
/// |> line(end = [-2, 0])
|
||||
/// |> close()
|
||||
/// |> revolve({axis = 'y', angle = 180}, %)
|
||||
/// |> revolve(axis = 'y', angle = 180)
|
||||
///
|
||||
/// part002 = startSketchOn(part001, 'end')
|
||||
/// |> startProfileAt([4.5, -5], %)
|
||||
/// |> line(end = [0, 5])
|
||||
@ -119,10 +116,10 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
///
|
||||
/// sketch001 = startSketchOn(box, "END")
|
||||
/// |> circle( center = [10,10], radius = 4 )
|
||||
/// |> revolve({
|
||||
/// |> revolve(
|
||||
/// angle = -90,
|
||||
/// axis = 'y'
|
||||
/// }, %)
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
@ -136,10 +133,10 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
///
|
||||
/// sketch001 = startSketchOn(box, "END")
|
||||
/// |> circle( center = [10,10], radius = 4 )
|
||||
/// |> revolve({
|
||||
/// |> revolve(
|
||||
/// angle = 90,
|
||||
/// axis = getOppositeEdge(revolveAxis)
|
||||
/// }, %)
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
@ -153,11 +150,11 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
///
|
||||
/// sketch001 = startSketchOn(box, "END")
|
||||
/// |> circle( center = [10,10], radius = 4 )
|
||||
/// |> revolve({
|
||||
/// |> revolve(
|
||||
/// angle = 90,
|
||||
/// axis = getOppositeEdge(revolveAxis),
|
||||
/// tolerance: 0.0001
|
||||
/// }, %)
|
||||
/// tolerance = 0.0001
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
@ -168,14 +165,15 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
/// |> close()
|
||||
///
|
||||
/// part001 = revolve({
|
||||
/// part001 = revolve(
|
||||
/// sketch001,
|
||||
/// axis = {
|
||||
/// custom: {
|
||||
/// axis = [0.0, 1.0],
|
||||
/// origin: [0.0, 0.0]
|
||||
/// }
|
||||
/// }
|
||||
/// }, sketch001)
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
@ -196,21 +194,65 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
/// |> close()
|
||||
///
|
||||
/// revolve({
|
||||
/// revolve(
|
||||
/// [profile001, profile002],
|
||||
/// axis = "X",
|
||||
/// }, [profile001, profile002])
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Revolve around a path that has not been extruded.
|
||||
///
|
||||
/// profile001 = startSketchOn('XY')
|
||||
/// |> startProfileAt([0, 0], %)
|
||||
/// |> line(end = [0, 20], tag = $revolveAxis)
|
||||
/// |> line(end = [20, 0])
|
||||
/// |> line(end = [0, -20])
|
||||
/// |> close(%)
|
||||
///
|
||||
/// sketch001 = startSketchOn('XY')
|
||||
/// |> circle(center = [-10, 10], radius = 4)
|
||||
/// |> revolve(angle = 90, axis = revolveAxis)
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Revolve around a path that has not been extruded or closed.
|
||||
///
|
||||
/// profile001 = startSketchOn('XY')
|
||||
/// |> startProfileAt([0, 0], %)
|
||||
/// |> line(end = [0, 20], tag = $revolveAxis)
|
||||
/// |> line(end = [20, 0])
|
||||
///
|
||||
/// sketch001 = startSketchOn('XY')
|
||||
/// |> circle(center = [-10, 10], radius = 4)
|
||||
/// |> revolve(angle = 90, axis = revolveAxis)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "revolve",
|
||||
feature_tree_operation = true,
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
sketches = { docs = "The sketch or set of sketches that should be revolved" },
|
||||
axis = { docs = "Axis of revolution." },
|
||||
angle = { docs = "Angle to revolve (in degrees). Default is 360." },
|
||||
tolerance = { docs = "Tolerance for the revolve operation." },
|
||||
tag_start = { docs = "A named tag for the face at the start of the revolve, i.e. the original sketch" },
|
||||
tag_end = { docs = "A named tag for the face at the end of the revolve" },
|
||||
}
|
||||
}]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn inner_revolve(
|
||||
data: RevolveData,
|
||||
sketches: Vec<Sketch>,
|
||||
axis: Axis2dOrEdgeReference,
|
||||
angle: Option<f64>,
|
||||
tolerance: Option<f64>,
|
||||
tag_start: Option<TagNode>,
|
||||
tag_end: Option<TagNode>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<Vec<Solid>, KclError> {
|
||||
if let Some(angle) = data.angle {
|
||||
if let Some(angle) = angle {
|
||||
// Return an error if the angle is zero.
|
||||
// We don't use validate() here because we want to return a specific error message that is
|
||||
// nice and we use the other data in the docs, so we still need use the derive above for the json schema.
|
||||
@ -222,13 +264,13 @@ async fn inner_revolve(
|
||||
}
|
||||
}
|
||||
|
||||
let angle = Angle::from_degrees(data.angle.unwrap_or(360.0));
|
||||
let angle = Angle::from_degrees(angle.unwrap_or(360.0));
|
||||
|
||||
let mut solids = Vec::new();
|
||||
for sketch in &sketches {
|
||||
let id = exec_state.next_uuid();
|
||||
|
||||
match &data.axis {
|
||||
match &axis {
|
||||
Axis2dOrEdgeReference::Axis(axis) => {
|
||||
let (axis, origin) = axis.axis_and_origin()?;
|
||||
args.batch_modeling_cmd(
|
||||
@ -238,7 +280,7 @@ async fn inner_revolve(
|
||||
target: sketch.id.into(),
|
||||
axis,
|
||||
origin,
|
||||
tolerance: LengthUnit(data.tolerance.unwrap_or(default_tolerance(&args.ctx.settings.units))),
|
||||
tolerance: LengthUnit(tolerance.unwrap_or(default_tolerance(&args.ctx.settings.units))),
|
||||
axis_is_2d: true,
|
||||
}),
|
||||
)
|
||||
@ -252,14 +294,27 @@ async fn inner_revolve(
|
||||
angle,
|
||||
target: sketch.id.into(),
|
||||
edge_id,
|
||||
tolerance: LengthUnit(data.tolerance.unwrap_or(default_tolerance(&args.ctx.settings.units))),
|
||||
tolerance: LengthUnit(tolerance.unwrap_or(default_tolerance(&args.ctx.settings.units))),
|
||||
}),
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
|
||||
solids.push(do_post_extrude(sketch.clone(), id.into(), 0.0, exec_state, args.clone()).await?);
|
||||
solids.push(
|
||||
do_post_extrude(
|
||||
sketch,
|
||||
id.into(),
|
||||
0.0,
|
||||
&super::extrude::NamedCapTags {
|
||||
start: tag_start.as_ref(),
|
||||
end: tag_end.as_ref(),
|
||||
},
|
||||
exec_state,
|
||||
&args,
|
||||
)
|
||||
.await?,
|
||||
);
|
||||
}
|
||||
|
||||
Ok(solids)
|
||||
|
@ -210,7 +210,7 @@ async fn inner_shell(
|
||||
for solid in &solids {
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not do these for sketch on face, things will fail with face does not exist.
|
||||
args.flush_batch_for_solids(exec_state, vec![solid.clone()]).await?;
|
||||
args.flush_batch_for_solids(exec_state, &[solid.clone()]).await?;
|
||||
|
||||
for tag in &faces {
|
||||
let extrude_plane_id = tag.get_face_id(solid, exec_state, &args, false).await?;
|
||||
@ -320,7 +320,7 @@ async fn inner_hollow(
|
||||
) -> Result<Box<Solid>, KclError> {
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not do these for sketch on face, things will fail with face does not exist.
|
||||
args.flush_batch_for_solids(exec_state, vec![(*solid).clone()]).await?;
|
||||
args.flush_batch_for_solids(exec_state, &[(*solid).clone()]).await?;
|
||||
|
||||
args.batch_modeling_cmd(
|
||||
exec_state.next_uuid(),
|
||||
|
@ -951,6 +951,37 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result<K
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Sketch on the end of an extruded face by tagging the end face.
|
||||
///
|
||||
/// exampleSketch = startSketchOn(XY)
|
||||
/// |> startProfileAt([0, 0], %)
|
||||
/// |> line(end = [10, 0])
|
||||
/// |> line(end = [0, 10])
|
||||
/// |> line(end = [-10, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5, tagEnd = $end01)
|
||||
///
|
||||
/// exampleSketch002 = startSketchOn(example, end01)
|
||||
/// |> startProfileAt([1, 1], %)
|
||||
/// |> line(end = [8, 0])
|
||||
/// |> line(end = [0, 8])
|
||||
/// |> line(end = [-8, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)
|
||||
///
|
||||
/// exampleSketch003 = startSketchOn(example002, end02)
|
||||
/// |> startProfileAt([2, 2], %)
|
||||
/// |> line(end = [6, 0])
|
||||
/// |> line(end = [0, 6])
|
||||
/// |> line(end = [-6, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example003 = extrude(exampleSketch003, length = 5)
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn(XY)
|
||||
/// |> startProfileAt([0, 0], %)
|
||||
/// |> line(end = [10, 0])
|
||||
@ -991,7 +1022,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result<K
|
||||
/// |> line(end = [-2, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = revolve({ axis: 'y', angle: 180 }, exampleSketch)
|
||||
/// example = revolve(exampleSketch, axis = 'y', angle = 180)
|
||||
///
|
||||
/// exampleSketch002 = startSketchOn(example, 'end')
|
||||
/// |> startProfileAt([4.5, -5], %)
|
||||
@ -1004,6 +1035,32 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result<K
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Sketch on the end of a revolved face by tagging the end face.
|
||||
///
|
||||
/// exampleSketch = startSketchOn(XY)
|
||||
/// |> startProfileAt([4, 12], %)
|
||||
/// |> line(end = [2, 0])
|
||||
/// |> line(end = [0, -6])
|
||||
/// |> line(end = [4, -6])
|
||||
/// |> line(end = [0, -6])
|
||||
/// |> line(end = [-3.75, -4.5])
|
||||
/// |> line(end = [0, -5.5])
|
||||
/// |> line(end = [-2, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = revolve(exampleSketch, axis = 'y', angle = 180, tagEnd = $end01)
|
||||
///
|
||||
/// exampleSketch002 = startSketchOn(example, end01)
|
||||
/// |> startProfileAt([4.5, -5], %)
|
||||
/// |> line(end = [0, 5])
|
||||
/// |> line(end = [5, 0])
|
||||
/// |> line(end = [0, -5])
|
||||
/// |> close()
|
||||
///
|
||||
/// example002 = extrude(exampleSketch002, length = 5)
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// a1 = startSketchOn({
|
||||
/// plane: {
|
||||
/// origin = { x = 0, y = 0, z = 0 },
|
||||
@ -1212,7 +1269,7 @@ pub(crate) async fn inner_start_profile_at(
|
||||
SketchSurface::Face(face) => {
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not do these for sketch on face, things will fail with face does not exist.
|
||||
args.flush_batch_for_solids(exec_state, vec![(*face.solid).clone()])
|
||||
args.flush_batch_for_solids(exec_state, &[(*face.solid).clone()])
|
||||
.await?;
|
||||
}
|
||||
SketchSurface::Plane(plane) if !plane.is_standard() => {
|
||||
|
@ -13,6 +13,7 @@ use crate::{
|
||||
kcl_value::{ArrayLen, RuntimeType},
|
||||
ExecState, Helix, KclValue, PrimitiveType, Sketch, Solid,
|
||||
},
|
||||
parsing::ast::types::TagNode,
|
||||
std::{extrude::do_post_extrude, fillet::default_tolerance, Args},
|
||||
};
|
||||
|
||||
@ -35,8 +36,13 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
let path: SweepPath = args.get_kw_arg("path")?;
|
||||
let sectional = args.get_kw_arg_opt("sectional")?;
|
||||
let tolerance = args.get_kw_arg_opt("tolerance")?;
|
||||
let tag_start = args.get_kw_arg_opt("tagStart")?;
|
||||
let tag_end = args.get_kw_arg_opt("tagEnd")?;
|
||||
|
||||
let value = inner_sweep(sketches, path, sectional, tolerance, exec_state, args).await?;
|
||||
let value = inner_sweep(
|
||||
sketches, path, sectional, tolerance, tag_start, tag_end, exec_state, args,
|
||||
)
|
||||
.await?;
|
||||
Ok(value.into())
|
||||
}
|
||||
|
||||
@ -145,13 +151,18 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
path = { docs = "The path to sweep the sketch along" },
|
||||
sectional = { docs = "If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components." },
|
||||
tolerance = { docs = "Tolerance for this operation" },
|
||||
tag_start = { docs = "A named tag for the face at the start of the sweep, i.e. the original sketch" },
|
||||
tag_end = { docs = "A named tag for the face at the end of the sweep" },
|
||||
}
|
||||
}]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn inner_sweep(
|
||||
sketches: Vec<Sketch>,
|
||||
path: SweepPath,
|
||||
sectional: Option<bool>,
|
||||
tolerance: Option<f64>,
|
||||
tag_start: Option<TagNode>,
|
||||
tag_end: Option<TagNode>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<Vec<Solid>, KclError> {
|
||||
@ -174,7 +185,20 @@ async fn inner_sweep(
|
||||
)
|
||||
.await?;
|
||||
|
||||
solids.push(do_post_extrude(sketch.clone(), id.into(), 0.0, exec_state, args.clone()).await?);
|
||||
solids.push(
|
||||
do_post_extrude(
|
||||
sketch,
|
||||
id.into(),
|
||||
0.0,
|
||||
&super::extrude::NamedCapTags {
|
||||
start: tag_start.as_ref(),
|
||||
end: tag_end.as_ref(),
|
||||
},
|
||||
exec_state,
|
||||
&args,
|
||||
)
|
||||
.await?,
|
||||
);
|
||||
}
|
||||
|
||||
Ok(solids)
|
||||
|
@ -15,16 +15,17 @@ use crate::{
|
||||
errors::{KclError, KclErrorDetails},
|
||||
execution::{
|
||||
kcl_value::{ArrayLen, RuntimeType},
|
||||
ExecState, KclValue, PrimitiveType, SolidOrImportedGeometry,
|
||||
ExecState, KclValue, PrimitiveType, SolidOrSketchOrImportedGeometry,
|
||||
},
|
||||
std::Args,
|
||||
};
|
||||
|
||||
/// Scale a solid.
|
||||
/// Scale a solid or a sketch.
|
||||
pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let solids = args.get_unlabeled_kw_arg_typed(
|
||||
"solids",
|
||||
let objects = args.get_unlabeled_kw_arg_typed(
|
||||
"objects",
|
||||
&RuntimeType::Union(vec![
|
||||
RuntimeType::Array(PrimitiveType::Sketch, ArrayLen::NonEmpty),
|
||||
RuntimeType::Array(PrimitiveType::Solid, ArrayLen::NonEmpty),
|
||||
RuntimeType::Primitive(PrimitiveType::ImportedGeometry),
|
||||
]),
|
||||
@ -33,11 +34,11 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
let scale = args.get_kw_arg("scale")?;
|
||||
let global = args.get_kw_arg_opt("global")?;
|
||||
|
||||
let solids = inner_scale(solids, scale, global, exec_state, args).await?;
|
||||
Ok(solids.into())
|
||||
let objects = inner_scale(objects, scale, global, exec_state, args).await?;
|
||||
Ok(objects.into())
|
||||
}
|
||||
|
||||
/// Scale a solid.
|
||||
/// Scale a solid or a sketch.
|
||||
///
|
||||
/// By default the transform is applied in local sketch axis, therefore the origin will not move.
|
||||
///
|
||||
@ -134,25 +135,31 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
solids = {docs = "The solid or set of solids to scale."},
|
||||
objects = {docs = "The solid, sketch, or set of solids or sketches to scale."},
|
||||
scale = {docs = "The scale factor for the x, y, and z axes."},
|
||||
global = {docs = "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move."}
|
||||
}
|
||||
}]
|
||||
async fn inner_scale(
|
||||
solids: SolidOrImportedGeometry,
|
||||
objects: SolidOrSketchOrImportedGeometry,
|
||||
scale: [f64; 3],
|
||||
global: Option<bool>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<SolidOrImportedGeometry, KclError> {
|
||||
for solid_id in solids.ids() {
|
||||
) -> Result<SolidOrSketchOrImportedGeometry, KclError> {
|
||||
// If we have a solid, flush the fillets and chamfers.
|
||||
// Only transforms needs this, it is very odd, see: https://github.com/KittyCAD/modeling-app/issues/5880
|
||||
if let SolidOrSketchOrImportedGeometry::SolidSet(solids) = &objects {
|
||||
args.flush_batch_for_solids(exec_state, solids).await?;
|
||||
}
|
||||
|
||||
for object_id in objects.ids() {
|
||||
let id = exec_state.next_uuid();
|
||||
|
||||
args.batch_modeling_cmd(
|
||||
id,
|
||||
ModelingCmd::from(mcmd::SetObjectTransform {
|
||||
object_id: solid_id,
|
||||
object_id,
|
||||
transforms: vec![shared::ComponentTransform {
|
||||
scale: Some(shared::TransformBy::<Point3d<f64>> {
|
||||
property: Point3d {
|
||||
@ -172,14 +179,15 @@ async fn inner_scale(
|
||||
.await?;
|
||||
}
|
||||
|
||||
Ok(solids)
|
||||
Ok(objects)
|
||||
}
|
||||
|
||||
/// Move a solid.
|
||||
/// Move a solid or a sketch.
|
||||
pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let solids = args.get_unlabeled_kw_arg_typed(
|
||||
"solids",
|
||||
let objects = args.get_unlabeled_kw_arg_typed(
|
||||
"objects",
|
||||
&RuntimeType::Union(vec![
|
||||
RuntimeType::Array(PrimitiveType::Sketch, ArrayLen::NonEmpty),
|
||||
RuntimeType::Array(PrimitiveType::Solid, ArrayLen::NonEmpty),
|
||||
RuntimeType::Primitive(PrimitiveType::ImportedGeometry),
|
||||
]),
|
||||
@ -188,11 +196,11 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
let translate = args.get_kw_arg("translate")?;
|
||||
let global = args.get_kw_arg_opt("global")?;
|
||||
|
||||
let solids = inner_translate(solids, translate, global, exec_state, args).await?;
|
||||
Ok(solids.into())
|
||||
let objects = inner_translate(objects, translate, global, exec_state, args).await?;
|
||||
Ok(objects.into())
|
||||
}
|
||||
|
||||
/// Move a solid.
|
||||
/// Move a solid or a sketch.
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Move a pipe.
|
||||
@ -275,31 +283,86 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
/// // Move the sweeps.
|
||||
/// translate(parts, translate = [1.0, 1.0, 2.5])
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Move a sketch.
|
||||
///
|
||||
/// fn square(length){
|
||||
/// l = length / 2
|
||||
/// p0 = [-l, -l]
|
||||
/// p1 = [-l, l]
|
||||
/// p2 = [l, l]
|
||||
/// p3 = [l, -l]
|
||||
///
|
||||
/// return startSketchOn(XY)
|
||||
/// |> startProfileAt(p0, %)
|
||||
/// |> line(endAbsolute = p1)
|
||||
/// |> line(endAbsolute = p2)
|
||||
/// |> line(endAbsolute = p3)
|
||||
/// |> close()
|
||||
/// }
|
||||
///
|
||||
/// square(10)
|
||||
/// |> translate(
|
||||
/// translate = [5, 5, 0],
|
||||
/// )
|
||||
/// |> extrude(
|
||||
/// length = 10,
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Translate and rotate a sketch to create a loft.
|
||||
/// sketch001 = startSketchOn('XY')
|
||||
///
|
||||
/// fn square() {
|
||||
/// return startProfileAt([-10, 10], sketch001)
|
||||
/// |> xLine(length = 20)
|
||||
/// |> yLine(length = -20)
|
||||
/// |> xLine(length = -20)
|
||||
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
/// |> close()
|
||||
/// }
|
||||
///
|
||||
/// profile001 = square()
|
||||
///
|
||||
/// profile002 = square()
|
||||
/// |> translate(translate = [0, 0, 20])
|
||||
/// |> rotate(axis = [0, 0, 1.0], angle = 45)
|
||||
///
|
||||
/// loft([profile001, profile002])
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "translate",
|
||||
feature_tree_operation = false,
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
solids = {docs = "The solid or set of solids to move."},
|
||||
translate = {docs = "The amount to move the solid in all three axes."},
|
||||
objects = {docs = "The solid, sketch, or set of solids or sketches to move."},
|
||||
translate = {docs = "The amount to move the solid or sketch in all three axes."},
|
||||
global = {docs = "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move."}
|
||||
}
|
||||
}]
|
||||
async fn inner_translate(
|
||||
solids: SolidOrImportedGeometry,
|
||||
objects: SolidOrSketchOrImportedGeometry,
|
||||
translate: [f64; 3],
|
||||
global: Option<bool>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<SolidOrImportedGeometry, KclError> {
|
||||
for solid_id in solids.ids() {
|
||||
) -> Result<SolidOrSketchOrImportedGeometry, KclError> {
|
||||
// If we have a solid, flush the fillets and chamfers.
|
||||
// Only transforms needs this, it is very odd, see: https://github.com/KittyCAD/modeling-app/issues/5880
|
||||
if let SolidOrSketchOrImportedGeometry::SolidSet(solids) = &objects {
|
||||
args.flush_batch_for_solids(exec_state, solids).await?;
|
||||
}
|
||||
|
||||
for object_id in objects.ids() {
|
||||
let id = exec_state.next_uuid();
|
||||
|
||||
args.batch_modeling_cmd(
|
||||
id,
|
||||
ModelingCmd::from(mcmd::SetObjectTransform {
|
||||
object_id: solid_id,
|
||||
object_id,
|
||||
transforms: vec![shared::ComponentTransform {
|
||||
translate: Some(shared::TransformBy::<Point3d<LengthUnit>> {
|
||||
property: shared::Point3d {
|
||||
@ -319,14 +382,15 @@ async fn inner_translate(
|
||||
.await?;
|
||||
}
|
||||
|
||||
Ok(solids)
|
||||
Ok(objects)
|
||||
}
|
||||
|
||||
/// Rotate a solid.
|
||||
/// Rotate a solid or a sketch.
|
||||
pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let solids = args.get_unlabeled_kw_arg_typed(
|
||||
"solid",
|
||||
let objects = args.get_unlabeled_kw_arg_typed(
|
||||
"objects",
|
||||
&RuntimeType::Union(vec![
|
||||
RuntimeType::Array(PrimitiveType::Sketch, ArrayLen::NonEmpty),
|
||||
RuntimeType::Array(PrimitiveType::Solid, ArrayLen::NonEmpty),
|
||||
RuntimeType::Primitive(PrimitiveType::ImportedGeometry),
|
||||
]),
|
||||
@ -439,11 +503,11 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
}
|
||||
}
|
||||
|
||||
let solids = inner_rotate(solids, roll, pitch, yaw, axis, angle, global, exec_state, args).await?;
|
||||
Ok(solids.into())
|
||||
let objects = inner_rotate(objects, roll, pitch, yaw, axis, angle, global, exec_state, args).await?;
|
||||
Ok(objects.into())
|
||||
}
|
||||
|
||||
/// Rotate a solid.
|
||||
/// Rotate a solid or a sketch.
|
||||
///
|
||||
/// ### Using Roll, Pitch, and Yaw
|
||||
///
|
||||
@ -589,13 +653,35 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
/// // Rotate the sweeps.
|
||||
/// rotate(parts, axis = [0, 0, 1.0], angle = 90)
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Translate and rotate a sketch to create a loft.
|
||||
/// sketch001 = startSketchOn('XY')
|
||||
///
|
||||
/// fn square() {
|
||||
/// return startProfileAt([-10, 10], sketch001)
|
||||
/// |> xLine(length = 20)
|
||||
/// |> yLine(length = -20)
|
||||
/// |> xLine(length = -20)
|
||||
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
/// |> close()
|
||||
/// }
|
||||
///
|
||||
/// profile001 = square()
|
||||
///
|
||||
/// profile002 = square()
|
||||
/// |> translate(translate = [0, 0, 20])
|
||||
/// |> rotate(axis = [0, 0, 1.0], angle = 45)
|
||||
///
|
||||
/// loft([profile001, profile002])
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "rotate",
|
||||
feature_tree_operation = false,
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
solids = {docs = "The solid or set of solids to rotate."},
|
||||
objects = {docs = "The solid, sketch, or set of solids or sketches to rotate."},
|
||||
roll = {docs = "The roll angle in degrees. Must be used with `pitch` and `yaw`. Must be between -360 and 360.", include_in_snippet = true},
|
||||
pitch = {docs = "The pitch angle in degrees. Must be used with `roll` and `yaw`. Must be between -360 and 360.", include_in_snippet = true},
|
||||
yaw = {docs = "The yaw angle in degrees. Must be used with `roll` and `pitch`. Must be between -360 and 360.", include_in_snippet = true},
|
||||
@ -606,7 +692,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
}]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn inner_rotate(
|
||||
solids: SolidOrImportedGeometry,
|
||||
objects: SolidOrSketchOrImportedGeometry,
|
||||
roll: Option<f64>,
|
||||
pitch: Option<f64>,
|
||||
yaw: Option<f64>,
|
||||
@ -615,15 +701,21 @@ async fn inner_rotate(
|
||||
global: Option<bool>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<SolidOrImportedGeometry, KclError> {
|
||||
for solid_id in solids.ids() {
|
||||
) -> Result<SolidOrSketchOrImportedGeometry, KclError> {
|
||||
// If we have a solid, flush the fillets and chamfers.
|
||||
// Only transforms needs this, it is very odd, see: https://github.com/KittyCAD/modeling-app/issues/5880
|
||||
if let SolidOrSketchOrImportedGeometry::SolidSet(solids) = &objects {
|
||||
args.flush_batch_for_solids(exec_state, solids).await?;
|
||||
}
|
||||
|
||||
for object_id in objects.ids() {
|
||||
let id = exec_state.next_uuid();
|
||||
|
||||
if let (Some(roll), Some(pitch), Some(yaw)) = (roll, pitch, yaw) {
|
||||
args.batch_modeling_cmd(
|
||||
id,
|
||||
ModelingCmd::from(mcmd::SetObjectTransform {
|
||||
object_id: solid_id,
|
||||
object_id,
|
||||
transforms: vec![shared::ComponentTransform {
|
||||
rotate_rpy: Some(shared::TransformBy::<Point3d<f64>> {
|
||||
property: shared::Point3d {
|
||||
@ -647,7 +739,7 @@ async fn inner_rotate(
|
||||
args.batch_modeling_cmd(
|
||||
id,
|
||||
ModelingCmd::from(mcmd::SetObjectTransform {
|
||||
object_id: solid_id,
|
||||
object_id,
|
||||
transforms: vec![shared::ComponentTransform {
|
||||
rotate_angle_axis: Some(shared::TransformBy::<Point4d<f64>> {
|
||||
property: shared::Point4d {
|
||||
@ -669,7 +761,7 @@ async fn inner_rotate(
|
||||
}
|
||||
}
|
||||
|
||||
Ok(solids)
|
||||
Ok(objects)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
source: kcl/src/simulation_tests.rs
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Result of parsing array_index_oob.kcl
|
||||
---
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
source: kcl/src/simulation_tests.rs
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Error from executing array_index_oob.kcl
|
||||
---
|
||||
KCL UndefinedValue error
|
||||
|
@ -977,8 +977,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1313,
|
||||
1339,
|
||||
1319,
|
||||
1345,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -992,7 +992,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1010,7 +1010,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1022,7 +1022,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1035,7 +1035,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1049,7 +1049,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1063,7 +1063,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1077,7 +1077,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1091,7 +1091,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1105,7 +1105,7 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1118,8 +1118,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1134,8 +1134,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1148,8 +1148,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1159,8 +1159,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1171,8 +1171,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1184,8 +1184,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1198,8 +1198,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1212,8 +1212,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1226,8 +1226,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1240,8 +1240,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1254,8 +1254,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1268,8 +1268,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1412,
|
||||
1432,
|
||||
1404,
|
||||
1424,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1297,8 +1297,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1446,
|
||||
1484,
|
||||
1438,
|
||||
1476,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1317,8 +1317,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1446,
|
||||
1484,
|
||||
1438,
|
||||
1476,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1328,8 +1328,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1446,
|
||||
1484,
|
||||
1438,
|
||||
1476,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1345,8 +1345,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1446,
|
||||
1484,
|
||||
1438,
|
||||
1476,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1356,8 +1356,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1490,
|
||||
1514,
|
||||
1482,
|
||||
1506,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1377,8 +1377,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1520,
|
||||
1545,
|
||||
1512,
|
||||
1537,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1398,8 +1398,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1559,
|
||||
1598,
|
||||
1551,
|
||||
1590,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1418,8 +1418,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1559,
|
||||
1598,
|
||||
1551,
|
||||
1590,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1429,8 +1429,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1559,
|
||||
1598,
|
||||
1551,
|
||||
1590,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1446,8 +1446,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1559,
|
||||
1598,
|
||||
1551,
|
||||
1590,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1457,8 +1457,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1604,
|
||||
1628,
|
||||
1596,
|
||||
1620,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1478,8 +1478,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1634,
|
||||
1659,
|
||||
1626,
|
||||
1651,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1499,8 +1499,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1665,
|
||||
1721,
|
||||
1657,
|
||||
1713,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1520,8 +1520,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1727,
|
||||
1734,
|
||||
1719,
|
||||
1726,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1532,8 +1532,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1748,
|
||||
1787,
|
||||
1740,
|
||||
1779,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1552,8 +1552,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1748,
|
||||
1787,
|
||||
1740,
|
||||
1779,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1563,8 +1563,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1748,
|
||||
1787,
|
||||
1740,
|
||||
1779,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1580,8 +1580,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1748,
|
||||
1787,
|
||||
1740,
|
||||
1779,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1591,8 +1591,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1793,
|
||||
1816,
|
||||
1785,
|
||||
1808,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1612,8 +1612,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1822,
|
||||
1847,
|
||||
1814,
|
||||
1839,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1633,8 +1633,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1853,
|
||||
1909,
|
||||
1845,
|
||||
1901,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1654,8 +1654,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1915,
|
||||
1922,
|
||||
1907,
|
||||
1914,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1666,8 +1666,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1686,8 +1686,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1697,8 +1697,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1714,8 +1714,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1725,8 +1725,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1754,8 +1754,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1766,8 +1766,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2006,
|
||||
2046,
|
||||
1998,
|
||||
2038,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1786,8 +1786,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2006,
|
||||
2046,
|
||||
1998,
|
||||
2038,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1797,8 +1797,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2006,
|
||||
2046,
|
||||
1998,
|
||||
2038,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1814,8 +1814,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2006,
|
||||
2046,
|
||||
1998,
|
||||
2038,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1825,8 +1825,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2052,
|
||||
2099,
|
||||
2044,
|
||||
2091,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1846,8 +1846,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2105,
|
||||
2182,
|
||||
2097,
|
||||
2174,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1867,8 +1867,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2188,
|
||||
2285,
|
||||
2180,
|
||||
2277,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1888,8 +1888,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2291,
|
||||
2347,
|
||||
2283,
|
||||
2339,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1909,8 +1909,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2353,
|
||||
2360,
|
||||
2345,
|
||||
2352,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1921,8 +1921,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1941,8 +1941,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1955,8 +1955,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1966,8 +1966,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1978,8 +1978,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -1991,8 +1991,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2005,8 +2005,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2019,8 +2019,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2033,8 +2033,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2047,8 +2047,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2061,8 +2061,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2075,8 +2075,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2089,8 +2089,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2103,8 +2103,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2121,8 +2121,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2133,8 +2133,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2146,8 +2146,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2160,8 +2160,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2174,8 +2174,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2188,8 +2188,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2202,8 +2202,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
@ -2216,8 +2216,8 @@ description: Artifact commands crazy_multi_profile.kcl
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"command": {
|
||||
|
@ -44,38 +44,38 @@ flowchart LR
|
||||
44[Solid2d]
|
||||
end
|
||||
subgraph path59 [Path]
|
||||
59["Path<br>[1446, 1484, 0]"]
|
||||
60["Segment<br>[1490, 1514, 0]"]
|
||||
61["Segment<br>[1520, 1545, 0]"]
|
||||
59["Path<br>[1438, 1476, 0]"]
|
||||
60["Segment<br>[1482, 1506, 0]"]
|
||||
61["Segment<br>[1512, 1537, 0]"]
|
||||
end
|
||||
subgraph path62 [Path]
|
||||
62["Path<br>[1559, 1598, 0]"]
|
||||
63["Segment<br>[1604, 1628, 0]"]
|
||||
64["Segment<br>[1634, 1659, 0]"]
|
||||
65["Segment<br>[1665, 1721, 0]"]
|
||||
66["Segment<br>[1727, 1734, 0]"]
|
||||
62["Path<br>[1551, 1590, 0]"]
|
||||
63["Segment<br>[1596, 1620, 0]"]
|
||||
64["Segment<br>[1626, 1651, 0]"]
|
||||
65["Segment<br>[1657, 1713, 0]"]
|
||||
66["Segment<br>[1719, 1726, 0]"]
|
||||
67[Solid2d]
|
||||
end
|
||||
subgraph path68 [Path]
|
||||
68["Path<br>[1748, 1787, 0]"]
|
||||
69["Segment<br>[1793, 1816, 0]"]
|
||||
70["Segment<br>[1822, 1847, 0]"]
|
||||
71["Segment<br>[1853, 1909, 0]"]
|
||||
72["Segment<br>[1915, 1922, 0]"]
|
||||
68["Path<br>[1740, 1779, 0]"]
|
||||
69["Segment<br>[1785, 1808, 0]"]
|
||||
70["Segment<br>[1814, 1839, 0]"]
|
||||
71["Segment<br>[1845, 1901, 0]"]
|
||||
72["Segment<br>[1907, 1914, 0]"]
|
||||
73[Solid2d]
|
||||
end
|
||||
subgraph path74 [Path]
|
||||
74["Path<br>[1936, 1992, 0]"]
|
||||
75["Segment<br>[1936, 1992, 0]"]
|
||||
74["Path<br>[1928, 1984, 0]"]
|
||||
75["Segment<br>[1928, 1984, 0]"]
|
||||
76[Solid2d]
|
||||
end
|
||||
subgraph path77 [Path]
|
||||
77["Path<br>[2006, 2046, 0]"]
|
||||
78["Segment<br>[2052, 2099, 0]"]
|
||||
79["Segment<br>[2105, 2182, 0]"]
|
||||
80["Segment<br>[2188, 2285, 0]"]
|
||||
81["Segment<br>[2291, 2347, 0]"]
|
||||
82["Segment<br>[2353, 2360, 0]"]
|
||||
77["Path<br>[1998, 2038, 0]"]
|
||||
78["Segment<br>[2044, 2091, 0]"]
|
||||
79["Segment<br>[2097, 2174, 0]"]
|
||||
80["Segment<br>[2180, 2277, 0]"]
|
||||
81["Segment<br>[2283, 2339, 0]"]
|
||||
82["Segment<br>[2345, 2352, 0]"]
|
||||
83[Solid2d]
|
||||
end
|
||||
1["Plane<br>[12, 31, 0]"]
|
||||
@ -91,8 +91,8 @@ flowchart LR
|
||||
17["SweepEdge Adjacent"]
|
||||
18["SweepEdge Opposite"]
|
||||
19["SweepEdge Adjacent"]
|
||||
45["Sweep RevolveAboutEdge<br>[1280, 1354, 0]"]
|
||||
46["Sweep Extrusion<br>[1368, 1399, 0]"]
|
||||
45["Sweep RevolveAboutEdge<br>[1280, 1346, 0]"]
|
||||
46["Sweep Extrusion<br>[1360, 1391, 0]"]
|
||||
47[Wall]
|
||||
48[Wall]
|
||||
49[Wall]
|
||||
@ -104,8 +104,8 @@ flowchart LR
|
||||
55["SweepEdge Adjacent"]
|
||||
56["SweepEdge Opposite"]
|
||||
57["SweepEdge Adjacent"]
|
||||
58["Plane<br>[1412, 1432, 0]"]
|
||||
84["Sweep Extrusion<br>[2374, 2407, 0]"]
|
||||
58["Plane<br>[1404, 1424, 0]"]
|
||||
84["Sweep Extrusion<br>[2366, 2399, 0]"]
|
||||
85[Wall]
|
||||
86[Wall]
|
||||
87[Wall]
|
||||
@ -120,7 +120,7 @@ flowchart LR
|
||||
96["SweepEdge Adjacent"]
|
||||
97["SweepEdge Opposite"]
|
||||
98["SweepEdge Adjacent"]
|
||||
99["Sweep RevolveAboutEdge<br>[2421, 2470, 0]"]
|
||||
99["Sweep RevolveAboutEdge<br>[2413, 2458, 0]"]
|
||||
100[Wall]
|
||||
101[Wall]
|
||||
102[Wall]
|
||||
|
@ -32,10 +32,7 @@ profile006 = startProfileAt([9.65, 3.82], sketch002)
|
||||
|> line(end = [2.13, -5.57])
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
revolve001 = revolve({
|
||||
angle = 45,
|
||||
axis = getNextAdjacentEdge(seg01)
|
||||
}, profile004)
|
||||
revolve001 = revolve(profile004, angle = 45, axis = getNextAdjacentEdge(seg01))
|
||||
extrude002 = extrude(profile006, length = 4)
|
||||
sketch003 = startSketchOn('-XZ')
|
||||
profile007 = startProfileAt([4.8, 7.55], sketch003)
|
||||
@ -65,4 +62,4 @@ profile011 = startProfileAt([5.07, -6.39], sketch003)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude003 = extrude(profile011, length = 2.5)
|
||||
revolve002 = revolve({ angle = 45, axis = seg02 }, profile008)
|
||||
revolve002 = revolve(profile008, angle = 45, axis = seg02)
|
||||
|
@ -109,45 +109,34 @@ description: Operations executed crazy_multi_profile.kcl
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"data": {
|
||||
"angle": {
|
||||
"value": {
|
||||
"type": "Object",
|
||||
"value": {
|
||||
"angle": {
|
||||
"type": "Number",
|
||||
"value": 45.0,
|
||||
"ty": {
|
||||
"type": "Default",
|
||||
"len": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"angle": {
|
||||
"type": "Degrees"
|
||||
}
|
||||
}
|
||||
"type": "Number",
|
||||
"value": 45.0,
|
||||
"ty": {
|
||||
"type": "Default",
|
||||
"len": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"axis": {
|
||||
"type": "Uuid",
|
||||
"value": "[uuid]"
|
||||
"angle": {
|
||||
"type": "Degrees"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
1288,
|
||||
1341,
|
||||
1308,
|
||||
1310,
|
||||
0
|
||||
]
|
||||
},
|
||||
"sketches": {
|
||||
"axis": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
"type": "Uuid",
|
||||
"value": "[uuid]"
|
||||
},
|
||||
"sourceRange": [
|
||||
1343,
|
||||
1353,
|
||||
1319,
|
||||
1345,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -155,11 +144,23 @@ description: Operations executed crazy_multi_profile.kcl
|
||||
"name": "revolve",
|
||||
"sourceRange": [
|
||||
1280,
|
||||
1354,
|
||||
1346,
|
||||
0
|
||||
],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": null
|
||||
"unlabeledArg": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
1288,
|
||||
1298,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
@ -178,16 +179,16 @@ description: Operations executed crazy_multi_profile.kcl
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
1397,
|
||||
1398,
|
||||
1389,
|
||||
1390,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
"name": "extrude",
|
||||
"sourceRange": [
|
||||
1368,
|
||||
1399,
|
||||
1360,
|
||||
1391,
|
||||
0
|
||||
],
|
||||
"type": "StdLibCall",
|
||||
@ -199,8 +200,8 @@ description: Operations executed crazy_multi_profile.kcl
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
1376,
|
||||
1386,
|
||||
1368,
|
||||
1378,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -213,16 +214,16 @@ description: Operations executed crazy_multi_profile.kcl
|
||||
"value": "-XZ"
|
||||
},
|
||||
"sourceRange": [
|
||||
1426,
|
||||
1431,
|
||||
1418,
|
||||
1423,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
"name": "startSketchOn",
|
||||
"sourceRange": [
|
||||
1412,
|
||||
1432,
|
||||
1404,
|
||||
1424,
|
||||
0
|
||||
],
|
||||
"type": "StdLibCall",
|
||||
@ -245,16 +246,16 @@ description: Operations executed crazy_multi_profile.kcl
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
2403,
|
||||
2406,
|
||||
2395,
|
||||
2398,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
"name": "extrude",
|
||||
"sourceRange": [
|
||||
2374,
|
||||
2407,
|
||||
2366,
|
||||
2399,
|
||||
0
|
||||
],
|
||||
"type": "StdLibCall",
|
||||
@ -266,65 +267,66 @@ description: Operations executed crazy_multi_profile.kcl
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
2382,
|
||||
2392,
|
||||
2374,
|
||||
2384,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"data": {
|
||||
"angle": {
|
||||
"value": {
|
||||
"type": "Object",
|
||||
"value": {
|
||||
"angle": {
|
||||
"type": "Number",
|
||||
"value": 45.0,
|
||||
"ty": {
|
||||
"type": "Default",
|
||||
"len": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"angle": {
|
||||
"type": "Degrees"
|
||||
}
|
||||
}
|
||||
"type": "Number",
|
||||
"value": 45.0,
|
||||
"ty": {
|
||||
"type": "Default",
|
||||
"len": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"axis": {
|
||||
"type": "TagIdentifier",
|
||||
"value": "seg02",
|
||||
"artifact_id": "[uuid]"
|
||||
"angle": {
|
||||
"type": "Degrees"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
2429,
|
||||
2457,
|
||||
2441,
|
||||
2443,
|
||||
0
|
||||
]
|
||||
},
|
||||
"sketches": {
|
||||
"axis": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
"type": "TagIdentifier",
|
||||
"value": "seg02",
|
||||
"artifact_id": "[uuid]"
|
||||
},
|
||||
"sourceRange": [
|
||||
2459,
|
||||
2469,
|
||||
2452,
|
||||
2457,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
"name": "revolve",
|
||||
"sourceRange": [
|
||||
2421,
|
||||
2470,
|
||||
2413,
|
||||
2458,
|
||||
0
|
||||
],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": null
|
||||
"unlabeledArg": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
2421,
|
||||
2431,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -675,13 +675,13 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2052,
|
||||
2099,
|
||||
2044,
|
||||
2091,
|
||||
0
|
||||
],
|
||||
"tag": {
|
||||
"end": 2098,
|
||||
"start": 2077,
|
||||
"end": 2090,
|
||||
"start": 2069,
|
||||
"type": "TagDeclarator",
|
||||
"value": "rectangleSegmentA002"
|
||||
},
|
||||
@ -691,8 +691,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2105,
|
||||
2182,
|
||||
2097,
|
||||
2174,
|
||||
0
|
||||
],
|
||||
"tag": null,
|
||||
@ -702,8 +702,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2188,
|
||||
2285,
|
||||
2180,
|
||||
2277,
|
||||
0
|
||||
],
|
||||
"tag": null,
|
||||
@ -713,8 +713,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2291,
|
||||
2347,
|
||||
2283,
|
||||
2339,
|
||||
0
|
||||
],
|
||||
"tag": null,
|
||||
@ -729,8 +729,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2052,
|
||||
2099,
|
||||
2044,
|
||||
2091,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -739,8 +739,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
-6.39
|
||||
],
|
||||
"tag": {
|
||||
"end": 2098,
|
||||
"start": 2077,
|
||||
"end": 2090,
|
||||
"start": 2069,
|
||||
"type": "TagDeclarator",
|
||||
"value": "rectangleSegmentA002"
|
||||
},
|
||||
@ -757,8 +757,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2105,
|
||||
2182,
|
||||
2097,
|
||||
2174,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -780,8 +780,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2188,
|
||||
2285,
|
||||
2180,
|
||||
2277,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -803,8 +803,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2291,
|
||||
2347,
|
||||
2283,
|
||||
2339,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -826,8 +826,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2353,
|
||||
2360,
|
||||
2345,
|
||||
2352,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -891,8 +891,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2006,
|
||||
2046,
|
||||
1998,
|
||||
2038,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -2939,8 +2939,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1490,
|
||||
1514,
|
||||
1482,
|
||||
1506,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -2962,8 +2962,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1520,
|
||||
1545,
|
||||
1512,
|
||||
1537,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3027,8 +3027,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1446,
|
||||
1484,
|
||||
1438,
|
||||
1476,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -3050,8 +3050,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1604,
|
||||
1628,
|
||||
1596,
|
||||
1620,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3073,8 +3073,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1634,
|
||||
1659,
|
||||
1626,
|
||||
1651,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3096,8 +3096,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1665,
|
||||
1721,
|
||||
1657,
|
||||
1713,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3119,8 +3119,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1727,
|
||||
1734,
|
||||
1719,
|
||||
1726,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3184,8 +3184,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1559,
|
||||
1598,
|
||||
1551,
|
||||
1590,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -3207,8 +3207,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1793,
|
||||
1816,
|
||||
1785,
|
||||
1808,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3230,8 +3230,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1822,
|
||||
1847,
|
||||
1814,
|
||||
1839,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3253,8 +3253,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1853,
|
||||
1909,
|
||||
1845,
|
||||
1901,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3276,8 +3276,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1915,
|
||||
1922,
|
||||
1907,
|
||||
1914,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3341,8 +3341,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1748,
|
||||
1787,
|
||||
1740,
|
||||
1779,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -3364,8 +3364,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3435,8 +3435,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1936,
|
||||
1992,
|
||||
1928,
|
||||
1984,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -3458,8 +3458,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2052,
|
||||
2099,
|
||||
2044,
|
||||
2091,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3468,8 +3468,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
-6.39
|
||||
],
|
||||
"tag": {
|
||||
"end": 2098,
|
||||
"start": 2077,
|
||||
"end": 2090,
|
||||
"start": 2069,
|
||||
"type": "TagDeclarator",
|
||||
"value": "rectangleSegmentA002"
|
||||
},
|
||||
@ -3486,8 +3486,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2105,
|
||||
2182,
|
||||
2097,
|
||||
2174,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3509,8 +3509,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2188,
|
||||
2285,
|
||||
2180,
|
||||
2277,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3532,8 +3532,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2291,
|
||||
2347,
|
||||
2283,
|
||||
2339,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3555,8 +3555,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2353,
|
||||
2360,
|
||||
2345,
|
||||
2352,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -3620,8 +3620,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
2006,
|
||||
2046,
|
||||
1998,
|
||||
2038,
|
||||
0
|
||||
]
|
||||
}
|
||||
@ -4054,8 +4054,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1604,
|
||||
1628,
|
||||
1596,
|
||||
1620,
|
||||
0
|
||||
],
|
||||
"tag": null,
|
||||
@ -4065,8 +4065,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1634,
|
||||
1659,
|
||||
1626,
|
||||
1651,
|
||||
0
|
||||
],
|
||||
"tag": null,
|
||||
@ -4076,8 +4076,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1665,
|
||||
1721,
|
||||
1657,
|
||||
1713,
|
||||
0
|
||||
],
|
||||
"tag": null,
|
||||
@ -4092,8 +4092,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1604,
|
||||
1628,
|
||||
1596,
|
||||
1620,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -4115,8 +4115,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1634,
|
||||
1659,
|
||||
1626,
|
||||
1651,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -4138,8 +4138,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1665,
|
||||
1721,
|
||||
1657,
|
||||
1713,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -4161,8 +4161,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1727,
|
||||
1734,
|
||||
1719,
|
||||
1726,
|
||||
0
|
||||
]
|
||||
},
|
||||
@ -4226,8 +4226,8 @@ description: Variables in memory after executing crazy_multi_profile.kcl
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [
|
||||
1559,
|
||||
1598,
|
||||
1551,
|
||||
1590,
|
||||
0
|
||||
]
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ export part001 = startSketchOn('XY')
|
||||
|> line(end = [0, -5.5])
|
||||
|> line(end = [-2, 0])
|
||||
|> close()
|
||||
|> revolve({ axis = 'y' }, %) // default angle is 360
|
||||
|> revolve(axis = 'y') // default angle is 360
|
||||
|
||||
export fn two() {
|
||||
return 5
|
||||
|
@ -28,32 +28,14 @@ description: Operations executed import_function_not_sketch.kcl
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"data": {
|
||||
"axis": {
|
||||
"value": {
|
||||
"type": "Object",
|
||||
"value": {
|
||||
"axis": {
|
||||
"type": "String",
|
||||
"value": "y"
|
||||
}
|
||||
}
|
||||
"type": "String",
|
||||
"value": "y"
|
||||
},
|
||||
"sourceRange": [
|
||||
313,
|
||||
327,
|
||||
3
|
||||
]
|
||||
},
|
||||
"sketches": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
329,
|
||||
330,
|
||||
320,
|
||||
323,
|
||||
3
|
||||
]
|
||||
}
|
||||
@ -61,10 +43,22 @@ description: Operations executed import_function_not_sketch.kcl
|
||||
"name": "revolve",
|
||||
"sourceRange": [
|
||||
305,
|
||||
331,
|
||||
324,
|
||||
3
|
||||
],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": null
|
||||
"unlabeledArg": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
},
|
||||
"sourceRange": [
|
||||
305,
|
||||
324,
|
||||
3
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
source: kcl/src/simulation_tests.rs
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Result of parsing import_glob.kcl
|
||||
---
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
source: kcl/src/simulation_tests.rs
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Result of parsing invalid_index_str.kcl
|
||||
---
|
||||
{
|
||||
|