Start changing JS codemods
This commit is contained in:
@ -1,20 +1,17 @@
|
|||||||
import type { Page } from '@playwright/test'
|
import { Page } from '@playwright/test'
|
||||||
import type { LineInputsType } from '@src/lang/std/sketchcombos'
|
import { test, expect } from './zoo-test'
|
||||||
import { uuidv4 } from '@src/lib/utils'
|
|
||||||
|
|
||||||
import type { EditorFixture } from '@e2e/playwright/fixtures/editorFixture'
|
import { deg, getUtils, wiggleMove } from './test-utils'
|
||||||
import {
|
import { LineInputsType } from 'lang/std/sketchcombos'
|
||||||
deg,
|
import { uuidv4 } from 'lib/utils'
|
||||||
getUtils,
|
import { EditorFixture } from './fixtures/editorFixture'
|
||||||
orRunWhenFullSuiteEnabled,
|
|
||||||
wiggleMove,
|
|
||||||
} from '@e2e/playwright/test-utils'
|
|
||||||
import { expect, test } from '@e2e/playwright/zoo-test'
|
|
||||||
|
|
||||||
test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||||
test('Hover over a segment should show its overlay, hovering over the input overlays should show its popover, clicking the input overlay should constrain/unconstrain it:\nfor the following segments', () => {
|
test.fixme(
|
||||||
|
'Hover over a segment should show its overlay, hovering over the input overlays should show its popover, clicking the input overlay should constrain/unconstrain it:\nfor the following segments',
|
||||||
|
() => {
|
||||||
// TODO: fix this test on mac after the electron migration
|
// TODO: fix this test on mac after the electron migration
|
||||||
test.fixme(orRunWhenFullSuiteEnabled())
|
test.skip(process.platform === 'darwin', 'Skip on mac')
|
||||||
/**
|
/**
|
||||||
* Clicks on an constrained element
|
* Clicks on an constrained element
|
||||||
* @param {Page} page - The page to perform the action on
|
* @param {Page} page - The page to perform the action on
|
||||||
@ -162,6 +159,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
const unconstrainedLocator = page.locator(
|
const unconstrainedLocator = page.locator(
|
||||||
`[data-constraint-type="${constraintType}"][data-is-constrained="false"]`
|
`[data-constraint-type="${constraintType}"][data-is-constrained="false"]`
|
||||||
)
|
)
|
||||||
|
await expect(unconstrainedLocator).toBeVisible()
|
||||||
await unconstrainedLocator.hover()
|
await unconstrainedLocator.hover()
|
||||||
await expect(
|
await expect(
|
||||||
await page.getByTestId('constraint-symbol-popover').count()
|
await page.getByTestId('constraint-symbol-popover').count()
|
||||||
@ -210,8 +208,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`part001 = startSketchOn('XZ')
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|> startProfileAt([5 + 0, 20 + 0], %)
|
|> startProfileAt([5 + 0, 20 + 0], %)
|
||||||
|> line(end = [0.5, -14 + 0])
|
|> line(end = [0.5, -14 + 0])
|
||||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||||
@ -220,8 +217,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
|> yLine(endAbsolute = 20 + -10.77, tag = $a)
|
|> yLine(endAbsolute = 20 + -10.77, tag = $a)
|
||||||
|> xLine(length = 26.04)
|
|> xLine(length = 26.04)
|
||||||
|> yLine(length = 21.14 + 0)
|
|> yLine(length = 21.14 + 0)
|
||||||
|> angledLine(angle = 181 + 0, xLength = 23.14)
|
|> angledLine(angle = 181 + 0, lengthX = 23.14)
|
||||||
|> angledLine(angle = -91, yLength = 19 + 0)
|
|> angledLine(angle = -91, lengthX = 19 + 0)
|
||||||
|> angledLine(angle = 3 + 0, endAbsoluteX = 5 + 26)
|
|> angledLine(angle = 3 + 0, endAbsoluteX = 5 + 26)
|
||||||
|> angledLine(angle = 89, endAbsoluteY = 20 + 9.14 + 0)
|
|> angledLine(angle = 89, endAbsoluteY = 20 + 9.14 + 0)
|
||||||
|> angledLineThatIntersects({
|
|> angledLineThatIntersects({
|
||||||
@ -277,8 +274,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
|
|
||||||
let ang = 0
|
let ang = 0
|
||||||
|
|
||||||
const line = await u.getBoundingBox('[data-overlay-index="0"]')
|
const line = await u.getBoundingBox(`[data-overlay-index="${0}"]`)
|
||||||
ang = await u.getAngle('[data-overlay-index="0"]')
|
ang = await u.getAngle(`[data-overlay-index="${0}"]`)
|
||||||
console.log('line1', line, ang)
|
console.log('line1', line, ang)
|
||||||
await clickConstrained({
|
await clickConstrained({
|
||||||
hoverPos: { x: line.x, y: line.y },
|
hoverPos: { x: line.x, y: line.y },
|
||||||
@ -300,17 +297,16 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
locator: '[data-overlay-index="0"]',
|
locator: '[data-overlay-index="0"]',
|
||||||
})
|
})
|
||||||
|
|
||||||
const angledLine = await u.getBoundingBox('[data-overlay-index="1"]')
|
const angledLine = await u.getBoundingBox(`[data-overlay-index="1"]`)
|
||||||
ang = await u.getAngle('[data-overlay-index="1"]')
|
ang = await u.getAngle(`[data-overlay-index="1"]`)
|
||||||
console.log('angledLine1')
|
console.log('angledLine1')
|
||||||
await clickConstrained({
|
await clickConstrained({
|
||||||
hoverPos: { x: angledLine.x, y: angledLine.y },
|
hoverPos: { x: angledLine.x, y: angledLine.y },
|
||||||
constraintType: 'angle',
|
constraintType: 'angle',
|
||||||
expectBeforeUnconstrained:
|
expectBeforeUnconstrained:
|
||||||
'angledLine(angle = 3 + 0, length = 32 + 0)',
|
'angledLine(angle = 3 + 0, length = 32 + 0 )',
|
||||||
expectAfterUnconstrained:
|
expectAfterUnconstrained: 'angledLine(angle = 3, length = 32 + 0 )',
|
||||||
'angledLine(angle = 3, length = 32 + 0)',
|
expectFinal: 'angledLine(angle = angle001, length = 32 + 0 )',
|
||||||
expectFinal: 'angledLine(angle = angle001, length = 32 + 0)',
|
|
||||||
ang: ang + 180,
|
ang: ang + 180,
|
||||||
locator: '[data-overlay-toolbar-index="1"]',
|
locator: '[data-overlay-toolbar-index="1"]',
|
||||||
})
|
})
|
||||||
@ -319,10 +315,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
hoverPos: { x: angledLine.x, y: angledLine.y },
|
hoverPos: { x: angledLine.x, y: angledLine.y },
|
||||||
constraintType: 'length',
|
constraintType: 'length',
|
||||||
expectBeforeUnconstrained:
|
expectBeforeUnconstrained:
|
||||||
'angledLine(angle = angle001, length = 32 + 0)',
|
'angledLine(angle = angle001, length = 32 + 0 )',
|
||||||
expectAfterUnconstrained:
|
expectAfterUnconstrained:
|
||||||
'angledLine(angle = angle001, length = 32)',
|
'angledLine(angle = angle001, length = 32 )',
|
||||||
expectFinal: 'angledLine(angle = angle001, length = len001)',
|
expectFinal: 'angledLine(angle = angle001, length = len001 )',
|
||||||
ang: ang + 180,
|
ang: ang + 180,
|
||||||
locator: '[data-overlay-toolbar-index="1"]',
|
locator: '[data-overlay-toolbar-index="1"]',
|
||||||
})
|
})
|
||||||
@ -330,8 +326,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
await page.mouse.move(700, 250)
|
await page.mouse.move(700, 250)
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
let lineTo = await u.getBoundingBox('[data-overlay-index="2"]')
|
let lineTo = await u.getBoundingBox(`[data-overlay-index="2"]`)
|
||||||
ang = await u.getAngle('[data-overlay-index="2"]')
|
ang = await u.getAngle(`[data-overlay-index="2"]`)
|
||||||
console.log('lineTo1')
|
console.log('lineTo1')
|
||||||
await clickConstrained({
|
await clickConstrained({
|
||||||
hoverPos: { x: lineTo.x, y: lineTo.y },
|
hoverPos: { x: lineTo.x, y: lineTo.y },
|
||||||
@ -356,8 +352,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
locator: '[data-overlay-toolbar-index="2"]',
|
locator: '[data-overlay-toolbar-index="2"]',
|
||||||
})
|
})
|
||||||
|
|
||||||
const xLineTo = await u.getBoundingBox('[data-overlay-index="3"]')
|
const xLineTo = await u.getBoundingBox(`[data-overlay-index="3"]`)
|
||||||
ang = await u.getAngle('[data-overlay-index="3"]')
|
ang = await u.getAngle(`[data-overlay-index="3"]`)
|
||||||
console.log('xlineTo1')
|
console.log('xlineTo1')
|
||||||
await clickConstrained({
|
await clickConstrained({
|
||||||
hoverPos: { x: xLineTo.x, y: xLineTo.y },
|
hoverPos: { x: xLineTo.x, y: xLineTo.y },
|
||||||
@ -372,24 +368,20 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Broken on main at time of writing!
|
// Broken on main at time of writing!
|
||||||
test('for segments [yLineTo, xLine]', async ({
|
test.fixme(
|
||||||
page,
|
'for segments [yLineTo, xLine]',
|
||||||
editor,
|
async ({ page, editor, homePage }) => {
|
||||||
homePage,
|
|
||||||
}) => {
|
|
||||||
test.fixme(orRunWhenFullSuiteEnabled())
|
|
||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`yRel001 = -14
|
||||||
yRel001 = -14
|
|
||||||
xRel001 = 0.5
|
xRel001 = 0.5
|
||||||
angle001 = 3
|
angle001 = 3
|
||||||
len001 = 32
|
len001 = 32
|
||||||
yAbs001 = 11.5
|
yAbs001 = 11.5
|
||||||
xAbs001 = 33
|
xAbs001 = 33
|
||||||
xAbs002 = 4
|
xAbs002 = 4
|
||||||
part001 = startSketchOn(XZ)
|
part001 = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [0.5, yRel001])
|
|> line(end = [0.5, yRel001])
|
||||||
|> angledLine(angle = angle001, length = len001 )
|
|> angledLine(angle = angle001, length = len001 )
|
||||||
@ -426,8 +418,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
|
|
||||||
let ang = 0
|
let ang = 0
|
||||||
|
|
||||||
const yLineTo = await u.getBoundingBox('[data-overlay-index="4"]')
|
const yLineTo = await u.getBoundingBox(`[data-overlay-index="4"]`)
|
||||||
ang = await u.getAngle('[data-overlay-index="4"]')
|
ang = await u.getAngle(`[data-overlay-index="4"]`)
|
||||||
console.log('ylineTo1')
|
console.log('ylineTo1')
|
||||||
await clickUnconstrained({
|
await clickUnconstrained({
|
||||||
hoverPos: { x: yLineTo.x, y: yLineTo.y - 200 },
|
hoverPos: { x: yLineTo.x, y: yLineTo.y - 200 },
|
||||||
@ -439,8 +431,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
locator: '[data-overlay-toolbar-index="4"]',
|
locator: '[data-overlay-toolbar-index="4"]',
|
||||||
})
|
})
|
||||||
|
|
||||||
const xLine = await u.getBoundingBox('[data-overlay-index="5"]')
|
const xLine = await u.getBoundingBox(`[data-overlay-index="5"]`)
|
||||||
ang = await u.getAngle('[data-overlay-index="5"]')
|
ang = await u.getAngle(`[data-overlay-index="5"]`)
|
||||||
console.log('xline')
|
console.log('xline')
|
||||||
await clickUnconstrained({
|
await clickUnconstrained({
|
||||||
hoverPos: { x: xLine.x, y: xLine.y },
|
hoverPos: { x: xLine.x, y: xLine.y },
|
||||||
@ -452,7 +444,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
ang: ang + 180,
|
ang: ang + 180,
|
||||||
locator: '[data-overlay-toolbar-index="5"]',
|
locator: '[data-overlay-toolbar-index="5"]',
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
)
|
||||||
test('for segments [yLine, angledLineOfXLength, angledLineOfYLength]', async ({
|
test('for segments [yLine, angledLineOfXLength, angledLineOfYLength]', async ({
|
||||||
page,
|
page,
|
||||||
editor,
|
editor,
|
||||||
@ -461,8 +454,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`part001 = startSketchOn('XZ')
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [0.5, -14 + 0])
|
|> line(end = [0.5, -14 + 0])
|
||||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||||
@ -508,8 +500,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
|
|
||||||
let ang = 0
|
let ang = 0
|
||||||
|
|
||||||
const yLine = await u.getBoundingBox('[data-overlay-index="6"]')
|
const yLine = await u.getBoundingBox(`[data-overlay-index="6"]`)
|
||||||
ang = await u.getAngle('[data-overlay-index="6"]')
|
ang = await u.getAngle(`[data-overlay-index="6"]`)
|
||||||
console.log('yline1')
|
console.log('yline1')
|
||||||
await clickConstrained({
|
await clickConstrained({
|
||||||
hoverPos: { x: yLine.x, y: yLine.y },
|
hoverPos: { x: yLine.x, y: yLine.y },
|
||||||
@ -522,9 +514,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const angledLineOfXLength = await u.getBoundingBox(
|
const angledLineOfXLength = await u.getBoundingBox(
|
||||||
'[data-overlay-index="7"]'
|
`[data-overlay-index="7"]`
|
||||||
)
|
)
|
||||||
ang = await u.getAngle('[data-overlay-index="7"]')
|
ang = await u.getAngle(`[data-overlay-index="7"]`)
|
||||||
console.log('angledLineOfXLength1')
|
console.log('angledLineOfXLength1')
|
||||||
await clickConstrained({
|
await clickConstrained({
|
||||||
hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y },
|
hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y },
|
||||||
@ -554,9 +546,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const angledLineOfYLength = await u.getBoundingBox(
|
const angledLineOfYLength = await u.getBoundingBox(
|
||||||
'[data-overlay-index="8"]'
|
`[data-overlay-index="8"]`
|
||||||
)
|
)
|
||||||
ang = await u.getAngle('[data-overlay-index="8"]')
|
ang = await u.getAngle(`[data-overlay-index="8"]`)
|
||||||
console.log('angledLineOfYLength1')
|
console.log('angledLineOfYLength1')
|
||||||
await clickUnconstrained({
|
await clickUnconstrained({
|
||||||
hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y },
|
hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y },
|
||||||
@ -565,7 +557,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)',
|
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)',
|
||||||
expectAfterUnconstrained:
|
expectAfterUnconstrained:
|
||||||
'angledLineOfYLength({ angle = angle002, length = 19 + 0 }, %)',
|
'angledLineOfYLength({ angle = angle002, length = 19 + 0 }, %)',
|
||||||
expectFinal: 'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)',
|
expectFinal:
|
||||||
|
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)',
|
||||||
ang: ang + 180,
|
ang: ang + 180,
|
||||||
steps: 6,
|
steps: 6,
|
||||||
locator: '[data-overlay-toolbar-index="8"]',
|
locator: '[data-overlay-toolbar-index="8"]',
|
||||||
@ -593,8 +586,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`part001 = startSketchOn('XZ')
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [0.5, -14 + 0])
|
|> line(end = [0.5, -14 + 0])
|
||||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||||
@ -614,62 +606,6 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
}, %)
|
}, %)
|
||||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
||||||
`
|
`
|
||||||
<<<<<<< HEAD
|
|
||||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
|
||||||
)
|
|
||||||
localStorage.setItem('disableAxis', 'true')
|
|
||||||
})
|
|
||||||
const u = await getUtils(page)
|
|
||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
|
||||||
|
|
||||||
await homePage.goToModelingScene()
|
|
||||||
|
|
||||||
// wait for execution done
|
|
||||||
await u.openDebugPanel()
|
|
||||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
|
||||||
await u.closeDebugPanel()
|
|
||||||
|
|
||||||
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
|
||||||
await page.waitForTimeout(500)
|
|
||||||
|
|
||||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
|
|
||||||
|
|
||||||
const clickUnconstrained = _clickUnconstrained(page, editor)
|
|
||||||
const clickConstrained = _clickConstrained(page, editor)
|
|
||||||
|
|
||||||
let ang = 0
|
|
||||||
|
|
||||||
const angledLineToX = await u.getBoundingBox(`[data-overlay-index="9"]`)
|
|
||||||
ang = await u.getAngle(`[data-overlay-index="9"]`)
|
|
||||||
console.log('angledLineToX')
|
|
||||||
await clickConstrained({
|
|
||||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
|
||||||
constraintType: 'angle',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToX({ angle = 3 + 0, to = 26 }, %)',
|
|
||||||
expectAfterUnconstrained: 'angledLineToX({ angle = 3, to = 26 }, %)',
|
|
||||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="9"]',
|
|
||||||
})
|
|
||||||
console.log('angledLineToX2')
|
|
||||||
await clickUnconstrained({
|
|
||||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
|
||||||
constraintType: 'xAbsolute',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToX({ angle = angle001, to = 26 }, %)',
|
|
||||||
expectAfterUnconstrained:
|
|
||||||
'angledLineToX({ angle = angle001, to = xAbs001 }, %)',
|
|
||||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="9"]',
|
|
||||||
})
|
|
||||||
|
|
||||||
const angledLineToY = await u.getBoundingBox(
|
|
||||||
`[data-overlay-index="10"]`
|
|
||||||
=======
|
|
||||||
)
|
)
|
||||||
localStorage.setItem('disableAxis', 'true')
|
localStorage.setItem('disableAxis', 'true')
|
||||||
})
|
})
|
||||||
@ -723,41 +659,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
|
|
||||||
const angledLineToY = await u.getBoundingBox(
|
const angledLineToY = await u.getBoundingBox(
|
||||||
`[data-overlay-index="10"]`
|
`[data-overlay-index="10"]`
|
||||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
|
||||||
)
|
)
|
||||||
<<<<<<< HEAD
|
|
||||||
localStorage.setItem('disableAxis', 'true')
|
|
||||||
})
|
|
||||||
const u = await getUtils(page)
|
|
||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
|
||||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
|
||||||
ang = await u.getAngle(`[data-overlay-index="10"]`)
|
|
||||||
console.log('angledLineToY')
|
|
||||||
await clickUnconstrained({
|
|
||||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
|
||||||
constraintType: 'angle',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
|
||||||
expectAfterUnconstrained:
|
|
||||||
'angledLineToY({ angle = angle002, to = 9.14 + 0 }, %)',
|
|
||||||
expectFinal: 'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
|
||||||
steps: process.platform === 'darwin' ? 8 : 9,
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="10"]',
|
|
||||||
})
|
|
||||||
console.log('angledLineToY2')
|
|
||||||
await clickConstrained({
|
|
||||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
|
||||||
constraintType: 'yAbsolute',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
|
||||||
expectAfterUnconstrained:
|
|
||||||
'angledLineToY({ angle = 89, to = 9.14 }, %)',
|
|
||||||
expectFinal: 'angledLineToY({ angle = 89, to = yAbs001 }, %)',
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="10"]',
|
|
||||||
})
|
|
||||||
=======
|
|
||||||
ang = await u.getAngle(`[data-overlay-index="10"]`)
|
ang = await u.getAngle(`[data-overlay-index="10"]`)
|
||||||
console.log('angledLineToY')
|
console.log('angledLineToY')
|
||||||
await clickUnconstrained({
|
await clickUnconstrained({
|
||||||
@ -784,84 +686,11 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
ang: ang + 180,
|
ang: ang + 180,
|
||||||
locator: '[data-overlay-toolbar-index="10"]',
|
locator: '[data-overlay-toolbar-index="10"]',
|
||||||
})
|
})
|
||||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
|
||||||
|
|
||||||
await homePage.goToModelingScene()
|
|
||||||
|
|
||||||
// wait for execution done
|
|
||||||
await u.openDebugPanel()
|
|
||||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
|
||||||
await u.closeDebugPanel()
|
|
||||||
|
|
||||||
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
|
||||||
await page.waitForTimeout(500)
|
|
||||||
|
|
||||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
|
|
||||||
|
|
||||||
const clickUnconstrained = _clickUnconstrained(page, editor)
|
|
||||||
const clickConstrained = _clickConstrained(page, editor)
|
|
||||||
|
|
||||||
let ang = 0
|
|
||||||
|
|
||||||
const angledLineToX = await u.getBoundingBox('[data-overlay-index="9"]')
|
|
||||||
ang = await u.getAngle('[data-overlay-index="9"]')
|
|
||||||
console.log('angledLineToX')
|
|
||||||
await clickConstrained({
|
|
||||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
|
||||||
constraintType: 'angle',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToX({ angle = 3 + 0, to = 26 }, %)',
|
|
||||||
expectAfterUnconstrained: 'angledLineToX({ angle = 3, to = 26 }, %)',
|
|
||||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="9"]',
|
|
||||||
})
|
|
||||||
console.log('angledLineToX2')
|
|
||||||
await clickUnconstrained({
|
|
||||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
|
||||||
constraintType: 'xAbsolute',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToX({ angle = angle001, to = 26 }, %)',
|
|
||||||
expectAfterUnconstrained:
|
|
||||||
'angledLineToX({ angle = angle001, to = xAbs001 }, %)',
|
|
||||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="9"]',
|
|
||||||
})
|
|
||||||
|
|
||||||
const angledLineToY = await u.getBoundingBox('[data-overlay-index="10"]')
|
|
||||||
ang = await u.getAngle('[data-overlay-index="10"]')
|
|
||||||
console.log('angledLineToY')
|
|
||||||
await clickUnconstrained({
|
|
||||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
|
||||||
constraintType: 'angle',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
|
||||||
expectAfterUnconstrained:
|
|
||||||
'angledLineToY({ angle = angle002, to = 9.14 + 0 }, %)',
|
|
||||||
expectFinal: 'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
|
||||||
steps: process.platform === 'darwin' ? 8 : 9,
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="10"]',
|
|
||||||
})
|
|
||||||
console.log('angledLineToY2')
|
|
||||||
await clickConstrained({
|
|
||||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
|
||||||
constraintType: 'yAbsolute',
|
|
||||||
expectBeforeUnconstrained:
|
|
||||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
|
||||||
expectAfterUnconstrained: 'angledLineToY({ angle = 89, to = 9.14 }, %)',
|
|
||||||
expectFinal: 'angledLineToY({ angle = 89, to = yAbs001 }, %)',
|
|
||||||
ang: ang + 180,
|
|
||||||
locator: '[data-overlay-toolbar-index="10"]',
|
|
||||||
})
|
|
||||||
|
|
||||||
const angledLineThatIntersects = await u.getBoundingBox(
|
const angledLineThatIntersects = await u.getBoundingBox(
|
||||||
'[data-overlay-index="11"]'
|
`[data-overlay-index="11"]`
|
||||||
)
|
)
|
||||||
ang = await u.getAngle('[data-overlay-index="11"]')
|
ang = await u.getAngle(`[data-overlay-index="11"]`)
|
||||||
console.log('angledLineThatIntersects')
|
console.log('angledLineThatIntersects')
|
||||||
await clickUnconstrained({
|
await clickUnconstrained({
|
||||||
hoverPos: {
|
hoverPos: {
|
||||||
@ -921,8 +750,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`part001 = startSketchOn('XZ')
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [0.5, -14 + 0])
|
|> line(end = [0.5, -14 + 0])
|
||||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||||
@ -992,145 +820,11 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
|||||||
locator: '[data-overlay-toolbar-index="12"]',
|
locator: '[data-overlay-toolbar-index="12"]',
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
test('for segment [arcTo]', async ({
|
|
||||||
page,
|
|
||||||
editor,
|
|
||||||
homePage,
|
|
||||||
scene,
|
|
||||||
cmdBar,
|
|
||||||
}) => {
|
|
||||||
await page.addInitScript(async () => {
|
|
||||||
localStorage.setItem(
|
|
||||||
'persistCode',
|
|
||||||
`@settings(defaultLengthUnit = in)
|
|
||||||
sketch001 = startSketchOn(XZ)
|
|
||||||
profile001 = startProfileAt([56.37, 120.33], sketch001)
|
|
||||||
|> line(end = [162.86, 106.48])
|
|
||||||
|> arcTo({
|
|
||||||
interior = [360.16, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)
|
|
||||||
|> yLine(-131.54, %)
|
|
||||||
|> arc({
|
|
||||||
radius = 126.46,
|
|
||||||
angleStart = 33.53,
|
|
||||||
angleEnd = -141.07
|
|
||||||
}, %)
|
|
||||||
`
|
|
||||||
)
|
|
||||||
localStorage.setItem('disableAxis', 'true')
|
|
||||||
})
|
|
||||||
const u = await getUtils(page)
|
|
||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
|
||||||
|
|
||||||
await homePage.goToModelingScene()
|
|
||||||
await scene.connectionEstablished()
|
|
||||||
await scene.settled(cmdBar)
|
|
||||||
|
|
||||||
// wait for execution done
|
|
||||||
|
|
||||||
await page.getByText('line(end = [162.86, 106.48])').click()
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
|
||||||
await page.waitForTimeout(500)
|
|
||||||
|
|
||||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(5)
|
|
||||||
|
|
||||||
const clickUnconstrained = _clickUnconstrained(page, editor)
|
|
||||||
const clickConstrained = _clickConstrained(page, editor)
|
|
||||||
|
|
||||||
const arcTo = await u.getBoundingBox('[data-overlay-index="1"]')
|
|
||||||
let ang = await u.getAngle('[data-overlay-index="1"]')
|
|
||||||
console.log('arcTo interior x')
|
|
||||||
await clickUnconstrained({
|
|
||||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
|
||||||
constraintType: 'xAbsolute',
|
|
||||||
expectBeforeUnconstrained: `arcTo({
|
|
||||||
interior = [360.16, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
expectAfterUnconstrained: `arcTo({
|
|
||||||
interior = [360.16, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
expectFinal: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
ang: ang,
|
|
||||||
steps: 6,
|
|
||||||
locator: '[data-overlay-toolbar-index="1"]',
|
|
||||||
})
|
|
||||||
|
|
||||||
console.log('arcTo interior y')
|
|
||||||
await clickUnconstrained({
|
|
||||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
|
||||||
constraintType: 'yAbsolute',
|
|
||||||
expectBeforeUnconstrained: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
expectAfterUnconstrained: `arcTo({
|
|
||||||
interior = [xAbs001, yAbs001],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
expectFinal: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
ang: ang,
|
|
||||||
steps: 10,
|
|
||||||
locator: '[data-overlay-toolbar-index="1"]',
|
|
||||||
})
|
|
||||||
|
|
||||||
console.log('arcTo end x')
|
|
||||||
await clickConstrained({
|
|
||||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
|
||||||
constraintType: 'xAbsolute',
|
|
||||||
expectBeforeUnconstrained: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
expectAfterUnconstrained: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [391.48, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
expectFinal: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [xAbs002, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
ang: ang + 180,
|
|
||||||
steps: 6,
|
|
||||||
locator: '[data-overlay-toolbar-index="1"]',
|
|
||||||
})
|
|
||||||
|
|
||||||
console.log('arcTo end y')
|
|
||||||
await clickUnconstrained({
|
|
||||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
|
||||||
constraintType: 'yAbsolute',
|
|
||||||
expectBeforeUnconstrained: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [xAbs002, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
expectAfterUnconstrained: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [xAbs002, yAbs002]
|
|
||||||
}, %)`,
|
|
||||||
expectFinal: `arcTo({
|
|
||||||
interior = [xAbs001, 231.76],
|
|
||||||
end = [xAbs002, 131.54]
|
|
||||||
}, %)`,
|
|
||||||
ang: ang + 180,
|
|
||||||
steps: 10,
|
|
||||||
locator: '[data-overlay-toolbar-index="1"]',
|
|
||||||
})
|
|
||||||
})
|
|
||||||
test('for segment [circle]', async ({ page, editor, homePage }) => {
|
test('for segment [circle]', async ({ page, editor, homePage }) => {
|
||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`part001 = startSketchOn('XZ')
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|> circle(center = [1 + 0, 0], radius = 8)
|
|> circle(center = [1 + 0, 0], radius = 8)
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
@ -1174,7 +868,8 @@ part001 = startSketchOn(XZ)
|
|||||||
await clickUnconstrained({
|
await clickUnconstrained({
|
||||||
hoverPos,
|
hoverPos,
|
||||||
constraintType: 'yAbsolute',
|
constraintType: 'yAbsolute',
|
||||||
expectBeforeUnconstrained: 'circle(center = [xAbs001, 0], radius = 8)',
|
expectBeforeUnconstrained:
|
||||||
|
'circle(center = [xAbs001, 0], radius = 8)',
|
||||||
expectAfterUnconstrained:
|
expectAfterUnconstrained:
|
||||||
'circle(center = [xAbs001, yAbs001], radius = 8)',
|
'circle(center = [xAbs001, yAbs001], radius = 8)',
|
||||||
expectFinal: 'circle(center = [xAbs001, 0], radius = 8)',
|
expectFinal: 'circle(center = [xAbs001, 0], radius = 8)',
|
||||||
@ -1186,7 +881,8 @@ part001 = startSketchOn(XZ)
|
|||||||
await clickUnconstrained({
|
await clickUnconstrained({
|
||||||
hoverPos,
|
hoverPos,
|
||||||
constraintType: 'radius',
|
constraintType: 'radius',
|
||||||
expectBeforeUnconstrained: 'circle(center = [xAbs001, 0], radius = 8)',
|
expectBeforeUnconstrained:
|
||||||
|
'circle(center = [xAbs001, 0], radius = 8)',
|
||||||
expectAfterUnconstrained:
|
expectAfterUnconstrained:
|
||||||
'circle(center = [xAbs001, 0], radius = radius001)',
|
'circle(center = [xAbs001, 0], radius = radius001)',
|
||||||
expectFinal: 'circle(center = [xAbs001, 0], radius = 8)',
|
expectFinal: 'circle(center = [xAbs001, 0], radius = 8)',
|
||||||
@ -1195,7 +891,8 @@ part001 = startSketchOn(XZ)
|
|||||||
locator: '[data-overlay-toolbar-index="0"]',
|
locator: '[data-overlay-toolbar-index="0"]',
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
)
|
||||||
test.describe('Testing deleting a segment', () => {
|
test.describe('Testing deleting a segment', () => {
|
||||||
const _deleteSegmentSequence =
|
const _deleteSegmentSequence =
|
||||||
(page: Page, editor: EditorFixture) =>
|
(page: Page, editor: EditorFixture) =>
|
||||||
@ -1230,78 +927,17 @@ part001 = startSketchOn(XZ)
|
|||||||
shouldNormalise: true,
|
shouldNormalise: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
await page
|
await page.locator(`[data-stdlib-fn-name="${stdLibFnName}"]`).click()
|
||||||
.locator(`[data-stdlib-fn-name="${stdLibFnName}"]`)
|
|
||||||
.first()
|
|
||||||
.click()
|
|
||||||
await page.getByText('Delete Segment').click()
|
await page.getByText('Delete Segment').click()
|
||||||
|
|
||||||
await editor.expectEditor.not.toContain(codeToBeDeleted, {
|
await editor.expectEditor.not.toContain(codeToBeDeleted, {
|
||||||
shouldNormalise: true,
|
shouldNormalise: true,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
test('all segment types', async ({
|
test('all segment types', async ({ page, editor, homePage }) => {
|
||||||
page,
|
|
||||||
editor,
|
|
||||||
homePage,
|
|
||||||
scene,
|
|
||||||
cmdBar,
|
|
||||||
}) => {
|
|
||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
<<<<<<< HEAD
|
|
||||||
`@settings(defaultLengthUnit = in)
|
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|>startProfileAt([0, 0], %)
|
|
||||||
|> line(end = [0.5, -14 + 0])
|
|
||||||
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|
|
||||||
|> line(endAbsolute = [33, 11.5 + 0])
|
|
||||||
|> xLine(endAbsolute = 9 - 5)
|
|
||||||
|> yLine(endAbsolute = -10.77, tag = $a)
|
|
||||||
|> xLine(length = 26.04)
|
|
||||||
|> yLine(length = 21.14 + 0)
|
|
||||||
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|
|
||||||
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|
|
||||||
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|
|
||||||
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|
|
||||||
|> angledLineThatIntersects({
|
|
||||||
angle = 4.14,
|
|
||||||
intersectTag = a,
|
|
||||||
offset = 9
|
|
||||||
}, %)
|
|
||||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
|
||||||
|> arcTo({
|
|
||||||
interior = [16.25, 5.12],
|
|
||||||
end = [21.61, 4.15]
|
|
||||||
}, %)
|
|
||||||
|> arc({
|
|
||||||
radius = 9.03,
|
|
||||||
angleStart = 40.27,
|
|
||||||
angleEnd = -38.05
|
|
||||||
}, %)
|
|
||||||
|
|
||||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
|
||||||
`part001 = startSketchOn('XZ')
|
|
||||||
|> startProfileAt([0, 0], %)
|
|
||||||
|> line(end = [0.5, -14 + 0])
|
|
||||||
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|
|
||||||
|> line(endAbsolute = [33, 11.5 + 0])
|
|
||||||
|> xLine(endAbsolute = 9 - 5)
|
|
||||||
|> yLine(endAbsolute = -10.77, tag = $a)
|
|
||||||
|> xLine(length = 26.04)
|
|
||||||
|> yLine(length = 21.14 + 0)
|
|
||||||
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|
|
||||||
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|
|
||||||
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|
|
||||||
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|
|
||||||
|> angledLineThatIntersects({
|
|
||||||
angle = 4.14,
|
|
||||||
intersectTag = a,
|
|
||||||
offset = 9
|
|
||||||
}, %)
|
|
||||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
|
||||||
=======
|
|
||||||
`part001 = startSketchOn('XZ')
|
`part001 = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [0.5, -14 + 0])
|
|> line(end = [0.5, -14 + 0])
|
||||||
@ -1321,7 +957,6 @@ part001 = startSketchOn(XZ)
|
|||||||
offset = 9
|
offset = 9
|
||||||
}, %)
|
}, %)
|
||||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
||||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
localStorage.setItem('disableAxis', 'true')
|
localStorage.setItem('disableAxis', 'true')
|
||||||
@ -1330,55 +965,27 @@ part001 = startSketchOn(XZ)
|
|||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||||
|
|
||||||
await homePage.goToModelingScene()
|
await homePage.goToModelingScene()
|
||||||
await scene.connectionEstablished()
|
|
||||||
await scene.settled(cmdBar)
|
|
||||||
await u.waitForPageLoad()
|
await u.waitForPageLoad()
|
||||||
|
|
||||||
|
// wait for execution done
|
||||||
|
await u.openDebugPanel()
|
||||||
|
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||||
|
await u.closeDebugPanel()
|
||||||
|
|
||||||
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
|
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||||
await page.waitForTimeout(500)
|
await page.waitForTimeout(500)
|
||||||
|
|
||||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(16)
|
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
|
||||||
const deleteSegmentSequence = _deleteSegmentSequence(page, editor)
|
const deleteSegmentSequence = _deleteSegmentSequence(page, editor)
|
||||||
|
|
||||||
let segmentToDelete
|
let segmentToDelete
|
||||||
|
|
||||||
const getOverlayByIndex = (index: number) =>
|
const getOverlayByIndex = (index: number) =>
|
||||||
u.getBoundingBox(`[data - overlay - index="${index}"]`)
|
u.getBoundingBox(`[data-overlay-index="${index}"]`)
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(14)
|
|
||||||
let ang = await u.getAngle('[data-overlay-index="14"]')
|
|
||||||
|
|
||||||
await editor.scrollToText('angleEnd')
|
|
||||||
|
|
||||||
await deleteSegmentSequence({
|
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
|
||||||
codeToBeDeleted: `arc({
|
|
||||||
radius = 9.03,
|
|
||||||
angleStart = 40.27,
|
|
||||||
angleEnd = -38.05
|
|
||||||
}, %)`,
|
|
||||||
stdLibFnName: 'arc',
|
|
||||||
ang: ang + 180,
|
|
||||||
steps: 6,
|
|
||||||
locator: '[data-overlay-toolbar-index="14"]',
|
|
||||||
})
|
|
||||||
segmentToDelete = await getOverlayByIndex(13)
|
|
||||||
ang = await u.getAngle('[data-overlay-index="13"]')
|
|
||||||
await deleteSegmentSequence({
|
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
|
||||||
codeToBeDeleted: `arcTo({
|
|
||||||
interior =[16.25, 5.12],
|
|
||||||
end =[21.61, 4.15]
|
|
||||||
}, %)`,
|
|
||||||
stdLibFnName: 'arcTo',
|
|
||||||
ang: ang,
|
|
||||||
steps: 6,
|
|
||||||
locator: '[data-overlay-toolbar-index="13"]',
|
|
||||||
})
|
|
||||||
segmentToDelete = await getOverlayByIndex(12)
|
segmentToDelete = await getOverlayByIndex(12)
|
||||||
ang = await u.getAngle('[data-overlay-index="12"]')
|
let ang = await u.getAngle(`[data-overlay-index="${12}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'tangentialArcTo([3.14 + 13, 1.14], %)',
|
codeToBeDeleted: 'tangentialArcTo([3.14 + 13, 1.14], %)',
|
||||||
@ -1389,7 +996,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(11)
|
segmentToDelete = await getOverlayByIndex(11)
|
||||||
ang = await u.getAngle('[data-overlay-index="11"]')
|
ang = await u.getAngle(`[data-overlay-index="${11}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: `angledLineThatIntersects({
|
codeToBeDeleted: `angledLineThatIntersects({
|
||||||
@ -1404,7 +1011,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(10)
|
segmentToDelete = await getOverlayByIndex(10)
|
||||||
ang = await u.getAngle('[data-overlay-index="10"]')
|
ang = await u.getAngle(`[data-overlay-index="${10}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'angledLine(angle = 89, endAbsoluteY = 9.14 + 0)',
|
codeToBeDeleted: 'angledLine(angle = 89, endAbsoluteY = 9.14 + 0)',
|
||||||
@ -1414,7 +1021,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(9)
|
segmentToDelete = await getOverlayByIndex(9)
|
||||||
ang = await u.getAngle('[data-overlay-index="9"]')
|
ang = await u.getAngle(`[data-overlay-index="${9}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'angledLine(angle = 3 + 0, endAbsoluteX = 26)',
|
codeToBeDeleted: 'angledLine(angle = 3 + 0, endAbsoluteX = 26)',
|
||||||
@ -1424,7 +1031,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(8)
|
segmentToDelete = await getOverlayByIndex(8)
|
||||||
ang = await u.getAngle('[data-overlay-index="8"]')
|
ang = await u.getAngle(`[data-overlay-index="${8}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted:
|
codeToBeDeleted:
|
||||||
@ -1435,7 +1042,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(7)
|
segmentToDelete = await getOverlayByIndex(7)
|
||||||
ang = await u.getAngle('[data-overlay-index="7"]')
|
ang = await u.getAngle(`[data-overlay-index="${7}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted:
|
codeToBeDeleted:
|
||||||
@ -1446,7 +1053,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(6)
|
segmentToDelete = await getOverlayByIndex(6)
|
||||||
ang = await u.getAngle('[data-overlay-index="6"]')
|
ang = await u.getAngle(`[data-overlay-index="${6}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'yLine(length = 21.14 + 0)',
|
codeToBeDeleted: 'yLine(length = 21.14 + 0)',
|
||||||
@ -1456,7 +1063,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(5)
|
segmentToDelete = await getOverlayByIndex(5)
|
||||||
ang = await u.getAngle('[data-overlay-index="5"]')
|
ang = await u.getAngle(`[data-overlay-index="${5}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'xLine(length = 26.04)',
|
codeToBeDeleted: 'xLine(length = 26.04)',
|
||||||
@ -1466,7 +1073,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(4)
|
segmentToDelete = await getOverlayByIndex(4)
|
||||||
ang = await u.getAngle('[data-overlay-index="4"]')
|
ang = await u.getAngle(`[data-overlay-index="${4}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'yLine(endAbsolute = -10.77, tag = $a)',
|
codeToBeDeleted: 'yLine(endAbsolute = -10.77, tag = $a)',
|
||||||
@ -1476,7 +1083,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(3)
|
segmentToDelete = await getOverlayByIndex(3)
|
||||||
ang = await u.getAngle('[data-overlay-index="3"]')
|
ang = await u.getAngle(`[data-overlay-index="${3}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'xLine(endAbsolute = 9 - 5)',
|
codeToBeDeleted: 'xLine(endAbsolute = 9 - 5)',
|
||||||
@ -1486,7 +1093,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(2)
|
segmentToDelete = await getOverlayByIndex(2)
|
||||||
ang = await u.getAngle('[data-overlay-index="2"]')
|
ang = await u.getAngle(`[data-overlay-index="${2}"]`)
|
||||||
await expect(page.getByText('Added variable')).not.toBeVisible()
|
await expect(page.getByText('Added variable')).not.toBeVisible()
|
||||||
|
|
||||||
const hoverPos = { x: segmentToDelete.x, y: segmentToDelete.y }
|
const hoverPos = { x: segmentToDelete.x, y: segmentToDelete.y }
|
||||||
@ -1519,7 +1126,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(1)
|
segmentToDelete = await getOverlayByIndex(1)
|
||||||
ang = await u.getAngle('[data-overlay-index="1"]')
|
ang = await u.getAngle(`[data-overlay-index="${1}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'angledLine(angle = 3 + 0, length = 32 + 0 )',
|
codeToBeDeleted: 'angledLine(angle = 3 + 0, length = 32 + 0 )',
|
||||||
@ -1529,7 +1136,7 @@ part001 = startSketchOn(XZ)
|
|||||||
})
|
})
|
||||||
|
|
||||||
segmentToDelete = await getOverlayByIndex(0)
|
segmentToDelete = await getOverlayByIndex(0)
|
||||||
ang = await u.getAngle('[data-overlay-index="0"]')
|
ang = await u.getAngle(`[data-overlay-index="${0}"]`)
|
||||||
await deleteSegmentSequence({
|
await deleteSegmentSequence({
|
||||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||||
codeToBeDeleted: 'line(end = [0.5, -14 + 0])',
|
codeToBeDeleted: 'line(end = [0.5, -14 + 0])',
|
||||||
@ -1560,26 +1167,18 @@ part001 = startSketchOn(XZ)
|
|||||||
for (const doesHaveTagOutsideSketch of [true, false]) {
|
for (const doesHaveTagOutsideSketch of [true, false]) {
|
||||||
for (const lineOfInterest of cases) {
|
for (const lineOfInterest of cases) {
|
||||||
const isObj = lineOfInterest.includes('{ angle = 3,')
|
const isObj = lineOfInterest.includes('{ angle = 3,')
|
||||||
test(`${ lineOfInterest.split('=')[0] }${ isObj? '-[obj-input]': '' }${
|
test(`${lineOfInterest.split('=')[0]}${isObj ? '-[obj-input]' : ''}${doesHaveTagOutsideSketch ? '-[tagOutsideSketch]' : ''
|
||||||
doesHaveTagOutsideSketch? '-[tagOutsideSketch]': ''
|
|
||||||
}`, async ({ page, editor, homePage }) => {
|
}`, async ({ page, editor, homePage }) => {
|
||||||
await page.addInitScript(
|
await page.addInitScript(
|
||||||
async ({ lineToBeDeleted, extraLine }) => {
|
async ({ lineToBeDeleted, extraLine }) => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`part001 = startSketchOn('XZ')
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|> startProfileAt([5, 6], %)
|
|> startProfileAt([5, 6], %)
|
||||||
|> ${ lineToBeDeleted }
|
|> ${lineToBeDeleted}
|
||||||
|> line(end = [-10, -15])
|
|> line(end = [-10, -15])
|
||||||
<<<<<<< HEAD
|
|
||||||
|> angledLine([-176, segLen(seg01)], %)
|
|
||||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
|
||||||
|> angledLine([-176, segLen(seg01)], %)
|
|
||||||
=======
|
|
||||||
|> angledLine(angle = -176, length = segLen(seg01))
|
|> angledLine(angle = -176, length = segLen(seg01))
|
||||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
${extraLine ? 'myVar = segLen(seg01)' : ''}`
|
||||||
${ extraLine? 'myVar = segLen(seg01)': '' }`
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1607,8 +1206,7 @@ part001 = startSketchOn(XZ)
|
|||||||
page.getByRole('button', { name: 'Edit Sketch' })
|
page.getByRole('button', { name: 'Edit Sketch' })
|
||||||
).toBeVisible()
|
).toBeVisible()
|
||||||
return true
|
return true
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
} catch (_) {
|
||||||
} catch (_e) {
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -1617,7 +1215,7 @@ part001 = startSketchOn(XZ)
|
|||||||
|
|
||||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(3)
|
await expect(page.getByTestId('segment-overlay')).toHaveCount(3)
|
||||||
const segmentToDelete = await u.getBoundingBox(
|
const segmentToDelete = await u.getBoundingBox(
|
||||||
`[data - overlay - index= "0"]`
|
`[data-overlay-index="0"]`
|
||||||
)
|
)
|
||||||
|
|
||||||
const isYLine = lineOfInterest.toLowerCase().includes('yline')
|
const isYLine = lineOfInterest.toLowerCase().includes('yline')
|
||||||
@ -1730,7 +1328,7 @@ part001 = startSketchOn(XZ)
|
|||||||
|
|
||||||
for (const { before, after } of cases) {
|
for (const { before, after } of cases) {
|
||||||
const isObj = before.includes('{ angle = 3')
|
const isObj = before.includes('{ angle = 3')
|
||||||
test(`${ before.split('=')[0] }${ isObj? '-[obj-input]': '' }`, async ({
|
test(`${before.split('=')[0]}${isObj ? '-[obj-input]' : ''}`, async ({
|
||||||
page,
|
page,
|
||||||
editor,
|
editor,
|
||||||
homePage,
|
homePage,
|
||||||
@ -1739,10 +1337,9 @@ part001 = startSketchOn(XZ)
|
|||||||
async ({ lineToBeDeleted }) => {
|
async ({ lineToBeDeleted }) => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'persistCode',
|
'persistCode',
|
||||||
`@settings(defaultLengthUnit = in)
|
`part001 = startSketchOn('XZ')
|
||||||
part001 = startSketchOn(XZ)
|
|
||||||
|> startProfileAt([5, 6], %)
|
|> startProfileAt([5, 6], %)
|
||||||
|> ${ lineToBeDeleted }
|
|> ${lineToBeDeleted}
|
||||||
|> line(end = [-10, -15])
|
|> line(end = [-10, -15])
|
||||||
|> angledLine(angle = -176, length = segLen(seg01))`
|
|> angledLine(angle = -176, length = segLen(seg01))`
|
||||||
)
|
)
|
||||||
@ -1766,8 +1363,8 @@ part001 = startSketchOn(XZ)
|
|||||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(3)
|
await expect(page.getByTestId('segment-overlay')).toHaveCount(3)
|
||||||
await expect(page.getByText('Added variable')).not.toBeVisible()
|
await expect(page.getByText('Added variable')).not.toBeVisible()
|
||||||
|
|
||||||
const hoverPos = await u.getBoundingBox(`[data - overlay - index="0"]`)
|
const hoverPos = await u.getBoundingBox(`[data-overlay-index="0"]`)
|
||||||
let ang = await u.getAngle('[data-overlay-index="0"]')
|
let ang = await u.getAngle(`[data-overlay-index="${0}"]`)
|
||||||
ang += 180
|
ang += 180
|
||||||
|
|
||||||
await page.mouse.move(0, 0)
|
await page.mouse.move(0, 0)
|
||||||
|
|||||||
@ -5,3 +5,8 @@ export const ARG_END_ABSOLUTE = 'endAbsolute'
|
|||||||
export const ARG_CIRCLE_CENTER = 'center'
|
export const ARG_CIRCLE_CENTER = 'center'
|
||||||
export const ARG_CIRCLE_RADIUS = 'radius'
|
export const ARG_CIRCLE_RADIUS = 'radius'
|
||||||
export const DETERMINING_ARGS = [ARG_LENGTH, ARG_END, ARG_END_ABSOLUTE]
|
export const DETERMINING_ARGS = [ARG_LENGTH, ARG_END, ARG_END_ABSOLUTE]
|
||||||
|
export const ARG_LENGTH_X = 'lengthX'
|
||||||
|
export const ARG_LENGTH_Y = 'lengthY'
|
||||||
|
export const ARG_ANGLE = 'angle'
|
||||||
|
export const ARG_END_ABSOLUTE_X = 'endAbsoluteX'
|
||||||
|
export const ARG_END_ABSOLUTE_Y = 'endAbsoluteY'
|
||||||
|
|||||||
@ -182,6 +182,7 @@ const commonConstraintInfoHelper = (
|
|||||||
pathToNode: PathToNode,
|
pathToNode: PathToNode,
|
||||||
filterValue?: string
|
filterValue?: string
|
||||||
) => {
|
) => {
|
||||||
|
console.warn('ADAM: Must be updated to handle angled line kw args')
|
||||||
if (callExp.type !== 'CallExpression' && callExp.type !== 'CallExpressionKw')
|
if (callExp.type !== 'CallExpression' && callExp.type !== 'CallExpressionKw')
|
||||||
return []
|
return []
|
||||||
const firstArg = (() => {
|
const firstArg = (() => {
|
||||||
@ -2169,7 +2170,7 @@ export const circleThreePoint: SketchLineHelperKw = {
|
|||||||
return finalConstraints
|
return finalConstraints
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
export const angledLine: SketchLineHelper = {
|
export const angledLine: SketchLineHelperKw = {
|
||||||
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
||||||
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { from, to } = segmentInput
|
const { from, to } = segmentInput
|
||||||
@ -2181,12 +2182,13 @@ export const angledLine: SketchLineHelper = {
|
|||||||
|
|
||||||
const newAngleVal = createLiteral(roundOff(getAngle(from, to), 0))
|
const newAngleVal = createLiteral(roundOff(getAngle(from, to), 0))
|
||||||
const newLengthVal = createLiteral(roundOff(getLength(from, to), 2))
|
const newLengthVal = createLiteral(roundOff(getLength(from, to), 2))
|
||||||
const newLine = createCallExpression('angledLine', [
|
const newLine = createCallExpressionStdLibKw('angledLine', null, [
|
||||||
createArrayExpression([newAngleVal, newLengthVal]),
|
createLabeledArg('angle', newAngleVal),
|
||||||
createPipeSubstitution(),
|
createLabeledArg('length', newLengthVal),
|
||||||
])
|
])
|
||||||
|
|
||||||
if (replaceExistingCallback) {
|
if (replaceExistingCallback) {
|
||||||
|
console.warn('ADAM: Probably needs to be adjusted for kw args')
|
||||||
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
||||||
const result = replaceExistingCallback([
|
const result = replaceExistingCallback([
|
||||||
{
|
{
|
||||||
@ -2224,7 +2226,7 @@ export const angledLine: SketchLineHelper = {
|
|||||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { to, from } = input
|
const { to, from } = input
|
||||||
const _node = { ...node }
|
const _node = { ...node }
|
||||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||||
if (err(nodeMeta)) return nodeMeta
|
if (err(nodeMeta)) return nodeMeta
|
||||||
const { node: callExpression } = nodeMeta
|
const { node: callExpression } = nodeMeta
|
||||||
const angle = roundOff(getAngle(from, to), 0)
|
const angle = roundOff(getAngle(from, to), 0)
|
||||||
@ -2234,18 +2236,17 @@ export const angledLine: SketchLineHelper = {
|
|||||||
const lengthLit = createLiteral(lineLength)
|
const lengthLit = createLiteral(lineLength)
|
||||||
|
|
||||||
const firstArg = callExpression.arguments?.[0]
|
const firstArg = callExpression.arguments?.[0]
|
||||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
removeDeterminingArgs(callExpression)
|
||||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||||
mutateObjExpProp(firstArg, lengthLit, 'length')
|
mutateKwArg(ARG_LENGTH, callExpression, lengthLit)
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
modifiedAst: _node,
|
modifiedAst: _node,
|
||||||
pathToNode,
|
pathToNode,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getTag: getTag(),
|
getTag: getTagKwArg(),
|
||||||
addTag: addTag(),
|
addTag: addTagKw(),
|
||||||
getConstraintInfo: (callExp, ...args) =>
|
getConstraintInfo: (callExp, ...args) =>
|
||||||
commonConstraintInfoHelper(
|
commonConstraintInfoHelper(
|
||||||
callExp,
|
callExp,
|
||||||
@ -2259,7 +2260,7 @@ export const angledLine: SketchLineHelper = {
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
export const angledLineOfXLength: SketchLineHelper = {
|
export const angledLineOfXLength: SketchLineHelperKw = {
|
||||||
add: ({
|
add: ({
|
||||||
node,
|
node,
|
||||||
variables,
|
variables,
|
||||||
@ -2313,9 +2314,9 @@ export const angledLineOfXLength: SketchLineHelper = {
|
|||||||
if (err(result)) return result
|
if (err(result)) return result
|
||||||
newLine = result.callExp
|
newLine = result.callExp
|
||||||
} else {
|
} else {
|
||||||
newLine = createCallExpression('angledLineOfXLength', [
|
newLine = createCallExpressionStdLibKw('angledLineOfXLength', null, [
|
||||||
createArrayExpression([angle, xLength]),
|
createLabeledArg(ARG_ANGLE, angle),
|
||||||
createPipeSubstitution(),
|
createLabeledArg(ARG_LENGTH_X, xLength),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
||||||
@ -2333,32 +2334,38 @@ export const angledLineOfXLength: SketchLineHelper = {
|
|||||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { to, from } = input
|
const { to, from } = input
|
||||||
const _node = { ...node }
|
const _node = { ...node }
|
||||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||||
if (err(nodeMeta)) return nodeMeta
|
if (err(nodeMeta)) return nodeMeta
|
||||||
const { node: callExpression } = nodeMeta
|
const { node: callExpression } = nodeMeta
|
||||||
const angle = roundOff(getAngle(from, to), 0)
|
const angle = roundOff(getAngle(from, to), 0)
|
||||||
const xLength = roundOff(Math.abs(to[0] - from[0]), 2)
|
const xLength = roundOff(Math.abs(to[0] - from[0]), 2)
|
||||||
|
|
||||||
const firstArg = callExpression.arguments?.[0]
|
const oldAngle = findKwArg(ARG_ANGLE, callExpression)
|
||||||
const adjustedXLength = isAngleLiteral(firstArg)
|
if (oldAngle === undefined) {
|
||||||
|
return new Error(
|
||||||
|
`expected an angle arg, but it was not found. Args were ${allLabels(
|
||||||
|
callExpression
|
||||||
|
)}`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
const adjustedXLength = isAngleLiteral(oldAngle)
|
||||||
? Math.abs(xLength)
|
? Math.abs(xLength)
|
||||||
: xLength // todo make work for variable angle > 180
|
: xLength // todo make work for variable angle > 180
|
||||||
|
|
||||||
const angleLit = createLiteral(angle)
|
const angleLit = createLiteral(angle)
|
||||||
const lengthLit = createLiteral(adjustedXLength)
|
const lengthLit = createLiteral(adjustedXLength)
|
||||||
|
|
||||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
removeDeterminingArgs(callExpression)
|
||||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||||
mutateObjExpProp(firstArg, lengthLit, 'length')
|
mutateKwArg(ARG_LENGTH_X, callExpression, lengthLit)
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
modifiedAst: _node,
|
modifiedAst: _node,
|
||||||
pathToNode,
|
pathToNode,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getTag: getTag(),
|
getTag: getTagKwArg(),
|
||||||
addTag: addTag(),
|
addTag: addTagKw(),
|
||||||
getConstraintInfo: (callExp, ...args) =>
|
getConstraintInfo: (callExp, ...args) =>
|
||||||
commonConstraintInfoHelper(
|
commonConstraintInfoHelper(
|
||||||
callExp,
|
callExp,
|
||||||
@ -2372,7 +2379,7 @@ export const angledLineOfXLength: SketchLineHelper = {
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
export const angledLineOfYLength: SketchLineHelper = {
|
export const angledLineOfYLength: SketchLineHelperKw = {
|
||||||
add: ({
|
add: ({
|
||||||
node,
|
node,
|
||||||
variables,
|
variables,
|
||||||
@ -2424,9 +2431,9 @@ export const angledLineOfYLength: SketchLineHelper = {
|
|||||||
if (err(result)) return result
|
if (err(result)) return result
|
||||||
newLine = result.callExp
|
newLine = result.callExp
|
||||||
} else {
|
} else {
|
||||||
newLine = createCallExpression('angledLineOfYLength', [
|
newLine = createCallExpressionStdLibKw('angledLine', null, [
|
||||||
createArrayExpression([angle, yLength]),
|
createLabeledArg(ARG_ANGLE, angle),
|
||||||
createPipeSubstitution(),
|
createLabeledArg(ARG_LENGTH_Y, yLength),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
||||||
@ -2444,32 +2451,38 @@ export const angledLineOfYLength: SketchLineHelper = {
|
|||||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { to, from } = input
|
const { to, from } = input
|
||||||
const _node = { ...node }
|
const _node = { ...node }
|
||||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||||
if (err(nodeMeta)) return nodeMeta
|
if (err(nodeMeta)) return nodeMeta
|
||||||
const { node: callExpression } = nodeMeta
|
const { node: callExpression } = nodeMeta
|
||||||
const angle = roundOff(getAngle(from, to), 0)
|
const angle = roundOff(getAngle(from, to), 0)
|
||||||
const yLength = roundOff(to[1] - from[1], 2)
|
const yLength = roundOff(to[1] - from[1], 2)
|
||||||
|
|
||||||
const firstArg = callExpression.arguments?.[0]
|
const oldAngle = findKwArg(ARG_ANGLE, callExpression)
|
||||||
const adjustedYLength = isAngleLiteral(firstArg)
|
if (oldAngle === undefined) {
|
||||||
|
return new Error(
|
||||||
|
`expected an angle arg, but it was not found. Args were ${allLabels(
|
||||||
|
callExpression
|
||||||
|
)}`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
const adjustedYLength = isAngleLiteral(oldAngle)
|
||||||
? Math.abs(yLength)
|
? Math.abs(yLength)
|
||||||
: yLength // todo make work for variable angle > 180
|
: yLength // todo make work for variable angle > 180
|
||||||
|
|
||||||
const angleLit = createLiteral(angle)
|
const angleLit = createLiteral(angle)
|
||||||
const lengthLit = createLiteral(adjustedYLength)
|
const lengthLit = createLiteral(adjustedYLength)
|
||||||
|
|
||||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
removeDeterminingArgs(callExpression)
|
||||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||||
mutateObjExpProp(firstArg, lengthLit, 'length')
|
mutateKwArg(ARG_LENGTH_Y, callExpression, lengthLit)
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
modifiedAst: _node,
|
modifiedAst: _node,
|
||||||
pathToNode,
|
pathToNode,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getTag: getTag(),
|
getTag: getTagKwArg(),
|
||||||
addTag: addTag(),
|
addTag: addTagKw(),
|
||||||
getConstraintInfo: (callExp, ...args) =>
|
getConstraintInfo: (callExp, ...args) =>
|
||||||
commonConstraintInfoHelper(
|
commonConstraintInfoHelper(
|
||||||
callExp,
|
callExp,
|
||||||
@ -2483,7 +2496,7 @@ export const angledLineOfYLength: SketchLineHelper = {
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
export const angledLineToX: SketchLineHelper = {
|
export const angledLineToX: SketchLineHelperKw = {
|
||||||
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
||||||
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { from, to } = segmentInput
|
const { from, to } = segmentInput
|
||||||
@ -2526,9 +2539,9 @@ export const angledLineToX: SketchLineHelper = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const callExp = createCallExpression('angledLineToX', [
|
const callExp = createCallExpressionStdLibKw('angledLineToX', null, [
|
||||||
createArrayExpression([angle, xArg]),
|
createLabeledArg(ARG_ANGLE, angle),
|
||||||
createPipeSubstitution(),
|
createLabeledArg(ARG_END_ABSOLUTE_X, xArg),
|
||||||
])
|
])
|
||||||
pipe.body = [...pipe.body, callExp]
|
pipe.body = [...pipe.body, callExp]
|
||||||
return {
|
return {
|
||||||
@ -2540,30 +2553,28 @@ export const angledLineToX: SketchLineHelper = {
|
|||||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { to, from } = input
|
const { to, from } = input
|
||||||
const _node = { ...node }
|
const _node = { ...node }
|
||||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||||
if (err(nodeMeta)) return nodeMeta
|
if (err(nodeMeta)) return nodeMeta
|
||||||
|
|
||||||
const { node: callExpression } = nodeMeta
|
const { node: callExpression } = nodeMeta
|
||||||
const angle = roundOff(getAngle(from, to), 0)
|
const angle = roundOff(getAngle(from, to), 0)
|
||||||
const xLength = roundOff(to[0], 2)
|
const xLength = roundOff(to[0], 2)
|
||||||
|
|
||||||
const firstArg = callExpression.arguments?.[0]
|
|
||||||
const adjustedXLength = xLength
|
const adjustedXLength = xLength
|
||||||
|
|
||||||
const angleLit = createLiteral(angle)
|
const angleLit = createLiteral(angle)
|
||||||
const lengthLit = createLiteral(adjustedXLength)
|
const lengthLit = createLiteral(adjustedXLength)
|
||||||
|
|
||||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
removeDeterminingArgs(callExpression)
|
||||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||||
mutateObjExpProp(firstArg, lengthLit, 'to')
|
mutateKwArg(ARG_END_ABSOLUTE_X, callExpression, lengthLit)
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
modifiedAst: _node,
|
modifiedAst: _node,
|
||||||
pathToNode,
|
pathToNode,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getTag: getTag(),
|
getTag: getTagKwArg(),
|
||||||
addTag: addTag(),
|
addTag: addTagKw(),
|
||||||
getConstraintInfo: (callExp, ...args) =>
|
getConstraintInfo: (callExp, ...args) =>
|
||||||
commonConstraintInfoHelper(
|
commonConstraintInfoHelper(
|
||||||
callExp,
|
callExp,
|
||||||
@ -2577,7 +2588,7 @@ export const angledLineToX: SketchLineHelper = {
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
export const angledLineToY: SketchLineHelper = {
|
export const angledLineToY: SketchLineHelperKw = {
|
||||||
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
||||||
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { from, to } = segmentInput
|
const { from, to } = segmentInput
|
||||||
@ -2622,9 +2633,9 @@ export const angledLineToY: SketchLineHelper = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const newLine = createCallExpression('angledLineToY', [
|
const newLine = createCallExpressionStdLibKw('angledLine', null, [
|
||||||
createArrayExpression([angle, yArg]),
|
createLabeledArg(ARG_ANGLE, angle),
|
||||||
createPipeSubstitution(),
|
createLabeledArg(ARG_END_ABSOLUTE_Y, yArg),
|
||||||
])
|
])
|
||||||
pipe.body = [...pipe.body, newLine]
|
pipe.body = [...pipe.body, newLine]
|
||||||
return {
|
return {
|
||||||
@ -2636,30 +2647,28 @@ export const angledLineToY: SketchLineHelper = {
|
|||||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||||
const { to, from } = input
|
const { to, from } = input
|
||||||
const _node = { ...node }
|
const _node = { ...node }
|
||||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||||
if (err(nodeMeta)) return nodeMeta
|
if (err(nodeMeta)) return nodeMeta
|
||||||
|
|
||||||
const { node: callExpression } = nodeMeta
|
const { node: callExpression } = nodeMeta
|
||||||
const angle = roundOff(getAngle(from, to), 0)
|
const angle = roundOff(getAngle(from, to), 0)
|
||||||
const xLength = roundOff(to[1], 2)
|
const xLength = roundOff(to[1], 2)
|
||||||
|
|
||||||
const firstArg = callExpression.arguments?.[0]
|
|
||||||
const adjustedXLength = xLength
|
const adjustedXLength = xLength
|
||||||
|
|
||||||
const angleLit = createLiteral(angle)
|
const angleLit = createLiteral(angle)
|
||||||
const lengthLit = createLiteral(adjustedXLength)
|
const lengthLit = createLiteral(adjustedXLength)
|
||||||
|
|
||||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
removeDeterminingArgs(callExpression)
|
||||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||||
mutateObjExpProp(firstArg, lengthLit, 'to')
|
mutateKwArg(ARG_END_ABSOLUTE_Y, callExpression, lengthLit)
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
modifiedAst: _node,
|
modifiedAst: _node,
|
||||||
pathToNode,
|
pathToNode,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getTag: getTag(),
|
getTag: getTagKwArg(),
|
||||||
addTag: addTag(),
|
addTag: addTagKw(),
|
||||||
getConstraintInfo: (callExp, ...args) =>
|
getConstraintInfo: (callExp, ...args) =>
|
||||||
commonConstraintInfoHelper(
|
commonConstraintInfoHelper(
|
||||||
callExp,
|
callExp,
|
||||||
@ -2918,11 +2927,6 @@ export const updateStartProfileAtArgs: SketchLineHelper['updateArgs'] = ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const sketchLineHelperMap: { [key: string]: SketchLineHelper } = {
|
export const sketchLineHelperMap: { [key: string]: SketchLineHelper } = {
|
||||||
angledLine,
|
|
||||||
angledLineOfXLength,
|
|
||||||
angledLineOfYLength,
|
|
||||||
angledLineToX,
|
|
||||||
angledLineToY,
|
|
||||||
angledLineThatIntersects,
|
angledLineThatIntersects,
|
||||||
tangentialArcTo,
|
tangentialArcTo,
|
||||||
arc,
|
arc,
|
||||||
@ -2938,6 +2942,11 @@ export const sketchLineHelperMapKw: { [key: string]: SketchLineHelperKw } = {
|
|||||||
yLine,
|
yLine,
|
||||||
xLineTo,
|
xLineTo,
|
||||||
yLineTo,
|
yLineTo,
|
||||||
|
angledLine,
|
||||||
|
angledLineOfXLength,
|
||||||
|
angledLineOfYLength,
|
||||||
|
angledLineToX,
|
||||||
|
angledLineToY,
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export function changeSketchArguments(
|
export function changeSketchArguments(
|
||||||
@ -2983,10 +2992,10 @@ export function changeSketchArguments(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (fnName in sketchLineHelperMapKw) {
|
if (fnName in sketchLineHelperMapKw) {
|
||||||
const isAbsolute =
|
const correctFnName =
|
||||||
callExpression.type === 'CallExpressionKw' &&
|
callExpression.type === 'CallExpressionKw'
|
||||||
findKwArg(ARG_END_ABSOLUTE, callExpression) !== undefined
|
? fnNameToTooltip(allLabels(callExpression), fnName)
|
||||||
const correctFnName = fnNameToTooltip(isAbsolute, fnName)
|
: fnName
|
||||||
if (err(correctFnName)) {
|
if (err(correctFnName)) {
|
||||||
return correctFnName
|
return correctFnName
|
||||||
}
|
}
|
||||||
@ -3015,9 +3024,11 @@ export function changeSketchArguments(
|
|||||||
* To put it another way, function names don't map cleanly to tooltips, but function names + arguments do.
|
* To put it another way, function names don't map cleanly to tooltips, but function names + arguments do.
|
||||||
*/
|
*/
|
||||||
export function fnNameToTooltip(
|
export function fnNameToTooltip(
|
||||||
isAbsolute: boolean,
|
argLabels: string[],
|
||||||
fnName: string
|
fnName: string
|
||||||
): ToolTip | Error {
|
): ToolTip | Error {
|
||||||
|
const isAbsolute =
|
||||||
|
argLabels.findIndex((label) => label === ARG_END_ABSOLUTE) >= 0
|
||||||
switch (fnName) {
|
switch (fnName) {
|
||||||
case 'line':
|
case 'line':
|
||||||
return isAbsolute ? 'lineTo' : 'line'
|
return isAbsolute ? 'lineTo' : 'line'
|
||||||
@ -3028,6 +3039,23 @@ export function fnNameToTooltip(
|
|||||||
case 'circleThreePoint':
|
case 'circleThreePoint':
|
||||||
case 'circle':
|
case 'circle':
|
||||||
return fnName
|
return fnName
|
||||||
|
case 'angledLine': {
|
||||||
|
const argmap: Record<string, ToolTip> = {
|
||||||
|
ARG_LENGTH_X: 'angledLineOfXLength',
|
||||||
|
ARG_LENGTH_Y: 'angledLineOfYLength',
|
||||||
|
ARG_END_ABSOLUTE_X: 'angledLineToX',
|
||||||
|
ARG_END_ABSOLUTE_Y: 'angledLineToY',
|
||||||
|
ARG_LENGTH: 'angledLine',
|
||||||
|
}
|
||||||
|
for (const [arg, tooltip] of Object.entries(argmap)) {
|
||||||
|
if (argLabels.findIndex((label) => label === arg) >= 0) {
|
||||||
|
return tooltip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const err = `Unknown angledline arguments, could not map to tooltip. Args were ${argLabels}`
|
||||||
|
console.error(err)
|
||||||
|
return new Error(err)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
const err = `Unknown sketch line function ${fnName}`
|
const err = `Unknown sketch line function ${fnName}`
|
||||||
console.error(err)
|
console.error(err)
|
||||||
@ -3055,6 +3083,12 @@ export function tooltipToFnName(tooltip: ToolTip): string | Error {
|
|||||||
return 'xLine'
|
return 'xLine'
|
||||||
case 'yLineTo':
|
case 'yLineTo':
|
||||||
return 'yLine'
|
return 'yLine'
|
||||||
|
case 'angledLine':
|
||||||
|
case 'angledLineToX':
|
||||||
|
case 'angledLineToY':
|
||||||
|
case 'angledLineOfXLength':
|
||||||
|
case 'angledLineOfYLength':
|
||||||
|
return 'angledLine'
|
||||||
default:
|
default:
|
||||||
return new Error(`Unknown tooltip function ${tooltip}`)
|
return new Error(`Unknown tooltip function ${tooltip}`)
|
||||||
}
|
}
|
||||||
@ -3092,7 +3126,7 @@ export function getConstraintInfoKw(
|
|||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
if (!(fnName in sketchLineHelperMapKw)) return []
|
if (!(fnName in sketchLineHelperMapKw)) return []
|
||||||
const correctFnName = fnNameToTooltip(isAbsolute, fnName)
|
const correctFnName = fnNameToTooltip(allLabels(callExpression), fnName)
|
||||||
if (err(correctFnName)) {
|
if (err(correctFnName)) {
|
||||||
console.error(correctFnName)
|
console.error(correctFnName)
|
||||||
return []
|
return []
|
||||||
@ -3453,6 +3487,7 @@ export function getTagFromCallExpression(
|
|||||||
return new Error(`"${callExp.callee.name.name}" is not a sketch line helper`)
|
return new Error(`"${callExp.callee.name.name}" is not a sketch line helper`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
function isAngleLiteral(lineArugement: Expr): boolean {
|
function isAngleLiteral(lineArugement: Expr): boolean {
|
||||||
return lineArugement?.type === 'ArrayExpression'
|
return lineArugement?.type === 'ArrayExpression'
|
||||||
? isLiteralArrayOrStatic(lineArugement.elements[0])
|
? isLiteralArrayOrStatic(lineArugement.elements[0])
|
||||||
@ -3462,6 +3497,25 @@ function isAngleLiteral(lineArugement: Expr): boolean {
|
|||||||
?.value
|
?.value
|
||||||
)
|
)
|
||||||
: false
|
: false
|
||||||
|
||||||| parent of 27a8a2a50 (Start changing JS codemods)
|
||||||
|
function isAngleLiteral(lineArugement: Expr): boolean {
|
||||||
|
return lineArugement?.type === 'ArrayExpression'
|
||||||
|
? isLiteralArrayOrStatic(lineArugement.elements[0])
|
||||||
|
: lineArugement?.type === 'ObjectExpression'
|
||||||
|
? isLiteralArrayOrStatic(
|
||||||
|
lineArugement.properties.find(({ key }) => key.name === 'angle')?.value
|
||||||
|
)
|
||||||
|
: false
|
||||||
|
=======
|
||||||
|
function isAngleLiteral(lineArgument: Expr): boolean {
|
||||||
|
return lineArgument?.type === 'ArrayExpression'
|
||||||
|
? isLiteralArrayOrStatic(lineArgument.elements[0])
|
||||||
|
: lineArgument?.type === 'ObjectExpression'
|
||||||
|
? isLiteralArrayOrStatic(
|
||||||
|
lineArgument.properties.find(({ key }) => key.name === 'angle')?.value
|
||||||
|
)
|
||||||
|
: lineArgument?.type === 'Literal'
|
||||||
|
>>>>>>> 27a8a2a50 (Start changing JS codemods)
|
||||||
}
|
}
|
||||||
|
|
||||||
type addTagFn = (
|
type addTagFn = (
|
||||||
@ -3782,7 +3836,7 @@ export function getArgForEnd(lineCall: CallExpressionKw):
|
|||||||
return getValuesForXYFns(arg)
|
return getValuesForXYFns(arg)
|
||||||
}
|
}
|
||||||
case 'yLine':
|
case 'yLine':
|
||||||
case 'xLine':
|
case 'xLine': {
|
||||||
const arg = findKwArgAny(DETERMINING_ARGS, lineCall)
|
const arg = findKwArgAny(DETERMINING_ARGS, lineCall)
|
||||||
const tag = findKwArg(ARG_TAG, lineCall)
|
const tag = findKwArg(ARG_TAG, lineCall)
|
||||||
if (arg === undefined) {
|
if (arg === undefined) {
|
||||||
@ -3790,6 +3844,30 @@ export function getArgForEnd(lineCall: CallExpressionKw):
|
|||||||
} else {
|
} else {
|
||||||
return { val: arg, tag }
|
return { val: arg, tag }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
case 'angledLine': {
|
||||||
|
const angle = findKwArg(ARG_ANGLE, lineCall)
|
||||||
|
if (angle === undefined) {
|
||||||
|
return new Error(`call to ${name} needs an ${ARG_ANGLE} arg`)
|
||||||
|
}
|
||||||
|
const length = findKwArgAny(
|
||||||
|
[
|
||||||
|
ARG_LENGTH,
|
||||||
|
ARG_LENGTH_X,
|
||||||
|
ARG_LENGTH_Y,
|
||||||
|
ARG_END_ABSOLUTE_X,
|
||||||
|
ARG_END_ABSOLUTE_Y,
|
||||||
|
],
|
||||||
|
lineCall
|
||||||
|
)
|
||||||
|
if (length === undefined) {
|
||||||
|
return new Error(
|
||||||
|
`call to ${name} needs an arg like ${ARG_LENGTH}, or ${ARG_END_ABSOLUTE_X} or something`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
const tag = findKwArg(ARG_TAG, lineCall)
|
||||||
|
return { val: [angle, length], tag }
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return new Error(`unknown function ${name}`)
|
return new Error(`unknown function ${name}`)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,12 @@ import {
|
|||||||
ARG_END_ABSOLUTE,
|
ARG_END_ABSOLUTE,
|
||||||
ARG_LENGTH,
|
ARG_LENGTH,
|
||||||
ARG_TAG,
|
ARG_TAG,
|
||||||
|
ARG_ANGLE,
|
||||||
DETERMINING_ARGS,
|
DETERMINING_ARGS,
|
||||||
|
ARG_END_ABSOLUTE_X,
|
||||||
|
ARG_END_ABSOLUTE_Y,
|
||||||
|
ARG_LENGTH_X,
|
||||||
|
ARG_LENGTH_Y,
|
||||||
} from '@src/lang/constants'
|
} from '@src/lang/constants'
|
||||||
import {
|
import {
|
||||||
createArrayExpression,
|
createArrayExpression,
|
||||||
@ -162,6 +167,43 @@ function createCallWrapper(
|
|||||||
valueUsedInTransform,
|
valueUsedInTransform,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
tooltip === 'angledLine' ||
|
||||||
|
tooltip === 'angledLineToX' ||
|
||||||
|
tooltip === 'angledLineToY' ||
|
||||||
|
tooltip === 'angledLineOfXLength' ||
|
||||||
|
tooltip === 'angledLineOfYLength'
|
||||||
|
) {
|
||||||
|
const args = [createLabeledArg(ARG_ANGLE, val[0])]
|
||||||
|
const v = val[1]
|
||||||
|
args.push(
|
||||||
|
(() => {
|
||||||
|
switch (tooltip) {
|
||||||
|
case 'angledLine':
|
||||||
|
return createLabeledArg(ARG_LENGTH, v)
|
||||||
|
case 'angledLineToX':
|
||||||
|
return createLabeledArg(ARG_END_ABSOLUTE_X, v)
|
||||||
|
case 'angledLineToY':
|
||||||
|
return createLabeledArg(ARG_END_ABSOLUTE_Y, v)
|
||||||
|
case 'angledLineOfXLength':
|
||||||
|
return createLabeledArg(ARG_LENGTH_X, v)
|
||||||
|
case 'angledLineOfYLength':
|
||||||
|
return createLabeledArg(ARG_LENGTH_Y, v)
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
)
|
||||||
|
if (tag) {
|
||||||
|
args.push(createLabeledArg(ARG_TAG, tag))
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
callExp: createCallExpressionStdLibKw(
|
||||||
|
'angledLine',
|
||||||
|
null, // Assumes this is being called in a pipeline, so the first arg is optional and if not given, will become pipeline substitution.
|
||||||
|
args
|
||||||
|
),
|
||||||
|
valueUsedInTransform,
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// In this branch, `val` is an expression.
|
// In this branch, `val` is an expression.
|
||||||
const arg = (() => {
|
const arg = (() => {
|
||||||
@ -1685,8 +1727,7 @@ function getTransformMapPathKw(
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
const isAbsolute = findKwArg(ARG_END_ABSOLUTE, sketchFnExp) !== undefined
|
const tooltip = fnNameToTooltip(allLabels(sketchFnExp), name)
|
||||||
const tooltip = fnNameToTooltip(isAbsolute, name)
|
|
||||||
if (err(tooltip)) {
|
if (err(tooltip)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -1717,6 +1758,7 @@ function getTransformMapPathKw(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check what constraints the function has
|
// check what constraints the function has
|
||||||
|
const isAbsolute = findKwArg(ARG_END_ABSOLUTE, sketchFnExp) !== undefined
|
||||||
const lineInputType = getConstraintType(argForEnd.val, name, isAbsolute)
|
const lineInputType = getConstraintType(argForEnd.val, name, isAbsolute)
|
||||||
if (lineInputType) {
|
if (lineInputType) {
|
||||||
const info = transformMap?.[tooltip]?.[lineInputType]?.[constraintType]
|
const info = transformMap?.[tooltip]?.[lineInputType]?.[constraintType]
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import type { Binary as BSONBinary } from 'bson'
|
|||||||
import { v4 } from 'uuid'
|
import { v4 } from 'uuid'
|
||||||
import type { AnyMachineSnapshot } from 'xstate'
|
import type { AnyMachineSnapshot } from 'xstate'
|
||||||
|
|
||||||
import type { SourceRange } from '@src/lang/wasm'
|
import type { CallExpressionKw, SourceRange } from '@src/lang/wasm'
|
||||||
import { isDesktop } from '@src/lib/isDesktop'
|
import { isDesktop } from '@src/lib/isDesktop'
|
||||||
import type { AsyncFn } from '@src/lib/types'
|
import type { AsyncFn } from '@src/lib/types'
|
||||||
|
|
||||||
@ -469,3 +469,7 @@ export function binaryToUuid(
|
|||||||
hexValues.slice(10, 16).join(''),
|
hexValues.slice(10, 16).join(''),
|
||||||
].join('-')
|
].join('-')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function allLabels(callExpression: CallExpressionKw): string[] {
|
||||||
|
return callExpression.arguments.map((a) => a.label.name)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user