| @ -912,7 +912,7 @@ a1 = startSketchOn(offsetPlane(XY, offset = 10)) | ||||
|     |> close() | ||||
|     |> revolve( | ||||
|     axis = revolveAxis, | ||||
|     angle = 90 | ||||
|     angle = 90deg | ||||
|     ) | ||||
|     ` | ||||
|       ) | ||||
|  | ||||
| @ -317,7 +317,7 @@ test.describe('Point-and-click tests', () => { | ||||
|         clickCoords: { x: 570, y: 220 }, | ||||
|         cameraPos: { x: 16020, y: -2000, z: 10500 }, | ||||
|         cameraTarget: { x: -150, y: -4500, z: -80 }, | ||||
|         beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90,length=217.26,tag=$seg01) | ||||
|         beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90deg,length=217.26,tag=$seg01) | ||||
|       chamfer(length = 30,tags = [ | ||||
|       seg01, | ||||
|       getNextAdjacentEdge(yo), | ||||
| @ -330,8 +330,8 @@ test.describe('Point-and-click tests', () => { | ||||
|           'sketch002 = startSketchOn(extrude001, face = seg03)', | ||||
|         afterRectangle1stClickSnippet: | ||||
|           'startProfile(sketch002, at = [205.96, 254.59])', | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.39,tag=$rectangleSegmentA002) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA002)-90deg,length=105.26) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) | ||||
|         |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) | ||||
|         |>close()`, | ||||
| @ -341,7 +341,7 @@ test.describe('Point-and-click tests', () => { | ||||
|         clickCoords: { x: 690, y: 250 }, | ||||
|         cameraPos: { x: 16020, y: -2000, z: 10500 }, | ||||
|         cameraTarget: { x: -150, y: -4500, z: -80 }, | ||||
|         beforeChamferSnippet: `angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01)chamfer( | ||||
|         beforeChamferSnippet: `angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01)chamfer( | ||||
|          length = 30, | ||||
|          tags = [ | ||||
|            seg01, | ||||
| @ -354,8 +354,8 @@ test.describe('Point-and-click tests', () => { | ||||
|           'sketch003 = startSketchOn(extrude001, face = seg04)', | ||||
|         afterRectangle1stClickSnippet: | ||||
|           'startProfile(sketch003, at = [-209.64, 255.28])', | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.56,tag=$rectangleSegmentA003) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA003)-90,length=106.84) | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.56,tag=$rectangleSegmentA003) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA003)-90deg,length=106.84) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA003),length=-segLen(rectangleSegmentA003)) | ||||
|         |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) | ||||
|         |>close()`, | ||||
| @ -365,7 +365,7 @@ test.describe('Point-and-click tests', () => { | ||||
|         clickCoords: { x: 677, y: 87 }, | ||||
|         cameraPos: { x: -6200, y: 1500, z: 6200 }, | ||||
|         cameraTarget: { x: 8300, y: 1100, z: 4800 }, | ||||
|         beforeChamferSnippet: `angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001)chamfer( | ||||
|         beforeChamferSnippet: `angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001)chamfer( | ||||
|          length = 30, | ||||
|          tags = [ | ||||
|            getNextAdjacentEdge(yo), | ||||
| @ -376,8 +376,8 @@ test.describe('Point-and-click tests', () => { | ||||
|           'sketch004 = startSketchOn(extrude001, face = seg05)', | ||||
|         afterRectangle1stClickSnippet: | ||||
|           'startProfile(sketch004, at = [82.57, 322.96])', | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.16,tag=$rectangleSegmentA004) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA004)-90,length=103.07) | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.16,tag=$rectangleSegmentA004) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA004)-90deg,length=103.07) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA004),length=-segLen(rectangleSegmentA004)) | ||||
|         |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) | ||||
|         |>close()`, | ||||
| @ -394,8 +394,8 @@ test.describe('Point-and-click tests', () => { | ||||
|           'sketch005 = startSketchOn(extrude001, face = seg06)', | ||||
|         afterRectangle1stClickSnippet: | ||||
|           'startProfile(sketch005, at = [-23.43, 19.69])', | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0,length=9.1,tag=$rectangleSegmentA005) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA005)-90,length=84.07) | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=9.1,tag=$rectangleSegmentA005) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA005)-90deg,length=84.07) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA005),length=-segLen(rectangleSegmentA005)) | ||||
|         |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) | ||||
|         |>close()`, | ||||
| @ -407,8 +407,8 @@ test.describe('Point-and-click tests', () => { | ||||
|  | ||||
| sketch001 = startSketchOn(XZ) | ||||
|   |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] | ||||
|   |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) | ||||
|   |> close() | ||||
| @ -419,29 +419,29 @@ extrude001 = extrude(sketch001, length = 100) | ||||
|   |> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)], tag = $seg06) | ||||
| sketch002 = startSketchOn(extrude001, face = seg03) | ||||
| profile001 = startProfile(sketch002, at = [205.96, 254.59]) | ||||
|   |> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) | ||||
|   |> angledLine(angle = 0deg, length = 11.39, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 105.26) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| sketch003 = startSketchOn(extrude001, face = seg04) | ||||
| profile002 = startProfile(sketch003, at = [-209.64, 255.28]) | ||||
|   |> angledLine(angle = 0, length = 11.56, tag = $rectangleSegmentA003) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 106.84) | ||||
|   |> angledLine(angle = 0deg, length = 11.56, tag = $rectangleSegmentA003) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA003) - 90deg, length = 106.84) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| sketch004 = startSketchOn(extrude001, face = seg05) | ||||
| profile003 = startProfile(sketch004, at = [82.57, 322.96]) | ||||
|   |> angledLine(angle = 0, length = 11.16, tag = $rectangleSegmentA004) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA004) - 90, length = 103.07) | ||||
|   |> angledLine(angle = 0deg, length = 11.16, tag = $rectangleSegmentA004) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA004) - 90deg, length = 103.07) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| sketch005 = startSketchOn(extrude001, face = seg06) | ||||
| profile004 = startProfile(sketch005, at = [-23.43, 19.69]) | ||||
|   |> angledLine(angle = 0, length = 9.1, tag = $rectangleSegmentA005) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA005) - 90, length = 84.07) | ||||
|   |> angledLine(angle = 0deg, length = 9.1, tag = $rectangleSegmentA005) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA005) - 90deg, length = 84.07) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA005), length = -segLen(rectangleSegmentA005)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -482,7 +482,7 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69]) | ||||
|         clickCoords: { x: 570, y: 220 }, | ||||
|         cameraPos: { x: 16020, y: -2000, z: 10500 }, | ||||
|         cameraTarget: { x: -150, y: -4500, z: -80 }, | ||||
|         beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90,length=217.26,tag=$seg01) | ||||
|         beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90deg,length=217.26,tag=$seg01) | ||||
|       chamfer(extrude001,length=30,tags=[ | ||||
|       seg01, | ||||
|       getNextAdjacentEdge(yo), | ||||
| @ -494,8 +494,8 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69]) | ||||
|           'sketch002 = startSketchOn(extrude001, face = seg03)', | ||||
|         afterRectangle1stClickSnippet: | ||||
|           'startProfile(sketch002, at = [205.96, 254.59])', | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) | ||||
|         afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.39,tag=$rectangleSegmentA002) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA002)-90deg,length=105.26) | ||||
|         |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) | ||||
|         |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) | ||||
|         |>close()`, | ||||
| @ -504,8 +504,8 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69]) | ||||
|         `@settings(defaultLengthUnit = in) | ||||
| sketch001 = startSketchOn(XZ) | ||||
|   |> startProfile(at = [75.8, 317.2]) | ||||
|   |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) | ||||
|   |> close() | ||||
| @ -526,8 +526,8 @@ chamf = chamfer( | ||||
|      ) | ||||
| sketch002 = startSketchOn(extrude001, face = seg03) | ||||
| profile001 = startProfile(sketch002, at = [205.96, 254.59]) | ||||
|   |> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) | ||||
|   |> angledLine(angle = 0deg, length = 11.39, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 105.26) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -1153,7 +1153,7 @@ openSketch = startSketchOn(XY) | ||||
|   }) => { | ||||
|     // One dumb hardcoded screen pixel value | ||||
|     const testPoint = { x: 620, y: 257 } | ||||
|     const expectedOutput = `helix001 = helix(  axis = X,  radius = 5,  length = 5,  revolutions = 1,  angleStart = 270,  ccw = false,)` | ||||
|     const expectedOutput = `helix001 = helix(  axis = X,  radius = 5,  length = 5,  revolutions = 1,  angleStart = 270deg,  ccw = false,)` | ||||
|     const expectedLine = `axis=X,` | ||||
|  | ||||
|     await homePage.goToModelingScene() | ||||
| @ -1183,7 +1183,7 @@ openSketch = startSketchOn(XY) | ||||
|         stage: 'arguments', | ||||
|         currentArgKey: 'angleStart', | ||||
|         highlightedHeaderArg: 'angleStart', | ||||
|         currentArgValue: '360', | ||||
|         currentArgValue: '360deg', | ||||
|         headerArguments: { | ||||
|           Mode: 'Axis', | ||||
|           Axis: 'X', | ||||
| @ -1195,7 +1195,7 @@ openSketch = startSketchOn(XY) | ||||
|         }, | ||||
|         commandName: 'Helix', | ||||
|       }) | ||||
|       await cmdBar.currentArgumentInput.locator('.cm-content').fill('270') | ||||
|       await cmdBar.currentArgumentInput.locator('.cm-content').fill('270deg') | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.progressCmdBar() | ||||
| @ -1471,9 +1471,9 @@ extrude001 = extrude(profile001, length = 100) | ||||
|     // One dumb hardcoded screen pixel value | ||||
|     const testPoint = { x: 620, y: 257 } | ||||
|     const [clickOnWall] = scene.makeMouseHelpers(testPoint.x, testPoint.y) | ||||
|     const expectedOutput = `helix001 = helix(  cylinder = extrude001,  revolutions = 1,  angleStart = 360,  ccw = false,)` | ||||
|     const expectedOutput = `helix001 = helix(  cylinder = extrude001,  revolutions = 1,  angleStart = 360deg,  ccw = false,)` | ||||
|     const expectedLine = `cylinder = extrude001,` | ||||
|     const expectedEditedOutput = `helix001 = helix(  cylinder = extrude001,  revolutions = 1,  angleStart = 360,  ccw = true,)` | ||||
|     const expectedEditedOutput = `helix001 = helix(  cylinder = extrude001,  revolutions = 1,  angleStart = 360deg,  ccw = true,)` | ||||
|  | ||||
|     await test.step(`Go through the command bar flow`, async () => { | ||||
|       await toolbar.helixButton.click() | ||||
| @ -1776,8 +1776,8 @@ profile002 = startProfile(sketch002, at = [0, 0]) | ||||
|       initialCode: `@settings(defaultLengthUnit = in) | ||||
| sketch001 = startSketchOn(YZ) | ||||
| profile001 = startProfile(sketch001, at = [-400, -400]) | ||||
|   |> angledLine(angle = 0, length = 800, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 800) | ||||
|   |> angledLine(angle = 0deg, length = 800, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = 800) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -1950,7 +1950,7 @@ profile002 = startProfile(sketch002, at = [0, 0]) | ||||
|   radius = 1, | ||||
|   length = 10, | ||||
|   revolutions = 10, | ||||
|   angleStart = 0, | ||||
|   angleStart = 0deg, | ||||
|   ccw = false, | ||||
| ) | ||||
| sketch001 = startSketchOn(XZ) | ||||
| @ -3660,8 +3660,8 @@ profile001 = startProfile(sketch001, at = [-20, 20]) | ||||
|       const initialCode = ` | ||||
| sketch001 = startSketchOn(XZ) | ||||
| |> startProfile(at = [-100.0, 100.0]) | ||||
| |> angledLine(angle = 0, length = 200.0, tag = $rectangleSegmentA001) | ||||
| |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 200, tag = $rectangleSegmentB001) | ||||
| |> angledLine(angle = 0deg, length = 200.0, tag = $rectangleSegmentA001) | ||||
| |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 200, tag = $rectangleSegmentB001) | ||||
| |> angledLine( | ||||
| angle=segAng(rectangleSegmentA001), | ||||
| length=-segLen(rectangleSegmentA001), | ||||
| @ -3672,9 +3672,9 @@ tag=$rectangleSegmentC001, | ||||
| extrude001 = extrude(sketch001, length = 200) | ||||
| sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) | ||||
| |> startProfile(at = [-66.77, 84.81]) | ||||
| |> angledLine(angle = 180, length = 27.08, tag = $rectangleSegmentA002) | ||||
| |> angledLine(angle = 180deg, length = 27.08, tag = $rectangleSegmentA002) | ||||
| |> angledLine( | ||||
| angle=segAng(rectangleSegmentA002) - 90, | ||||
| angle=segAng(rectangleSegmentA002) - 90deg, | ||||
| length=27.8, | ||||
| tag=$rectangleSegmentB002, | ||||
| ) | ||||
| @ -3706,11 +3706,10 @@ tag=$rectangleSegmentC002, | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.progressCmdBar() | ||||
|  | ||||
|       const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = X)` | ||||
|       const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360deg, axis = X)` | ||||
|       expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() | ||||
|  | ||||
|       // Edit flow | ||||
|       const newAngle = '90' | ||||
|       await toolbar.openPane('feature-tree') | ||||
|       const operationButton = await toolbar.getFeatureTreeOperation( | ||||
|         'Revolve', | ||||
| @ -3720,26 +3719,26 @@ tag=$rectangleSegmentC002, | ||||
|       await cmdBar.expectState({ | ||||
|         commandName: 'Revolve', | ||||
|         currentArgKey: 'angle', | ||||
|         currentArgValue: '360', | ||||
|         currentArgValue: '360deg', | ||||
|         headerArguments: { | ||||
|           Angle: '360', | ||||
|         }, | ||||
|         highlightedHeaderArg: 'angle', | ||||
|         stage: 'arguments', | ||||
|       }) | ||||
|       await page.keyboard.insertText(newAngle) | ||||
|       await page.keyboard.insertText('90deg') | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.expectState({ | ||||
|         stage: 'review', | ||||
|         headerArguments: { | ||||
|           Angle: newAngle, | ||||
|           Angle: '90', | ||||
|         }, | ||||
|         commandName: 'Revolve', | ||||
|       }) | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await toolbar.closePane('feature-tree') | ||||
|       await editor.expectEditor.toContain( | ||||
|         newCodeToFind.replace('angle = 360', 'angle = ' + newAngle) | ||||
|         newCodeToFind.replace('angle = 360deg', 'angle = 90deg') | ||||
|       ) | ||||
|     }) | ||||
|     test('revolve surface around edge from an extruded solid2d', async ({ | ||||
| @ -3753,8 +3752,8 @@ tag=$rectangleSegmentC002, | ||||
|     }) => { | ||||
|       const initialCode = `sketch001 = startSketchOn(XZ) | ||||
|   |> startProfile(at = [-102.57, 101.72]) | ||||
|   |> angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 202.6, tag = $rectangleSegmentB001) | ||||
|   |> angledLine(angle = 0deg, length = 202.6, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 202.6, tag = $rectangleSegmentB001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -3779,17 +3778,17 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) | ||||
|       await toolbar.revolveButton.click() | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await page.getByText('Edge', { exact: true }).click() | ||||
|       const lineCodeToSelection = `angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001)` | ||||
|       const lineCodeToSelection = `angledLine(angle = 0deg, length = 202.6, tag = $rectangleSegmentA001)` | ||||
|       await page.getByText(lineCodeToSelection).click() | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.progressCmdBar() | ||||
|  | ||||
|       const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = rectangleSegmentA001)` | ||||
|       const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360deg, axis = rectangleSegmentA001)` | ||||
|       await editor.expectEditor.toContain(newCodeToFind) | ||||
|  | ||||
|       // Edit flow | ||||
|       const newAngle = '180' | ||||
|       const newAngle = '180deg' | ||||
|       await toolbar.openPane('feature-tree') | ||||
|       const operationButton = await toolbar.getFeatureTreeOperation( | ||||
|         'Revolve', | ||||
| @ -3799,9 +3798,9 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) | ||||
|       await cmdBar.expectState({ | ||||
|         commandName: 'Revolve', | ||||
|         currentArgKey: 'angle', | ||||
|         currentArgValue: '360', | ||||
|         currentArgValue: '360deg', | ||||
|         headerArguments: { | ||||
|           Angle: '360', | ||||
|           Angle: '360deg', | ||||
|         }, | ||||
|         highlightedHeaderArg: 'angle', | ||||
|         stage: 'arguments', | ||||
| @ -3823,7 +3822,7 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) | ||||
|       await toolbar.closePane('feature-tree') | ||||
|       await editor.expectEditor.toContain('angle001 = ' + newAngle) | ||||
|       await editor.expectEditor.toContain( | ||||
|         newCodeToFind.replace('angle = 360', 'angle = angle001') | ||||
|         newCodeToFind.replace('angle = 360deg', 'angle = angle001') | ||||
|       ) | ||||
|       expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() | ||||
|     }) | ||||
| @ -3842,8 +3841,8 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) | ||||
|       |> xLine(length = 2.6) | ||||
|     sketch001 = startSketchOn(-XY) | ||||
|       |> startProfile(at = [-0.48, 1.25]) | ||||
|       |> angledLine(angle = 0, length = 2.38, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.4, tag = $rectangleSegmentB001) | ||||
|       |> angledLine(angle = 0deg, length = 2.38, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 2.4, tag = $rectangleSegmentB001) | ||||
|       |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) | ||||
|       |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|       |> close() | ||||
| @ -3880,11 +3879,10 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.progressCmdBar() | ||||
|  | ||||
|       const newCodeToFind = `revolve001 = revolve(sketch003, angle = 360, axis = seg01)` | ||||
|       const newCodeToFind = `revolve001 = revolve(sketch003, angle = 360deg, axis = seg01)` | ||||
|       expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() | ||||
|  | ||||
|       // Edit flow | ||||
|       const newAngle = '270' | ||||
|       await toolbar.openPane('feature-tree') | ||||
|       const operationButton = await toolbar.getFeatureTreeOperation( | ||||
|         'Revolve', | ||||
| @ -3894,26 +3892,26 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) | ||||
|       await cmdBar.expectState({ | ||||
|         commandName: 'Revolve', | ||||
|         currentArgKey: 'angle', | ||||
|         currentArgValue: '360', | ||||
|         currentArgValue: '360deg', | ||||
|         headerArguments: { | ||||
|           Angle: '360', | ||||
|         }, | ||||
|         highlightedHeaderArg: 'angle', | ||||
|         stage: 'arguments', | ||||
|       }) | ||||
|       await page.keyboard.insertText(newAngle) | ||||
|       await page.keyboard.insertText('270deg') | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.expectState({ | ||||
|         stage: 'review', | ||||
|         headerArguments: { | ||||
|           Angle: newAngle, | ||||
|           Angle: '270', | ||||
|         }, | ||||
|         commandName: 'Revolve', | ||||
|       }) | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await toolbar.closePane('feature-tree') | ||||
|       await editor.expectEditor.toContain( | ||||
|         newCodeToFind.replace('angle = 360', 'angle = ' + newAngle) | ||||
|         newCodeToFind.replace('angle = 360deg', 'angle = 270deg') | ||||
|       ) | ||||
|     }) | ||||
|   }) | ||||
| @ -4856,7 +4854,7 @@ path001 = startProfile(sketch001, at = [0, 0]) | ||||
|       await cmdBar.expectState({ | ||||
|         stage: 'arguments', | ||||
|         currentArgKey: 'angle', | ||||
|         currentArgValue: '360', | ||||
|         currentArgValue: '360deg', | ||||
|         headerArguments: { | ||||
|           Profiles: '2 profiles', | ||||
|           AxisOrEdge: 'Edge', | ||||
| @ -4866,7 +4864,7 @@ path001 = startProfile(sketch001, at = [0, 0]) | ||||
|         highlightedHeaderArg: 'angle', | ||||
|         commandName: 'Revolve', | ||||
|       }) | ||||
|       await page.keyboard.insertText('180') | ||||
|       await page.keyboard.insertText('180deg') | ||||
|       await cmdBar.progressCmdBar() | ||||
|       await cmdBar.expectState({ | ||||
|         stage: 'review', | ||||
| @ -4885,7 +4883,7 @@ path001 = startProfile(sketch001, at = [0, 0]) | ||||
|         shouldNormalise: true, | ||||
|       }) | ||||
|       await editor.expectEditor.toContain( | ||||
|         `revolve001 = revolve([profile001, profile002], angle=180, axis=seg01)`, | ||||
|         `revolve001 = revolve([profile001, profile002], angle=180deg, axis=seg01)`, | ||||
|         { shouldNormalise: true } | ||||
|       ) | ||||
|     }) | ||||
| @ -4897,7 +4895,7 @@ path001 = startProfile(sketch001, at = [0, 0]) | ||||
|       await page.getByTestId('context-menu-delete').click() | ||||
|       await scene.settled(cmdBar) | ||||
|       await editor.expectEditor.not.toContain( | ||||
|         `revolve001 = revolve([profile001, profile002], axis = XY, angle = 180)`, | ||||
|         `revolve001 = revolve([profile001, profile002], axis = XY, angle = 180deg)`, | ||||
|         { shouldNormalise: true } | ||||
|       ) | ||||
|     }) | ||||
|  | ||||
| @ -2100,8 +2100,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) | ||||
|       ) | ||||
|       await crnRect1point2() | ||||
|       await editor.expectEditor.toContain( | ||||
|         `|> angledLine(angle = 0, length = 2.37, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 7.8) | ||||
|         `|> angledLine(angle = 0deg, length = 2.37, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 7.8) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close()`.replaceAll('\n', '') | ||||
| @ -2115,8 +2115,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) | ||||
|       await crnRect2point2() | ||||
|       await page.waitForTimeout(300) | ||||
|       await editor.expectEditor.toContain( | ||||
|         `|> angledLine(angle = 0, length = 5.49, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.14) | ||||
|         `|> angledLine(angle = 0deg, length = 5.49, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 4.14) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close()`.replaceAll('\n', '') | ||||
| @ -2134,8 +2134,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) | ||||
|       await cntrRect1point2() | ||||
|       await page.waitForTimeout(300) | ||||
|       await editor.expectEditor.toContain( | ||||
|         `|> angledLine(angle = 0, length = 7.06, tag = $rectangleSegmentA003) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA003) + 90, length = 4.34) | ||||
|         `|> angledLine(angle = 0deg, length = 7.06, tag = $rectangleSegmentA003) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA003) + 90deg, length = 4.34) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close()`.replaceAll('\n', '') | ||||
| @ -2150,8 +2150,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) | ||||
|       await cntrRect2point2() | ||||
|       await page.waitForTimeout(300) | ||||
|       await editor.expectEditor.toContain( | ||||
|         `|> angledLine(angle = 0, length = 3.12, tag = $rectangleSegmentA004) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA004) + 90, length = 6.24) | ||||
|         `|> angledLine(angle = 0deg, length = 3.12, tag = $rectangleSegmentA004) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA004) + 90deg, length = 6.24) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close()`.replaceAll('\n', '') | ||||
| @ -2300,8 +2300,8 @@ profile001 = startProfile(sketch001, at = [6.24, 4.54]) | ||||
|   |> line(end = [8.61, 0.74]) | ||||
|   |> line(end = [10.99, -5.22]) | ||||
| profile002 = startProfile(sketch001, at = [11.19, 5.02]) | ||||
|   |> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) | ||||
|   |> angledLine(angle = 0deg, length = 10.78, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 4.14) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -2373,7 +2373,7 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07] | ||||
|       await page.mouse.up() | ||||
|       await page.waitForTimeout(200) | ||||
|       await editor.expectEditor.toContain( | ||||
|         `angledLine(angle = -7, length = 10.27, tag = $rectangleSegmentA001)` | ||||
|         `angledLine(angle = -7deg, length = 10.27, tag = $rectangleSegmentA001)` | ||||
|       ) | ||||
|     }) | ||||
|  | ||||
| @ -2415,8 +2415,8 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07] | ||||
|       await page.waitForTimeout(100) | ||||
|       await rectEnd() | ||||
|       await editor.expectEditor.toContain( | ||||
|         `|> angledLine(angle = 180, length = 1.97, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = 3.89) | ||||
|         `|> angledLine(angle = 180deg, length = 1.97, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) + 90deg, length = 3.89) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close()`.replaceAll('\n', '') | ||||
| @ -2441,8 +2441,8 @@ profile001 = startProfile(sketch001, at = [6.24, 4.54]) | ||||
|   |> line(end = [8.61, 0.74]) | ||||
|   |> line(end = [10.99, -5.22]) | ||||
| profile002 = startProfile(sketch001, at = [11.19, 5.02]) | ||||
|   |> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) | ||||
|   |> angledLine(angle = 0deg, length = 10.78, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 4.14) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -2771,8 +2771,8 @@ profile002 = startProfile(sketch002, at = [0.75, 13.46]) | ||||
|   |> line(end = [4.52, 3.79]) | ||||
|   |> line(end = [5.98, -2.81]) | ||||
| profile003 = startProfile(sketch002, at = [3.19, 13.3]) | ||||
|   |> angledLine(angle = 0, length = 6.64, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.81) | ||||
|   |> angledLine(angle = 0deg, length = 6.64, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 2.81) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -2789,7 +2789,7 @@ profile006 = startProfile(sketch002, at = [9.65, 3.82]) | ||||
|   |> close() | ||||
| revolve001 = revolve( | ||||
|   profile004, | ||||
|   angle = 45, | ||||
|   angle = 45deg, | ||||
|   axis = getNextAdjacentEdge(seg01) | ||||
| ) | ||||
| extrude002 = extrude(profile006, length = 4) | ||||
| @ -2813,8 +2813,8 @@ profile010 = circle( | ||||
|   radius = 2.67 | ||||
| ) | ||||
| profile011 = startProfile(sketch003, at = [5.07, -6.39]) | ||||
|   |> angledLine(angle = 0, length = 4.54, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.17) | ||||
|   |> angledLine(angle = 0deg, length = 4.54, tag = $rectangleSegmentA002) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 4.17) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| @ -2966,7 +2966,7 @@ loft([profile001, profile002]) | ||||
|     ) | ||||
|     await rect1Crn2() | ||||
|     await editor.expectEditor.toContain( | ||||
|       `angledLine(angle = 0, length = 113.01, tag = $rectangleSegmentA001)` | ||||
|       `angledLine(angle = 0deg, length = 113.01, tag = $rectangleSegmentA001)` | ||||
|     ) | ||||
|   }) | ||||
|   test('Can enter sketch loft edges offsetPlane and continue sketch', async ({ | ||||
| @ -3035,7 +3035,7 @@ loft([profile001, profile002]) | ||||
|     ) | ||||
|     await rect1Crn2() | ||||
|     await editor.expectEditor.toContain( | ||||
|       `angledLine(angle = 0, length = 106.42], tag = $rectangleSegmentA001)` | ||||
|       `angledLine(angle = 0deg, length = 106.42], tag = $rectangleSegmentA001)` | ||||
|     ) | ||||
|     await page.waitForTimeout(100) | ||||
|   }) | ||||
| @ -3257,8 +3257,8 @@ test.describe('manual edits during sketch mode', () => { | ||||
|     extrude001 = extrude(profile001, length = 500) | ||||
|     sketch002 = startSketchOn(extrude001, face = seg01) | ||||
|     profile002 = startProfile(sketch002, at = [83.39, 329.15]) | ||||
|       |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(length = 156.54, angle = -28) | ||||
|       |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(length = 156.54, angle = -28deg) | ||||
|       |> angledLine( | ||||
|           angle = -151, | ||||
|           length = 116.27, | ||||
| @ -3296,7 +3296,9 @@ test.describe('manual edits during sketch mode', () => { | ||||
|       await expect | ||||
|         .poll( | ||||
|           async () => { | ||||
|             await editor.expectEditor.toContain('length = 156.54, angle = -28') | ||||
|             await editor.expectEditor.toContain( | ||||
|               'length = 156.54, angle = -28deg' | ||||
|             ) | ||||
|             await page.mouse.move(handle1Location.x, handle1Location.y) | ||||
|             await page.mouse.down() | ||||
|             await page.mouse.move( | ||||
| @ -3307,7 +3309,9 @@ test.describe('manual edits during sketch mode', () => { | ||||
|               } | ||||
|             ) | ||||
|             await page.mouse.up() | ||||
|             await editor.expectEditor.toContain('length = 231.59, angle = -34') | ||||
|             await editor.expectEditor.toContain( | ||||
|               'length = 231.59, angle = -34deg' | ||||
|             ) | ||||
|             return true | ||||
|           }, | ||||
|           { timeout: 10_000 } | ||||
| @ -3325,7 +3329,7 @@ test.describe('manual edits during sketch mode', () => { | ||||
|  | ||||
|     const handle2Location = { x: 872, y: 273 } | ||||
|     await test.step('Edit sketch again', async () => { | ||||
|       await editor.expectEditor.toContain('length = 231.59, angle = -34') | ||||
|       await editor.expectEditor.toContain('length = 231.59, angle = -34deg') | ||||
|       await page.waitForTimeout(500) | ||||
|       await expect | ||||
|         .poll( | ||||
| @ -3336,7 +3340,9 @@ test.describe('manual edits during sketch mode', () => { | ||||
|               steps: 5, | ||||
|             }) | ||||
|             await page.mouse.up() | ||||
|             await editor.expectEditor.toContain('length = 167.36, angle = -14') | ||||
|             await editor.expectEditor.toContain( | ||||
|               'length = 167.36, angle = -14deg' | ||||
|             ) | ||||
|             return true | ||||
|           }, | ||||
|           { timeout: 10_000 } | ||||
| @ -3361,14 +3367,18 @@ test.describe('manual edits during sketch mode', () => { | ||||
|       await expect | ||||
|         .poll( | ||||
|           async () => { | ||||
|             await editor.expectEditor.toContain('length = 167.36, angle = -14') | ||||
|             await editor.expectEditor.toContain( | ||||
|               'length = 167.36, angle = -14deg' | ||||
|             ) | ||||
|             await page.mouse.move(handle3Location.x, handle3Location.y) | ||||
|             await page.mouse.down() | ||||
|             await page.mouse.move(handle3Location.x, handle3Location.y + 110, { | ||||
|               steps: 5, | ||||
|             }) | ||||
|             await page.mouse.up() | ||||
|             await editor.expectEditor.toContain('length = 219.2, angle = -56') | ||||
|             await editor.expectEditor.toContain( | ||||
|               'length = 219.2, angle = -56deg' | ||||
|             ) | ||||
|             return true | ||||
|           }, | ||||
|           { timeout: 10_000 } | ||||
| @ -3393,9 +3403,9 @@ profile001 = startProfile(sketch001, at = [106.68, 89.77]) | ||||
| extrude001 = extrude(profile001, length = 500) | ||||
| sketch002 = startSketchOn(extrude001, face = seg01) | ||||
| profile002 = startProfile(sketch002, at = [83.39, 329.15]) | ||||
|   |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(length = 219.2, angle = -56) | ||||
|   |> angledLine(angle = -151, length = 116.27) | ||||
|   |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(length = 219.2, angle = -56deg) | ||||
|   |> angledLine(angle = -151deg, length = 116.27) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|   |> close() | ||||
| profile003 = startProfile(sketch002, at = [-201.08, 254.17]) | ||||
| @ -3432,10 +3442,10 @@ profile003 = startProfile(sketch002, at = [-201.08, 254.17]) | ||||
|     extrude001 = extrude(profile001, length = 500) | ||||
|     sketch002 = startSketchOn(extrude001, face = seg01) | ||||
|     profile002 = startProfile(sketch002, at = [83.39, 329.15]) | ||||
|       |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(length = 156.54, angle = -28) | ||||
|       |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(length = 156.54, angle = -28deg) | ||||
|       |> angledLine( | ||||
|            angle = -151, | ||||
|            angle = -151deg, | ||||
|            length = 116.27, | ||||
|          ) | ||||
|       |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
| @ -3496,10 +3506,10 @@ profile003 = startProfile(sketch002, at = [-201.08, 254.17]) | ||||
|     extrude001 = extrude(profile001, length = 500) | ||||
|     sketch002 = startSketchOn(extrude001, face = seg01) | ||||
|     profile002 = startProfile(sketch002, at = [83.39, 329.15]) | ||||
|       |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(length = 156.54, angle = -28) | ||||
|       |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) | ||||
|       |> angledLine(length = 156.54, angle = -28deg) | ||||
|       |> angledLine( | ||||
|            angle = -151, | ||||
|            angle = -151deg, | ||||
|            length = 116.27, | ||||
|          ) | ||||
|       |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||
|  | ||||
| @ -845,14 +845,14 @@ test.describe('code color goober', { tag: '@snapshot' }, () => { | ||||
| sweepPath = startSketchOn(XZ) | ||||
|   |> startProfile(at = [0.05, 0.05]) | ||||
|   |> line(end = [0, 7]) | ||||
|   |> tangentialArc(angle = 90, radius = 5) | ||||
|   |> tangentialArc(angle = 90deg, radius = 5) | ||||
|   |> line(end = [-3, 0]) | ||||
|   |> tangentialArc(angle = -90, radius = 5) | ||||
|   |> tangentialArc(angle = -90deg, radius = 5) | ||||
|   |> line(end = [0, 7]) | ||||
|  | ||||
| sweepSketch = startSketchOn(XY) | ||||
|   |> startProfile(at = [2, 0]) | ||||
|   |> arc(angleStart = 0, angleEnd = 360, radius = 2) | ||||
|   |> arc(angleStart = 0, angleEnd = 360deg, radius = 2) | ||||
|   |> sweep(path = sweepPath) | ||||
|   |> appearance( | ||||
|        color = "#bb00ff", | ||||
| @ -889,14 +889,14 @@ sweepSketch = startSketchOn(XY) | ||||
| sweepPath = startSketchOn(XZ) | ||||
|   |> startProfile(at = [0.05, 0.05]) | ||||
|   |> line(end = [0, 7]) | ||||
|   |> tangentialArc(angle = 90, radius = 5) | ||||
|   |> tangentialArc(angle = 90deg, radius = 5) | ||||
|   |> line(end = [-3, 0]) | ||||
|   |> tangentialArc(angle = -90, radius = 5) | ||||
|   |> tangentialArc(angle = -90deg, radius = 5) | ||||
|   |> line(end = [0, 7]) | ||||
|  | ||||
| sweepSketch = startSketchOn(XY) | ||||
|   |> startProfile(at = [2, 0]) | ||||
|   |> arc(angleStart = 0, angleEnd = 360, radius = 2) | ||||
|   |> arc(angleStart = 0deg, angleEnd = 360deg, radius = 2) | ||||
|   |> sweep(path = sweepPath) | ||||
|   |> appearance( | ||||
|        color = '#bb00ff', | ||||
| @ -934,14 +934,14 @@ sweepSketch = startSketchOn(XY) | ||||
| sweepPath = startSketchOn(XZ) | ||||
|   |> startProfile(at = [0.05, 0.05]) | ||||
|   |> line(end = [0, 7]) | ||||
|   |> tangentialArc(angle = 90, radius = 5) | ||||
|   |> tangentialArc(angle = 90deg, radius = 5) | ||||
|   |> line(end = [-3, 0]) | ||||
|   |> tangentialArc(angle = -90, radius = 5) | ||||
|   |> tangentialArc(angle = -90deg, radius = 5) | ||||
|   |> line(end = [0, 7]) | ||||
|  | ||||
| sweepSketch = startSketchOn(XY) | ||||
|   |> startProfile(at = [2, 0]) | ||||
|   |> arc(angleStart = 0, angleEnd = 360, radius = 2) | ||||
|   |> arc(angleStart = 0deg, angleEnd = 360deg, radius = 2) | ||||
|   |> sweep(path = sweepPath) | ||||
|   |> appearance( | ||||
|        color = "#bb00ff", | ||||
|  | ||||
| @ -57,7 +57,7 @@ test.describe('Testing constraints', () => { | ||||
|       .click() | ||||
|  | ||||
|     await expect(page.locator('.cm-content')).toHaveText( | ||||
|       `length001 = 20sketch001 = startSketchOn(XY)  |> startProfile(at = [-10, -10])  |> line(end = [20, 0])  |> angledLine(angle = 90, length = length001)  |> xLine(length = -20)` | ||||
|       `length001 = 20sketch001 = startSketchOn(XY)  |> startProfile(at = [-10, -10])  |> line(end = [20, 0])  |> angledLine(angle = 90deg, length = length001)  |> xLine(length = -20)` | ||||
|     ) | ||||
|  | ||||
|     // Make sure we didn't pop out of sketch mode. | ||||
| @ -208,7 +208,9 @@ test.describe('Testing constraints', () => { | ||||
|           .click() | ||||
|  | ||||
|         // Wait for the codemod to take effect | ||||
|         await expect(page.locator('.cm-content')).toContainText(`angle = -57,`) | ||||
|         await expect(page.locator('.cm-content')).toContainText( | ||||
|           `angle = -57deg,` | ||||
|         ) | ||||
|         await expect(page.locator('.cm-content')).toContainText( | ||||
|           `offset = ${offset},` | ||||
|         ) | ||||
| @ -219,7 +221,7 @@ test.describe('Testing constraints', () => { | ||||
|           `|> line(end = [74.36, 130.4], tag = $seg01)` | ||||
|         ) | ||||
|         await expect(activeLinesContent[1]).toHaveText( | ||||
|           `  |> angledLineThatIntersects(angle = -57, offset = ${offset}, intersectTag = seg01)` | ||||
|           `  |> angledLineThatIntersects(angle = -57deg, offset = ${offset}, intersectTag = seg01)` | ||||
|         ) | ||||
|  | ||||
|         // checking the count of the overlays is a good proxy check that the client sketch scene is in a good state | ||||
| @ -470,7 +472,7 @@ test.describe('Testing constraints', () => { | ||||
|         testName: 'No variable', | ||||
|         addVariable: false, | ||||
|         axisSelect: false, | ||||
|         value: 'segAng(seg01) + 22.69', | ||||
|         value: 'segAng(seg01) + 22.69deg', | ||||
|       }, | ||||
|       { | ||||
|         testName: 'Add variable, selecting axis', | ||||
| @ -482,7 +484,7 @@ test.describe('Testing constraints', () => { | ||||
|         testName: 'No variable, selecting axis', | ||||
|         addVariable: false, | ||||
|         axisSelect: true, | ||||
|         value: 'turns::QUARTER_TURN - 7', | ||||
|         value: 'turns::QUARTER_TURN - 7deg', | ||||
|       }, | ||||
|     ] as const | ||||
|     for (const { testName, addVariable, value, axisSelect } of cases) { | ||||
| @ -585,7 +587,7 @@ test.describe('Testing constraints', () => { | ||||
|         testName: 'Angle - No variable', | ||||
|         addVariable: false, | ||||
|         constraint: 'angle', | ||||
|         value: '83, 78.33', | ||||
|         value: '83deg, 78.33', | ||||
|       }, | ||||
|     ] as const | ||||
|     for (const { testName, addVariable, value, constraint } of cases) { | ||||
| @ -657,13 +659,13 @@ test.describe('Testing constraints', () => { | ||||
|         testName: 'Length - Add variable', | ||||
|         addVariable: true, | ||||
|         constraint: 'length', | ||||
|         value: '83, length001', | ||||
|         value: '83deg, length001', | ||||
|       }, | ||||
|       { | ||||
|         testName: 'Length - No variable', | ||||
|         addVariable: false, | ||||
|         constraint: 'length', | ||||
|         value: '83, 78.33', | ||||
|         value: '83deg, 78.33', | ||||
|       }, | ||||
|     ] as const | ||||
|     for (const { testName, addVariable, value, constraint } of cases) { | ||||
| @ -852,7 +854,7 @@ part002 = startSketchOn(XZ) | ||||
|   test.describe('Two segment - no modal constraints', () => { | ||||
|     const cases = [ | ||||
|       { | ||||
|         codeAfter: `|> angledLine(angle = 83, length = segLen(seg01))`, | ||||
|         codeAfter: `|> angledLine(angle = 83deg, length = segLen(seg01))`, | ||||
|         constraintName: 'Equal Length', | ||||
|       }, | ||||
|       { | ||||
| @ -1174,7 +1176,7 @@ test.describe('Electron constraint tests', () => { | ||||
|         await cmdBar.progressCmdBar() | ||||
|         await editor.expectEditor.toContain('length001 = 15.3') | ||||
|         await editor.expectEditor.toContain( | ||||
|           '|> angledLine(angle = 9, length = length001)' | ||||
|           '|> angledLine(angle = 9deg, length = length001)' | ||||
|         ) | ||||
|       }) | ||||
|  | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| @settings(defaultLengthUnit = in) | ||||
| sketch001 = startSketchOn(XZ) | ||||
|   |> startProfile(at = [75.8, 317.2]) | ||||
|   |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) | ||||
|   |> close() | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| @settings(defaultLengthUnit = in) | ||||
| sketch001 = startSketchOn(XZ) | ||||
|   |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] | ||||
|   |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) | ||||
|   |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) | ||||
|   |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) | ||||
|   |> close() | ||||
|  | ||||
| @ -12,7 +12,7 @@ use crate::{ | ||||
| }; | ||||
|  | ||||
| /// Annotations which should cause re-execution if they change. | ||||
| pub(super) const SIGNIFICANT_ATTRS: [&str; 2] = [SETTINGS, NO_PRELUDE]; | ||||
| pub(super) const SIGNIFICANT_ATTRS: [&str; 3] = [SETTINGS, NO_PRELUDE, WARNINGS]; | ||||
|  | ||||
| pub(crate) const SETTINGS: &str = "settings"; | ||||
| pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit"; | ||||
| @ -162,7 +162,7 @@ pub(super) fn many_of( | ||||
|                         vec![source_range], | ||||
|                     )) | ||||
|                 }) | ||||
|                 .map(|v| *v) | ||||
|                 .copied() | ||||
|         }) | ||||
|         .collect::<Result<Vec<&str>, KclError>>() | ||||
| } | ||||
|  | ||||
| @ -1780,6 +1780,7 @@ impl Node<PipeExpression> { | ||||
| #[cfg(test)] | ||||
| mod test { | ||||
|     use std::sync::Arc; | ||||
|  | ||||
|     use tokio::io::AsyncWriteExt; | ||||
|  | ||||
|     use super::*; | ||||
|  | ||||
| @ -604,8 +604,9 @@ impl ExecutorContext { | ||||
|                     settings: &self.settings, | ||||
|                 }; | ||||
|  | ||||
|                 let cache_result = cache::get_changed_program(old, new).await; | ||||
|                 // Get the program that actually changed from the old and new information. | ||||
|                 let (clear_scene, program, import_check_info) = match cache::get_changed_program(old, new).await { | ||||
|                 let (clear_scene, program, import_check_info) = match cache_result { | ||||
|                     CacheResult::ReExecute { | ||||
|                         clear_scene, | ||||
|                         reapply_settings, | ||||
|  | ||||
| @ -760,7 +760,7 @@ impl NumericType { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     fn coerce(&self, val: &KclValue) -> Result<KclValue, CoercionError> { | ||||
|     fn coerce(&self, val: &KclValue, exec_state: &mut ExecState) -> Result<KclValue, CoercionError> { | ||||
|         let KclValue::Number { value, ty, meta } = val else { | ||||
|             return Err(val.into()); | ||||
|         }; | ||||
| @ -832,6 +832,14 @@ impl NumericType { | ||||
|             } | ||||
|  | ||||
|             (Default { angle: a1, .. }, Known(UnitType::Angle(a2))) => { | ||||
|                 let mut source_ranges = Into::<Vec<SourceRange>>::into(val); | ||||
|                 // A single source range means it's not via a function or something. | ||||
|                 if source_ranges.len() == 1 { | ||||
|                     exec_state.warn( | ||||
|                         CompilationError::err(source_ranges.pop().unwrap(), "Prefer to use explicit units for angles"), | ||||
|                         annotations::WARN_ANGLE_UNITS, | ||||
|                     ); | ||||
|                 } | ||||
|                 let (value, ty) = a1.adjust_to(*value, *a2); | ||||
|                 Ok(KclValue::Number { | ||||
|                     value, | ||||
| @ -1156,7 +1164,7 @@ impl KclValue { | ||||
|             PrimitiveType::Any => Ok(self.clone()), | ||||
|             PrimitiveType::Number(ty) => { | ||||
|                 if convert_units { | ||||
|                     return ty.coerce(self); | ||||
|                     return ty.coerce(self, exec_state); | ||||
|                 } | ||||
|  | ||||
|                 // Instead of converting units, reinterpret the number as having | ||||
| @ -1172,10 +1180,10 @@ impl KclValue { | ||||
|                             value: *n, | ||||
|                             meta: meta.clone(), | ||||
|                         }; | ||||
|                         return ty.coerce(&value); | ||||
|                         return ty.coerce(&value, exec_state); | ||||
|                     } | ||||
|                 } | ||||
|                 ty.coerce(self) | ||||
|                 ty.coerce(self, exec_state) | ||||
|             } | ||||
|             PrimitiveType::String => match self { | ||||
|                 KclValue::String { .. } => Ok(self.clone()), | ||||
|  | ||||
| @ -105,7 +105,12 @@ async fn inner_extrude( | ||||
|             (Some(angle), angle_step, center) => { | ||||
|                 let center = center.clone().map(point_to_mm).map(Point2d::from).unwrap_or_default(); | ||||
|                 let total_rotation_angle = Angle::from_degrees(angle.to_degrees(exec_state, args.source_range)); | ||||
|                 let angle_step_size = Angle::from_degrees(angle_step.clone().map(|a| a.to_degrees(exec_state, args.source_range)).unwrap_or(15.0)); | ||||
|                 let angle_step_size = Angle::from_degrees( | ||||
|                     angle_step | ||||
|                         .clone() | ||||
|                         .map(|a| a.to_degrees(exec_state, args.source_range)) | ||||
|                         .unwrap_or(15.0), | ||||
|                 ); | ||||
|                 ModelingCmd::from(mcmd::TwistExtrude { | ||||
|                     target: sketch.id.into(), | ||||
|                     distance: LengthUnit(length.to_mm()), | ||||
|  | ||||
| @ -31,7 +31,6 @@ import { | ||||
|   createCallExpressionStdLibKw, | ||||
|   createLabeledArg, | ||||
|   createLiteral, | ||||
|   createLiteralMaybeSuffix, | ||||
|   createLocalName, | ||||
|   createPipeExpression, | ||||
|   createTagDeclarator, | ||||
| @ -4227,13 +4226,8 @@ const tangentialArcHelpers = { | ||||
|             callExpression, | ||||
|             createLiteral(roundOff(radius, 2)) | ||||
|           ) | ||||
|           const angleValue = createLiteralMaybeSuffix({ | ||||
|             value: roundOff(angle, 2), | ||||
|             suffix: 'Deg', | ||||
|           }) | ||||
|           if (!err(angleValue)) { | ||||
|             mutateKwArg(ARG_ANGLE, callExpression, angleValue) | ||||
|           } | ||||
|           const angleValue = createLiteral(roundOff(angle, 2), 'Deg') | ||||
|           mutateKwArg(ARG_ANGLE, callExpression, angleValue) | ||||
|         } else { | ||||
|           console.debug('Invalid center calculated for tangential arc') | ||||
|         } | ||||
|  | ||||
| @ -376,45 +376,53 @@ p3 = [342.51, 216.38], | ||||
|       namedConstantConstraint: [ | ||||
|         { | ||||
|           name: 'should constrain angledLine, angle value', | ||||
|           ...makeStraightSegmentSnippet('angledLine(angle = 45, length = 100)'), | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45deg, length = 100)' | ||||
|           ), | ||||
|           constraintIndex: 0, | ||||
|           expectedResult: 'angledLine(angle = test_variable, length = 100)', | ||||
|         }, | ||||
|         { | ||||
|           name: 'should constrain angledLine, length value', | ||||
|           ...makeStraightSegmentSnippet('angledLine(angle = 45, length = 100)'), | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45deg, length = 100)' | ||||
|           ), | ||||
|           constraintIndex: 1, | ||||
|           expectedResult: 'angledLine(angle = 45, length = test_variable)', | ||||
|           expectedResult: 'angledLine(angle = 45deg, length = test_variable)', | ||||
|         }, | ||||
|         { | ||||
|           name: 'should constrain angledLine, endAbsoluteY value', | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45, endAbsoluteY = 5)' | ||||
|             'angledLine(angle = 45deg, endAbsoluteY = 5)' | ||||
|           ), | ||||
|           constraintIndex: 1, | ||||
|           expectedResult: | ||||
|             'angledLine(angle = 45, endAbsoluteY = test_variable)', | ||||
|             'angledLine(angle = 45deg, endAbsoluteY = test_variable)', | ||||
|         }, | ||||
|         { | ||||
|           name: 'should constrain angledLine, endAbsoluteX value', | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45, endAbsoluteX = 5)' | ||||
|             'angledLine(angle = 45deg, endAbsoluteX = 5)' | ||||
|           ), | ||||
|           constraintIndex: 1, | ||||
|           expectedResult: | ||||
|             'angledLine(angle = 45, endAbsoluteX = test_variable)', | ||||
|             'angledLine(angle = 45deg, endAbsoluteX = test_variable)', | ||||
|         }, | ||||
|         { | ||||
|           name: 'should constrain angledLine, lengthY value', | ||||
|           ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthY = 5)'), | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45deg, lengthY = 5)' | ||||
|           ), | ||||
|           constraintIndex: 1, | ||||
|           expectedResult: 'angledLine(angle = 45, lengthY = test_variable)', | ||||
|           expectedResult: 'angledLine(angle = 45deg, lengthY = test_variable)', | ||||
|         }, | ||||
|         { | ||||
|           name: 'should constrain angledLine, lengthX value', | ||||
|           ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthX = 5)'), | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45deg, lengthX = 5)' | ||||
|           ), | ||||
|           constraintIndex: 1, | ||||
|           expectedResult: 'angledLine(angle = 45, lengthX = test_variable)', | ||||
|           expectedResult: 'angledLine(angle = 45deg, lengthX = test_variable)', | ||||
|         }, | ||||
|       ], | ||||
|       removeAllConstraintsCases: [ | ||||
| @ -466,7 +474,7 @@ p3 = [342.51, 216.38], | ||||
|             'angledLine(angle = testVar1, length = testVar2)' | ||||
|           ), | ||||
|           constraintIndex: 0, | ||||
|           expectedResult: 'angledLine(angle = 55, length = testVar2)', | ||||
|           expectedResult: 'angledLine(angle = 55deg, length = testVar2)', | ||||
|         }, | ||||
|         { | ||||
|           name: 'should un-constrain angledLine, length value', | ||||
| @ -512,27 +520,33 @@ p3 = [342.51, 216.38], | ||||
|       deleteSegment: [ | ||||
|         { | ||||
|           name: 'should delete angledLine, angle length', | ||||
|           ...makeStraightSegmentSnippet('angledLine(angle = 45, length = 100)'), | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45deg, length = 100)' | ||||
|           ), | ||||
|         }, | ||||
|         { | ||||
|           name: 'should delete angledLine, endAbsoluteY', | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45, endAbsoluteY = 5)' | ||||
|             'angledLine(angle = 45deg, endAbsoluteY = 5)' | ||||
|           ), | ||||
|         }, | ||||
|         { | ||||
|           name: 'should delete angledLine, endAbsoluteX', | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45, endAbsoluteX = 5)' | ||||
|             'angledLine(angle = 45deg, endAbsoluteX = 5)' | ||||
|           ), | ||||
|         }, | ||||
|         { | ||||
|           name: 'should delete angledLine, lengthY', | ||||
|           ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthY = 5)'), | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45deg, lengthY = 5)' | ||||
|           ), | ||||
|         }, | ||||
|         { | ||||
|           name: 'should delete angledLine, lengthX', | ||||
|           ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthX = 5)'), | ||||
|           ...makeStraightSegmentSnippet( | ||||
|             'angledLine(angle = 45deg, lengthX = 5)' | ||||
|           ), | ||||
|         }, | ||||
|       ], | ||||
|     }, | ||||
|  | ||||
		Reference in New Issue
	
	Block a user