Compare commits

...

7 Commits

Author SHA1 Message Date
14e3311050 Update snapshots 2025-06-19 01:52:08 +00:00
d4c5cef78a More warnings
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-06-19 13:32:02 +12:00
4b4960ac2c autocomplete
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-06-19 11:12:21 +12:00
8c36105113 Generate angle suffixes in the frontend
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-06-19 11:12:20 +12:00
77e5d6e3a5 Update samples
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-06-19 11:12:20 +12:00
bfaec5c04e Warn on inferred angle units
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-06-19 11:12:20 +12:00
8395869b2e Allow or deny warnings
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-06-19 11:12:20 +12:00
189 changed files with 6233 additions and 6488 deletions

View File

@ -912,7 +912,7 @@ a1 = startSketchOn(offsetPlane(XY, offset = 10))
|> close() |> close()
|> revolve( |> revolve(
axis = revolveAxis, axis = revolveAxis,
angle = 90 angle = 90deg
) )
` `
) )

View File

@ -317,7 +317,7 @@ test.describe('Point-and-click tests', () => {
clickCoords: { x: 570, y: 220 }, clickCoords: { x: 570, y: 220 },
cameraPos: { x: 16020, y: -2000, z: 10500 }, cameraPos: { x: 16020, y: -2000, z: 10500 },
cameraTarget: { x: -150, y: -4500, z: -80 }, 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 = [ chamfer(length = 30,tags = [
seg01, seg01,
getNextAdjacentEdge(yo), getNextAdjacentEdge(yo),
@ -330,8 +330,8 @@ test.describe('Point-and-click tests', () => {
'sketch002 = startSketchOn(extrude001, face = seg03)', 'sketch002 = startSketchOn(extrude001, face = seg03)',
afterRectangle1stClickSnippet: afterRectangle1stClickSnippet:
'startProfile(sketch002, at = [205.96, 254.59])', 'startProfile(sketch002, at = [205.96, 254.59])',
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.39,tag=$rectangleSegmentA002)
|>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) |>angledLine(angle=segAng(rectangleSegmentA002)-90deg,length=105.26)
|>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002))
|>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|>close()`, |>close()`,
@ -341,7 +341,7 @@ test.describe('Point-and-click tests', () => {
clickCoords: { x: 690, y: 250 }, clickCoords: { x: 690, y: 250 },
cameraPos: { x: 16020, y: -2000, z: 10500 }, cameraPos: { x: 16020, y: -2000, z: 10500 },
cameraTarget: { x: -150, y: -4500, z: -80 }, 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, length = 30,
tags = [ tags = [
seg01, seg01,
@ -354,8 +354,8 @@ test.describe('Point-and-click tests', () => {
'sketch003 = startSketchOn(extrude001, face = seg04)', 'sketch003 = startSketchOn(extrude001, face = seg04)',
afterRectangle1stClickSnippet: afterRectangle1stClickSnippet:
'startProfile(sketch003, at = [-209.64, 255.28])', 'startProfile(sketch003, at = [-209.64, 255.28])',
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.56,tag=$rectangleSegmentA003) afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.56,tag=$rectangleSegmentA003)
|>angledLine(angle=segAng(rectangleSegmentA003)-90,length=106.84) |>angledLine(angle=segAng(rectangleSegmentA003)-90deg,length=106.84)
|>angledLine(angle=segAng(rectangleSegmentA003),length=-segLen(rectangleSegmentA003)) |>angledLine(angle=segAng(rectangleSegmentA003),length=-segLen(rectangleSegmentA003))
|>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|>close()`, |>close()`,
@ -365,7 +365,7 @@ test.describe('Point-and-click tests', () => {
clickCoords: { x: 677, y: 87 }, clickCoords: { x: 677, y: 87 },
cameraPos: { x: -6200, y: 1500, z: 6200 }, cameraPos: { x: -6200, y: 1500, z: 6200 },
cameraTarget: { x: 8300, y: 1100, z: 4800 }, 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, length = 30,
tags = [ tags = [
getNextAdjacentEdge(yo), getNextAdjacentEdge(yo),
@ -376,8 +376,8 @@ test.describe('Point-and-click tests', () => {
'sketch004 = startSketchOn(extrude001, face = seg05)', 'sketch004 = startSketchOn(extrude001, face = seg05)',
afterRectangle1stClickSnippet: afterRectangle1stClickSnippet:
'startProfile(sketch004, at = [82.57, 322.96])', 'startProfile(sketch004, at = [82.57, 322.96])',
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.16,tag=$rectangleSegmentA004) afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.16,tag=$rectangleSegmentA004)
|>angledLine(angle=segAng(rectangleSegmentA004)-90,length=103.07) |>angledLine(angle=segAng(rectangleSegmentA004)-90deg,length=103.07)
|>angledLine(angle=segAng(rectangleSegmentA004),length=-segLen(rectangleSegmentA004)) |>angledLine(angle=segAng(rectangleSegmentA004),length=-segLen(rectangleSegmentA004))
|>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|>close()`, |>close()`,
@ -394,8 +394,8 @@ test.describe('Point-and-click tests', () => {
'sketch005 = startSketchOn(extrude001, face = seg06)', 'sketch005 = startSketchOn(extrude001, face = seg06)',
afterRectangle1stClickSnippet: afterRectangle1stClickSnippet:
'startProfile(sketch005, at = [-23.43, 19.69])', 'startProfile(sketch005, at = [-23.43, 19.69])',
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=9.1,tag=$rectangleSegmentA005) afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=9.1,tag=$rectangleSegmentA005)
|>angledLine(angle=segAng(rectangleSegmentA005)-90,length=84.07) |>angledLine(angle=segAng(rectangleSegmentA005)-90deg,length=84.07)
|>angledLine(angle=segAng(rectangleSegmentA005),length=-segLen(rectangleSegmentA005)) |>angledLine(angle=segAng(rectangleSegmentA005),length=-segLen(rectangleSegmentA005))
|>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|>close()`, |>close()`,
@ -407,8 +407,8 @@ test.describe('Point-and-click tests', () => {
sketch001 = startSketchOn(XZ) sketch001 = startSketchOn(XZ)
|> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag]
|> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|> close() |> close()
@ -419,29 +419,29 @@ extrude001 = extrude(sketch001, length = 100)
|> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)], tag = $seg06) |> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)], tag = $seg06)
sketch002 = startSketchOn(extrude001, face = seg03) sketch002 = startSketchOn(extrude001, face = seg03)
profile001 = startProfile(sketch002, at = [205.96, 254.59]) profile001 = startProfile(sketch002, at = [205.96, 254.59])
|> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) |> angledLine(angle = 0deg, length = 11.39, tag = $rectangleSegmentA002)
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 105.26)
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
sketch003 = startSketchOn(extrude001, face = seg04) sketch003 = startSketchOn(extrude001, face = seg04)
profile002 = startProfile(sketch003, at = [-209.64, 255.28]) profile002 = startProfile(sketch003, at = [-209.64, 255.28])
|> angledLine(angle = 0, length = 11.56, tag = $rectangleSegmentA003) |> angledLine(angle = 0deg, length = 11.56, tag = $rectangleSegmentA003)
|> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 106.84) |> angledLine(angle = segAng(rectangleSegmentA003) - 90deg, length = 106.84)
|> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
sketch004 = startSketchOn(extrude001, face = seg05) sketch004 = startSketchOn(extrude001, face = seg05)
profile003 = startProfile(sketch004, at = [82.57, 322.96]) profile003 = startProfile(sketch004, at = [82.57, 322.96])
|> angledLine(angle = 0, length = 11.16, tag = $rectangleSegmentA004) |> angledLine(angle = 0deg, length = 11.16, tag = $rectangleSegmentA004)
|> angledLine(angle = segAng(rectangleSegmentA004) - 90, length = 103.07) |> angledLine(angle = segAng(rectangleSegmentA004) - 90deg, length = 103.07)
|> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
sketch005 = startSketchOn(extrude001, face = seg06) sketch005 = startSketchOn(extrude001, face = seg06)
profile004 = startProfile(sketch005, at = [-23.43, 19.69]) profile004 = startProfile(sketch005, at = [-23.43, 19.69])
|> angledLine(angle = 0, length = 9.1, tag = $rectangleSegmentA005) |> angledLine(angle = 0deg, length = 9.1, tag = $rectangleSegmentA005)
|> angledLine(angle = segAng(rectangleSegmentA005) - 90, length = 84.07) |> angledLine(angle = segAng(rectangleSegmentA005) - 90deg, length = 84.07)
|> angledLine(angle = segAng(rectangleSegmentA005), length = -segLen(rectangleSegmentA005)) |> angledLine(angle = segAng(rectangleSegmentA005), length = -segLen(rectangleSegmentA005))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -482,7 +482,7 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69])
clickCoords: { x: 570, y: 220 }, clickCoords: { x: 570, y: 220 },
cameraPos: { x: 16020, y: -2000, z: 10500 }, cameraPos: { x: 16020, y: -2000, z: 10500 },
cameraTarget: { x: -150, y: -4500, z: -80 }, 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=[ chamfer(extrude001,length=30,tags=[
seg01, seg01,
getNextAdjacentEdge(yo), getNextAdjacentEdge(yo),
@ -494,8 +494,8 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69])
'sketch002 = startSketchOn(extrude001, face = seg03)', 'sketch002 = startSketchOn(extrude001, face = seg03)',
afterRectangle1stClickSnippet: afterRectangle1stClickSnippet:
'startProfile(sketch002, at = [205.96, 254.59])', 'startProfile(sketch002, at = [205.96, 254.59])',
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.39,tag=$rectangleSegmentA002)
|>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) |>angledLine(angle=segAng(rectangleSegmentA002)-90deg,length=105.26)
|>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002))
|>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|>close()`, |>close()`,
@ -504,8 +504,8 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69])
`@settings(defaultLengthUnit = in) `@settings(defaultLengthUnit = in)
sketch001 = startSketchOn(XZ) sketch001 = startSketchOn(XZ)
|> startProfile(at = [75.8, 317.2]) |> startProfile(at = [75.8, 317.2])
|> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|> close() |> close()
@ -526,8 +526,8 @@ chamf = chamfer(
) )
sketch002 = startSketchOn(extrude001, face = seg03) sketch002 = startSketchOn(extrude001, face = seg03)
profile001 = startProfile(sketch002, at = [205.96, 254.59]) profile001 = startProfile(sketch002, at = [205.96, 254.59])
|> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) |> angledLine(angle = 0deg, length = 11.39, tag = $rectangleSegmentA002)
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 105.26)
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -1153,7 +1153,7 @@ openSketch = startSketchOn(XY)
}) => { }) => {
// One dumb hardcoded screen pixel value // One dumb hardcoded screen pixel value
const testPoint = { x: 620, y: 257 } 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,` const expectedLine = `axis=X,`
await homePage.goToModelingScene() await homePage.goToModelingScene()
@ -1183,7 +1183,7 @@ openSketch = startSketchOn(XY)
stage: 'arguments', stage: 'arguments',
currentArgKey: 'angleStart', currentArgKey: 'angleStart',
highlightedHeaderArg: 'angleStart', highlightedHeaderArg: 'angleStart',
currentArgValue: '360', currentArgValue: '360deg',
headerArguments: { headerArguments: {
Mode: 'Axis', Mode: 'Axis',
Axis: 'X', Axis: 'X',
@ -1195,7 +1195,7 @@ openSketch = startSketchOn(XY)
}, },
commandName: 'Helix', 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() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
@ -1471,9 +1471,9 @@ extrude001 = extrude(profile001, length = 100)
// One dumb hardcoded screen pixel value // One dumb hardcoded screen pixel value
const testPoint = { x: 620, y: 257 } const testPoint = { x: 620, y: 257 }
const [clickOnWall] = scene.makeMouseHelpers(testPoint.x, testPoint.y) 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 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 test.step(`Go through the command bar flow`, async () => {
await toolbar.helixButton.click() await toolbar.helixButton.click()
@ -1776,8 +1776,8 @@ profile002 = startProfile(sketch002, at = [0, 0])
initialCode: `@settings(defaultLengthUnit = in) initialCode: `@settings(defaultLengthUnit = in)
sketch001 = startSketchOn(YZ) sketch001 = startSketchOn(YZ)
profile001 = startProfile(sketch001, at = [-400, -400]) profile001 = startProfile(sketch001, at = [-400, -400])
|> angledLine(angle = 0, length = 800, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 800, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 800) |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = 800)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -1950,7 +1950,7 @@ profile002 = startProfile(sketch002, at = [0, 0])
radius = 1, radius = 1,
length = 10, length = 10,
revolutions = 10, revolutions = 10,
angleStart = 0, angleStart = 0deg,
ccw = false, ccw = false,
) )
sketch001 = startSketchOn(XZ) sketch001 = startSketchOn(XZ)
@ -3660,8 +3660,8 @@ profile001 = startProfile(sketch001, at = [-20, 20])
const initialCode = ` const initialCode = `
sketch001 = startSketchOn(XZ) sketch001 = startSketchOn(XZ)
|> startProfile(at = [-100.0, 100.0]) |> startProfile(at = [-100.0, 100.0])
|> angledLine(angle = 0, length = 200.0, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 200.0, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 200, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 200, tag = $rectangleSegmentB001)
|> angledLine( |> angledLine(
angle=segAng(rectangleSegmentA001), angle=segAng(rectangleSegmentA001),
length=-segLen(rectangleSegmentA001), length=-segLen(rectangleSegmentA001),
@ -3672,9 +3672,9 @@ tag=$rectangleSegmentC001,
extrude001 = extrude(sketch001, length = 200) extrude001 = extrude(sketch001, length = 200)
sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
|> startProfile(at = [-66.77, 84.81]) |> startProfile(at = [-66.77, 84.81])
|> angledLine(angle = 180, length = 27.08, tag = $rectangleSegmentA002) |> angledLine(angle = 180deg, length = 27.08, tag = $rectangleSegmentA002)
|> angledLine( |> angledLine(
angle=segAng(rectangleSegmentA002) - 90, angle=segAng(rectangleSegmentA002) - 90deg,
length=27.8, length=27.8,
tag=$rectangleSegmentB002, tag=$rectangleSegmentB002,
) )
@ -3706,11 +3706,10 @@ tag=$rectangleSegmentC002,
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = X)` const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360deg, axis = X)`
expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy()
// Edit flow // Edit flow
const newAngle = '90'
await toolbar.openPane('feature-tree') await toolbar.openPane('feature-tree')
const operationButton = await toolbar.getFeatureTreeOperation( const operationButton = await toolbar.getFeatureTreeOperation(
'Revolve', 'Revolve',
@ -3720,26 +3719,26 @@ tag=$rectangleSegmentC002,
await cmdBar.expectState({ await cmdBar.expectState({
commandName: 'Revolve', commandName: 'Revolve',
currentArgKey: 'angle', currentArgKey: 'angle',
currentArgValue: '360', currentArgValue: '360deg',
headerArguments: { headerArguments: {
Angle: '360', Angle: '360',
}, },
highlightedHeaderArg: 'angle', highlightedHeaderArg: 'angle',
stage: 'arguments', stage: 'arguments',
}) })
await page.keyboard.insertText(newAngle) await page.keyboard.insertText('90deg')
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'review', stage: 'review',
headerArguments: { headerArguments: {
Angle: newAngle, Angle: '90',
}, },
commandName: 'Revolve', commandName: 'Revolve',
}) })
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await toolbar.closePane('feature-tree') await toolbar.closePane('feature-tree')
await editor.expectEditor.toContain( 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 ({ test('revolve surface around edge from an extruded solid2d', async ({
@ -3753,8 +3752,8 @@ tag=$rectangleSegmentC002,
}) => { }) => {
const initialCode = `sketch001 = startSketchOn(XZ) const initialCode = `sketch001 = startSketchOn(XZ)
|> startProfile(at = [-102.57, 101.72]) |> startProfile(at = [-102.57, 101.72])
|> angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 202.6, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 202.6, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 202.6, tag = $rectangleSegmentB001)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -3779,17 +3778,17 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
await toolbar.revolveButton.click() await toolbar.revolveButton.click()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await page.getByText('Edge', { exact: true }).click() 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 page.getByText(lineCodeToSelection).click()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = rectangleSegmentA001)` const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360deg, axis = rectangleSegmentA001)`
await editor.expectEditor.toContain(newCodeToFind) await editor.expectEditor.toContain(newCodeToFind)
// Edit flow // Edit flow
const newAngle = '180' const newAngle = '180deg'
await toolbar.openPane('feature-tree') await toolbar.openPane('feature-tree')
const operationButton = await toolbar.getFeatureTreeOperation( const operationButton = await toolbar.getFeatureTreeOperation(
'Revolve', 'Revolve',
@ -3799,9 +3798,9 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
await cmdBar.expectState({ await cmdBar.expectState({
commandName: 'Revolve', commandName: 'Revolve',
currentArgKey: 'angle', currentArgKey: 'angle',
currentArgValue: '360', currentArgValue: '360deg',
headerArguments: { headerArguments: {
Angle: '360', Angle: '360deg',
}, },
highlightedHeaderArg: 'angle', highlightedHeaderArg: 'angle',
stage: 'arguments', stage: 'arguments',
@ -3823,7 +3822,7 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
await toolbar.closePane('feature-tree') await toolbar.closePane('feature-tree')
await editor.expectEditor.toContain('angle001 = ' + newAngle) await editor.expectEditor.toContain('angle001 = ' + newAngle)
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
newCodeToFind.replace('angle = 360', 'angle = angle001') newCodeToFind.replace('angle = 360deg', 'angle = angle001')
) )
expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy()
}) })
@ -3842,8 +3841,8 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
|> xLine(length = 2.6) |> xLine(length = 2.6)
sketch001 = startSketchOn(-XY) sketch001 = startSketchOn(-XY)
|> startProfile(at = [-0.48, 1.25]) |> startProfile(at = [-0.48, 1.25])
|> angledLine(angle = 0, length = 2.38, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 2.38, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.4, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 2.4, tag = $rectangleSegmentB001)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -3880,11 +3879,10 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
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() expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy()
// Edit flow // Edit flow
const newAngle = '270'
await toolbar.openPane('feature-tree') await toolbar.openPane('feature-tree')
const operationButton = await toolbar.getFeatureTreeOperation( const operationButton = await toolbar.getFeatureTreeOperation(
'Revolve', 'Revolve',
@ -3894,26 +3892,26 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
await cmdBar.expectState({ await cmdBar.expectState({
commandName: 'Revolve', commandName: 'Revolve',
currentArgKey: 'angle', currentArgKey: 'angle',
currentArgValue: '360', currentArgValue: '360deg',
headerArguments: { headerArguments: {
Angle: '360', Angle: '360',
}, },
highlightedHeaderArg: 'angle', highlightedHeaderArg: 'angle',
stage: 'arguments', stage: 'arguments',
}) })
await page.keyboard.insertText(newAngle) await page.keyboard.insertText('270deg')
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'review', stage: 'review',
headerArguments: { headerArguments: {
Angle: newAngle, Angle: '270',
}, },
commandName: 'Revolve', commandName: 'Revolve',
}) })
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await toolbar.closePane('feature-tree') await toolbar.closePane('feature-tree')
await editor.expectEditor.toContain( 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({ await cmdBar.expectState({
stage: 'arguments', stage: 'arguments',
currentArgKey: 'angle', currentArgKey: 'angle',
currentArgValue: '360', currentArgValue: '360deg',
headerArguments: { headerArguments: {
Profiles: '2 profiles', Profiles: '2 profiles',
AxisOrEdge: 'Edge', AxisOrEdge: 'Edge',
@ -4866,7 +4864,7 @@ path001 = startProfile(sketch001, at = [0, 0])
highlightedHeaderArg: 'angle', highlightedHeaderArg: 'angle',
commandName: 'Revolve', commandName: 'Revolve',
}) })
await page.keyboard.insertText('180') await page.keyboard.insertText('180deg')
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await cmdBar.expectState({ await cmdBar.expectState({
stage: 'review', stage: 'review',
@ -4885,7 +4883,7 @@ path001 = startProfile(sketch001, at = [0, 0])
shouldNormalise: true, shouldNormalise: true,
}) })
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
`revolve001 = revolve([profile001, profile002], angle=180, axis=seg01)`, `revolve001 = revolve([profile001, profile002], angle=180deg, axis=seg01)`,
{ shouldNormalise: true } { shouldNormalise: true }
) )
}) })
@ -4897,7 +4895,7 @@ path001 = startProfile(sketch001, at = [0, 0])
await page.getByTestId('context-menu-delete').click() await page.getByTestId('context-menu-delete').click()
await scene.settled(cmdBar) await scene.settled(cmdBar)
await editor.expectEditor.not.toContain( await editor.expectEditor.not.toContain(
`revolve001 = revolve([profile001, profile002], axis = XY, angle = 180)`, `revolve001 = revolve([profile001, profile002], axis = XY, angle = 180deg)`,
{ shouldNormalise: true } { shouldNormalise: true }
) )
}) })

View File

@ -2100,8 +2100,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73])
) )
await crnRect1point2() await crnRect1point2()
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
`|> angledLine(angle = 0, length = 2.37, tag = $rectangleSegmentA001) `|> angledLine(angle = 0deg, length = 2.37, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 7.8) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 7.8)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()`.replaceAll('\n', '') |> close()`.replaceAll('\n', '')
@ -2115,8 +2115,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73])
await crnRect2point2() await crnRect2point2()
await page.waitForTimeout(300) await page.waitForTimeout(300)
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
`|> angledLine(angle = 0, length = 5.49, tag = $rectangleSegmentA002) `|> angledLine(angle = 0deg, length = 5.49, tag = $rectangleSegmentA002)
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 4.14)
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()`.replaceAll('\n', '') |> close()`.replaceAll('\n', '')
@ -2134,8 +2134,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73])
await cntrRect1point2() await cntrRect1point2()
await page.waitForTimeout(300) await page.waitForTimeout(300)
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
`|> angledLine(angle = 0, length = 7.06, tag = $rectangleSegmentA003) `|> angledLine(angle = 0deg, length = 7.06, tag = $rectangleSegmentA003)
|> angledLine(angle = segAng(rectangleSegmentA003) + 90, length = 4.34) |> angledLine(angle = segAng(rectangleSegmentA003) + 90deg, length = 4.34)
|> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()`.replaceAll('\n', '') |> close()`.replaceAll('\n', '')
@ -2150,8 +2150,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73])
await cntrRect2point2() await cntrRect2point2()
await page.waitForTimeout(300) await page.waitForTimeout(300)
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
`|> angledLine(angle = 0, length = 3.12, tag = $rectangleSegmentA004) `|> angledLine(angle = 0deg, length = 3.12, tag = $rectangleSegmentA004)
|> angledLine(angle = segAng(rectangleSegmentA004) + 90, length = 6.24) |> angledLine(angle = segAng(rectangleSegmentA004) + 90deg, length = 6.24)
|> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()`.replaceAll('\n', '') |> close()`.replaceAll('\n', '')
@ -2300,8 +2300,8 @@ profile001 = startProfile(sketch001, at = [6.24, 4.54])
|> line(end = [8.61, 0.74]) |> line(end = [8.61, 0.74])
|> line(end = [10.99, -5.22]) |> line(end = [10.99, -5.22])
profile002 = startProfile(sketch001, at = [11.19, 5.02]) profile002 = startProfile(sketch001, at = [11.19, 5.02])
|> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 10.78, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 4.14)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -2373,7 +2373,7 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07]
await page.mouse.up() await page.mouse.up()
await page.waitForTimeout(200) await page.waitForTimeout(200)
await editor.expectEditor.toContain( 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 page.waitForTimeout(100)
await rectEnd() await rectEnd()
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
`|> angledLine(angle = 180, length = 1.97, tag = $rectangleSegmentA002) `|> angledLine(angle = 180deg, length = 1.97, tag = $rectangleSegmentA002)
|> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = 3.89) |> angledLine(angle = segAng(rectangleSegmentA002) + 90deg, length = 3.89)
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()`.replaceAll('\n', '') |> close()`.replaceAll('\n', '')
@ -2441,8 +2441,8 @@ profile001 = startProfile(sketch001, at = [6.24, 4.54])
|> line(end = [8.61, 0.74]) |> line(end = [8.61, 0.74])
|> line(end = [10.99, -5.22]) |> line(end = [10.99, -5.22])
profile002 = startProfile(sketch001, at = [11.19, 5.02]) profile002 = startProfile(sketch001, at = [11.19, 5.02])
|> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 10.78, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 4.14)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -2771,8 +2771,8 @@ profile002 = startProfile(sketch002, at = [0.75, 13.46])
|> line(end = [4.52, 3.79]) |> line(end = [4.52, 3.79])
|> line(end = [5.98, -2.81]) |> line(end = [5.98, -2.81])
profile003 = startProfile(sketch002, at = [3.19, 13.3]) profile003 = startProfile(sketch002, at = [3.19, 13.3])
|> angledLine(angle = 0, length = 6.64, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 6.64, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.81) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 2.81)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -2789,7 +2789,7 @@ profile006 = startProfile(sketch002, at = [9.65, 3.82])
|> close() |> close()
revolve001 = revolve( revolve001 = revolve(
profile004, profile004,
angle = 45, angle = 45deg,
axis = getNextAdjacentEdge(seg01) axis = getNextAdjacentEdge(seg01)
) )
extrude002 = extrude(profile006, length = 4) extrude002 = extrude(profile006, length = 4)
@ -2813,8 +2813,8 @@ profile010 = circle(
radius = 2.67 radius = 2.67
) )
profile011 = startProfile(sketch003, at = [5.07, -6.39]) profile011 = startProfile(sketch003, at = [5.07, -6.39])
|> angledLine(angle = 0, length = 4.54, tag = $rectangleSegmentA002) |> angledLine(angle = 0deg, length = 4.54, tag = $rectangleSegmentA002)
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.17) |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 4.17)
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -2966,7 +2966,7 @@ loft([profile001, profile002])
) )
await rect1Crn2() await rect1Crn2()
await editor.expectEditor.toContain( 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 ({ test('Can enter sketch loft edges offsetPlane and continue sketch', async ({
@ -3035,7 +3035,7 @@ loft([profile001, profile002])
) )
await rect1Crn2() await rect1Crn2()
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
`angledLine(angle = 0, length = 106.42], tag = $rectangleSegmentA001)` `angledLine(angle = 0deg, length = 106.42], tag = $rectangleSegmentA001)`
) )
await page.waitForTimeout(100) await page.waitForTimeout(100)
}) })
@ -3257,8 +3257,8 @@ test.describe('manual edits during sketch mode', () => {
extrude001 = extrude(profile001, length = 500) extrude001 = extrude(profile001, length = 500)
sketch002 = startSketchOn(extrude001, face = seg01) sketch002 = startSketchOn(extrude001, face = seg01)
profile002 = startProfile(sketch002, at = [83.39, 329.15]) profile002 = startProfile(sketch002, at = [83.39, 329.15])
|> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001)
|> angledLine(length = 156.54, angle = -28) |> angledLine(length = 156.54, angle = -28deg)
|> angledLine( |> angledLine(
angle = -151, angle = -151,
length = 116.27, length = 116.27,
@ -3296,7 +3296,9 @@ test.describe('manual edits during sketch mode', () => {
await expect await expect
.poll( .poll(
async () => { 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.move(handle1Location.x, handle1Location.y)
await page.mouse.down() await page.mouse.down()
await page.mouse.move( await page.mouse.move(
@ -3307,7 +3309,9 @@ test.describe('manual edits during sketch mode', () => {
} }
) )
await page.mouse.up() await page.mouse.up()
await editor.expectEditor.toContain('length = 231.59, angle = -34') await editor.expectEditor.toContain(
'length = 231.59, angle = -34deg'
)
return true return true
}, },
{ timeout: 10_000 } { timeout: 10_000 }
@ -3325,7 +3329,7 @@ test.describe('manual edits during sketch mode', () => {
const handle2Location = { x: 872, y: 273 } const handle2Location = { x: 872, y: 273 }
await test.step('Edit sketch again', async () => { 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 page.waitForTimeout(500)
await expect await expect
.poll( .poll(
@ -3336,7 +3340,9 @@ test.describe('manual edits during sketch mode', () => {
steps: 5, steps: 5,
}) })
await page.mouse.up() await page.mouse.up()
await editor.expectEditor.toContain('length = 167.36, angle = -14') await editor.expectEditor.toContain(
'length = 167.36, angle = -14deg'
)
return true return true
}, },
{ timeout: 10_000 } { timeout: 10_000 }
@ -3361,14 +3367,18 @@ test.describe('manual edits during sketch mode', () => {
await expect await expect
.poll( .poll(
async () => { 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.move(handle3Location.x, handle3Location.y)
await page.mouse.down() await page.mouse.down()
await page.mouse.move(handle3Location.x, handle3Location.y + 110, { await page.mouse.move(handle3Location.x, handle3Location.y + 110, {
steps: 5, steps: 5,
}) })
await page.mouse.up() await page.mouse.up()
await editor.expectEditor.toContain('length = 219.2, angle = -56') await editor.expectEditor.toContain(
'length = 219.2, angle = -56deg'
)
return true return true
}, },
{ timeout: 10_000 } { timeout: 10_000 }
@ -3393,9 +3403,9 @@ profile001 = startProfile(sketch001, at = [106.68, 89.77])
extrude001 = extrude(profile001, length = 500) extrude001 = extrude(profile001, length = 500)
sketch002 = startSketchOn(extrude001, face = seg01) sketch002 = startSketchOn(extrude001, face = seg01)
profile002 = startProfile(sketch002, at = [83.39, 329.15]) profile002 = startProfile(sketch002, at = [83.39, 329.15])
|> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001)
|> angledLine(length = 219.2, angle = -56) |> angledLine(length = 219.2, angle = -56deg)
|> angledLine(angle = -151, length = 116.27) |> angledLine(angle = -151deg, length = 116.27)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
profile003 = startProfile(sketch002, at = [-201.08, 254.17]) 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) extrude001 = extrude(profile001, length = 500)
sketch002 = startSketchOn(extrude001, face = seg01) sketch002 = startSketchOn(extrude001, face = seg01)
profile002 = startProfile(sketch002, at = [83.39, 329.15]) profile002 = startProfile(sketch002, at = [83.39, 329.15])
|> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001)
|> angledLine(length = 156.54, angle = -28) |> angledLine(length = 156.54, angle = -28deg)
|> angledLine( |> angledLine(
angle = -151, angle = -151deg,
length = 116.27, length = 116.27,
) )
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
@ -3496,10 +3506,10 @@ profile003 = startProfile(sketch002, at = [-201.08, 254.17])
extrude001 = extrude(profile001, length = 500) extrude001 = extrude(profile001, length = 500)
sketch002 = startSketchOn(extrude001, face = seg01) sketch002 = startSketchOn(extrude001, face = seg01)
profile002 = startProfile(sketch002, at = [83.39, 329.15]) profile002 = startProfile(sketch002, at = [83.39, 329.15])
|> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001)
|> angledLine(length = 156.54, angle = -28) |> angledLine(length = 156.54, angle = -28deg)
|> angledLine( |> angledLine(
angle = -151, angle = -151deg,
length = 116.27, length = 116.27,
) )
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])

View File

@ -845,14 +845,14 @@ test.describe('code color goober', { tag: '@snapshot' }, () => {
sweepPath = startSketchOn(XZ) sweepPath = startSketchOn(XZ)
|> startProfile(at = [0.05, 0.05]) |> startProfile(at = [0.05, 0.05])
|> line(end = [0, 7]) |> line(end = [0, 7])
|> tangentialArc(angle = 90, radius = 5) |> tangentialArc(angle = 90deg, radius = 5)
|> line(end = [-3, 0]) |> line(end = [-3, 0])
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> line(end = [0, 7]) |> line(end = [0, 7])
sweepSketch = startSketchOn(XY) sweepSketch = startSketchOn(XY)
|> startProfile(at = [2, 0]) |> startProfile(at = [2, 0])
|> arc(angleStart = 0, angleEnd = 360, radius = 2) |> arc(angleStart = 0, angleEnd = 360deg, radius = 2)
|> sweep(path = sweepPath) |> sweep(path = sweepPath)
|> appearance( |> appearance(
color = "#bb00ff", color = "#bb00ff",
@ -889,14 +889,14 @@ sweepSketch = startSketchOn(XY)
sweepPath = startSketchOn(XZ) sweepPath = startSketchOn(XZ)
|> startProfile(at = [0.05, 0.05]) |> startProfile(at = [0.05, 0.05])
|> line(end = [0, 7]) |> line(end = [0, 7])
|> tangentialArc(angle = 90, radius = 5) |> tangentialArc(angle = 90deg, radius = 5)
|> line(end = [-3, 0]) |> line(end = [-3, 0])
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> line(end = [0, 7]) |> line(end = [0, 7])
sweepSketch = startSketchOn(XY) sweepSketch = startSketchOn(XY)
|> startProfile(at = [2, 0]) |> startProfile(at = [2, 0])
|> arc(angleStart = 0, angleEnd = 360, radius = 2) |> arc(angleStart = 0deg, angleEnd = 360deg, radius = 2)
|> sweep(path = sweepPath) |> sweep(path = sweepPath)
|> appearance( |> appearance(
color = '#bb00ff', color = '#bb00ff',
@ -934,14 +934,14 @@ sweepSketch = startSketchOn(XY)
sweepPath = startSketchOn(XZ) sweepPath = startSketchOn(XZ)
|> startProfile(at = [0.05, 0.05]) |> startProfile(at = [0.05, 0.05])
|> line(end = [0, 7]) |> line(end = [0, 7])
|> tangentialArc(angle = 90, radius = 5) |> tangentialArc(angle = 90deg, radius = 5)
|> line(end = [-3, 0]) |> line(end = [-3, 0])
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> line(end = [0, 7]) |> line(end = [0, 7])
sweepSketch = startSketchOn(XY) sweepSketch = startSketchOn(XY)
|> startProfile(at = [2, 0]) |> startProfile(at = [2, 0])
|> arc(angleStart = 0, angleEnd = 360, radius = 2) |> arc(angleStart = 0deg, angleEnd = 360deg, radius = 2)
|> sweep(path = sweepPath) |> sweep(path = sweepPath)
|> appearance( |> appearance(
color = "#bb00ff", color = "#bb00ff",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

@ -57,7 +57,7 @@ test.describe('Testing constraints', () => {
.click() .click()
await expect(page.locator('.cm-content')).toHaveText( 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. // Make sure we didn't pop out of sketch mode.
@ -208,7 +208,9 @@ test.describe('Testing constraints', () => {
.click() .click()
// Wait for the codemod to take effect // 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( await expect(page.locator('.cm-content')).toContainText(
`offset = ${offset},` `offset = ${offset},`
) )
@ -219,7 +221,7 @@ test.describe('Testing constraints', () => {
`|> line(end = [74.36, 130.4], tag = $seg01)` `|> line(end = [74.36, 130.4], tag = $seg01)`
) )
await expect(activeLinesContent[1]).toHaveText( 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 // 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', testName: 'No variable',
addVariable: false, addVariable: false,
axisSelect: false, axisSelect: false,
value: 'segAng(seg01) + 22.69', value: 'segAng(seg01) + 22.69deg',
}, },
{ {
testName: 'Add variable, selecting axis', testName: 'Add variable, selecting axis',
@ -482,7 +484,7 @@ test.describe('Testing constraints', () => {
testName: 'No variable, selecting axis', testName: 'No variable, selecting axis',
addVariable: false, addVariable: false,
axisSelect: true, axisSelect: true,
value: 'turns::QUARTER_TURN - 7', value: 'turns::QUARTER_TURN - 7deg',
}, },
] as const ] as const
for (const { testName, addVariable, value, axisSelect } of cases) { for (const { testName, addVariable, value, axisSelect } of cases) {
@ -585,7 +587,7 @@ test.describe('Testing constraints', () => {
testName: 'Angle - No variable', testName: 'Angle - No variable',
addVariable: false, addVariable: false,
constraint: 'angle', constraint: 'angle',
value: '83, 78.33', value: '83deg, 78.33',
}, },
] as const ] as const
for (const { testName, addVariable, value, constraint } of cases) { for (const { testName, addVariable, value, constraint } of cases) {
@ -657,13 +659,13 @@ test.describe('Testing constraints', () => {
testName: 'Length - Add variable', testName: 'Length - Add variable',
addVariable: true, addVariable: true,
constraint: 'length', constraint: 'length',
value: '83, length001', value: '83deg, length001',
}, },
{ {
testName: 'Length - No variable', testName: 'Length - No variable',
addVariable: false, addVariable: false,
constraint: 'length', constraint: 'length',
value: '83, 78.33', value: '83deg, 78.33',
}, },
] as const ] as const
for (const { testName, addVariable, value, constraint } of cases) { for (const { testName, addVariable, value, constraint } of cases) {
@ -852,7 +854,7 @@ part002 = startSketchOn(XZ)
test.describe('Two segment - no modal constraints', () => { test.describe('Two segment - no modal constraints', () => {
const cases = [ const cases = [
{ {
codeAfter: `|> angledLine(angle = 83, length = segLen(seg01))`, codeAfter: `|> angledLine(angle = 83deg, length = segLen(seg01))`,
constraintName: 'Equal Length', constraintName: 'Equal Length',
}, },
{ {
@ -1174,7 +1176,7 @@ test.describe('Electron constraint tests', () => {
await cmdBar.progressCmdBar() await cmdBar.progressCmdBar()
await editor.expectEditor.toContain('length001 = 15.3') await editor.expectEditor.toContain('length001 = 15.3')
await editor.expectEditor.toContain( await editor.expectEditor.toContain(
'|> angledLine(angle = 9, length = length001)' '|> angledLine(angle = 9deg, length = length001)'
) )
}) })

1
package-lock.json generated
View File

@ -2495,6 +2495,7 @@
}, },
"node_modules/@clack/prompts/node_modules/is-unicode-supported": { "node_modules/@clack/prompts/node_modules/is-unicode-supported": {
"version": "1.3.0", "version": "1.3.0",
"extraneous": true,
"inBundle": true, "inBundle": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {

View File

@ -27,7 +27,7 @@ insideWall = extrude(insideWallSketch, length = overallThickness)
// Create the sketch of one of the balls // Create the sketch of one of the balls
ballsSketch = startSketchOn(XY) ballsSketch = startSketchOn(XY)
|> startProfile(at = [shaftDia / 2 + wallThickness, 0.001]) |> startProfile(at = [shaftDia / 2 + wallThickness, 0.001])
|> arc(angleStart = 180, angleEnd = 0, radius = sphereDia / 2) |> arc(angleStart = 180deg, angleEnd = 0, radius = sphereDia / 2)
|> close() |> close()
// Revolve the ball to make a sphere and pattern around the inside wall // Revolve the ball to make a sphere and pattern around the inside wall
@ -44,9 +44,9 @@ balls = revolve(ballsSketch, axis = X)
chainSketch = startSketchOn(XY) chainSketch = startSketchOn(XY)
|> startProfile(at = [ |> startProfile(at = [
shaftDia / 2 + wallThickness + sphereDia / 2 - (chainWidth / 2), shaftDia / 2 + wallThickness + sphereDia / 2 - (chainWidth / 2),
0.125 * sin(60) 0.125 * sin(60deg)
]) ])
|> arc(angleStart = 120, angleEnd = 60, radius = sphereDia / 2) |> arc(angleStart = 120deg, angleEnd = 60deg, radius = sphereDia / 2)
|> line(end = [0, chainThickness]) |> line(end = [0, chainThickness])
|> line(end = [-chainWidth, 0]) |> line(end = [-chainWidth, 0])
|> close() |> close()
@ -54,7 +54,7 @@ chainSketch = startSketchOn(XY)
// Revolve the chain sketch // Revolve the chain sketch
chainHead = revolve(chainSketch, axis = X) chainHead = revolve(chainSketch, axis = X)
|> patternCircular3d( |> patternCircular3d(
arcDegrees = 360, arcDegrees = 360deg,
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, 0], center = [0, 0, 0],
instances = nBalls, instances = nBalls,
@ -72,9 +72,9 @@ linkSketch = startSketchOn(XZ)
) )
// Revolve the link sketch // Revolve the link sketch
linkRevolve = revolve(linkSketch, axis = Y, angle = 360 / nBalls) linkRevolve = revolve(linkSketch, axis = Y, angle = 360deg / nBalls)
|> patternCircular3d( |> patternCircular3d(
arcDegrees = 360, arcDegrees = 360deg,
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, 0], center = [0, 0, 0],
instances = nBalls, instances = nBalls,

View File

@ -23,12 +23,12 @@ nVentBosses = 36
// Drilling parameters. // Drilling parameters.
dDrillDia = 6 dDrillDia = 6
aBase = 90 aBase = 90deg
aSweep = 30 aSweep = 30deg
nArcs = 12 nArcs = 12
// Bell parameters. // Bell parameters.
aDraftBell = 5 aDraftBell = 5deg
tBell = 5 // Wall thickness. tBell = 5 // Wall thickness.
hBellAboveDiscFace = 40 hBellAboveDiscFace = 40
hBellSubflush = 4 hBellSubflush = 4
@ -98,7 +98,7 @@ planeVent = offsetPlane(XY, offset = tDiscHalf)
sketchVent = startSketchOn(planeVent) sketchVent = startSketchOn(planeVent)
profileVent = startProfile(sketchVent, at = [-wVent, dDisc / 2]) profileVent = startProfile(sketchVent, at = [-wVent, dDisc / 2])
|> angledLine(angle = 0, length = wVent, tag = $rectangleSegmentA001) |> angledLine(angle = 0, length = wVent, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = hFrictionSurface, tag = $seg02) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = hFrictionSurface, tag = $seg02)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg03) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg03)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg01)
|> close() |> close()
@ -118,7 +118,7 @@ ventSet = patternCircular3d(
instances = nVentBosses, instances = nVentBosses,
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, tDiscHalf], center = [0, 0, tDiscHalf],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
@ -134,8 +134,8 @@ discOutboard = createDiscHalf(
// Now create bell. // Now create bell.
rCenter = dDisc / 2 - hFrictionSurface - wUndercut rCenter = dDisc / 2 - hFrictionSurface - wUndercut
rBore = dBore / 2 rBore = dBore / 2
lDraftExterior = hBellAboveDiscFace / tan(90 - aDraftBell) lDraftExterior = hBellAboveDiscFace / tan(90deg - aDraftBell)
lDraftInterior = (hBellAboveDiscFace - tBell) / tan(90 - aDraftBell) lDraftInterior = (hBellAboveDiscFace - tBell) / tan(90deg - aDraftBell)
// Inner and outer radius of outboard face of disc bell. // Inner and outer radius of outboard face of disc bell.
rOuter = rCenter - lDraftExterior - rBore rOuter = rCenter - lDraftExterior - rBore
@ -151,7 +151,7 @@ bodyDiscBell = startProfile(
) )
|> arc( |> arc(
%, %,
angleStart = -180, angleStart = -180deg,
angleEnd = 0, angleEnd = 0,
radius = wUndercut / 2, radius = wUndercut / 2,
) )
@ -172,7 +172,7 @@ profileStud = circle(sketchLugs, center = [0, dPitchCircle / 2], radius = dStudD
%, %,
instances = nStuds, instances = nStuds,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )

View File

@ -28,8 +28,8 @@ hour = 9
minute = 29 minute = 29
// Calculate hand angles // Calculate hand angles
hourHandAngle = 90 - (hour * 30) hourHandAngle = 90deg - (hour * 30deg)
minuteHandAngle = 90 - (minute * 6) minuteHandAngle = 90deg - (minute * 6deg)
// Create the clock body // Create the clock body
clockBodySketch = startSketchOn(XY) clockBodySketch = startSketchOn(XY)
@ -72,18 +72,18 @@ numberObject = {
// one = { i = [90, 160] }, // one = { i = [90, 160] },
one = { one = {
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(60), clockDiameter / 2 * 3 / 4 * cos(60deg),
clockDiameter / 2 * 3 / 4 * sin(60) clockDiameter / 2 * 3 / 4 * sin(60deg)
] ]
}, },
two = { two = {
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(30) - 10, clockDiameter / 2 * 3 / 4 * cos(30deg) - 10,
clockDiameter / 2 * 3 / 4 * sin(30) clockDiameter / 2 * 3 / 4 * sin(30deg)
], ],
i2 = [ i2 = [
clockDiameter / 2 * 3 / 4 * cos(30) + 5, clockDiameter / 2 * 3 / 4 * cos(30deg) + 5,
clockDiameter / 2 * 3 / 4 * sin(30) clockDiameter / 2 * 3 / 4 * sin(30deg)
] ]
}, },
three = { three = {
@ -102,100 +102,100 @@ numberObject = {
}, },
four = { four = {
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(-30) - 10, clockDiameter / 2 * 3 / 4 * cos(-30deg) - 10,
clockDiameter / 2 * 3 / 4 * sin(-30) clockDiameter / 2 * 3 / 4 * sin(-30deg)
], ],
v = [ v = [
clockDiameter / 2 * 3 / 4 * cos(-30) + 13, clockDiameter / 2 * 3 / 4 * cos(-30deg) + 13,
clockDiameter / 2 * 3 / 4 * sin(-30) clockDiameter / 2 * 3 / 4 * sin(-30deg)
] ]
}, },
five = { five = {
v = [ v = [
clockDiameter / 2 * 3 / 4 * cos(-60), clockDiameter / 2 * 3 / 4 * cos(-60deg),
clockDiameter / 2 * 3 / 4 * sin(-60) clockDiameter / 2 * 3 / 4 * sin(-60deg)
] ]
}, },
six = { six = {
v = [ v = [
clockDiameter / 2 * 3 / 4 * cos(-90) - 10, clockDiameter / 2 * 3 / 4 * cos(-90deg) - 10,
clockDiameter / 2 * 3 / 4 * sin(-90) clockDiameter / 2 * 3 / 4 * sin(-90deg)
], ],
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(-90) + 12, clockDiameter / 2 * 3 / 4 * cos(-90deg) + 12,
clockDiameter / 2 * 3 / 4 * sin(-90) clockDiameter / 2 * 3 / 4 * sin(-90deg)
] ]
}, },
seven = { seven = {
v = [ v = [
clockDiameter / 2 * 3 / 4 * cos(-120) - 15, clockDiameter / 2 * 3 / 4 * cos(-120deg) - 15,
clockDiameter / 2 * 3 / 4 * sin(-120) clockDiameter / 2 * 3 / 4 * sin(-120deg)
], ],
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(-120) + 5, clockDiameter / 2 * 3 / 4 * cos(-120deg) + 5,
clockDiameter / 2 * 3 / 4 * sin(-120) clockDiameter / 2 * 3 / 4 * sin(-120deg)
], ],
i2 = [ i2 = [
clockDiameter / 2 * 3 / 4 * cos(-120) + 20, clockDiameter / 2 * 3 / 4 * cos(-120deg) + 20,
clockDiameter / 2 * 3 / 4 * sin(-120) clockDiameter / 2 * 3 / 4 * sin(-120deg)
] ]
}, },
eight = { eight = {
v = [ v = [
clockDiameter / 2 * 3 / 4 * cos(-150) - 10, clockDiameter / 2 * 3 / 4 * cos(-150deg) - 10,
clockDiameter / 2 * 3 / 4 * sin(-150) clockDiameter / 2 * 3 / 4 * sin(-150deg)
], ],
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(-150) + 10, clockDiameter / 2 * 3 / 4 * cos(-150deg) + 10,
clockDiameter / 2 * 3 / 4 * sin(-150) clockDiameter / 2 * 3 / 4 * sin(-150deg)
], ],
i2 = [ i2 = [
clockDiameter / 2 * 3 / 4 * cos(-150) + 25, clockDiameter / 2 * 3 / 4 * cos(-150deg) + 25,
clockDiameter / 2 * 3 / 4 * sin(-150) clockDiameter / 2 * 3 / 4 * sin(-150deg)
], ],
i3 = [ i3 = [
clockDiameter / 2 * 3 / 4 * cos(-150) + 40, clockDiameter / 2 * 3 / 4 * cos(-150deg) + 40,
clockDiameter / 2 * 3 / 4 * sin(-150) clockDiameter / 2 * 3 / 4 * sin(-150deg)
] ]
}, },
nine = { nine = {
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(180) - 15, clockDiameter / 2 * 3 / 4 * cos(180deg) - 15,
clockDiameter / 2 * 3 / 4 * sin(180) clockDiameter / 2 * 3 / 4 * sin(180deg)
], ],
x = [ x = [
clockDiameter / 2 * 3 / 4 * cos(180) + 15, clockDiameter / 2 * 3 / 4 * cos(180deg) + 15,
clockDiameter / 2 * 3 / 4 * sin(180) clockDiameter / 2 * 3 / 4 * sin(180deg)
] ]
}, },
ten = { ten = {
x = [ x = [
clockDiameter / 2 * 3 / 4 * cos(150) + 5, clockDiameter / 2 * 3 / 4 * cos(150deg) + 5,
clockDiameter / 2 * 3 / 4 * sin(150) clockDiameter / 2 * 3 / 4 * sin(150deg)
] ]
}, },
eleven = { eleven = {
x = [ x = [
clockDiameter / 2 * 3 / 4 * cos(120), clockDiameter / 2 * 3 / 4 * cos(120deg),
clockDiameter / 2 * 3 / 4 * sin(120) clockDiameter / 2 * 3 / 4 * sin(120deg)
], ],
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(120) + 10, clockDiameter / 2 * 3 / 4 * cos(120deg) + 10,
clockDiameter / 2 * 3 / 4 * sin(120) clockDiameter / 2 * 3 / 4 * sin(120deg)
] ]
}, },
twelve = { twelve = {
x = [ x = [
clockDiameter / 2 * 3 / 4 * cos(90) - 10, clockDiameter / 2 * 3 / 4 * cos(90deg) - 10,
clockDiameter / 2 * 3 / 4 * sin(90) clockDiameter / 2 * 3 / 4 * sin(90deg)
], ],
i = [ i = [
clockDiameter / 2 * 3 / 4 * cos(90) + 5, clockDiameter / 2 * 3 / 4 * cos(90deg) + 5,
clockDiameter / 2 * 3 / 4 * sin(90) clockDiameter / 2 * 3 / 4 * sin(90deg)
], ],
i2 = [ i2 = [
clockDiameter / 2 * 3 / 4 * cos(90) + 20, clockDiameter / 2 * 3 / 4 * cos(90deg) + 20,
clockDiameter / 2 * 3 / 4 * sin(90) clockDiameter / 2 * 3 / 4 * sin(90deg)
] ]
} }
} }
@ -234,16 +234,16 @@ fn letterX(startX, startY) {
], ],
) )
|> xLine(%, length = xWidth / 6) |> xLine(%, length = xWidth / 6)
|> angledLine(%, angle = -70, lengthY = xLength * 1 / 3) |> angledLine(%, angle = -70deg, lengthY = xLength * 1 / 3)
|> angledLine(%, angle = 70, lengthY = xLength * 1 / 3) |> angledLine(%, angle = 70deg, lengthY = xLength * 1 / 3)
|> xLine(%, length = xWidth / 6) |> xLine(%, length = xWidth / 6)
|> angledLine(%, angle = 70 + 180, lengthY = xLength * 1 / 2) |> angledLine(%, angle = 70deg + 180deg, lengthY = xLength * 1 / 2)
|> angledLine(%, angle = -70, lengthY = xLength * 1 / 2) |> angledLine(%, angle = -70deg, lengthY = xLength * 1 / 2)
|> xLine(%, length = -xWidth / 6) |> xLine(%, length = -xWidth / 6)
|> angledLine(%, angle = -70 - 180, lengthY = xLength * 1 / 3) |> angledLine(%, angle = -70deg - 180deg, lengthY = xLength * 1 / 3)
|> angledLine(%, angle = 70 + 180, lengthY = xLength * 1 / 3) |> angledLine(%, angle = 70deg + 180deg, lengthY = xLength * 1 / 3)
|> xLine(%, length = -xWidth / 6) |> xLine(%, length = -xWidth / 6)
|> angledLine(%, angle = 70, lengthY = xLength * 1 / 2) |> angledLine(%, angle = 70deg, lengthY = xLength * 1 / 2)
|> close(%) |> close(%)
|> extrude(%, length = numberThickness) |> extrude(%, length = numberThickness)
|> appearance(%, color = "#140f0f") |> appearance(%, color = "#140f0f")
@ -333,25 +333,25 @@ sketch005 = startSketchOn(offsetPlane(XY, offset = 55))
profile007 = startProfile( profile007 = startProfile(
sketch005, sketch005,
at = [ at = [
nubDiameter / 2 * 1.375 * cos(hourHandAngle + 20), nubDiameter / 2 * 1.375 * cos(hourHandAngle + 20deg),
nubDiameter / 2 * 1.375 * sin(hourHandAngle + 20) nubDiameter / 2 * 1.375 * sin(hourHandAngle + 20deg)
], ],
) )
|> arc( |> arc(
%, %,
interiorAbsolute = [ interiorAbsolute = [
nubDiameter / 2 * 1.375 * cos(hourHandAngle + 180), nubDiameter / 2 * 1.375 * cos(hourHandAngle + 180deg),
nubDiameter / 2 * 1.375 * sin(hourHandAngle + 180) nubDiameter / 2 * 1.375 * sin(hourHandAngle + 180deg)
], ],
endAbsolute = [ endAbsolute = [
nubDiameter / 2 * 1.375 * cos(hourHandAngle + 340), nubDiameter / 2 * 1.375 * cos(hourHandAngle + 340deg),
nubDiameter / 2 * 1.375 * sin(hourHandAngle + 340) nubDiameter / 2 * 1.375 * sin(hourHandAngle + 340deg)
], ],
) )
|> angledLine(%, angle = hourHandAngle, length = hourHandArmLength) |> angledLine(%, angle = hourHandAngle, length = hourHandArmLength)
|> angledLine( |> angledLine(
%, %,
angle = hourHandAngle - 90, angle = hourHandAngle - 90deg,
length = hourHandWidth / 2, length = hourHandWidth / 2,
tag = $seg004, tag = $seg004,
) )
@ -363,9 +363,9 @@ profile007 = startProfile(
], ],
tag = $seg002, tag = $seg002,
) )
|> angledLine(%, angle = segAng(seg002) + 120, length = segLen(seg002)) |> angledLine(%, angle = segAng(seg002) + 120deg, length = segLen(seg002))
// |> angledLineThatIntersects(%, angle = segAng(seg002) + hourHandAngle - 90, intersectTag = seg004) // |> angledLineThatIntersects(%, angle = segAng(seg002) + hourHandAngle - 90deg, intersectTag = seg004)
|> angledLine(%, angle = hourHandAngle - 90, length = segLen(seg004)) |> angledLine(%, angle = hourHandAngle - 90deg, length = segLen(seg004))
|> line(%, endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(%, endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close(%)
profile008 = circle(sketch005, center = [0, 0], diameter = nubDiameter) profile008 = circle(sketch005, center = [0, 0], diameter = nubDiameter)
@ -378,25 +378,25 @@ sketch006 = startSketchOn(offsetPlane(XY, offset = 50))
profile009 = startProfile( profile009 = startProfile(
sketch006, sketch006,
at = [ at = [
nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 20), nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 20deg),
nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 20) nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 20deg)
], ],
) )
|> arc( |> arc(
%, %,
interiorAbsolute = [ interiorAbsolute = [
nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 180), nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 180deg),
nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 180) nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 180deg)
], ],
endAbsolute = [ endAbsolute = [
nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 340), nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 340deg),
nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 340) nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 340deg)
], ],
) )
|> angledLine(%, angle = minuteHandAngle, length = minuteHandArmLength) |> angledLine(%, angle = minuteHandAngle, length = minuteHandArmLength)
|> angledLine( |> angledLine(
%, %,
angle = minuteHandAngle - 90, angle = minuteHandAngle - 90deg,
length = minuteHandWidth / 2, length = minuteHandWidth / 2,
tag = $seg003, tag = $seg003,
) )
@ -408,8 +408,8 @@ profile009 = startProfile(
], ],
tag = $seg005, tag = $seg005,
) )
|> angledLine(%, angle = segAng(seg005) + 120, length = segLen(seg005)) |> angledLine(%, angle = segAng(seg005) + 120deg, length = segLen(seg005))
|> angledLine(%, angle = minuteHandAngle - 90, length = segLen(seg003)) |> angledLine(%, angle = minuteHandAngle - 90deg, length = segLen(seg003))
|> line(%, endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(%, endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close(%)
profile010 = circle(sketch006, center = [0, 0], diameter = 30) profile010 = circle(sketch006, center = [0, 0], diameter = 30)
@ -430,8 +430,8 @@ profile004 = startProfile(sketch003, at = [-slotWidth / 2, 200])
|> arc( |> arc(
%, %,
radius = screwHeadDiameter / 2 + screwTolerance, radius = screwHeadDiameter / 2 + screwTolerance,
angleStart = 120, angleStart = 120deg,
angleEnd = 420, angleEnd = 420deg,
) )
|> yLine(%, length = slotLength) |> yLine(%, length = slotLength)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])

View File

@ -14,15 +14,15 @@ coldPlate = startSketchOn(YZ)
|> startProfile(at = [0, tubeDiameter * 2]) |> startProfile(at = [0, tubeDiameter * 2])
|> xLine(length = bendRadius - (tubeDiameter / 2)) |> xLine(length = bendRadius - (tubeDiameter / 2))
|> yLine(length = -tubeDiameter) |> yLine(length = -tubeDiameter)
|> tangentialArc(angle = 180, radius = tubeDiameter / 2) |> tangentialArc(angle = 180deg, radius = tubeDiameter / 2)
|> yLine(length = tubeDiameter) |> yLine(length = tubeDiameter)
|> xLine(length = bendRadius * 2 - tubeDiameter, tag = $seg07) |> xLine(length = bendRadius * 2 - tubeDiameter, tag = $seg07)
|> yLine(length = -tubeDiameter, tag = $seg09) |> yLine(length = -tubeDiameter, tag = $seg09)
|> tangentialArc(angle = 180, radius = tubeDiameter / 2) |> tangentialArc(angle = 180deg, radius = tubeDiameter / 2)
|> yLine(length = tubeDiameter, tag = $seg08) |> yLine(length = tubeDiameter, tag = $seg08)
|> xLine(length = bendRadius - (tubeDiameter / 2)) |> xLine(length = bendRadius - (tubeDiameter / 2))
|> angledLine(angle = -77, length = tubeDiameter / 3) |> angledLine(angle = -77deg, length = tubeDiameter / 3)
|> tangentialArc(angle = 77, radius = tubeDiameter, tag = $seg01) |> tangentialArc(angle = 77deg, radius = tubeDiameter, tag = $seg01)
|> angledLine(angle = tangentToEnd(seg01), length = 1) |> angledLine(angle = tangentToEnd(seg01), length = 1)
|> yLine(endAbsolute = 0) |> yLine(endAbsolute = 0)
|> xLine(endAbsolute = 0) |> xLine(endAbsolute = 0)
@ -34,11 +34,11 @@ coldPlate = startSketchOn(YZ)
copperTubePath = startSketchOn(offsetPlane(XY, offset = tubeDiameter)) copperTubePath = startSketchOn(offsetPlane(XY, offset = tubeDiameter))
|> startProfile(at = [-7.35, -bendRadius * 3]) |> startProfile(at = [-7.35, -bendRadius * 3])
|> xLine(length = 14.13, tag = $seg05) |> xLine(length = 14.13, tag = $seg05)
|> tangentialArc(angle = 180, radius = bendRadius, tag = $seg02) |> tangentialArc(angle = 180deg, radius = bendRadius, tag = $seg02)
|> angledLine(angle = tangentToEnd(seg02), length = 13.02, tag = $seg06) |> angledLine(angle = tangentToEnd(seg02), length = 13.02, tag = $seg06)
|> tangentialArc(angle = -180, radius = bendRadius, tag = $seg03) |> tangentialArc(angle = -180deg, radius = bendRadius, tag = $seg03)
|> angledLine(angle = tangentToEnd(seg03), length = segLen(seg06)) |> angledLine(angle = tangentToEnd(seg03), length = segLen(seg06))
|> tangentialArc(angle = 180, radius = bendRadius, tag = $seg04) |> tangentialArc(angle = 180deg, radius = bendRadius, tag = $seg04)
|> angledLine(angle = tangentToEnd(seg04), length = segLen(seg05)) |> angledLine(angle = tangentToEnd(seg04), length = segLen(seg05))
// Create the profile for the inner and outer diameter of the hollow copper tube // Create the profile for the inner and outer diameter of the hollow copper tube

View File

@ -22,13 +22,13 @@ tangentLength = (r1 - r2) / tan(tangentAngle)
plateBody = startSketchOn(XY) plateBody = startSketchOn(XY)
// Use polar coordinates to start the sketch at the tangent point of the larger radius // Use polar coordinates to start the sketch at the tangent point of the larger radius
|> startProfile(at = polar(angle = 90 - tangentAngle, length = r1)) |> startProfile(at = polar(angle = 90deg - tangentAngle, length = r1))
|> angledLine(angle = -tangentAngle, length = tangentLength) |> angledLine(angle = -tangentAngle, length = tangentLength)
|> tangentialArc(radius = r2, angle = (tangentAngle - 90) * 2) |> tangentialArc(radius = r2, angle = (tangentAngle - 90deg) * 2)
|> angledLine(angle = tangentAngle, length = -tangentLength) |> angledLine(angle = tangentAngle, length = -tangentLength)
|> tangentialArc(radius = r1, angle = -tangentAngle * 2) |> tangentialArc(radius = r1, angle = -tangentAngle * 2)
|> angledLine(angle = -tangentAngle, length = -tangentLength) |> angledLine(angle = -tangentAngle, length = -tangentLength)
|> tangentialArc(radius = r2, angle = (tangentAngle - 90) * 2) |> tangentialArc(radius = r2, angle = (tangentAngle - 90deg) * 2)
|> angledLine(angle = tangentAngle, length = tangentLength) |> angledLine(angle = tangentAngle, length = tangentLength)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()

View File

@ -12,7 +12,7 @@ import * from "parameters.kcl"
bottomFaceSketch = startSketchOn(YZ) bottomFaceSketch = startSketchOn(YZ)
|> startProfile(at = [-fanSize / 2, -fanSize / 2]) |> startProfile(at = [-fanSize / 2, -fanSize / 2])
|> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA001) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = fanSize, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = fanSize, tag = $rectangleSegmentB001)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001)
|> close() |> close()
@ -50,12 +50,12 @@ bottomFaceSketch = startSketchOn(YZ)
// Add large openings to the bottom face to allow airflow through the fan // Add large openings to the bottom face to allow airflow through the fan
airflowPattern = startSketchOn(bottomFaceSketch, face = END) airflowPattern = startSketchOn(bottomFaceSketch, face = END)
|> startProfile(at = [fanSize * 7 / 25, -fanSize * 9 / 25]) |> startProfile(at = [fanSize * 7 / 25, -fanSize * 9 / 25])
|> angledLine(angle = 140, length = fanSize * 12 / 25, tag = $seg01) |> angledLine(angle = 140deg, length = fanSize * 12 / 25, tag = $seg01)
|> tangentialArc(radius = fanSize * 1 / 50, angle = 90) |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg)
|> angledLine(angle = -130, length = fanSize * 8 / 25) |> angledLine(angle = -130deg, length = fanSize * 8 / 25)
|> tangentialArc(radius = fanSize * 1 / 50, angle = 90) |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg)
|> angledLine(angle = segAng(seg01) + 180, length = fanSize * 2 / 25) |> angledLine(angle = segAng(seg01) + 180deg, length = fanSize * 2 / 25)
|> tangentialArc(radius = fanSize * 8 / 25, angle = 40) |> tangentialArc(radius = fanSize * 8 / 25, angle = 40deg)
|> xLine(length = fanSize * 3 / 25) |> xLine(length = fanSize * 3 / 25)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -75,13 +75,13 @@ bodyMiddle = startSketchOn(bottomFaceSketch, face = END)
housingMiddleLength / 2, housingMiddleLength / 2,
-housingMiddleLength / 2 - housingMiddleRadius -housingMiddleLength / 2 - housingMiddleRadius
]) ])
|> tangentialArc(radius = housingMiddleRadius, angle = 90) |> tangentialArc(radius = housingMiddleRadius, angle = 90deg)
|> yLine(length = housingMiddleLength) |> yLine(length = housingMiddleLength)
|> tangentialArc(radius = housingMiddleRadius, angle = 90) |> tangentialArc(radius = housingMiddleRadius, angle = 90deg)
|> xLine(length = -housingMiddleLength) |> xLine(length = -housingMiddleLength)
|> tangentialArc(radius = housingMiddleRadius, angle = 90) |> tangentialArc(radius = housingMiddleRadius, angle = 90deg)
|> yLine(length = -housingMiddleLength) |> yLine(length = -housingMiddleLength)
|> tangentialArc(radius = housingMiddleRadius, angle = 90) |> tangentialArc(radius = housingMiddleRadius, angle = 90deg)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> extrude(length = fanHeight - 4 - 4) |> extrude(length = fanHeight - 4 - 4)

View File

@ -20,32 +20,32 @@ fn fanBlade(offsetHeight, startAngle) {
15 * cos(startAngle), 15 * cos(startAngle),
15 * sin(startAngle) 15 * sin(startAngle)
]) ])
|> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15) |> arc(angleStart = startAngle, angleEnd = startAngle + 14deg, radius = 15)
|> arc( |> arc(
endAbsolute = [ endAbsolute = [
fanSize * 22 / 50 * cos(startAngle - 20), fanSize * 22 / 50 * cos(startAngle - 20deg),
fanSize * 22 / 50 * sin(startAngle - 20) fanSize * 22 / 50 * sin(startAngle - 20deg)
], ],
interiorAbsolute = [ interiorAbsolute = [
fanSize * 11 / 50 * cos(startAngle + 3), fanSize * 11 / 50 * cos(startAngle + 3deg),
fanSize * 11 / 50 * sin(startAngle + 3) fanSize * 11 / 50 * sin(startAngle + 3deg)
], ],
) )
|> arc( |> arc(
endAbsolute = [ endAbsolute = [
fanSize * 22 / 50 * cos(startAngle - 24), fanSize * 22 / 50 * cos(startAngle - 24deg),
fanSize * 22 / 50 * sin(startAngle - 24) fanSize * 22 / 50 * sin(startAngle - 24deg)
], ],
interiorAbsolute = [ interiorAbsolute = [
fanSize * 22 / 50 * cos(startAngle - 22), fanSize * 22 / 50 * cos(startAngle - 22deg),
fanSize * 22 / 50 * sin(startAngle - 22) fanSize * 22 / 50 * sin(startAngle - 22deg)
], ],
) )
|> arc( |> arc(
endAbsolute = [profileStartX(%), profileStartY(%)], endAbsolute = [profileStartX(%), profileStartY(%)],
interiorAbsolute = [ interiorAbsolute = [
fanSize * 11 / 50 * cos(startAngle - 5), fanSize * 11 / 50 * cos(startAngle - 5deg),
fanSize * 11 / 50 * sin(startAngle - 5) fanSize * 11 / 50 * sin(startAngle - 5deg)
], ],
) )
|> close() |> close()
@ -54,8 +54,8 @@ fn fanBlade(offsetHeight, startAngle) {
// Loft the fan blade cross sections into a single blade, then pattern them about the fan center // Loft the fan blade cross sections into a single blade, then pattern them about the fan center
crossSections = [ crossSections = [
fanBlade(offsetHeight = 4.5, startAngle = 50), fanBlade(offsetHeight = 4.5, startAngle = 50deg),
fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30), fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30deg),
fanBlade(offsetHeight = fanHeight - 2, startAngle = 0) fanBlade(offsetHeight = fanHeight - 2, startAngle = 0)
] ]
bladeLoft = loft(crossSections) bladeLoft = loft(crossSections)
@ -63,7 +63,7 @@ bladeLoft = loft(crossSections)
instances = 9, instances = 9,
axis = [1, 0, 0], axis = [1, 0, 0],
center = [0, 0, 0], center = [0, 0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )

View File

@ -11,10 +11,10 @@ import * from "parameters.kcl"
endTubePath = startSketchOn(offsetPlane(YZ, offset = -20)) endTubePath = startSketchOn(offsetPlane(YZ, offset = -20))
|> startProfile(at = [fanSize / 4, fanSize + 38]) |> startProfile(at = [fanSize / 4, fanSize + 38])
|> yLine(endAbsolute = bendRadius + 10, tag = $seg01) |> yLine(endAbsolute = bendRadius + 10, tag = $seg01)
|> tangentialArc(radius = bendRadius, angle = -90) |> tangentialArc(radius = bendRadius, angle = -90deg)
|> xLine(endAbsolute = 0, tag = $seg02) |> xLine(endAbsolute = 0, tag = $seg02)
|> xLine(length = -segLen(seg02)) |> xLine(length = -segLen(seg02))
|> tangentialArc(radius = bendRadius, angle = -90) |> tangentialArc(radius = bendRadius, angle = -90deg)
|> yLine(length = segLen(seg01)) |> yLine(length = segLen(seg01))
// Sweep and translate the outermost tube on each end // Sweep and translate the outermost tube on each end
@ -35,13 +35,13 @@ endTube = startSketchOn(offsetPlane(XY, offset = fanSize + 38))
centerTubePath = startSketchOn(offsetPlane(YZ, offset = -4)) centerTubePath = startSketchOn(offsetPlane(YZ, offset = -4))
|> startProfile(at = [fanSize / 2.67, fanSize + 38]) |> startProfile(at = [fanSize / 2.67, fanSize + 38])
|> yLine(endAbsolute = bendRadius + 15 + 10) |> yLine(endAbsolute = bendRadius + 15 + 10)
|> tangentialArc(radius = bendRadius, angle = -45) |> tangentialArc(radius = bendRadius, angle = -45deg)
|> angledLine(angle = -135, lengthY = 15) |> angledLine(angle = -135deg, lengthY = 15)
|> tangentialArc(radius = bendRadius, angle = -45) |> tangentialArc(radius = bendRadius, angle = -45deg)
|> xLine(endAbsolute = 0, tag = $seg03) |> xLine(endAbsolute = 0, tag = $seg03)
|> xLine(length = -segLen(seg03)) |> xLine(length = -segLen(seg03))
|> tangentialArc(radius = bendRadius, angle = -155) |> tangentialArc(radius = bendRadius, angle = -155deg)
|> tangentialArc(radius = bendRadius, angle = 65) |> tangentialArc(radius = bendRadius, angle = 65deg)
|> yLine(endAbsolute = fanSize + 38) |> yLine(endAbsolute = fanSize + 38)
// Draw the profile and sweep the 4 interior tubes // Draw the profile and sweep the 4 interior tubes
@ -68,13 +68,13 @@ centerTube = startSketchOn(offsetPlane(XY, offset = fanSize + 38))
heatFins = startSketchOn(offsetPlane(XY, offset = 45)) heatFins = startSketchOn(offsetPlane(XY, offset = 45))
|> startProfile(at = [0, -fanSize / 2]) |> startProfile(at = [0, -fanSize / 2])
|> xLine(length = 9) |> xLine(length = 9)
|> angledLine(angle = -60, length = 2.5, tag = $seg04) |> angledLine(angle = -60deg, length = 2.5, tag = $seg04)
|> xLine(length = 0.75) |> xLine(length = 0.75)
|> arc(interiorAbsolute = [lastSegX(%) + 1, lastSegY(%) + 1.2], endAbsolute = [lastSegX(%) + 2, lastSegY(%)]) |> arc(interiorAbsolute = [lastSegX(%) + 1, lastSegY(%) + 1.2], endAbsolute = [lastSegX(%) + 2, lastSegY(%)])
|> xLine(length = 0.75) |> xLine(length = 0.75)
|> angledLine(angle = 60, length = segLen(seg04)) |> angledLine(angle = 60deg, length = segLen(seg04))
|> xLine(endAbsolute = heatSinkDepth / 2 - 3) |> xLine(endAbsolute = heatSinkDepth / 2 - 3)
|> tangentialArc(angle = 90, radius = 3) |> tangentialArc(angle = 90deg, radius = 3)
|> yLine(endAbsolute = 0) |> yLine(endAbsolute = 0)
|> mirror2d(axis = X) |> mirror2d(axis = X)
|> mirror2d(axis = Y) |> mirror2d(axis = Y)
@ -91,11 +91,11 @@ heatFins = startSketchOn(offsetPlane(XY, offset = 45))
coolerBase = startSketchOn(-XZ) coolerBase = startSketchOn(-XZ)
baseLower = startProfile(coolerBase, at = [0, 10]) baseLower = startProfile(coolerBase, at = [0, 10])
|> xLine(length = -0.9) |> xLine(length = -0.9)
|> arc(angleStart = 0, angleEnd = -180, radius = 3.1) |> arc(angleStart = 0, angleEnd = -180deg, radius = 3.1)
|> xLine(length = -1.8) |> xLine(length = -1.8)
|> arc(angleStart = 0, angleEnd = -180, radius = 3) |> arc(angleStart = 0, angleEnd = -180deg, radius = 3)
|> xLine(length = -1.8) |> xLine(length = -1.8)
|> arc(angleStart = 0, angleEnd = -180, radius = 3) |> arc(angleStart = 0, angleEnd = -180deg, radius = 3)
|> xLine(length = -1.8) |> xLine(length = -1.8)
|> xLine(length = -2) |> xLine(length = -2)
|> yLine(length = -10) |> yLine(length = -10)
@ -105,15 +105,15 @@ baseLower = startProfile(coolerBase, at = [0, 10])
baseUpper = startProfile(coolerBase, at = [0, 10]) baseUpper = startProfile(coolerBase, at = [0, 10])
|> xLine(length = -0.9) |> xLine(length = -0.9)
|> arc(angleStart = 0, angleEnd = 180, radius = 3.1) |> arc(angleStart = 0, angleEnd = 180deg, radius = 3.1)
|> xLine(length = -1.8) |> xLine(length = -1.8)
|> arc(angleStart = 0, angleEnd = 180, radius = 3) |> arc(angleStart = 0, angleEnd = 180deg, radius = 3)
|> xLine(length = -1.8) |> xLine(length = -1.8)
|> arc(angleStart = 0, angleEnd = 180, radius = 3) |> arc(angleStart = 0, angleEnd = 180deg, radius = 3)
|> xLine(length = -1.8) |> xLine(length = -1.8)
|> xLine(length = -1) |> xLine(length = -1)
|> yLine(length = 4) |> yLine(length = 4)
|> tangentialArc(angle = -90, radius = 2) |> tangentialArc(angle = -90deg, radius = 2)
|> xLine(endAbsolute = 0) |> xLine(endAbsolute = 0)
|> mirror2d(axis = Y) |> mirror2d(axis = Y)
|> extrude(length = 2 * segLen(seg02) * 3 / 4, symmetric = true) |> extrude(length = 2 * segLen(seg02) * 3 / 4, symmetric = true)
@ -122,15 +122,15 @@ baseUpper = startProfile(coolerBase, at = [0, 10])
mountingBracket = startSketchOn(XZ) mountingBracket = startSketchOn(XZ)
|> startProfile(at = [-10, 16]) |> startProfile(at = [-10, 16])
|> xLine(length = -20) |> xLine(length = -20)
|> tangentialArc(angle = 20, radius = bendRadius) |> tangentialArc(angle = 20deg, radius = bendRadius)
|> angledLine(angle = -160, length = 14, tag = $seg09) |> angledLine(angle = -160deg, length = 14, tag = $seg09)
|> tangentialArc(angle = -30, radius = bendRadius + sheetThickness) |> tangentialArc(angle = -30deg, radius = bendRadius + sheetThickness)
|> angledLine(angle = 170, length = 21.5, tag = $seg04Q) |> angledLine(angle = 170deg, length = 21.5, tag = $seg04Q)
|> angledLine(angle = 170 - 90, length = sheetThickness, tag = $seg08) |> angledLine(angle = 170deg - 90, length = sheetThickness, tag = $seg08)
|> angledLine(angle = segAng(seg04Q) + 180, length = segLen(seg04Q), tag = $seg05E) |> angledLine(angle = segAng(seg04Q) + 180deg, length = segLen(seg04Q), tag = $seg05E)
|> tangentialArc(angle = 30, radius = bendRadius) |> tangentialArc(angle = 30deg, radius = bendRadius)
|> angledLine(angle = segAng(seg09) + 180, length = segLen(seg09)) |> angledLine(angle = segAng(seg09) + 180deg, length = segLen(seg09))
|> tangentialArc(angle = -20, radius = bendRadius + sheetThickness) |> tangentialArc(angle = -20deg, radius = bendRadius + sheetThickness)
|> xLine(endAbsolute = profileStartX(%)) |> xLine(endAbsolute = profileStartX(%))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07)
|> close() |> close()
@ -166,6 +166,6 @@ thruHole = startSketchOn(mountingBracket, face = seg05E)
instances = 2, instances = 2,
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, 0], center = [0, 0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )

View File

@ -37,7 +37,7 @@ mountingWire
instances = 2, instances = 2,
axis = [0, 1, 0], axis = [0, 1, 0],
center = [0, 0, 40 + fanSize / 2], center = [0, 0, 40 + fanSize / 2],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> patternCircular3d( |> patternCircular3d(
@ -45,7 +45,7 @@ mountingWire
instances = 2, instances = 2,
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, 0], center = [0, 0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
removableSticker removableSticker

View File

@ -11,29 +11,29 @@ import * from "parameters.kcl"
upperArm = startSketchOn(offsetPlane(XZ, offset = fanSize / 2 + 2)) upperArm = startSketchOn(offsetPlane(XZ, offset = fanSize / 2 + 2))
|> startProfile(at = [-12, 40 + fanSize / 2]) |> startProfile(at = [-12, 40 + fanSize / 2])
|> yLine(length = 7) |> yLine(length = 7)
|> tangentialArc(radius = 2, angle = 90) |> tangentialArc(radius = 2, angle = 90deg)
|> xLine(length = -9) |> xLine(length = -9)
|> tangentialArc(radius = 2, angle = -90) |> tangentialArc(radius = 2, angle = -90deg)
|> yLine(length = 14) |> yLine(length = 14)
|> tangentialArc(radius = 2, angle = 90) |> tangentialArc(radius = 2, angle = 90deg)
|> xLine(length = -9) |> xLine(length = -9)
|> tangentialArc(radius = 2, angle = -80) |> tangentialArc(radius = 2, angle = -80deg)
|> angledLine(angle = 100, endAbsoluteY = 40 + fanSize / 2 + mountingHoleSpacing / 2 - 1.5) |> angledLine(angle = 100deg, endAbsoluteY = 40 + fanSize / 2 + mountingHoleSpacing / 2 - 1.5)
|> tangentialArc(radius = 2, angle = 80, tag = $seg07) |> tangentialArc(radius = 2, angle = 80deg, tag = $seg07)
// Draw the XZ component of the mounting wire path // Draw the XZ component of the mounting wire path
lowerArm = startSketchOn(offsetPlane(XZ, offset = fanSize / 2 + 2)) lowerArm = startSketchOn(offsetPlane(XZ, offset = fanSize / 2 + 2))
|> startProfile(at = [-12, 40 + fanSize / 2]) |> startProfile(at = [-12, 40 + fanSize / 2])
|> yLine(length = -7) |> yLine(length = -7)
|> tangentialArc(radius = 2, angle = -90) |> tangentialArc(radius = 2, angle = -90deg)
|> xLine(length = -9) |> xLine(length = -9)
|> tangentialArc(radius = 2, angle = 90) |> tangentialArc(radius = 2, angle = 90deg)
|> yLine(length = -14) |> yLine(length = -14)
|> tangentialArc(radius = 2, angle = -90) |> tangentialArc(radius = 2, angle = -90deg)
|> xLine(length = -9) |> xLine(length = -9)
|> tangentialArc(radius = 2, angle = 80) |> tangentialArc(radius = 2, angle = 80deg)
|> angledLine(angle = -100, endAbsoluteY = 40 + fanSize / 2 - (mountingHoleSpacing / 2) + 1.5) |> angledLine(angle = -100deg, endAbsoluteY = 40 + fanSize / 2 - (mountingHoleSpacing / 2) + 1.5)
|> tangentialArc(radius = 2, angle = -80, tag = $seg08) |> tangentialArc(radius = 2, angle = -80deg, tag = $seg08)
// Create the profile of the mounting wire and sweep along the XZ path // Create the profile of the mounting wire and sweep along the XZ path
wireProfile = startSketchOn(offsetPlane(XY, offset = 40 + fanSize / 2)) wireProfile = startSketchOn(offsetPlane(XY, offset = 40 + fanSize / 2))
@ -47,18 +47,18 @@ sweepLowerArm = circle(wireProfile, center = [-12, -fanSize / 2 - 2], radius = 1
upperHook = startSketchOn(offsetPlane(XY, offset = segEndY(seg07))) upperHook = startSketchOn(offsetPlane(XY, offset = segEndY(seg07)))
|> startProfile(at = [segEndX(seg07), -fanSize / 2 - 2]) |> startProfile(at = [segEndX(seg07), -fanSize / 2 - 2])
|> xLine(endAbsolute = -heatSinkDepth / 2 - fanHeight) |> xLine(endAbsolute = -heatSinkDepth / 2 - fanHeight)
|> tangentialArc(radius = 2, angle = -90) |> tangentialArc(radius = 2, angle = -90deg)
|> yLine(endAbsolute = -mountingHoleSpacing / 2 - 2) |> yLine(endAbsolute = -mountingHoleSpacing / 2 - 2)
|> tangentialArc(radius = 2, angle = -90) |> tangentialArc(radius = 2, angle = -90deg)
|> xLine(length = fanHeight / 3) |> xLine(length = fanHeight / 3)
// Draw the XY components of the mounting wire path // Draw the XY components of the mounting wire path
lowerHook = startSketchOn(offsetPlane(XY, offset = segEndY(seg08))) lowerHook = startSketchOn(offsetPlane(XY, offset = segEndY(seg08)))
|> startProfile(at = [segEndX(seg07), -fanSize / 2 - 2]) |> startProfile(at = [segEndX(seg07), -fanSize / 2 - 2])
|> xLine(endAbsolute = -heatSinkDepth / 2 - fanHeight) |> xLine(endAbsolute = -heatSinkDepth / 2 - fanHeight)
|> tangentialArc(radius = 2, angle = -90) |> tangentialArc(radius = 2, angle = -90deg)
|> yLine(endAbsolute = -mountingHoleSpacing / 2 - 2) |> yLine(endAbsolute = -mountingHoleSpacing / 2 - 2)
|> tangentialArc(radius = 2, angle = -90) |> tangentialArc(radius = 2, angle = -90deg)
|> xLine(length = fanHeight / 3) |> xLine(length = fanHeight / 3)
// Sweep the wire profile around the hook-shaped segments of the mounting wire // Sweep the wire profile around the hook-shaped segments of the mounting wire

View File

@ -8,7 +8,7 @@
removableSticker = startSketchOn(-XY) removableSticker = startSketchOn(-XY)
|> startProfile(at = [-12, -12]) |> startProfile(at = [-12, -12])
|> angledLine(angle = 0, length = 24, tag = $rectangleSegmentA001) |> angledLine(angle = 0, length = 24, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 24, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = 24, tag = $rectangleSegmentB001)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001)
|> close() |> close()

View File

@ -14,11 +14,11 @@ fn cycloidalGear(gearPitch, gearHeight, holeDiameter, helixAngle: number(deg)) {
gearPitch * 1.55 * cos(helixAngleP) + gearPitch * sin(-helixAngleP), gearPitch * 1.55 * cos(helixAngleP) + gearPitch * sin(-helixAngleP),
gearPitch * 1.55 * sin(helixAngleP) + gearPitch * cos(-helixAngleP) gearPitch * 1.55 * sin(helixAngleP) + gearPitch * cos(-helixAngleP)
]) ])
|> arc(angleStart = 90 + helixAngleP, angleEnd = -90 + helixAngleP, radius = gearPitch) |> arc(angleStart = 90deg + helixAngleP, angleEnd = -90deg + helixAngleP, radius = gearPitch)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60) |> tangentialArc(radius = gearPitch * 1.67, angle = 60deg)
|> tangentialArc(radius = gearPitch, angle = -180) |> tangentialArc(radius = gearPitch, angle = -180deg)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60) |> tangentialArc(radius = gearPitch * 1.67, angle = 60deg)
|> tangentialArc(radius = gearPitch, angle = -180) |> tangentialArc(radius = gearPitch, angle = -180deg)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close(%)
|> subtract2d(tool = circle(center = [0, 0], radius = holeDiameter / 2)) |> subtract2d(tool = circle(center = [0, 0], radius = holeDiameter / 2))
@ -40,5 +40,5 @@ cycloidalGear(
gearPitch = .3, gearPitch = .3,
gearHeight = 1.5, gearHeight = 1.5,
holeDiameter = 0.297, holeDiameter = 0.297,
helixAngle = -80, helixAngle = -80deg,
) )

View File

@ -27,9 +27,9 @@ fn primaryTube(n, angle001, length001, length002, length003) {
sweepPath = startSketchOn(sweepPlane) sweepPath = startSketchOn(sweepPlane)
|> startProfile(at = [0, plateHeight]) |> startProfile(at = [0, plateHeight])
|> line(end = [0, length001]) |> line(end = [0, length001])
|> tangentialArc(angle = -80, radius = bendRadius, tag = $arc01) |> tangentialArc(angle = -80deg, radius = bendRadius, tag = $arc01)
|> angledLine(angle = tangentToEnd(arc01), length = length002) |> angledLine(angle = tangentToEnd(arc01), length = length002)
|> tangentialArc(angle = 85, radius = bendRadius, tag = $arc02) |> tangentialArc(angle = 85deg, radius = bendRadius, tag = $arc02)
|> angledLine(angle = tangentToEnd(arc02), length = length003) |> angledLine(angle = tangentToEnd(arc02), length = length003)
// Create the cross section of each tube and sweep them // Create the cross section of each tube and sweep them
@ -51,21 +51,21 @@ primaryTube(
) )
primaryTube( primaryTube(
n = 1, n = 1,
angle001 = 1, angle001 = 1deg,
length001 = 3, length001 = 3,
length002 = 6, length002 = 6,
length003 = 5, length003 = 5,
) )
primaryTube( primaryTube(
n = 2, n = 2,
angle001 = 24.3, angle001 = 24.3deg,
length001 = 5, length001 = 5,
length002 = 5, length002 = 5,
length003 = 3, length003 = 3,
) )
primaryTube( primaryTube(
n = 3, n = 3,
angle001 = 25.2, angle001 = 25.2deg,
length001 = 5, length001 = 5,
length002 = 5, length002 = 5,
length003 = 3, length003 = 3,
@ -75,20 +75,20 @@ primaryTube(
flangeSketch = startSketchOn(XY) flangeSketch = startSketchOn(XY)
|> startProfile(at = [3 + 1.3, -1.25]) |> startProfile(at = [3 + 1.3, -1.25])
|> xLine(length = -2.6, tag = $seg01) |> xLine(length = -2.6, tag = $seg01)
|> tangentialArc(radius = .3, angle = -40) |> tangentialArc(radius = .3, angle = -40deg)
|> tangentialArc(radius = .9, angle = 80) |> tangentialArc(radius = .9, angle = 80deg)
|> tangentialArc(radius = .3, angle = -40) |> tangentialArc(radius = .3, angle = -40deg)
|> xLine(length = -1.4, tag = $seg03) |> xLine(length = -1.4, tag = $seg03)
|> yLine(length = segLen(seg01), tag = $seg04) |> yLine(length = segLen(seg01), tag = $seg04)
|> xLine(length = 3.1, tag = $seg05) |> xLine(length = 3.1, tag = $seg05)
|> tangentialArc(radius = .3, angle = -40) |> tangentialArc(radius = .3, angle = -40deg)
|> tangentialArc(radius = 1.5, angle = 80) |> tangentialArc(radius = 1.5, angle = 80deg)
|> tangentialArc(radius = .3, angle = -40) |> tangentialArc(radius = .3, angle = -40deg)
|> xLine(length = segLen(seg05), tag = $seg07) |> xLine(length = segLen(seg05), tag = $seg07)
|> yLine(endAbsolute = profileStartY(%), tag = $seg08) |> yLine(endAbsolute = profileStartY(%), tag = $seg08)
|> xLine(length = -segLen(seg03), tag = $seg09) |> xLine(length = -segLen(seg03), tag = $seg09)
|> tangentialArc(radius = .3, angle = -40) |> tangentialArc(radius = .3, angle = -40deg)
|> tangentialArc(radius = .9, angle = 80) |> tangentialArc(radius = .9, angle = 80deg)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()

View File

@ -20,24 +20,24 @@ gripSlotWidth = 8.0
fn slot(sketch1, start, end, width) { fn slot(sketch1, start, end, width) {
angle = if start[0] == end[0] { angle = if start[0] == end[0] {
if end[1] > start[1] { if end[1] > start[1] {
90 90deg
} else { } else {
270 270deg
} }
} else { } else {
if end[0] < start[0] { if end[0] < start[0] {
units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0]))) + 180 units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0]))) + 180deg
} else { } else {
units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0]))) units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0])))
} }
} }
dist = sqrt(pow(end[1] - start[1], exp = 2) + pow(end[0] - start[0], exp = 2)) dist = sqrt(pow(end[1] - start[1], exp = 2) + pow(end[0] - start[0], exp = 2))
xstart = width / 2 * cos(angle - 90) + start[0] xstart = width / 2 * cos(angle - 90deg) + start[0]
ystart = width / 2 * sin(angle - 90) + start[1] ystart = width / 2 * sin(angle - 90deg) + start[1]
slotSketch = startProfile(sketch1, at = [xstart, ystart]) slotSketch = startProfile(sketch1, at = [xstart, ystart])
|> angledLine(angle = angle, length = dist) |> angledLine(angle, length = dist)
|> tangentialArc(radius = width / 2, angle = 180) |> tangentialArc(radius = width / 2, angle = 180deg)
|> angledLine(angle = angle, length = -dist) |> angledLine(angle, length = -dist)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
return slotSketch return slotSketch
@ -51,7 +51,7 @@ flipperProfile = startProfile(flipperSketch, at = [-flipperLength, -32.0])
|> line(end = [flipperLength, 2.0]) |> line(end = [flipperLength, 2.0])
|> yLine(length = 60.0, tag = $backEdge) |> yLine(length = 60.0, tag = $backEdge)
|> line(end = [-flipperLength, 2.0]) |> line(end = [-flipperLength, 2.0])
|> arc(angleStart = 163.087610, angleEnd = 196.912390, radius = 110.0) |> arc(angleStart = 163.087610deg, angleEnd = 196.912390deg, radius = 110.0)
|> close() |> close()
// Create a profile of the middle // Create a profile of the middle
@ -137,13 +137,13 @@ gripSketch = startSketchOn(handlePlane)
// Create a profile of the grip // Create a profile of the grip
gripProfile = startProfile(gripSketch, at = [-26.806746, -10.0]) gripProfile = startProfile(gripSketch, at = [-26.806746, -10.0])
|> xLine(length = gripWidth - (2 * gripFilletRadius)) |> xLine(length = gripWidth - (2 * gripFilletRadius))
|> arc(angleStart = -90.0, angleEnd = 0.0, radius = gripFilletRadius) |> arc(angleStart = -90.0deg, angleEnd = 0.0, radius = gripFilletRadius)
|> yLine(length = gripHeight - (2 * gripFilletRadius)) |> yLine(length = gripHeight - (2 * gripFilletRadius))
|> arc(angleStart = 0.0, angleEnd = 90.0, radius = gripFilletRadius) |> arc(angleStart = 0.0, angleEnd = 90.0deg, radius = gripFilletRadius)
|> xLine(length = -(gripWidth - (2 * gripFilletRadius))) |> xLine(length = -(gripWidth - (2 * gripFilletRadius)))
|> arc(angleStart = 90.0, angleEnd = 180.0, radius = gripFilletRadius) |> arc(angleStart = 90.0deg, angleEnd = 180.0deg, radius = gripFilletRadius)
|> yLine(length = -(gripHeight - (2 * gripFilletRadius)), tag = $gripEdgeTop) |> yLine(length = -(gripHeight - (2 * gripFilletRadius)), tag = $gripEdgeTop)
|> arc(angleStart = 180.0, angleEnd = 270.0, radius = gripFilletRadius) |> arc(angleStart = 180.0deg, angleEnd = 270.0deg, radius = gripFilletRadius)
|> close() |> close()
// Extrude the grip profile to create the grip // Extrude the grip profile to create the grip

View File

@ -13,11 +13,11 @@ handleThickness = 0.65
sketch001 = startSketchOn(XZ) sketch001 = startSketchOn(XZ)
|> startProfile(at = [carafeDiameter / 2, 5.7]) |> startProfile(at = [carafeDiameter / 2, 5.7])
|> angledLine(angle = 0, length = 0.1, tag = $rectangleSegmentA001) |> angledLine(angle = 0, length = 0.1, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = -0.75, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = -0.75, tag = $rectangleSegmentB001)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> revolve(angle = 360, axis = Y) |> revolve(angle = 360deg, axis = Y)
// Create an angled plane to sketch the supports // Create an angled plane to sketch the supports
plane001 = { plane001 = {
@ -32,19 +32,19 @@ sketch002 = startSketchOn(plane001)
|> startProfile(at = [carafeDiameter / 2, 5.7]) |> startProfile(at = [carafeDiameter / 2, 5.7])
|> xLine(length = 0.1) |> xLine(length = 0.1)
|> yLine(length = -5.2, tag = $edge1) |> yLine(length = -5.2, tag = $edge1)
|> arc(angleStart = 180, angleEnd = 205, radius = 0.3) |> arc(angleStart = 180deg, angleEnd = 205deg, radius = 0.3)
|> angledLine(angle = -60, length = 0.6, tag = $edge2) |> angledLine(angle = -60deg, length = 0.6, tag = $edge2)
|> arc(angleStart = 30, angleEnd = -120, radius = 0.6) |> arc(angleStart = 30deg, angleEnd = -120deg, radius = 0.6)
|> angledLine(angle = 150, endAbsoluteY = -0.2, tag = $edge3) |> angledLine(angle = 150deg, endAbsoluteY = -0.2, tag = $edge3)
|> arc(angleStart = 60, angleEnd = 90, radius = 0.5) |> arc(angleStart = 60deg, angleEnd = 90deg, radius = 0.5)
|> xLine(endAbsolute = 0.1, tag = $edgeLen) |> xLine(endAbsolute = 0.1, tag = $edgeLen)
|> yLine(length = 0.1) |> yLine(length = 0.1)
|> xLine(length = segLen(edgeLen) + 0.035, tag = $edge4) |> xLine(length = segLen(edgeLen) + 0.035, tag = $edge4)
|> arc(angleStart = 90, angleEnd = 60, radius = 0.6) |> arc(angleStart = 90deg, angleEnd = 60deg, radius = 0.6)
|> angledLine(angle = 150, length = -segLen(edge3) + 0.035, tag = $edge5) |> angledLine(angle = 150deg, length = -segLen(edge3) + 0.035, tag = $edge5)
|> arc(angleStart = -120, angleEnd = 30, radius = 0.5) |> arc(angleStart = -120deg, angleEnd = 30deg, radius = 0.5)
|> angledLine(angle = -60, length = -segLen(edge2) + 0.035, tag = $edge6) |> angledLine(angle = -60deg, length = -segLen(edge2) + 0.035, tag = $edge6)
|> arc(angleStart = 205, angleEnd = 180, radius = 0.6) |> arc(angleStart = 205deg, angleEnd = 180deg, radius = 0.6)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> extrude(length = 0.75) |> extrude(length = 0.75)
@ -52,7 +52,7 @@ sketch002 = startSketchOn(plane001)
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, 0], center = [0, 0, 0],
instances = 4, instances = 4,
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
@ -65,7 +65,7 @@ extrude001 = extrude(sketch003, length = 0.050)
sketch004 = startSketchOn(extrude001, face = END) sketch004 = startSketchOn(extrude001, face = END)
|> startProfile(at = [0.3, 0.17]) |> startProfile(at = [0.3, 0.17])
|> yLine(length = 1.2) |> yLine(length = 1.2)
|> arc(angleStart = 90, angleEnd = -30, radius = 1.2) |> arc(angleStart = 90deg, angleEnd = -30deg, radius = 1.2)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> patternCircular2d( |> patternCircular2d(
@ -81,9 +81,9 @@ extrude002 = extrude(sketch004, length = -0.050)
sketch005 = startSketchOn(XZ) sketch005 = startSketchOn(XZ)
|> startProfile(at = [0.15, 1.11]) |> startProfile(at = [0.15, 1.11])
|> xLine(endAbsolute = carafeDiameter / 2 - 0.2) |> xLine(endAbsolute = carafeDiameter / 2 - 0.2)
|> angledLine(angle = 30, endAbsoluteX = carafeDiameter / 2 - 0.07, tag = $seg1) |> angledLine(angle = 30deg, endAbsoluteX = carafeDiameter / 2 - 0.07, tag = $seg1)
|> angledLine(angle = -60, length = 0.050) |> angledLine(angle = -60deg, length = 0.050)
|> angledLine(angle = 30, length = -segLen(seg1)) |> angledLine(angle = 30deg, length = -segLen(seg1))
|> xLine(endAbsolute = 0.15) |> xLine(endAbsolute = 0.15)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -93,11 +93,11 @@ sketch005 = startSketchOn(XZ)
sketch006 = startSketchOn(XZ) sketch006 = startSketchOn(XZ)
|> startProfile(at = [0.1, 1]) |> startProfile(at = [0.1, 1])
|> line(end = [0.1, 0]) |> line(end = [0.1, 0])
|> angledLine(angle = 10, endAbsoluteX = 0.05) |> angledLine(angle = 10deg, endAbsoluteX = 0.05)
|> yLine(length = 10) |> yLine(length = 10)
|> line(end = [0.6, 0]) |> line(end = [0.6, 0])
|> yLine(length = -.05) |> yLine(length = -.05)
|> tangentialArc(radius = 0.6, angle = -90) |> tangentialArc(radius = 0.6, angle = -90deg)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> revolve(axis = Y) |> revolve(axis = Y)
@ -115,7 +115,7 @@ sketch008 = startSketchOn(extrude003, face = END)
|> patternCircular2d( |> patternCircular2d(
center = [0, 0], center = [0, 0],
instances = 8, instances = 8,
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
@ -127,7 +127,7 @@ sketch009 = startSketchOn(extrude003, face = END)
|> patternCircular2d( |> patternCircular2d(
center = [0, 0], center = [0, 0],
instances = 4, instances = 4,
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )

View File

@ -10,16 +10,16 @@ headSideProfile = startSketchOn(XZ)
|> yLine(length = 0.1) |> yLine(length = 0.1)
|> tangentialArc(endAbsolute = [0.95, 11.92]) |> tangentialArc(endAbsolute = [0.95, 11.92])
|> tangentialArc(endAbsolute = [2.72, 11.26], tag = $seg01) |> tangentialArc(endAbsolute = [2.72, 11.26], tag = $seg01)
|> angledLine(angle = tangentToEnd(seg01) + 90, length = .2) |> angledLine(angle = tangentToEnd(seg01) + 90deg, length = .2)
|> angledLine(angle = tangentToEnd(seg01) - 10, length = -0.5) |> angledLine(angle = tangentToEnd(seg01) - 10deg, length = -0.5)
|> tangentialArc(endAbsolute = [-0.91, 12.78], tag = $seg03) |> tangentialArc(endAbsolute = [-0.91, 12.78], tag = $seg03)
|> tangentialArc(endAbsolute = [-1.67, 12.85]) |> tangentialArc(endAbsolute = [-1.67, 12.85])
|> xLine(length = -.25) |> xLine(length = -.25)
|> tangentialArc(angle = 90, radius = .05) |> tangentialArc(angle = 90deg, radius = .05)
|> yLine(length = -1.125, tag = $seg02) |> yLine(length = -1.125, tag = $seg02)
|> tangentialArc(angle = 90, radius = .05) |> tangentialArc(angle = 90deg, radius = .05)
|> xLine(length = .25, tag = $seg04) |> xLine(length = .25, tag = $seg04)
|> angledLine(angle = 23, length = 0.1) |> angledLine(angle = 23deg, length = 0.1)
|> tangentialArc(endAbsolute = [-0.33, profileStartY(%)]) |> tangentialArc(endAbsolute = [-0.33, profileStartY(%)])
|> xLine(endAbsolute = profileStartX(%)) |> xLine(endAbsolute = profileStartX(%))
|> close() |> close()
@ -31,8 +31,8 @@ leftSideCut = startProfile(headTopProfile, at = [-4, -1.6])
|> line(endAbsolute = [segEndX(seg02), -segLen(seg02) / 2]) |> line(endAbsolute = [segEndX(seg02), -segLen(seg02) / 2])
|> arc( |> arc(
%, %,
angleStart = 180, angleStart = 180deg,
angleEnd = 270, angleEnd = 270deg,
radius = .05, radius = .05,
) )
|> xLine(endAbsolute = segEndX(seg04)) |> xLine(endAbsolute = segEndX(seg04))
@ -44,7 +44,7 @@ leftSideCut = startProfile(headTopProfile, at = [-4, -1.6])
|> extrude(length = -14) |> extrude(length = -14)
rearCut = startProfile(headTopProfile, at = [3.39, -0.56]) rearCut = startProfile(headTopProfile, at = [3.39, -0.56])
|> angledLine(angle = 177, length = 0.1) |> angledLine(angle = 177deg, length = 0.1)
|> tangentialArc(endAbsolute = [1.86, -0.37]) |> tangentialArc(endAbsolute = [1.86, -0.37])
|> tangentialArc(endAbsolute = [lastSegX(%), -lastSegY(%)]) |> tangentialArc(endAbsolute = [lastSegX(%), -lastSegY(%)])
|> tangentialArc(endAbsolute = [profileStartX(%), -profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), -profileStartY(%)])
@ -56,8 +56,8 @@ rightSideCut = startProfile(headTopProfile, at = [-4, 1.6])
|> line(endAbsolute = [segEndX(seg02), segLen(seg02) / 2]) |> line(endAbsolute = [segEndX(seg02), segLen(seg02) / 2])
|> arc( |> arc(
%, %,
angleStart = -180, angleStart = -180deg,
angleEnd = -270, angleEnd = -270deg,
radius = .05, radius = .05,
) )
|> xLine(endAbsolute = segEndX(seg04)) |> xLine(endAbsolute = segEndX(seg04))
@ -108,11 +108,11 @@ hammerHead = union([firstProfiles, baseSupport])
handleSketch = startSketchOn(XZ) handleSketch = startSketchOn(XZ)
|> startProfile(at = [0.01, 0]) |> startProfile(at = [0.01, 0])
|> xLine(length = 1.125 / 2) |> xLine(length = 1.125 / 2)
|> tangentialArc(angle = 90, radius = 0.05) |> tangentialArc(angle = 90deg, radius = 0.05)
|> tangentialArc(endAbsolute = [0.38, 12.8 / 1.612]) |> tangentialArc(endAbsolute = [0.38, 12.8 / 1.612])
|> tangentialArc(endAbsolute = [0.28, 12.8]) |> tangentialArc(endAbsolute = [0.28, 12.8])
|> xLine(endAbsolute = profileStartX(%)) |> xLine(endAbsolute = profileStartX(%))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
handle = revolve(handleSketch, angle = 360, axis = Y) handle = revolve(handleSketch, angle = 360deg, axis = Y)
|> appearance(color = "#f14f04") |> appearance(color = "#f14f04")

View File

@ -29,8 +29,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth) |> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth) |> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth) |> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close() |> close()
// Define a function to create a rotated gear sketch on an offset plane // Define a function to create a rotated gear sketch on an offset plane
@ -47,7 +47,7 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc, angle = helixCalc,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
@ -56,14 +56,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -93,7 +93,7 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
helicalGear( helicalGear(
nTeeth = 21, nTeeth = 21,
module = 2, module = 2,
pressureAngle = 20, pressureAngle = 20deg,
helixAngle = 35, helixAngle = 35deg,
gearHeight = 7, gearHeight = 7,
) )

View File

@ -29,8 +29,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth) |> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth) |> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth) |> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close() |> close()
// Define a function to create a rotated gear sketch on an offset plane // Define a function to create a rotated gear sketch on an offset plane
@ -47,7 +47,7 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc, angle = helixCalc,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
@ -56,14 +56,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -113,7 +113,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc, angle = helixCalc,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 200 / nTeeth + helixCalc, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 200deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
@ -129,7 +129,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -164,8 +164,8 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
ringGear( ringGear(
nTeeth = 42, nTeeth = 42,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
helixAngle = -25, helixAngle = -25deg,
gearHeight = 5, gearHeight = 5,
) )
@ -173,8 +173,8 @@ ringGear(
helicalGear( helicalGear(
nTeeth = 12, nTeeth = 12,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
helixAngle = 25, helixAngle = 25deg,
gearHeight = 5, gearHeight = 5,
) )
@ -183,8 +183,8 @@ numPlanetGears = 3
helicalGear( helicalGear(
nTeeth = 12, nTeeth = 12,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
helixAngle = -25, helixAngle = -25deg,
gearHeight = 5, gearHeight = 5,
) )
|> translate(y = (12 + 12) / 2 * 1.5 + 2.7) |> translate(y = (12 + 12) / 2 * 1.5 + 2.7)
@ -192,6 +192,6 @@ helicalGear(
instances = numPlanetGears, instances = numPlanetGears,
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, 0], center = [0, 0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = false, rotateDuplicates = false,
) )

View File

@ -17,26 +17,26 @@ tankSketch = startSketchOn(YZ)
|> startProfile(at = [portDiameter / 2, tankHeight]) |> startProfile(at = [portDiameter / 2, tankHeight])
|> yLine(length = -0.6) |> yLine(length = -0.6)
|> xLine(length = 0.1) |> xLine(length = 0.1)
|> tangentialArc(angle = -110, radius = 0.1) |> tangentialArc(angle = -110deg, radius = 0.1)
|> tangentialArc(angle = 40, radius = 0.6) |> tangentialArc(angle = 40deg, radius = 0.6)
|> tangentialArc(angle = -110, radius = 0.1) |> tangentialArc(angle = -110deg, radius = 0.1)
|> tangentialArc(angle = 180, radius = 0.1) |> tangentialArc(angle = 180deg, radius = 0.1)
|> tangentialArc(angle = -90, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01) |> tangentialArc(angle = -90deg, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01)
|> angledLine(angle = tangentToEnd(seg01), endAbsoluteY = 1.5, tag = $seg09) |> angledLine(angle = tangentToEnd(seg01), endAbsoluteY = 1.5, tag = $seg09)
|> tangentialArc(angle = -90, radius = 2, tag = $seg02) |> tangentialArc(angle = -90deg, radius = 2, tag = $seg02)
|> angledLine(angle = tangentToEnd(seg02), endAbsoluteX = 0.001, tag = $seg08) |> angledLine(angle = tangentToEnd(seg02), endAbsoluteX = 0.001, tag = $seg08)
|> yLine(length = wallThickness) |> yLine(length = wallThickness)
|> xLine(length = segLen(seg08)) |> xLine(length = segLen(seg08))
|> tangentialArc(angle = 90, radius = 2 - wallThickness) |> tangentialArc(angle = 90deg, radius = 2 - wallThickness)
|> yLine(length = segLen(seg09)) |> yLine(length = segLen(seg09))
|> tangentialArc(angle = 90, radius = tankDiameter / 2 - wallThickness - 1.3) |> tangentialArc(angle = 90deg, radius = tankDiameter / 2 - wallThickness - 1.3)
|> xLine(endAbsolute = profileStartX(%) - .1) |> xLine(endAbsolute = profileStartX(%) - .1)
|> yLine(endAbsolute = profileStartY(%)) |> yLine(endAbsolute = profileStartY(%))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
// Only revolving to 220deg so that the interior of the tank is visible. It should ultimately be closed at 360deg // Only revolving to 220deg so that the interior of the tank is visible. It should ultimately be closed at 360deg
tankRevolve = revolve(tankSketch, angle = 220, axis = Y) tankRevolve = revolve(tankSketch, angle = 220deg, axis = Y)
// Model the brass valve on top of the tank port // Model the brass valve on top of the tank port
valveBody = startSketchOn(offsetPlane(XY, offset = tankHeight - 0.5)) valveBody = startSketchOn(offsetPlane(XY, offset = tankHeight - 0.5))
@ -61,10 +61,10 @@ valve = union([valveBody, valvePort])
bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67)) bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))
|> startProfile(at = [0, tankDiameter / 2 + wallThickness]) |> startProfile(at = [0, tankDiameter / 2 + wallThickness])
|> xLine(length = -0.1) |> xLine(length = -0.1)
|> tangentialArc(angle = 35, radius = tankDiameter / 2 + wallThickness) |> tangentialArc(angle = 35deg, radius = tankDiameter / 2 + wallThickness)
|> tangentialArc(angle = -135, radius = 0.25 - wallThickness, tag = $seg06) |> tangentialArc(angle = -135deg, radius = 0.25 - wallThickness, tag = $seg06)
|> angledLine(angle = tangentToEnd(seg06), length = tankDiameter / 7) |> angledLine(angle = tangentToEnd(seg06), length = tankDiameter / 7)
|> tangentialArc(angle = -80, radius = 0.25 - wallThickness, tag = $seg07) |> tangentialArc(angle = -80deg, radius = 0.25 - wallThickness, tag = $seg07)
|> angledLine(angle = tangentToEnd(seg07), endAbsoluteX = 0) |> angledLine(angle = tangentToEnd(seg07), endAbsoluteX = 0)
|> mirror2d(axis = Y) |> mirror2d(axis = Y)
|> close() |> close()
@ -73,10 +73,10 @@ bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67)
bracketProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67)) bracketProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))
|> startProfile(at = [0, tankDiameter / 2]) |> startProfile(at = [0, tankDiameter / 2])
|> xLine(length = -0.1) |> xLine(length = -0.1)
|> tangentialArc(angle = 35, radius = tankDiameter / 2) |> tangentialArc(angle = 35deg, radius = tankDiameter / 2)
|> tangentialArc(angle = -135, radius = 0.25, tag = $seg04) |> tangentialArc(angle = -135deg, radius = 0.25, tag = $seg04)
|> angledLine(angle = tangentToEnd(seg04), length = tankDiameter / 7) |> angledLine(angle = tangentToEnd(seg04), length = tankDiameter / 7)
|> tangentialArc(angle = -80, radius = 0.25, tag = $seg05) |> tangentialArc(angle = -80deg, radius = 0.25, tag = $seg05)
|> angledLine(angle = tangentToEnd(seg05), endAbsoluteX = 0) |> angledLine(angle = tangentToEnd(seg05), endAbsoluteX = 0)
|> mirror2d(axis = Y) |> mirror2d(axis = Y)
|> close() |> close()

View File

@ -27,7 +27,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc, angle = helixCalc,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
@ -36,14 +36,14 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -78,7 +78,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
herringboneGear( herringboneGear(
nTeeth = 25, nTeeth = 25,
module = 1, module = 1,
pressureAngle = 14, pressureAngle = 14deg,
helixAngle = 40, helixAngle = 40deg,
gearHeight = 8, gearHeight = 8,
) )

View File

@ -27,7 +27,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc, angle = helixCalc,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
@ -36,14 +36,14 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -98,7 +98,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc, angle = helixCalc,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 220 / nTeeth + helixCalc, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 220deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
@ -107,14 +107,14 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -153,8 +153,8 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
ringGear( ringGear(
nTeeth = 58, nTeeth = 58,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
helixAngle = -35, helixAngle = -35deg,
gearHeight = 8, gearHeight = 8,
) )
@ -162,8 +162,8 @@ ringGear(
herringboneGear( herringboneGear(
nTeeth = 18, nTeeth = 18,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
helixAngle = 35, helixAngle = 35deg,
gearHeight = 8, gearHeight = 8,
) )
@ -172,8 +172,8 @@ numPlanetGears = 4
herringboneGear( herringboneGear(
nTeeth = 18, nTeeth = 18,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
helixAngle = -35, helixAngle = -35deg,
gearHeight = 8, gearHeight = 8,
) )
|> translate(y = 18 * 1.5 + 1.95) |> translate(y = 18 * 1.5 + 1.95)
@ -181,6 +181,6 @@ herringboneGear(
instances = numPlanetGears, instances = numPlanetGears,
axis = [0, 0, 1], axis = [0, 0, 1],
center = [0, 0, 0], center = [0, 0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = false, rotateDuplicates = false,
) )

View File

@ -18,7 +18,7 @@ iBeam = startSketchOn(-XZ)
|> xLine(length = flangeWidth / 2) |> xLine(length = flangeWidth / 2)
|> yLine(length = -flangeThickness) |> yLine(length = -flangeThickness)
|> xLine(endAbsolute = webThickness / 2 + rootRadius) |> xLine(endAbsolute = webThickness / 2 + rootRadius)
|> tangentialArc(radius = rootRadius, angle = 90) |> tangentialArc(radius = rootRadius, angle = 90deg)
|> yLine(endAbsolute = 0) |> yLine(endAbsolute = 0)
|> mirror2d(axis = X) |> mirror2d(axis = X)
|> mirror2d(axis = Y) |> mirror2d(axis = Y)

View File

@ -22,7 +22,7 @@ row6 = row5 + keyHeight + spacing
sketch001 = startSketchOn(YZ) sketch001 = startSketchOn(YZ)
|> startProfile(at = [0, 0]) |> startProfile(at = [0, 0])
|> line(end = [-0.14, 0.68], tag = $seg01) |> line(end = [-0.14, 0.68], tag = $seg01)
|> angledLine(angle = 7, length = row6 + 3 * spacing + keyHeight, tag = $seg02) |> angledLine(angle = 7deg, length = row6 + 3 * spacing + keyHeight, tag = $seg02)
|> line(endAbsolute = [5.13, 0], tag = $seg03) |> line(endAbsolute = [5.13, 0], tag = $seg03)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg04) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg04)
|> close() |> close()
@ -66,13 +66,13 @@ plane001 = {
fn keyFn(originStart, keyWidth, keyHeight, repeats, color) { fn keyFn(originStart, keyWidth, keyHeight, repeats, color) {
sketch002 = startSketchOn(plane001) sketch002 = startSketchOn(plane001)
profile002 = startProfile(sketch002, at = [originStart[0], originStart[1]]) profile002 = startProfile(sketch002, at = [originStart[0], originStart[1]])
|> arc(angleStart = 180, angleEnd = 270, radius = 0.1) |> arc(angleStart = 180deg, angleEnd = 270deg, radius = 0.1)
|> angledLine(angle = 0, length = keyWidth - .2, tag = $rectangleSegmentA001) |> angledLine(angle = 0, length = keyWidth - .2, tag = $rectangleSegmentA001)
|> tangentialArc(radius = 0.1, angle = 90) |> tangentialArc(radius = 0.1, angle = 90deg)
|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = keyHeight - .2, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = keyHeight - .2, tag = $rectangleSegmentB001)
|> tangentialArc(radius = 0.1, angle = 90) |> tangentialArc(radius = 0.1, angle = 90deg)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|> tangentialArc(radius = 0.1, angle = 90) |> tangentialArc(radius = 0.1, angle = 90deg)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001)
|> close() |> close()
|> extrude(length = keyDepth) |> extrude(length = keyDepth)
@ -263,15 +263,15 @@ fn z(origin, scale, depth) {
]) ])
|> yLine(length = -0.15 * scale) |> yLine(length = -0.15 * scale)
|> xLine(length = 0.15 * scale) |> xLine(length = 0.15 * scale)
|> angledLine(angle = 47.15, endAbsoluteX = 0.3 * scale + origin[0], tag = $seg1) |> angledLine(angle = 47.15deg, endAbsoluteX = 0.3 * scale + origin[0], tag = $seg1)
|> yLine(endAbsolute = 0 + origin[1], tag = $seg3) |> yLine(endAbsolute = 0 + origin[1], tag = $seg3)
|> xLine(length = 0.63 * scale) |> xLine(length = 0.63 * scale)
|> yLine(length = 0.225 * scale) |> yLine(length = 0.225 * scale)
|> xLine(length = -0.57 * scale) |> xLine(length = -0.57 * scale)
|> angledLine(angle = 47.15, endAbsoluteX = 0.93 * scale + origin[0]) |> angledLine(angle = 47.15deg, endAbsoluteX = 0.93 * scale + origin[0])
|> yLine(length = 0.15 * scale) |> yLine(length = 0.15 * scale)
|> xLine(length = -0.15 * scale) |> xLine(length = -0.15 * scale)
|> angledLine(angle = 47.15, length = -segLen(seg1), tag = $seg2) |> angledLine(angle = 47.15deg, length = -segLen(seg1), tag = $seg2)
|> yLine(length = segLen(seg3)) |> yLine(length = segLen(seg3))
|> xLine(endAbsolute = 0 + origin[0]) |> xLine(endAbsolute = 0 + origin[0])
|> yLine(length = -0.225 * scale) |> yLine(length = -0.225 * scale)
@ -289,9 +289,9 @@ fn o(origin, scale, depth) {
.788 * scale + origin[0], .788 * scale + origin[0],
.921 * scale + origin[1] .921 * scale + origin[1]
]) ])
|> arc(angleStart = 47.15 + 6, angleEnd = 47.15 - 6 + 180, radius = .525 * scale) |> arc(angleStart = 47.15deg + 6deg, angleEnd = 47.15deg - 6deg + 180deg, radius = .525 * scale)
|> angledLine(angle = 47.15, length = .24 * scale) |> angledLine(angle = 47.15deg, length = .24 * scale)
|> arc(angleStart = 47.15 - 11 + 180, angleEnd = 47.15 + 11, radius = .288 * scale) |> arc(angleStart = 47.15deg - 11deg + 180deg, angleEnd = 47.15deg + 11deg, radius = .288 * scale)
|> close() |> close()
|> extrude(length = -depth) |> extrude(length = -depth)
|> appearance(color = baseColor) |> appearance(color = baseColor)
@ -301,9 +301,9 @@ fn o(origin, scale, depth) {
.16 * scale + origin[0], .16 * scale + origin[0],
.079 * scale + origin[1] .079 * scale + origin[1]
]) ])
|> arc(angleStart = 47.15 + 6 - 180, angleEnd = 47.15 - 6, radius = .525 * scale) |> arc(angleStart = 47.15deg + 6deg - 180deg, angleEnd = 47.15deg - 6deg, radius = .525 * scale)
|> angledLine(angle = 47.15, length = -.24 * scale) |> angledLine(angle = 47.15deg, length = -.24 * scale)
|> arc(angleStart = 47.15 - 11, angleEnd = 47.15 + 11 - 180, radius = .288 * scale) |> arc(angleStart = 47.15deg - 11deg, angleEnd = 47.15deg + 11deg - 180deg, radius = .288 * scale)
|> close() |> close()
|> extrude(length = -depth) |> extrude(length = -depth)
|> appearance(color = baseColor) |> appearance(color = baseColor)

View File

@ -17,21 +17,21 @@ frontLength = 7
sketch001 = startSketchOn(-YZ) sketch001 = startSketchOn(-YZ)
|> startProfile(at = [wallsWidth / 2, 0]) |> startProfile(at = [wallsWidth / 2, 0])
|> xLine(length = wallThickness / 2) |> xLine(length = wallThickness / 2)
|> angledLine(angle = 60, endAbsoluteX = wallsWidth, tag = $seg01) |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth, tag = $seg01)
|> yLine(endAbsolute = height) |> yLine(endAbsolute = height)
|> xLine(length = -wallThickness) |> xLine(length = -wallThickness)
|> yLine(endAbsolute = segEndY(seg01)) |> yLine(endAbsolute = segEndY(seg01))
|> angledLine(angle = 60, endAbsoluteX = wallsWidth / 2 + wallThickness / 2) |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth / 2 + wallThickness / 2)
|> xLine(length = -wallThickness) |> xLine(length = -wallThickness)
|> angledLine(angle = 180 - 60, endAbsoluteX = wallThickness) |> angledLine(angle = 180deg - 60deg, endAbsoluteX = wallThickness)
|> yLine(endAbsolute = height) |> yLine(endAbsolute = height)
|> xLine(endAbsolute = 0) |> xLine(endAbsolute = 0)
|> yLine(endAbsolute = segEndY(seg01)) |> yLine(endAbsolute = segEndY(seg01))
|> angledLine(angle = 180 - 60, endAbsoluteY = 0) |> angledLine(angle = 180deg - 60deg, endAbsoluteY = 0)
|> close() |> close()
part001 = revolve( part001 = revolve(
sketch001, sketch001,
angle = 90, angle = 90deg,
axis = { axis = {
direction = [1.0, 0.0], direction = [1.0, 0.0],
origin = [0.0, height + .0001] origin = [0.0, height + .0001]
@ -41,17 +41,17 @@ part001 = revolve(
sketch002 = startSketchOn(-YZ) sketch002 = startSketchOn(-YZ)
|> startProfile(at = [wallsWidth / 2, 0]) |> startProfile(at = [wallsWidth / 2, 0])
|> xLine(length = wallThickness / 2) |> xLine(length = wallThickness / 2)
|> angledLine(angle = 60, endAbsoluteX = wallsWidth, tag = $seg02) |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth, tag = $seg02)
|> yLine(endAbsolute = height) |> yLine(endAbsolute = height)
|> xLine(length = -wallThickness) |> xLine(length = -wallThickness)
|> yLine(endAbsolute = segEndY(seg01)) |> yLine(endAbsolute = segEndY(seg01))
|> angledLine(angle = 60, endAbsoluteX = wallsWidth / 2 + wallThickness / 2) |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth / 2 + wallThickness / 2)
|> xLine(length = -wallThickness) |> xLine(length = -wallThickness)
|> angledLine(angle = 180 - 60, endAbsoluteX = wallThickness) |> angledLine(angle = 180deg - 60deg, endAbsoluteX = wallThickness)
|> yLine(endAbsolute = height) |> yLine(endAbsolute = height)
|> xLine(endAbsolute = 0) |> xLine(endAbsolute = 0)
|> yLine(endAbsolute = segEndY(seg02)) |> yLine(endAbsolute = segEndY(seg02))
|> angledLine(angle = 180 - 60, endAbsoluteY = 0) |> angledLine(angle = 180deg - 60deg, endAbsoluteY = 0)
|> close() |> close()
|> extrude(length = backLength - height) |> extrude(length = backLength - height)
@ -66,8 +66,8 @@ customPlane = {
} }
sketch003 = startSketchOn(customPlane) sketch003 = startSketchOn(customPlane)
|> startProfile(at = [0, 0]) |> startProfile(at = [0, 0])
|> tangentialArc(angle = 60, radius = height) |> tangentialArc(angle = 60deg, radius = height)
|> angledLine(angle = 60, endAbsoluteY = 0) |> angledLine(angle = 60deg, endAbsoluteY = 0)
|> close() |> close()
|> extrude(length = wallThickness) |> extrude(length = wallThickness)
@ -77,9 +77,9 @@ sketch004 = startSketchOn(sketch002, face = END)
|> yLine(endAbsolute = height) |> yLine(endAbsolute = height)
|> xLine(endAbsolute = wallThickness) |> xLine(endAbsolute = wallThickness)
|> yLine(endAbsolute = segEndY(seg01)) |> yLine(endAbsolute = segEndY(seg01))
|> angledLine(angle = 180 - 60, endAbsoluteX = wallsWidth / 2 - (wallThickness / 2)) |> angledLine(angle = 180deg - 60deg, endAbsoluteX = wallsWidth / 2 - (wallThickness / 2))
|> xLine(length = wallThickness) |> xLine(length = wallThickness)
|> angledLine(angle = 60, endAbsoluteY = segEndY(seg01)) |> angledLine(angle = 60deg, endAbsoluteY = segEndY(seg01))
|> yLine(endAbsolute = height) |> yLine(endAbsolute = height)
|> xLine(length = wallThickness) |> xLine(length = wallThickness)
|> tangentialArc(endAbsolute = [ |> tangentialArc(endAbsolute = [

View File

@ -10,10 +10,10 @@ r1 = 3
stemLoftProfile1 = startSketchOn(XY) stemLoftProfile1 = startSketchOn(XY)
|> startProfile(at = [-3, -l1 / 2]) |> startProfile(at = [-3, -l1 / 2])
|> yLine(length = l1, tag = $seg01) |> yLine(length = l1, tag = $seg01)
|> tangentialArc(angle = -120, radius = r1) |> tangentialArc(angle = -120deg, radius = r1)
|> angledLine(angle = -30, length = segLen(seg01)) |> angledLine(angle = -30deg, length = segLen(seg01))
|> tangentialArc(angle = -120, radius = r1) |> tangentialArc(angle = -120deg, radius = r1)
|> angledLine(angle = 30, length = -segLen(seg01)) |> angledLine(angle = 30deg, length = -segLen(seg01))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -23,10 +23,10 @@ r2 = 3
stemLoftProfile2 = startSketchOn(offsetPlane(XY, offset = 75)) stemLoftProfile2 = startSketchOn(offsetPlane(XY, offset = 75))
|> startProfile(at = [-8, -l2 / 2]) |> startProfile(at = [-8, -l2 / 2])
|> yLine(length = l2, tag = $seg02) |> yLine(length = l2, tag = $seg02)
|> tangentialArc(angle = -120, radius = r2) |> tangentialArc(angle = -120deg, radius = r2)
|> angledLine(angle = -30, length = segLen(seg02)) |> angledLine(angle = -30deg, length = segLen(seg02))
|> tangentialArc(angle = -120, radius = r2) |> tangentialArc(angle = -120deg, radius = r2)
|> angledLine(angle = 30, length = -segLen(seg02)) |> angledLine(angle = 30deg, length = -segLen(seg02))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -38,10 +38,10 @@ r3 = 4
stemLoftProfile3 = startSketchOn(XY) stemLoftProfile3 = startSketchOn(XY)
|> startProfile(at = [-15.5, -l3 / 2]) |> startProfile(at = [-15.5, -l3 / 2])
|> yLine(length = l3, tag = $seg03) |> yLine(length = l3, tag = $seg03)
|> tangentialArc(angle = -120, radius = r3) |> tangentialArc(angle = -120deg, radius = r3)
|> angledLine(angle = -30, length = segLen(seg03)) |> angledLine(angle = -30deg, length = segLen(seg03))
|> tangentialArc(angle = -120, radius = r3) |> tangentialArc(angle = -120deg, radius = r3)
|> angledLine(angle = 30, length = -segLen(seg03)) |> angledLine(angle = 30deg, length = -segLen(seg03))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p3Z) |> translate(z = p3Z)
@ -54,10 +54,10 @@ r4 = 5
stemLoftProfile4 = startSketchOn(XY) stemLoftProfile4 = startSketchOn(XY)
|> startProfile(at = [-23, -l4 / 2]) |> startProfile(at = [-23, -l4 / 2])
|> yLine(length = l4, tag = $seg04) |> yLine(length = l4, tag = $seg04)
|> tangentialArc(angle = -120, radius = r4) |> tangentialArc(angle = -120deg, radius = r4)
|> angledLine(angle = -30, length = segLen(seg04)) |> angledLine(angle = -30deg, length = segLen(seg04))
|> tangentialArc(angle = -120, radius = r4) |> tangentialArc(angle = -120deg, radius = r4)
|> angledLine(angle = 30, length = -segLen(seg04)) |> angledLine(angle = 30deg, length = -segLen(seg04))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p4Z) |> translate(z = p4Z)
@ -70,10 +70,10 @@ r5 = 1.6
stemLoftProfile5 = startSketchOn(XY) stemLoftProfile5 = startSketchOn(XY)
|> startProfile(at = [-19.5, -l5 / 2]) |> startProfile(at = [-19.5, -l5 / 2])
|> yLine(length = l5, tag = $seg05) |> yLine(length = l5, tag = $seg05)
|> tangentialArc(angle = -120, radius = r5) |> tangentialArc(angle = -120deg, radius = r5)
|> angledLine(angle = -30, length = segLen(seg05)) |> angledLine(angle = -30deg, length = segLen(seg05))
|> tangentialArc(angle = -120, radius = r5) |> tangentialArc(angle = -120deg, radius = r5)
|> angledLine(angle = 30, length = -segLen(seg05)) |> angledLine(angle = 30deg, length = -segLen(seg05))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p5Z) |> translate(z = p5Z)
@ -86,10 +86,10 @@ r6 = 3
stemLoftProfile6 = startSketchOn(XY) stemLoftProfile6 = startSketchOn(XY)
|> startProfile(at = [-23.4, -l6 / 2]) |> startProfile(at = [-23.4, -l6 / 2])
|> yLine(length = l6, tag = $seg06) |> yLine(length = l6, tag = $seg06)
|> tangentialArc(angle = -120, radius = r6) |> tangentialArc(angle = -120deg, radius = r6)
|> angledLine(angle = -30, length = segLen(seg06)) |> angledLine(angle = -30deg, length = segLen(seg06))
|> tangentialArc(angle = -120, radius = r6) |> tangentialArc(angle = -120deg, radius = r6)
|> angledLine(angle = 30, length = -segLen(seg06)) |> angledLine(angle = 30deg, length = -segLen(seg06))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> translate(z = p6Z) |> translate(z = p6Z)
@ -114,13 +114,13 @@ stemTab = stemLoftProfile6
femoralHead = startSketchOn(XZ) femoralHead = startSketchOn(XZ)
|> startProfile(at = [4, 0]) |> startProfile(at = [4, 0])
|> xLine(length = 1.1) |> xLine(length = 1.1)
|> tangentialArc(angle = 90, radius = 3) |> tangentialArc(angle = 90deg, radius = 3)
|> tangentialArc(angle = 90, radius = 8) |> tangentialArc(angle = 90deg, radius = 8)
|> yLine(length = -1) |> yLine(length = -1)
|> tangentialArc(angle = 90, radius = .1) |> tangentialArc(angle = 90deg, radius = .1)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> revolve(angle = 360, axis = Y) |> revolve(angle = 360deg, axis = Y)
|> translate(x = -16.1, z = 133) |> translate(x = -16.1, z = 133)
|> rotate(pitch = -36.5) |> rotate(pitch = -36.5)
|> appearance(color = "#d64398") |> appearance(color = "#d64398")
@ -135,7 +135,7 @@ polyethyleneInsert = startSketchOn(XZ)
|> xLine(length = 0.58) |> xLine(length = 0.58)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> revolve(angle = 360, axis = Y) |> revolve(angle = 360deg, axis = Y)
|> translate(x = -16.1, z = 133) |> translate(x = -16.1, z = 133)
|> rotate(pitch = -36.5) |> rotate(pitch = -36.5)
|> appearance(color = "#3cadd3") |> appearance(color = "#3cadd3")
@ -150,7 +150,7 @@ acetabularShell = startSketchOn(XZ)
|> xLine(length = 0.1) |> xLine(length = 0.1)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> revolve(angle = 360, axis = Y) |> revolve(angle = 360deg, axis = Y)
|> translate(x = -16.1, z = 133) |> translate(x = -16.1, z = 133)
|> rotate(pitch = -36.5) |> rotate(pitch = -36.5)
|> appearance(color = "#a55e2c") |> appearance(color = "#a55e2c")

View File

@ -16,7 +16,7 @@ componentBoltPatternY = 3
// Define bracket parameters such as sheet metal thickness, bend radius, flange length, etc. // Define bracket parameters such as sheet metal thickness, bend radius, flange length, etc.
hatHeight = 2.5 hatHeight = 2.5
bendAngle = 75 bendAngle = 75deg
thickness = 0.125 thickness = 0.125
interiorBendRadius = 0.125 interiorBendRadius = 0.125
@ -49,12 +49,12 @@ bracketProfile = startSketchOn(XZ)
|> yLine(length = thickness, tag = $seg03) |> yLine(length = thickness, tag = $seg03)
|> xLine(length = -flangeLength, tag = $seg04) |> xLine(length = -flangeLength, tag = $seg04)
|> tangentialArc(radius = interiorBendRadius, angle = -bendAngle) |> tangentialArc(radius = interiorBendRadius, angle = -bendAngle)
|> angledLine(angle = 180 - bendAngle, length = segLen(seg01)) |> angledLine(angle = 180deg - bendAngle, length = segLen(seg01))
|> tangentialArc(radius = exteriorBendRadius, angle = bendAngle) |> tangentialArc(radius = exteriorBendRadius, angle = bendAngle)
|> xLine(endAbsolute = 0, tag = $seg05) |> xLine(endAbsolute = 0, tag = $seg05)
|> xLine(length = -segLen(seg05)) |> xLine(length = -segLen(seg05))
|> tangentialArc(radius = exteriorBendRadius, angle = bendAngle) |> tangentialArc(radius = exteriorBendRadius, angle = bendAngle)
|> angledLine(angle = bendAngle - 180, length = segLen(seg01)) |> angledLine(angle = bendAngle - 180deg, length = segLen(seg01))
|> tangentialArc(radius = interiorBendRadius, angle = -bendAngle) |> tangentialArc(radius = interiorBendRadius, angle = -bendAngle)
|> xLine(length = -flangeLength, tag = $seg06) |> xLine(length = -flangeLength, tag = $seg06)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07)

View File

@ -10,8 +10,8 @@ hookRadius = 12
shankLength = 5 shankLength = 5
threadedEndLength = 30 threadedEndLength = 30
nutDistance = 20 nutDistance = 20
hookStartAngle = 290 hookStartAngle = 290deg
hookEndAngle = 150 hookEndAngle = 150deg
approximatePitch = boltDiameter * 0.15 approximatePitch = boltDiameter * 0.15
threadDepth = 0.6134 * approximatePitch threadDepth = 0.6134 * approximatePitch
@ -19,7 +19,7 @@ innerRadius = boltDiameter / 2 - threadDepth
boltNumberOfRevolutions = threadedEndLength / approximatePitch boltNumberOfRevolutions = threadedEndLength / approximatePitch
// Helper values for computing geometry transitions between straight shaft and hook arc // Helper values for computing geometry transitions between straight shaft and hook arc
hypotenuse = hookRadius / cos(hookStartAngle - 270) hypotenuse = hookRadius / cos(hookStartAngle - 270deg)
side = sqrt(pow(hypotenuse, exp = 2) - pow(hookRadius, exp = 2)) side = sqrt(pow(hypotenuse, exp = 2) - pow(hookRadius, exp = 2))
shankOffset = hypotenuse + side shankOffset = hypotenuse + side
@ -86,4 +86,4 @@ boltThreadSectionShapeForRevolve = startProfile(
|> close() |> close()
// Create a revolved solid representing the thread geometry by repeating and revolving the profile around the shaft // Create a revolved solid representing the thread geometry by repeating and revolving the profile around the shaft
boltThreadRevolve = revolve(boltThreadSectionShapeForRevolve, angle = 360, axis = Y) boltThreadRevolve = revolve(boltThreadSectionShapeForRevolve, angle = 360deg, axis = Y)

View File

@ -29,8 +29,8 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
|> xLine(length = keywayDepth) |> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth) |> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth) |> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close() |> close()
// Using the gear parameters, sketch an involute tooth spanning from the base diameter to the tip diameter // Using the gear parameters, sketch an involute tooth spanning from the base diameter to the tip diameter
@ -42,21 +42,21 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
angle = 0, angle = 0,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 160 / nTeeth, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 160deg / nTeeth, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180 / nTeeth), angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180deg / nTeeth),
reverse = true, reverse = true,
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -71,6 +71,6 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
spurGear( spurGear(
nTeeth = 21, nTeeth = 21,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
gearHeight = 6, gearHeight = 6,
) )

View File

@ -22,21 +22,21 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
angle = 0, angle = 0,
tag = $seg01, tag = $seg01,
) )
|> line(endAbsolute = polar(angle = 160 / nTeeth, length = tipDiameter / 2)) |> line(endAbsolute = polar(angle = 160deg / nTeeth, length = tipDiameter / 2))
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180 / nTeeth), angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180deg / nTeeth),
reverse = true, reverse = true,
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -52,7 +52,7 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
spurGear( spurGear(
nTeeth = 17, nTeeth = 17,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
gearHeight = 9, gearHeight = 9,
) )
@ -60,7 +60,7 @@ spurGear(
spurGear( spurGear(
nTeeth = 51, nTeeth = 51,
module = 1.5, module = 1.5,
pressureAngle = 14, pressureAngle = 14deg,
gearHeight = 7, gearHeight = 7,
) )
// Translate the larger gear by the combined pitch radius of both gears, plus a small gap // Translate the larger gear by the combined pitch radius of both gears, plus a small gap

View File

@ -19,10 +19,10 @@ bracket = startSketchOn(YZ)
|> xLine(length = handleLength, tag = $seg02) |> xLine(length = handleLength, tag = $seg02)
|> yLine(length = stockThickness, tag = $seg06) |> yLine(length = stockThickness, tag = $seg06)
|> xLine(length = -segLen(seg02), tag = $seg04) |> xLine(length = -segLen(seg02), tag = $seg04)
|> tangentialArc(angle = -60, radius = bendRadius, tag = $seg01) |> tangentialArc(angle = -60deg, radius = bendRadius, tag = $seg01)
|> angledLine(angle = tangentToEnd(seg01), length = handleLength / 3, tag = $seg03) |> angledLine(angle = tangentToEnd(seg01), length = handleLength / 3, tag = $seg03)
|> angledLine(angle = tangentToEnd(seg01) + 90, length = stockThickness, tag = $seg05) |> angledLine(angle = tangentToEnd(seg01) + 90deg, length = stockThickness, tag = $seg05)
|> angledLine(angle = segAng(seg03) + 180, length = segLen(seg03), tag = $seg07) |> angledLine(angle = segAng(seg03) + 180deg, length = segLen(seg03), tag = $seg07)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
|> extrude( |> extrude(

View File

@ -15,17 +15,17 @@ fn railTslot(railHeight, railLength) {
railProfile = startSketchOn(XZ) railProfile = startSketchOn(XZ)
|> startProfile(at = [0.5, (1 - 0.356) / 2]) |> startProfile(at = [0.5, (1 - 0.356) / 2])
|> xLine(length = -0.08) |> xLine(length = -0.08)
|> tangentialArc(angle = 45, radius = .09) |> tangentialArc(angle = 45deg, radius = .09)
|> angledLine(angle = 45, endAbsoluteY = 0.113) |> angledLine(angle = 45deg, endAbsoluteY = 0.113)
|> tangentialArc(angle = 135, radius = interiorRadius) |> tangentialArc(angle = 135deg, radius = interiorRadius)
|> xLine(endAbsolute = .5 - (.320 / 2) - interiorRadius) |> xLine(endAbsolute = .5 - (.320 / 2) - interiorRadius)
|> tangentialArc(angle = -90, radius = interiorRadius) |> tangentialArc(angle = -90deg, radius = interiorRadius)
|> yLine(endAbsolute = interiorRadius) |> yLine(endAbsolute = interiorRadius)
|> tangentialArc(angle = -90, radius = interiorRadius) |> tangentialArc(angle = -90deg, radius = interiorRadius)
|> xLine(length = -0.03) |> xLine(length = -0.03)
|> arc(angleStart = 0, angleEnd = 180, radius = scoreDepth) |> arc(angleStart = 0, angleEnd = 180deg, radius = scoreDepth)
|> xLine(length = -0.1) |> xLine(length = -0.1)
|> arc(angleStart = 0, angleEnd = 180, radius = scoreDepth) |> arc(angleStart = 0, angleEnd = 180deg, radius = scoreDepth)
|> xLine(length = -0.03) |> xLine(length = -0.03)
|> tangentialArc(endAbsolute = [arcEnd, arcEnd]) |> tangentialArc(endAbsolute = [arcEnd, arcEnd])

View File

@ -22,7 +22,7 @@ ribSketch = startSketchOn(offsetPlane(-XZ, offset = -foilThickness))
|> line(endAbsolute = [rearSpar, upperCamber]) |> line(endAbsolute = [rearSpar, upperCamber])
|> tangentialArc(endAbsolute = [frontSpar, upperCamber * 1.3]) |> tangentialArc(endAbsolute = [frontSpar, upperCamber * 1.3])
|> tangentialArc(endAbsolute = [0, 0]) |> tangentialArc(endAbsolute = [0, 0])
|> tangentialArc(angle = 76, radius = lowerCamber) |> tangentialArc(angle = 76deg, radius = lowerCamber)
|> tangentialArc(endAbsolute = [rearSpar, -lowerCamber]) |> tangentialArc(endAbsolute = [rearSpar, -lowerCamber])
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -43,19 +43,19 @@ sparSketch = startSketchOn(-XZ)
// Sketch the sheet metal profile for the front spar, then extrude // Sketch the sheet metal profile for the front spar, then extrude
frontSparProfile = startProfile(sparSketch, at = [frontSpar, -lowerCamber * 0.85]) frontSparProfile = startProfile(sparSketch, at = [frontSpar, -lowerCamber * 0.85])
|> yLine(endAbsolute = upperCamber, tag = $seg01) |> yLine(endAbsolute = upperCamber, tag = $seg01)
|> tangentialArc(angle = -90, radius = sparBendRadius + sparStockThicknes) |> tangentialArc(angle = -90deg, radius = sparBendRadius + sparStockThicknes)
|> xLine(length = 4, tag = $seg02) |> xLine(length = 4, tag = $seg02)
|> tangentialArc(angle = -90, radius = sparBendRadius + sparStockThicknes) |> tangentialArc(angle = -90deg, radius = sparBendRadius + sparStockThicknes)
|> yLine(length = -4, tag = $seg03) |> yLine(length = -4, tag = $seg03)
|> tangentialArc(angle = -90, radius = sparBendRadius + sparStockThicknes) |> tangentialArc(angle = -90deg, radius = sparBendRadius + sparStockThicknes)
|> xLine(length = -3, tag = $seg04) |> xLine(length = -3, tag = $seg04)
|> yLine(length = sparStockThicknes) |> yLine(length = sparStockThicknes)
|> xLine(length = segLen(seg04)) |> xLine(length = segLen(seg04))
|> tangentialArc(angle = 90, radius = sparBendRadius) |> tangentialArc(angle = 90deg, radius = sparBendRadius)
|> yLine(length = segLen(seg03)) |> yLine(length = segLen(seg03))
|> tangentialArc(angle = 90, radius = sparBendRadius) |> tangentialArc(angle = 90deg, radius = sparBendRadius)
|> xLine(length = -segLen(seg02)) |> xLine(length = -segLen(seg02))
|> tangentialArc(angle = 90, radius = sparBendRadius) |> tangentialArc(angle = 90deg, radius = sparBendRadius)
|> yLine(length = -segLen(seg01), tag = $seg10) |> yLine(length = -segLen(seg01), tag = $seg10)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -64,19 +64,19 @@ frontSparProfile = startProfile(sparSketch, at = [frontSpar, -lowerCamber * 0.85
// Sketch the sheet metal profile for the rear spar, then extrude // Sketch the sheet metal profile for the rear spar, then extrude
rearSparProfile = startProfile(sparSketch, at = [rearSpar, -lowerCamber * 0.7]) rearSparProfile = startProfile(sparSketch, at = [rearSpar, -lowerCamber * 0.7])
|> yLine(endAbsolute = upperCamber * 0.7, tag = $seg05) |> yLine(endAbsolute = upperCamber * 0.7, tag = $seg05)
|> tangentialArc(angle = 90, radius = sparBendRadius + sparStockThicknes) |> tangentialArc(angle = 90deg, radius = sparBendRadius + sparStockThicknes)
|> xLine(length = -4, tag = $seg06) |> xLine(length = -4, tag = $seg06)
|> tangentialArc(angle = 90, radius = sparBendRadius + sparStockThicknes) |> tangentialArc(angle = 90deg, radius = sparBendRadius + sparStockThicknes)
|> yLine(length = -4, tag = $seg07) |> yLine(length = -4, tag = $seg07)
|> tangentialArc(angle = 90, radius = sparBendRadius + sparStockThicknes) |> tangentialArc(angle = 90deg, radius = sparBendRadius + sparStockThicknes)
|> xLine(length = 3, tag = $seg08) |> xLine(length = 3, tag = $seg08)
|> yLine(length = sparStockThicknes) |> yLine(length = sparStockThicknes)
|> xLine(length = -segLen(seg08)) |> xLine(length = -segLen(seg08))
|> tangentialArc(angle = -90, radius = sparBendRadius) |> tangentialArc(angle = -90deg, radius = sparBendRadius)
|> yLine(length = segLen(seg07)) |> yLine(length = segLen(seg07))
|> tangentialArc(angle = -90, radius = sparBendRadius) |> tangentialArc(angle = -90deg, radius = sparBendRadius)
|> xLine(length = segLen(seg06)) |> xLine(length = segLen(seg06))
|> tangentialArc(angle = -90, radius = sparBendRadius) |> tangentialArc(angle = -90deg, radius = sparBendRadius)
|> yLine(length = -segLen(seg05), tag = $seg09) |> yLine(length = -segLen(seg05), tag = $seg09)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -86,11 +86,11 @@ rearSparProfile = startProfile(sparSketch, at = [rearSpar, -lowerCamber * 0.7])
frontSparHoles = startSketchOn(frontSparProfile, face = seg10) frontSparHoles = startSketchOn(frontSparProfile, face = seg10)
|> startProfile(at = [-lowerCamber * 0.1, -foilThickness * 3]) |> startProfile(at = [-lowerCamber * 0.1, -foilThickness * 3])
|> xLine(endAbsolute = upperCamber * 0.4, tag = $seg11) |> xLine(endAbsolute = upperCamber * 0.4, tag = $seg11)
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> yLine(endAbsolute = -(sparSpan - (3 * foilThickness)) / (nSections - 1) + 5, tag = $seg12) |> yLine(endAbsolute = -(sparSpan - (3 * foilThickness)) / (nSections - 1) + 5, tag = $seg12)
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> xLine(length = -segLen(seg11)) |> xLine(length = -segLen(seg11))
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> yLine(length = segLen(seg12)) |> yLine(length = segLen(seg12))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()
@ -104,11 +104,11 @@ frontSparHoles = startSketchOn(frontSparProfile, face = seg10)
rearSparHoles = startSketchOn(rearSparProfile, face = seg09) rearSparHoles = startSketchOn(rearSparProfile, face = seg09)
|> startProfile(at = [-lowerCamber * 0.3, -foilThickness * 3]) |> startProfile(at = [-lowerCamber * 0.3, -foilThickness * 3])
|> xLine(endAbsolute = -upperCamber * 0.01, tag = $seg14) |> xLine(endAbsolute = -upperCamber * 0.01, tag = $seg14)
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> yLine(length = -segLen(seg12)) |> yLine(length = -segLen(seg12))
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> xLine(length = -segLen(seg14)) |> xLine(length = -segLen(seg14))
|> tangentialArc(angle = -90, radius = 5) |> tangentialArc(angle = -90deg, radius = 5)
|> yLine(length = segLen(seg12)) |> yLine(length = segLen(seg12))
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close() |> close()

View File

@ -1,8 +1,8 @@
@settings(defaultLengthUnit = in) @settings(defaultLengthUnit = in)
sketch001 = startSketchOn(XZ) sketch001 = startSketchOn(XZ)
|> startProfile(at = [75.8, 317.2]) |> startProfile(at = [75.8, 317.2])
|> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|> close() |> close()

View File

@ -1,8 +1,8 @@
@settings(defaultLengthUnit = in) @settings(defaultLengthUnit = in)
sketch001 = startSketchOn(XZ) sketch001 = startSketchOn(XZ)
|> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag]
|> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|> close() |> close()

View File

@ -181,13 +181,13 @@ wallMountL = 8
bracket = startSketchOn(XY) bracket = startSketchOn(XY)
|> startProfile(at = [0, 0]) |> startProfile(at = [0, 0])
|> line(end = [0, wallMountL]) |> line(end = [0, wallMountL])
|> tangentialArc(radius = filletR, angle = 90 ) |> tangentialArc(radius = filletR, angle = 90deg )
|> line(end = [-shelfMountL, 0]) |> line(end = [-shelfMountL, 0])
|> line(end = [0, -thickness]) |> line(end = [0, -thickness])
|> line(end = [shelfMountL, 0]) |> line(end = [shelfMountL, 0])
|> tangentialArc( |> tangentialArc(
radius = filletR - thickness, radius = filletR - thickness,
angle = -90, angle = -90deg,
) )
|> line(end = [0, -wallMountL]) |> line(end = [0, -wallMountL])
|> close() |> close()

View File

@ -816,7 +816,16 @@ impl ArgData {
} }
match self.ty.as_deref() { match self.ty.as_deref() {
Some("Sketch") if self.kind == ArgKind::Special => None, Some("Sketch") if self.kind == ArgKind::Special => None,
Some(s) if s.starts_with("number") => Some((index, format!(r#"{label}${{{}:10}}"#, index))), Some(s) if s.starts_with("number") => {
let value = match &*self.name {
"angleStart" => "0",
"angleEnd" => "180deg",
"angle" => "180deg",
"arcDegrees" => "360deg",
_ => "10",
};
Some((index, format!(r#"{label}${{{}:{value}}}"#, index)))
}
Some("Point2d") => Some((index + 1, format!(r#"{label}[${{{}:0}}, ${{{}:0}}]"#, index, index + 1))), Some("Point2d") => Some((index + 1, format!(r#"{label}[${{{}:0}}, ${{{}:0}}]"#, index, index + 1))),
Some("Point3d") => Some(( Some("Point3d") => Some((
index + 2, index + 2,

View File

@ -106,7 +106,7 @@ mod tests {
let snippet = data.to_autocomplete_snippet(); let snippet = data.to_autocomplete_snippet();
assert_eq!( assert_eq!(
snippet, snippet,
r#"arc(angleStart = ${0:10}, angleEnd = ${1:10}, diameter = ${2:10})"# r#"arc(angleStart = ${0:0}, angleEnd = ${1:180deg}, diameter = ${2:10})"#
); );
} }
@ -172,7 +172,7 @@ mod tests {
let snippet = helix_fn.to_autocomplete_snippet(); let snippet = helix_fn.to_autocomplete_snippet();
assert_eq!( assert_eq!(
snippet, snippet,
r#"helix(revolutions = ${0:10}, angleStart = ${1:10}, radius = ${2:10}, axis = ${3:X}, length = ${4:10})"# r#"helix(revolutions = ${0:10}, angleStart = ${1:0}, radius = ${2:10}, axis = ${3:X}, length = ${4:10})"#
); );
} }

View File

@ -12,7 +12,7 @@ use crate::{
}; };
/// Annotations which should cause re-execution if they change. /// 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: &str = "settings";
pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit"; pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit";
@ -33,6 +33,23 @@ pub(crate) const IMPL_PRIMITIVE: &str = "primitive";
pub(super) const IMPL_VALUES: [&str; 3] = [IMPL_RUST, IMPL_KCL, IMPL_PRIMITIVE]; pub(super) const IMPL_VALUES: [&str; 3] = [IMPL_RUST, IMPL_KCL, IMPL_PRIMITIVE];
pub(crate) const DEPRECATED: &str = "deprecated"; pub(crate) const DEPRECATED: &str = "deprecated";
pub(crate) const WARNINGS: &str = "warnings";
pub(crate) const WARN_ALLOW: &str = "allow";
pub(crate) const WARN_DENY: &str = "deny";
pub(crate) const WARN_UNKNOWN_UNITS: &str = "unknownUnits";
pub(crate) const WARN_ANGLE_UNITS: &str = "angleUnits";
pub(crate) const WARN_UNKNOWN_ATTR: &str = "unknownAttribute";
pub(crate) const WARN_MOD_RETURN_VALUE: &str = "moduleReturnValue";
pub(crate) const WARN_DEPRECATED: &str = "deprecated";
pub(crate) const WARN_IGNORED_Z_AXIS: &str = "ignoredZAxis";
pub(super) const WARN_VALUES: [&str; 6] = [
WARN_UNKNOWN_UNITS,
WARN_ANGLE_UNITS,
WARN_UNKNOWN_ATTR,
WARN_MOD_RETURN_VALUE,
WARN_DEPRECATED,
WARN_IGNORED_Z_AXIS,
];
#[derive(Clone, Copy, Eq, PartialEq, Debug, Default)] #[derive(Clone, Copy, Eq, PartialEq, Debug, Default)]
pub enum Impl { pub enum Impl {
@ -92,6 +109,64 @@ pub(super) fn expect_ident(expr: &Expr) -> Result<&str, KclError> {
))) )))
} }
pub(super) fn many_of(
expr: &Expr,
of: &[&'static str],
source_range: SourceRange,
) -> Result<Vec<&'static str>, KclError> {
const UNEXPECTED_MSG: &str = "Unexpected warnings value, expected a name or array of names, e.g., `unknownUnits` or `[unknownUnits, deprecated]`";
let values = match expr {
Expr::Name(name) => {
if let Some(name) = name.local_ident() {
vec![*name]
} else {
return Err(KclError::new_semantic(KclErrorDetails::new(
UNEXPECTED_MSG.to_owned(),
vec![expr.into()],
)));
}
}
Expr::ArrayExpression(e) => {
let mut result = Vec::new();
for e in &e.elements {
if let Expr::Name(name) = e {
if let Some(name) = name.local_ident() {
result.push(*name);
continue;
}
}
return Err(KclError::new_semantic(KclErrorDetails::new(
UNEXPECTED_MSG.to_owned(),
vec![e.into()],
)));
}
result
}
_ => {
return Err(KclError::new_semantic(KclErrorDetails::new(
UNEXPECTED_MSG.to_owned(),
vec![expr.into()],
)))
}
};
values
.into_iter()
.map(|v| {
of.iter()
.find(|vv| **vv == v)
.ok_or_else(|| {
KclError::new_semantic(KclErrorDetails::new(
format!("Unexpected warning value: `{v}`; accepted values: {}", of.join(", "),),
vec![source_range],
))
})
.copied()
})
.collect::<Result<Vec<&str>, KclError>>()
}
// Returns the unparsed number literal. // Returns the unparsed number literal.
pub(super) fn expect_number(expr: &Expr) -> Result<String, KclError> { pub(super) fn expect_number(expr: &Expr) -> Result<String, KclError> {
if let Expr::Literal(lit) = expr { if let Expr::Literal(lit) = expr {

View File

@ -49,9 +49,20 @@ impl ExecutorContext {
for annotation in annotations { for annotation in annotations {
if annotation.name() == Some(annotations::SETTINGS) { if annotation.name() == Some(annotations::SETTINGS) {
if matches!(body_type, BodyType::Root) { if matches!(body_type, BodyType::Root) {
if exec_state.mod_local.settings.update_from_annotation(annotation)? { let (updated_len, updated_angle) =
exec_state.mod_local.settings.update_from_annotation(annotation)?;
if updated_len {
exec_state.mod_local.explicit_length_units = true; exec_state.mod_local.explicit_length_units = true;
} }
if updated_angle {
exec_state.warn(
CompilationError::err(
annotation.as_source_range(),
"Prefer to use explicit units for angles",
),
annotations::WARN_ANGLE_UNITS,
);
}
} else { } else {
exec_state.err(CompilationError::err( exec_state.err(CompilationError::err(
annotation.as_source_range(), annotation.as_source_range(),
@ -67,11 +78,51 @@ impl ExecutorContext {
"The standard library can only be skipped at the top level scope of a file", "The standard library can only be skipped at the top level scope of a file",
)); ));
} }
} else if annotation.name() == Some(annotations::WARNINGS) {
// TODO we should support setting warnings for the whole project, not just one file
if matches!(body_type, BodyType::Root) {
let props = annotations::expect_properties(annotations::WARNINGS, annotation)?;
for p in props {
match &*p.inner.key.name {
annotations::WARN_ALLOW => {
let allowed = annotations::many_of(
&p.inner.value,
&annotations::WARN_VALUES,
annotation.as_source_range(),
)?;
exec_state.mod_local.allowed_warnings = allowed;
}
annotations::WARN_DENY => {
let denied = annotations::many_of(
&p.inner.value,
&annotations::WARN_VALUES,
annotation.as_source_range(),
)?;
exec_state.mod_local.denied_warnings = denied;
}
name => {
return Err(KclError::new_semantic(KclErrorDetails::new(
format!(
"Unexpected warnings key: `{name}`; expected one of `{}`, `{}`",
annotations::WARN_ALLOW,
annotations::WARN_DENY,
),
vec![annotation.as_source_range()],
)))
}
}
}
} else {
exec_state.err(CompilationError::err(
annotation.as_source_range(),
"Warnings can only be customized at the top level scope of a file",
));
}
} else { } else {
exec_state.warn(CompilationError::err( exec_state.warn(
annotation.as_source_range(), CompilationError::err(annotation.as_source_range(), "Unknown annotation"),
"Unknown annotation", annotations::WARN_UNKNOWN_ATTR,
)); );
} }
} }
Ok(no_prelude) Ok(no_prelude)
@ -685,7 +736,8 @@ impl ExecutorContext {
exec_state.warn(CompilationError::err( exec_state.warn(CompilationError::err(
metadata.source_range, metadata.source_range,
"Imported module has no return value. The last statement of the module must be an expression, usually the Solid.", "Imported module has no return value. The last statement of the module must be an expression, usually the Solid.",
)); ),
annotations::WARN_MOD_RETURN_VALUE);
let mut new_meta = vec![metadata.to_owned()]; let mut new_meta = vec![metadata.to_owned()];
new_meta.extend(meta); new_meta.extend(meta);
@ -1163,12 +1215,12 @@ impl Node<BinaryExpression> {
let value = match self.operator { let value = match self.operator {
BinaryOperator::Add => { BinaryOperator::Add => {
let (l, r, ty) = NumericType::combine_eq_coerce(left, right); let (l, r, ty) = NumericType::combine_eq_coerce(left, right, None);
self.warn_on_unknown(&ty, "Adding", exec_state); self.warn_on_unknown(&ty, "Adding", exec_state);
KclValue::Number { value: l + r, meta, ty } KclValue::Number { value: l + r, meta, ty }
} }
BinaryOperator::Sub => { BinaryOperator::Sub => {
let (l, r, ty) = NumericType::combine_eq_coerce(left, right); let (l, r, ty) = NumericType::combine_eq_coerce(left, right, None);
self.warn_on_unknown(&ty, "Subtracting", exec_state); self.warn_on_unknown(&ty, "Subtracting", exec_state);
KclValue::Number { value: l - r, meta, ty } KclValue::Number { value: l - r, meta, ty }
} }
@ -1193,32 +1245,32 @@ impl Node<BinaryExpression> {
ty: exec_state.current_default_units(), ty: exec_state.current_default_units(),
}, },
BinaryOperator::Neq => { BinaryOperator::Neq => {
let (l, r, ty) = NumericType::combine_eq(left, right); let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range());
self.warn_on_unknown(&ty, "Comparing", exec_state); self.warn_on_unknown(&ty, "Comparing", exec_state);
KclValue::Bool { value: l != r, meta } KclValue::Bool { value: l != r, meta }
} }
BinaryOperator::Gt => { BinaryOperator::Gt => {
let (l, r, ty) = NumericType::combine_eq(left, right); let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range());
self.warn_on_unknown(&ty, "Comparing", exec_state); self.warn_on_unknown(&ty, "Comparing", exec_state);
KclValue::Bool { value: l > r, meta } KclValue::Bool { value: l > r, meta }
} }
BinaryOperator::Gte => { BinaryOperator::Gte => {
let (l, r, ty) = NumericType::combine_eq(left, right); let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range());
self.warn_on_unknown(&ty, "Comparing", exec_state); self.warn_on_unknown(&ty, "Comparing", exec_state);
KclValue::Bool { value: l >= r, meta } KclValue::Bool { value: l >= r, meta }
} }
BinaryOperator::Lt => { BinaryOperator::Lt => {
let (l, r, ty) = NumericType::combine_eq(left, right); let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range());
self.warn_on_unknown(&ty, "Comparing", exec_state); self.warn_on_unknown(&ty, "Comparing", exec_state);
KclValue::Bool { value: l < r, meta } KclValue::Bool { value: l < r, meta }
} }
BinaryOperator::Lte => { BinaryOperator::Lte => {
let (l, r, ty) = NumericType::combine_eq(left, right); let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range());
self.warn_on_unknown(&ty, "Comparing", exec_state); self.warn_on_unknown(&ty, "Comparing", exec_state);
KclValue::Bool { value: l <= r, meta } KclValue::Bool { value: l <= r, meta }
} }
BinaryOperator::Eq => { BinaryOperator::Eq => {
let (l, r, ty) = NumericType::combine_eq(left, right); let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range());
self.warn_on_unknown(&ty, "Comparing", exec_state); self.warn_on_unknown(&ty, "Comparing", exec_state);
KclValue::Bool { value: l == r, meta } KclValue::Bool { value: l == r, meta }
} }
@ -1237,7 +1289,7 @@ impl Node<BinaryExpression> {
format!("{} numbers which have unknown or incompatible units.\nYou can probably fix this error by specifying the units using type ascription, e.g., `len: number(mm)` or `(a * b): number(deg)`.", verb), format!("{} numbers which have unknown or incompatible units.\nYou can probably fix this error by specifying the units using type ascription, e.g., `len: number(mm)` or `(a * b): number(deg)`.", verb),
); );
err.tag = crate::errors::Tag::UnknownNumericUnits; err.tag = crate::errors::Tag::UnknownNumericUnits;
exec_state.warn(err); exec_state.warn(err, annotations::WARN_UNKNOWN_UNITS);
} }
} }
} }
@ -1733,6 +1785,7 @@ mod test {
use super::*; use super::*;
use crate::{ use crate::{
errors::Severity,
exec::UnitType, exec::UnitType,
execution::{parse_execute, ContextType}, execution::{parse_execute, ContextType},
ExecutorSettings, UnitLen, ExecutorSettings, UnitLen,
@ -2141,4 +2194,29 @@ c = ((PI * 2) / 3): number(deg)
let result = parse_execute(ast).await.unwrap(); let result = parse_execute(ast).await.unwrap();
assert_eq!(result.exec_state.errors().len(), 2); assert_eq!(result.exec_state.errors().len(), 2);
} }
#[tokio::test(flavor = "multi_thread")]
async fn custom_warning() {
let warn = r#"
a = PI * 2
"#;
let result = parse_execute(warn).await.unwrap();
assert_eq!(result.exec_state.errors().len(), 1);
assert_eq!(result.exec_state.errors()[0].severity, Severity::Warning);
let allow = r#"
@warnings(allow = unknownUnits)
a = PI * 2
"#;
let result = parse_execute(allow).await.unwrap();
assert_eq!(result.exec_state.errors().len(), 0);
let deny = r#"
@warnings(deny = [unknownUnits])
a = PI * 2
"#;
let result = parse_execute(deny).await.unwrap();
assert_eq!(result.exec_state.errors().len(), 1);
assert_eq!(result.exec_state.errors()[0].severity, Severity::Error);
}
} }

View File

@ -4,6 +4,7 @@ use indexmap::IndexMap;
use crate::{ use crate::{
errors::{KclError, KclErrorDetails}, errors::{KclError, KclErrorDetails},
execution::{ execution::{
annotations,
cad_op::{Group, OpArg, OpKclValue, Operation}, cad_op::{Group, OpArg, OpKclValue, Operation},
kcl_value::FunctionSource, kcl_value::FunctionSource,
memory, memory,
@ -290,16 +291,19 @@ impl FunctionDefinition<'_> {
callsite: SourceRange, callsite: SourceRange,
) -> Result<Option<KclValue>, KclError> { ) -> Result<Option<KclValue>, KclError> {
if self.deprecated { if self.deprecated {
exec_state.warn(CompilationError::err( exec_state.warn(
callsite, CompilationError::err(
format!( callsite,
"{} is deprecated, see the docs for a recommended replacement", format!(
match &fn_name { "{} is deprecated, see the docs for a recommended replacement",
Some(n) => format!("`{n}`"), match &fn_name {
None => "This function".to_owned(), Some(n) => format!("`{n}`"),
} None => "This function".to_owned(),
}
),
), ),
)); annotations::WARN_DEPRECATED,
);
} }
type_check_params_kw(fn_name.as_deref(), self, &mut args.kw_args, exec_state)?; type_check_params_kw(fn_name.as_deref(), self, &mut args.kw_args, exec_state)?;

View File

@ -7,7 +7,7 @@ use serde::Serialize;
use crate::{ use crate::{
errors::KclErrorDetails, errors::KclErrorDetails,
execution::{ execution::{
annotations::{SETTINGS, SETTINGS_UNIT_LENGTH}, annotations::{self, SETTINGS, SETTINGS_UNIT_LENGTH},
types::{NumericType, PrimitiveType, RuntimeType, UnitLen}, types::{NumericType, PrimitiveType, RuntimeType, UnitLen},
EnvironmentRef, ExecState, Face, Geometry, GeometryWithImportedGeometry, Helix, ImportedGeometry, MetaSettings, EnvironmentRef, ExecState, Face, Geometry, GeometryWithImportedGeometry, Helix, ImportedGeometry, MetaSettings,
Metadata, Plane, Sketch, Solid, TagIdentifier, Metadata, Plane, Sketch, Solid, TagIdentifier,
@ -377,6 +377,7 @@ impl KclValue {
Some(SourceRange::new(0, 0, literal.module_id)), Some(SourceRange::new(0, 0, literal.module_id)),
crate::errors::Tag::Deprecated, crate::errors::Tag::Deprecated,
), ),
annotations::WARN_DEPRECATED,
); );
} }
} }

View File

@ -604,8 +604,9 @@ impl ExecutorContext {
settings: &self.settings, 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. // 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 { CacheResult::ReExecute {
clear_scene, clear_scene,
reapply_settings, reapply_settings,

View File

@ -108,6 +108,9 @@ pub(super) struct ModuleState {
pub(super) path: ModulePath, pub(super) path: ModulePath,
/// Artifacts for only this module. /// Artifacts for only this module.
pub artifacts: ModuleArtifactState, pub artifacts: ModuleArtifactState,
pub(super) allowed_warnings: Vec<&'static str>,
pub(super) denied_warnings: Vec<&'static str>,
} }
impl ExecState { impl ExecState {
@ -133,8 +136,19 @@ impl ExecState {
} }
/// Log a warning. /// Log a warning.
pub fn warn(&mut self, mut e: CompilationError) { pub fn warn(&mut self, mut e: CompilationError, name: &'static str) {
e.severity = Severity::Warning; debug_assert!(annotations::WARN_VALUES.contains(&name));
if self.mod_local.allowed_warnings.contains(&name) {
return;
}
if self.mod_local.denied_warnings.contains(&name) {
e.severity = Severity::Error;
} else {
e.severity = Severity::Warning;
}
self.global.errors.push(e); self.global.errors.push(e);
} }
@ -502,6 +516,8 @@ impl ModuleState {
kcl_version: "0.1".to_owned(), kcl_version: "0.1".to_owned(),
}, },
artifacts: Default::default(), artifacts: Default::default(),
allowed_warnings: Vec::new(),
denied_warnings: Vec::new(),
} }
} }
@ -526,10 +542,11 @@ impl MetaSettings {
pub(crate) fn update_from_annotation( pub(crate) fn update_from_annotation(
&mut self, &mut self,
annotation: &crate::parsing::ast::types::Node<Annotation>, annotation: &crate::parsing::ast::types::Node<Annotation>,
) -> Result<bool, KclError> { ) -> Result<(bool, bool), KclError> {
let properties = annotations::expect_properties(annotations::SETTINGS, annotation)?; let properties = annotations::expect_properties(annotations::SETTINGS, annotation)?;
let mut updated_len = false; let mut updated_len = false;
let mut updated_angle = false;
for p in properties { for p in properties {
match &*p.inner.key.name { match &*p.inner.key.name {
annotations::SETTINGS_UNIT_LENGTH => { annotations::SETTINGS_UNIT_LENGTH => {
@ -542,6 +559,7 @@ impl MetaSettings {
let value = annotations::expect_ident(&p.inner.value)?; let value = annotations::expect_ident(&p.inner.value)?;
let value = types::UnitAngle::from_str(value, annotation.as_source_range())?; let value = types::UnitAngle::from_str(value, annotation.as_source_range())?;
self.default_angle_units = value; self.default_angle_units = value;
updated_angle = true;
} }
annotations::SETTINGS_VERSION => { annotations::SETTINGS_VERSION => {
let value = annotations::expect_number(&p.inner.value)?; let value = annotations::expect_number(&p.inner.value)?;
@ -560,6 +578,6 @@ impl MetaSettings {
} }
} }
Ok(updated_len) Ok((updated_len, updated_angle))
} }
} }

View File

@ -6,6 +6,7 @@ use serde::{Deserialize, Serialize};
use crate::{ use crate::{
execution::{ execution::{
annotations,
kcl_value::{KclValue, TypeDef}, kcl_value::{KclValue, TypeDef},
memory::{self}, memory::{self},
ExecState, Plane, PlaneInfo, Point3d, ExecState, Plane, PlaneInfo, Point3d,
@ -505,7 +506,12 @@ impl NumericType {
/// ///
/// This combinator function is suitable for comparisons where uncertainty should /// This combinator function is suitable for comparisons where uncertainty should
/// be handled by the user. /// be handled by the user.
pub fn combine_eq(a: TyF64, b: TyF64) -> (f64, f64, NumericType) { pub fn combine_eq(
a: TyF64,
b: TyF64,
exec_state: &mut ExecState,
source_range: SourceRange,
) -> (f64, f64, NumericType) {
use NumericType::*; use NumericType::*;
match (a.ty, b.ty) { match (a.ty, b.ty) {
(at, bt) if at == bt => (a.n, b.n, at), (at, bt) if at == bt => (a.n, b.n, at),
@ -520,8 +526,24 @@ impl NumericType {
} }
(t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 => (a.n, b.n, t), (t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 => (a.n, b.n, t),
(Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) if l1 == l2 => (a.n, b.n, t), (Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) if l1 == l2 => (a.n, b.n, t),
(t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 => (a.n, b.n, t), (t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 => {
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) if a1 == a2 => (a.n, b.n, t), if b.n != 0.0 {
exec_state.warn(
CompilationError::err(source_range, "Prefer to use explicit units for angles"),
annotations::WARN_ANGLE_UNITS,
);
}
(a.n, b.n, t)
}
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) if a1 == a2 => {
if a.n != 0.0 {
exec_state.warn(
CompilationError::err(source_range, "Prefer to use explicit units for angles"),
annotations::WARN_ANGLE_UNITS,
);
}
(a.n, b.n, t)
}
_ => (a.n, b.n, Unknown), _ => (a.n, b.n, Unknown),
} }
@ -534,7 +556,11 @@ impl NumericType {
/// coerced together, for example two arguments to the same function or two numbers in an array being used as a point. /// coerced together, for example two arguments to the same function or two numbers in an array being used as a point.
/// ///
/// Prefer to use `combine_eq` if possible since using that prioritises correctness over ergonomics. /// Prefer to use `combine_eq` if possible since using that prioritises correctness over ergonomics.
pub fn combine_eq_coerce(a: TyF64, b: TyF64) -> (f64, f64, NumericType) { pub fn combine_eq_coerce(
a: TyF64,
b: TyF64,
for_errs: Option<(&mut ExecState, SourceRange)>,
) -> (f64, f64, NumericType) {
use NumericType::*; use NumericType::*;
match (a.ty, b.ty) { match (a.ty, b.ty) {
(at, bt) if at == bt => (a.n, b.n, at), (at, bt) if at == bt => (a.n, b.n, at),
@ -552,8 +578,28 @@ impl NumericType {
(t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) => (a.n, l2.adjust_to(b.n, l1).0, t), (t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) => (a.n, l2.adjust_to(b.n, l1).0, t),
(Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) => (l1.adjust_to(a.n, l2).0, b.n, t), (Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) => (l1.adjust_to(a.n, l2).0, b.n, t),
(t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) => (a.n, a2.adjust_to(b.n, a1).0, t), (t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) => {
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) => (a1.adjust_to(a.n, a2).0, b.n, t), if let Some((exec_state, source_range)) = for_errs {
if b.n != 0.0 {
exec_state.warn(
CompilationError::err(source_range, "Prefer to use explicit units for angles"),
annotations::WARN_ANGLE_UNITS,
);
}
}
(a.n, a2.adjust_to(b.n, a1).0, t)
}
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) => {
if let Some((exec_state, source_range)) = for_errs {
if a.n != 0.0 {
exec_state.warn(
CompilationError::err(source_range, "Prefer to use explicit units for angles"),
annotations::WARN_ANGLE_UNITS,
);
}
}
(a1.adjust_to(a.n, a2).0, b.n, t)
}
(Known(_), Known(_)) | (Default { .. }, Default { .. }) | (_, Unknown) | (Unknown, _) => { (Known(_), Known(_)) | (Default { .. }, Default { .. }) | (_, Unknown) | (Unknown, _) => {
(a.n, b.n, Unknown) (a.n, b.n, Unknown)
@ -714,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 { let KclValue::Number { value, ty, meta } = val else {
return Err(val.into()); return Err(val.into());
}; };
@ -786,6 +832,14 @@ impl NumericType {
} }
(Default { angle: a1, .. }, Known(UnitType::Angle(a2))) => { (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); let (value, ty) = a1.adjust_to(*value, *a2);
Ok(KclValue::Number { Ok(KclValue::Number {
value, value,
@ -1110,7 +1164,7 @@ impl KclValue {
PrimitiveType::Any => Ok(self.clone()), PrimitiveType::Any => Ok(self.clone()),
PrimitiveType::Number(ty) => { PrimitiveType::Number(ty) => {
if convert_units { if convert_units {
return ty.coerce(self); return ty.coerce(self, exec_state);
} }
// Instead of converting units, reinterpret the number as having // Instead of converting units, reinterpret the number as having
@ -1126,10 +1180,10 @@ impl KclValue {
value: *n, value: *n,
meta: meta.clone(), 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 { PrimitiveType::String => match self {
KclValue::String { .. } => Ok(self.clone()), KclValue::String { .. } => Ok(self.clone()),
@ -1147,54 +1201,56 @@ impl KclValue {
KclValue::Solid { .. } => Ok(self.clone()), KclValue::Solid { .. } => Ok(self.clone()),
_ => Err(self.into()), _ => Err(self.into()),
}, },
PrimitiveType::Plane => match self { PrimitiveType::Plane => {
KclValue::String { value: s, .. } match self {
if [ KclValue::String { value: s, .. }
"xy", "xz", "yz", "-xy", "-xz", "-yz", "XY", "XZ", "YZ", "-XY", "-XZ", "-YZ", if [
] "xy", "xz", "yz", "-xy", "-xz", "-yz", "XY", "XZ", "YZ", "-XY", "-XZ", "-YZ",
.contains(&&**s) => ]
{ .contains(&&**s) =>
Ok(self.clone()) {
} Ok(self.clone())
KclValue::Plane { .. } => Ok(self.clone()), }
KclValue::Object { value, meta } => { KclValue::Plane { .. } => Ok(self.clone()),
let origin = value KclValue::Object { value, meta } => {
.get("origin") let origin = value
.and_then(Point3d::from_kcl_val) .get("origin")
.ok_or(CoercionError::from(self))?; .and_then(Point3d::from_kcl_val)
let x_axis = value .ok_or(CoercionError::from(self))?;
.get("xAxis") let x_axis = value
.and_then(Point3d::from_kcl_val) .get("xAxis")
.ok_or(CoercionError::from(self))?; .and_then(Point3d::from_kcl_val)
let y_axis = value .ok_or(CoercionError::from(self))?;
.get("yAxis") let y_axis = value
.and_then(Point3d::from_kcl_val) .get("yAxis")
.ok_or(CoercionError::from(self))?; .and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?;
if value.get("zAxis").is_some() { if value.get("zAxis").is_some() {
exec_state.warn(CompilationError::err( exec_state.warn(CompilationError::err(
self.into(), self.into(),
"Object with a zAxis field is being coerced into a plane, but the zAxis is ignored.", "Object with a zAxis field is being coerced into a plane, but the zAxis is ignored.",
)); ), annotations::WARN_IGNORED_Z_AXIS);
}
let id = exec_state.mod_local.id_generator.next_uuid();
let plane = Plane {
id,
artifact_id: id.into(),
info: PlaneInfo {
origin,
x_axis: x_axis.normalize(),
y_axis: y_axis.normalize(),
},
value: super::PlaneType::Uninit,
meta: meta.clone(),
};
Ok(KclValue::Plane { value: Box::new(plane) })
} }
_ => Err(self.into()),
let id = exec_state.mod_local.id_generator.next_uuid();
let plane = Plane {
id,
artifact_id: id.into(),
info: PlaneInfo {
origin,
x_axis: x_axis.normalize(),
y_axis: y_axis.normalize(),
},
value: super::PlaneType::Uninit,
meta: meta.clone(),
};
Ok(KclValue::Plane { value: Box::new(plane) })
} }
_ => Err(self.into()), }
},
PrimitiveType::Face => match self { PrimitiveType::Face => match self {
KclValue::Face { .. } => Ok(self.clone()), KclValue::Face { .. } => Ok(self.clone()),
_ => Err(self.into()), _ => Err(self.into()),
@ -2347,14 +2403,18 @@ b = 180 / PI * a + 360
#[tokio::test(flavor = "multi_thread")] #[tokio::test(flavor = "multi_thread")]
async fn cos_coercions() { async fn cos_coercions() {
let program = r#" let program = r#"
a = cos(units::toRadians(30)) a = cos(units::toRadians(30deg))
b = 3 / a b = 3 / a
c = cos(30deg) c = cos(30deg)
d = cos(30) d = cos(1rad)
"#; "#;
let result = parse_execute(program).await.unwrap(); let result = parse_execute(program).await.unwrap();
assert!(result.exec_state.errors().is_empty()); assert!(
result.exec_state.errors().is_empty(),
"{:?}",
result.exec_state.errors()
);
assert_value_and_type("a", &result, 1.0, NumericType::default()); assert_value_and_type("a", &result, 1.0, NumericType::default());
assert_value_and_type("b", &result, 3.0, NumericType::default()); assert_value_and_type("b", &result, 3.0, NumericType::default());

View File

@ -228,13 +228,9 @@ impl Program {
} }
/// Change the meta settings for the kcl file. /// Change the meta settings for the kcl file.
pub fn change_default_units( pub fn change_default_units(&self, length_units: Option<execution::types::UnitLen>) -> Result<Self, KclError> {
&self,
length_units: Option<execution::types::UnitLen>,
angle_units: Option<execution::types::UnitAngle>,
) -> Result<Self, KclError> {
Ok(Self { Ok(Self {
ast: self.ast.change_default_units(length_units, angle_units)?, ast: self.ast.change_default_units(length_units)?,
original_file_contents: self.original_file_contents.clone(), original_file_contents: self.original_file_contents.clone(),
}) })
} }

View File

@ -28,7 +28,7 @@ use crate::{
errors::KclError, errors::KclError,
execution::{ execution::{
annotations, annotations,
types::{ArrayLen, UnitAngle, UnitLen}, types::{ArrayLen, UnitLen},
KclValue, Metadata, TagIdentifier, KclValue, Metadata, TagIdentifier,
}, },
parsing::{ast::digest::Digest, token::NumericSuffix, PIPE_OPERATOR}, parsing::{ast::digest::Digest, token::NumericSuffix, PIPE_OPERATOR},
@ -357,11 +357,7 @@ impl Node<Program> {
Ok(None) Ok(None)
} }
pub fn change_default_units( pub fn change_default_units(&self, length_units: Option<UnitLen>) -> Result<Self, KclError> {
&self,
length_units: Option<UnitLen>,
angle_units: Option<UnitAngle>,
) -> Result<Self, KclError> {
let mut new_program = self.clone(); let mut new_program = self.clone();
let mut found = false; let mut found = false;
for node in &mut new_program.inner_attrs { for node in &mut new_program.inner_attrs {
@ -372,13 +368,6 @@ impl Node<Program> {
Expr::Name(Box::new(Name::new(&len.to_string()))), Expr::Name(Box::new(Name::new(&len.to_string()))),
); );
} }
if let Some(angle) = angle_units {
node.inner.add_or_update(
annotations::SETTINGS_UNIT_ANGLE,
Expr::Name(Box::new(Name::new(&angle.to_string()))),
);
}
// Previous source range no longer makes sense, but we want to // Previous source range no longer makes sense, but we want to
// preserve other things like comments. // preserve other things like comments.
node.reset_source(); node.reset_source();
@ -395,12 +384,6 @@ impl Node<Program> {
Expr::Name(Box::new(Name::new(&len.to_string()))), Expr::Name(Box::new(Name::new(&len.to_string()))),
); );
} }
if let Some(angle) = angle_units {
settings.inner.add_or_update(
annotations::SETTINGS_UNIT_ANGLE,
Expr::Name(Box::new(Name::new(&angle.to_string()))),
);
}
new_program.inner_attrs.push(settings); new_program.inner_attrs.push(settings);
} }
@ -4256,7 +4239,7 @@ startSketchOn(XY)"#;
// Edit the ast. // Edit the ast.
let new_program = program let new_program = program
.change_default_units(Some(crate::execution::types::UnitLen::Mm), None) .change_default_units(Some(crate::execution::types::UnitLen::Mm))
.unwrap(); .unwrap();
let result = new_program.meta_settings().unwrap(); let result = new_program.meta_settings().unwrap();
@ -4285,7 +4268,7 @@ startSketchOn(XY)
// Edit the ast. // Edit the ast.
let new_program = program let new_program = program
.change_default_units(Some(crate::execution::types::UnitLen::Mm), None) .change_default_units(Some(crate::execution::types::UnitLen::Mm))
.unwrap(); .unwrap();
let result = new_program.meta_settings().unwrap(); let result = new_program.meta_settings().unwrap();
@ -4320,7 +4303,7 @@ startSketchOn(XY)
let program = crate::parsing::top_level_parse(code).unwrap(); let program = crate::parsing::top_level_parse(code).unwrap();
let new_program = program let new_program = program
.change_default_units(Some(crate::execution::types::UnitLen::Cm), None) .change_default_units(Some(crate::execution::types::UnitLen::Cm))
.unwrap(); .unwrap();
let result = new_program.meta_settings().unwrap(); let result = new_program.meta_settings().unwrap();

View File

@ -9,6 +9,7 @@ pub use crate::execution::fn_call::Args;
use crate::{ use crate::{
errors::{KclError, KclErrorDetails}, errors::{KclError, KclErrorDetails},
execution::{ execution::{
annotations,
kcl_value::FunctionSource, kcl_value::FunctionSource,
types::{NumericType, PrimitiveType, RuntimeType, UnitAngle, UnitLen, UnitType}, types::{NumericType, PrimitiveType, RuntimeType, UnitAngle, UnitLen, UnitType},
ExecState, ExtrudeSurface, Helix, KclObjectFields, KclValue, Metadata, PlaneInfo, Sketch, SketchSurface, Solid, ExecState, ExtrudeSurface, Helix, KclObjectFields, KclValue, Metadata, PlaneInfo, Sketch, SketchSurface, Solid,
@ -21,7 +22,7 @@ use crate::{
sketch::FaceTag, sketch::FaceTag,
sweep::SweepPath, sweep::SweepPath,
}, },
ModuleId, CompilationError, ModuleId,
}; };
const ERROR_STRING_SKETCH_TO_SOLID_HELPER: &str = const ERROR_STRING_SKETCH_TO_SOLID_HELPER: &str =
@ -56,9 +57,17 @@ impl TyF64 {
len.adjust_to(self.n, units).0 len.adjust_to(self.n, units).0
} }
pub fn to_degrees(&self) -> f64 { pub fn to_degrees(&self, exec_state: &mut ExecState, source_range: SourceRange) -> f64 {
let angle = match self.ty { let angle = match self.ty {
NumericType::Default { angle, .. } => angle, NumericType::Default { angle, .. } => {
if self.n != 0.0 {
exec_state.warn(
CompilationError::err(source_range, "Prefer to use explicit units for angles"),
annotations::WARN_ANGLE_UNITS,
);
}
angle
}
NumericType::Known(UnitType::Angle(angle)) => angle, NumericType::Known(UnitType::Angle(angle)) => angle,
_ => unreachable!(), _ => unreachable!(),
}; };
@ -68,9 +77,17 @@ impl TyF64 {
angle.adjust_to(self.n, UnitAngle::Degrees).0 angle.adjust_to(self.n, UnitAngle::Degrees).0
} }
pub fn to_radians(&self) -> f64 { pub fn to_radians(&self, exec_state: &mut ExecState, source_range: SourceRange) -> f64 {
let angle = match self.ty { let angle = match self.ty {
NumericType::Default { angle, .. } => angle, NumericType::Default { angle, .. } => {
if self.n != 0.0 {
exec_state.warn(
CompilationError::err(source_range, "Prefer to use explicit units for angles"),
annotations::WARN_ANGLE_UNITS,
);
}
angle
}
NumericType::Known(UnitType::Angle(angle)) => angle, NumericType::Known(UnitType::Angle(angle)) => angle,
_ => unreachable!(), _ => unreachable!(),
}; };

View File

@ -104,8 +104,13 @@ async fn inner_extrude(
let cmd = match (&twist_angle, &twist_angle_step, &twist_center) { let cmd = match (&twist_angle, &twist_angle_step, &twist_center) {
(Some(angle), angle_step, center) => { (Some(angle), angle_step, center) => {
let center = center.clone().map(point_to_mm).map(Point2d::from).unwrap_or_default(); let center = center.clone().map(point_to_mm).map(Point2d::from).unwrap_or_default();
let total_rotation_angle = Angle::from_degrees(angle.to_degrees()); 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()).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 { ModelingCmd::from(mcmd::TwistExtrude {
target: sketch.id.into(), target: sketch.id.into(),
distance: LengthUnit(length.to_mm()), distance: LengthUnit(length.to_mm()),

View File

@ -5,6 +5,7 @@ use anyhow::Result;
use crate::{ use crate::{
errors::{KclError, KclErrorDetails}, errors::{KclError, KclErrorDetails},
execution::{ execution::{
annotations,
types::{ArrayLen, NumericType, RuntimeType}, types::{ArrayLen, NumericType, RuntimeType},
ExecState, KclValue, ExecState, KclValue,
}, },
@ -33,21 +34,21 @@ pub async fn rem(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
/// Compute the cosine of a number (in radians). /// Compute the cosine of a number (in radians).
pub async fn cos(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn cos(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?; let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?;
let num = num.to_radians(); let num = num.to_radians(exec_state, args.source_range);
Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::cos(num), exec_state.current_default_units()))) Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::cos(num), exec_state.current_default_units())))
} }
/// Compute the sine of a number (in radians). /// Compute the sine of a number (in radians).
pub async fn sin(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn sin(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?; let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?;
let num = num.to_radians(); let num = num.to_radians(exec_state, args.source_range);
Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::sin(num), exec_state.current_default_units()))) Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::sin(num), exec_state.current_default_units())))
} }
/// Compute the tangent of a number (in radians). /// Compute the tangent of a number (in radians).
pub async fn tan(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn tan(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?; let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?;
let num = num.to_radians(); let num = num.to_radians(exec_state, args.source_range);
Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::tan(num), exec_state.current_default_units()))) Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::tan(num), exec_state.current_default_units())))
} }
@ -114,7 +115,7 @@ pub async fn min(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
exec_state.warn(CompilationError::err( exec_state.warn(CompilationError::err(
args.source_range, args.source_range,
"Calling `min` on numbers which have unknown or incompatible units.\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`", "Calling `min` on numbers which have unknown or incompatible units.\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`",
)); ), annotations::WARN_UNKNOWN_UNITS);
} }
let mut result = f64::MAX; let mut result = f64::MAX;
@ -139,7 +140,7 @@ pub async fn max(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
exec_state.warn(CompilationError::err( exec_state.warn(CompilationError::err(
args.source_range, args.source_range,
"Calling `max` on numbers which have unknown or incompatible units.\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`", "Calling `max` on numbers which have unknown or incompatible units.\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`",
)); ), annotations::WARN_UNKNOWN_UNITS);
} }
let mut result = f64::MIN; let mut result = f64::MIN;
@ -189,7 +190,7 @@ pub async fn atan(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
pub async fn atan2(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn atan2(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let y = args.get_kw_arg("y", &RuntimeType::length(), exec_state)?; let y = args.get_kw_arg("y", &RuntimeType::length(), exec_state)?;
let x = args.get_kw_arg("x", &RuntimeType::length(), exec_state)?; let x = args.get_kw_arg("x", &RuntimeType::length(), exec_state)?;
let (y, x, _) = NumericType::combine_eq_coerce(y, x); let (y, x, _) = NumericType::combine_eq_coerce(y, x, Some((exec_state, args.source_range)));
let result = libm::atan2(y, x); let result = libm::atan2(y, x);
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::radians()))) Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::radians())))
@ -236,7 +237,7 @@ pub async fn ln(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclE
pub async fn leg_length(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn leg_length(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?; let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?;
let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?; let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?;
let (hypotenuse, leg, ty) = NumericType::combine_eq_coerce(hypotenuse, leg); let (hypotenuse, leg, ty) = NumericType::combine_eq_coerce(hypotenuse, leg, Some((exec_state, args.source_range)));
let result = (hypotenuse.powi(2) - f64::min(hypotenuse.abs(), leg.abs()).powi(2)).sqrt(); let result = (hypotenuse.powi(2) - f64::min(hypotenuse.abs(), leg.abs()).powi(2)).sqrt();
Ok(KclValue::from_number_with_type(result, ty, vec![args.into()])) Ok(KclValue::from_number_with_type(result, ty, vec![args.into()]))
} }
@ -245,7 +246,7 @@ pub async fn leg_length(exec_state: &mut ExecState, args: Args) -> Result<KclVal
pub async fn leg_angle_x(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn leg_angle_x(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?; let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?;
let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?; let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?;
let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg); let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg, Some((exec_state, args.source_range)));
let result = libm::acos(leg.min(hypotenuse) / hypotenuse).to_degrees(); let result = libm::acos(leg.min(hypotenuse) / hypotenuse).to_degrees();
Ok(KclValue::from_number_with_type( Ok(KclValue::from_number_with_type(
result, result,
@ -258,7 +259,7 @@ pub async fn leg_angle_x(exec_state: &mut ExecState, args: Args) -> Result<KclVa
pub async fn leg_angle_y(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn leg_angle_y(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?; let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?;
let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?; let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?;
let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg); let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg, Some((exec_state, args.source_range)));
let result = libm::asin(leg.min(hypotenuse) / hypotenuse).to_degrees(); let result = libm::asin(leg.min(hypotenuse) / hypotenuse).to_degrees();
Ok(KclValue::from_number_with_type( Ok(KclValue::from_number_with_type(
result, result,

View File

@ -132,6 +132,8 @@ async fn inner_involute_circular(
args: Args, args: Args,
) -> Result<Sketch, KclError> { ) -> Result<Sketch, KclError> {
let id = exec_state.next_uuid(); let id = exec_state.next_uuid();
let angle_deg = angle.to_degrees(exec_state, args.source_range);
let angle_rad = angle.to_radians(exec_state, args.source_range);
exec_state exec_state
.batch_modeling_cmd( .batch_modeling_cmd(
@ -141,7 +143,7 @@ async fn inner_involute_circular(
segment: PathSegment::CircularInvolute { segment: PathSegment::CircularInvolute {
start_radius: LengthUnit(start_radius.to_mm()), start_radius: LengthUnit(start_radius.to_mm()),
end_radius: LengthUnit(end_radius.to_mm()), end_radius: LengthUnit(end_radius.to_mm()),
angle: Angle::from_degrees(angle.to_degrees()), angle: Angle::from_degrees(angle_deg),
reverse: reverse.unwrap_or_default(), reverse: reverse.unwrap_or_default(),
}, },
}), }),
@ -157,11 +159,11 @@ async fn inner_involute_circular(
let theta = f64::sqrt(end_radius * end_radius - start_radius * start_radius) / start_radius; let theta = f64::sqrt(end_radius * end_radius - start_radius * start_radius) / start_radius;
let (x, y) = involute_curve(start_radius, theta); let (x, y) = involute_curve(start_radius, theta);
end.x = x * libm::cos(angle.to_radians()) - y * libm::sin(angle.to_radians()); end.x = x * libm::cos(angle_rad) - y * libm::sin(angle_rad);
end.y = x * libm::sin(angle.to_radians()) + y * libm::cos(angle.to_radians()); end.y = x * libm::sin(angle_rad) + y * libm::cos(angle_rad);
end.x -= start_radius * libm::cos(angle.to_radians()); end.x -= start_radius * libm::cos(angle_rad);
end.y -= start_radius * libm::sin(angle.to_radians()); end.y -= start_radius * libm::sin(angle_rad);
if reverse.unwrap_or_default() { if reverse.unwrap_or_default() {
end.x = -end.x; end.x = -end.x;
@ -718,7 +720,7 @@ pub async fn inner_angled_line_that_intersects(
point_to_len_unit(path.get_to(), from.units), point_to_len_unit(path.get_to(), from.units),
], ],
offset.map(|t| t.to_length_units(from.units)).unwrap_or_default(), offset.map(|t| t.to_length_units(from.units)).unwrap_or_default(),
angle.to_degrees(), angle.to_degrees(exec_state, args.source_range),
from.ignore_units(), from.ignore_units(),
); );
let to = [ let to = [
@ -1256,8 +1258,8 @@ pub async fn relative_arc(
radius: TyF64, radius: TyF64,
tag: Option<TagNode>, tag: Option<TagNode>,
) -> Result<Sketch, KclError> { ) -> Result<Sketch, KclError> {
let a_start = Angle::from_degrees(angle_start.to_degrees()); let a_start = Angle::from_degrees(angle_start.to_degrees(exec_state, args.source_range));
let a_end = Angle::from_degrees(angle_end.to_degrees()); let a_end = Angle::from_degrees(angle_end.to_degrees(exec_state, args.source_range));
let radius = radius.to_length_units(from.units); let radius = radius.to_length_units(from.units);
let (center, end) = arc_center_and_end(from.ignore_units(), a_start, a_end, radius); let (center, end) = arc_center_and_end(from.ignore_units(), a_start, a_end, radius);
if a_start == a_end { if a_start == a_end {
@ -1409,7 +1411,7 @@ async fn inner_tangential_arc_radius_angle(
let (center, to, ccw) = match data { let (center, to, ccw) = match data {
TangentialArcData::RadiusAndOffset { radius, offset } => { TangentialArcData::RadiusAndOffset { radius, offset } => {
// KCL stdlib types use degrees. // KCL stdlib types use degrees.
let offset = Angle::from_degrees(offset.to_degrees()); let offset = Angle::from_degrees(offset.to_degrees(exec_state, args.source_range));
// Calculate the end point from the angle and radius. // Calculate the end point from the angle and radius.
// atan2 outputs radians. // atan2 outputs radians.

View File

@ -6,7 +6,7 @@ use super::args::TyF64;
use crate::execution::types::{NumericType, UnitLen}; use crate::execution::types::{NumericType, UnitLen};
pub(crate) fn untype_point(p: [TyF64; 2]) -> ([f64; 2], NumericType) { pub(crate) fn untype_point(p: [TyF64; 2]) -> ([f64; 2], NumericType) {
let (x, y, ty) = NumericType::combine_eq_coerce(p[0].clone(), p[1].clone()); let (x, y, ty) = NumericType::combine_eq_coerce(p[0].clone(), p[1].clone(), None);
([x, y], ty) ([x, y], ty)
} }

View File

@ -5571398,7 +5571398,7 @@ description: Artifact commands import_async.kcl
"segment": { "segment": {
"type": "line", "type": "line",
"end": { "end": {
"x": -5.816564508980187, "x": -5.816564508980192,
"y": 18.856838998639372, "y": 18.856838998639372,
"z": 0.0 "z": 0.0
}, },
@ -5571814,7 +5571814,7 @@ description: Artifact commands import_async.kcl
"segment": { "segment": {
"type": "line", "type": "line",
"end": { "end": {
"x": -1.6644342460226098, "x": -1.664434246022614,
"y": 19.66322604122736, "y": 19.66322604122736,
"z": 0.0 "z": 0.0
}, },

View File

@ -9,64 +9,64 @@ flowchart LR
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
5["Segment<br>[938, 966, 0]"] 5["Segment<br>[938, 966, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
6["Segment<br>[974, 1050, 0]"] 6["Segment<br>[974, 1056, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
7["Segment<br>[1058, 1123, 0]"] 7["Segment<br>[1064, 1132, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
8["Segment<br>[1131, 1138, 0]"] 8["Segment<br>[1140, 1147, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
9[Solid2d] 9[Solid2d]
end end
subgraph path11 [Path] subgraph path11 [Path]
11["Path<br>[1643, 1713, 0]"] 11["Path<br>[1652, 1722, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
12["Segment<br>[1723, 1889, 0]"] 12["Segment<br>[1732, 1898, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
13["Segment<br>[1899, 1984, 0]"] 13["Segment<br>[1908, 1993, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
14["Segment<br>[1994, 2215, 0]"] 14["Segment<br>[2003, 2224, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
15["Segment<br>[2302, 2388, 0]"] 15["Segment<br>[2311, 2400, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
16["Segment<br>[2677, 2684, 0]"] 16["Segment<br>[2692, 2699, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
17[Solid2d] 17[Solid2d]
end end
subgraph path19 [Path] subgraph path19 [Path]
19["Path<br>[1643, 1713, 0]"] 19["Path<br>[1652, 1722, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
20["Segment<br>[1723, 1889, 0]"] 20["Segment<br>[1732, 1898, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
21["Segment<br>[1899, 1984, 0]"] 21["Segment<br>[1908, 1993, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
22["Segment<br>[1994, 2215, 0]"] 22["Segment<br>[2003, 2224, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
23["Segment<br>[2302, 2388, 0]"] 23["Segment<br>[2311, 2400, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
24["Segment<br>[2677, 2684, 0]"] 24["Segment<br>[2692, 2699, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
25[Solid2d] 25[Solid2d]
end end
subgraph path27 [Path] subgraph path27 [Path]
27["Path<br>[1643, 1713, 0]"] 27["Path<br>[1652, 1722, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
32["Segment<br>[2677, 2684, 0]"] 32["Segment<br>[2692, 2699, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
33[Solid2d] 33[Solid2d]
end end
1["Plane<br>[728, 745, 0]"] 1["Plane<br>[728, 745, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
10["Plane<br>[1594, 1632, 0]"] 10["Plane<br>[1603, 1641, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg]
18["Plane<br>[1594, 1632, 0]"] 18["Plane<br>[1603, 1641, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg]
26["Plane<br>[1594, 1632, 0]"] 26["Plane<br>[1603, 1641, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg]
28["SweepEdge Opposite"] 28["SweepEdge Opposite"]
29["SweepEdge Opposite"] 29["SweepEdge Opposite"]
30["SweepEdge Opposite"] 30["SweepEdge Opposite"]
31["SweepEdge Opposite"] 31["SweepEdge Opposite"]
34["Sweep Loft<br>[3201, 3268, 0]"] 34["Sweep Loft<br>[3216, 3283, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit]
35[Wall] 35[Wall]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath
@ -84,11 +84,11 @@ flowchart LR
42["SweepEdge Adjacent"] 42["SweepEdge Adjacent"]
43["SweepEdge Adjacent"] 43["SweepEdge Adjacent"]
44["SweepEdge Adjacent"] 44["SweepEdge Adjacent"]
45["StartSketchOnPlane<br>[1580, 1633, 0]"] 45["StartSketchOnPlane<br>[1589, 1642, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
46["StartSketchOnPlane<br>[1580, 1633, 0]"] 46["StartSketchOnPlane<br>[1589, 1642, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
47["StartSketchOnPlane<br>[1580, 1633, 0]"] 47["StartSketchOnPlane<br>[1589, 1642, 0]"]
%% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
1 --- 2 1 --- 2
2 --- 3 2 --- 3

View File

@ -1179,13 +1179,13 @@ description: Result of parsing import_async.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1205,13 +1205,13 @@ description: Result of parsing import_async.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1278,13 +1278,13 @@ description: Result of parsing import_async.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2518,13 +2518,13 @@ description: Result of parsing import_async.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "/", "operator": "/",
@ -2746,13 +2746,13 @@ description: Result of parsing import_async.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -3514,13 +3514,13 @@ description: Result of parsing import_async.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "20", "raw": "20deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 20.0, "value": 20.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -3536,13 +3536,13 @@ description: Result of parsing import_async.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "35", "raw": "35deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 35.0, "value": 35.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -30,8 +30,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth) |> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth) |> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth) |> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close() |> close()
// Define a function to create a rotated gear sketch on an offset plane // Define a function to create a rotated gear sketch on an offset plane
@ -57,14 +57,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -94,8 +94,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
helicalGear( helicalGear(
nTeeth = 21, nTeeth = 21,
module = 2, module = 2,
pressureAngle = 20, pressureAngle = 20deg,
helixAngle = 35, helixAngle = 35deg,
gearHeight = 7, gearHeight = 7,
) )

View File

@ -54,13 +54,9 @@ description: Operations executed import_async.kcl
"type": "Number", "type": "Number",
"value": 35.0, "value": 35.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []
@ -102,13 +98,9 @@ description: Operations executed import_async.kcl
"type": "Number", "type": "Number",
"value": 20.0, "value": 20.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []
@ -1153,7 +1145,7 @@ description: Operations executed import_async.kcl
"angle": { "angle": {
"value": { "value": {
"type": "Number", "type": "Number",
"value": 1.8699956271367815, "value": 1.8699956271367817,
"ty": { "ty": {
"type": "Known", "type": "Known",
"type": "Angle", "type": "Angle",
@ -1235,7 +1227,7 @@ description: Operations executed import_async.kcl
"name": "x", "name": "x",
"value": { "value": {
"type": "Number", "type": "Number",
"value": -5.816564508980187, "value": -5.816564508980192,
"ty": { "ty": {
"type": "Default", "type": "Default",
"len": { "len": {
@ -2595,7 +2587,7 @@ description: Operations executed import_async.kcl
"angle": { "angle": {
"value": { "value": {
"type": "Number", "type": "Number",
"value": 1.655242081157069, "value": 1.6552420811570692,
"ty": { "ty": {
"type": "Known", "type": "Known",
"type": "Angle", "type": "Angle",
@ -2677,7 +2669,7 @@ description: Operations executed import_async.kcl
"name": "x", "name": "x",
"value": { "value": {
"type": "Number", "type": "Number",
"value": -1.6644342460226098, "value": -1.664434246022614,
"ty": { "ty": {
"type": "Default", "type": "Default",
"len": { "len": {

View File

@ -34,8 +34,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth) |> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth) |> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth) |> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close() |> close()
// Define a function to create a rotated gear sketch on an offset plane // Define a function to create a rotated gear sketch on an offset plane
@ -61,14 +61,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
) )
// Position the end line of the sketch at the start of the next tooth // Position the end line of the sketch at the start of the next tooth
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2))
// Pattern the sketch about the center by the specified number of teeth, then close the sketch // Pattern the sketch about the center by the specified number of teeth, then close the sketch
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()
@ -98,8 +98,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
helicalGear( helicalGear(
nTeeth = 21, nTeeth = 21,
module = 2, module = 2,
pressureAngle = 20, pressureAngle = 20deg,
helixAngle = 35, helixAngle = 35deg,
gearHeight = 7, gearHeight = 7,
) )

View File

@ -1,34 +1,34 @@
```mermaid ```mermaid
flowchart LR flowchart LR
subgraph path2 [Path] subgraph path2 [Path]
2["Path<br>[335, 375, 0]"] 2["Path<br>[338, 378, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
3["Segment<br>[381, 519, 0]"] 3["Segment<br>[384, 522, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
4["Segment<br>[525, 571, 0]"] 4["Segment<br>[528, 574, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
5["Segment<br>[577, 722, 0]"] 5["Segment<br>[580, 728, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
6["Segment<br>[728, 870, 0]"] 6["Segment<br>[734, 879, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
7["Segment<br>[876, 922, 0]"] 7["Segment<br>[885, 931, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
8["Segment<br>[928, 1002, 0]"] 8["Segment<br>[937, 1014, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
9["Segment<br>[1157, 1164, 0]"] 9["Segment<br>[1172, 1179, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }]
10[Solid2d] 10[Solid2d]
end end
subgraph path11 [Path] subgraph path11 [Path]
11["Path<br>[1188, 1223, 0]"] 11["Path<br>[1203, 1238, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }]
12["Segment<br>[1188, 1223, 0]"] 12["Segment<br>[1203, 1238, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }]
13[Solid2d] 13[Solid2d]
end end
1["Plane<br>[312, 329, 0]"] 1["Plane<br>[315, 332, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
14["Sweep Extrusion<br>[1230, 1258, 0]"] 14["Sweep Extrusion<br>[1245, 1273, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 11 }] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 11 }]
15[Wall] 15[Wall]
%% face_code_ref=Missing NodePath %% face_code_ref=Missing NodePath

View File

@ -1,6 +1,5 @@
--- ---
source: kcl-lib/src/simulation_tests.rs source: kcl-lib/src/simulation_tests.rs
assertion_line: 87
description: Result of parsing involute_circular_units.kcl description: Result of parsing involute_circular_units.kcl
--- ---
{ {
@ -475,13 +474,13 @@ description: Result of parsing involute_circular_units.kcl
"init": { "init": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "6", "raw": "6deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 6.0, "value": 6.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1026,13 +1025,13 @@ description: Result of parsing involute_circular_units.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "9", "raw": "9deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 9.0, "value": 9.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1230,13 +1229,13 @@ description: Result of parsing involute_circular_units.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "12", "raw": "12deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 12.0, "value": 12.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -1419,13 +1418,13 @@ description: Result of parsing involute_circular_units.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "/", "operator": "/",
@ -1626,13 +1625,13 @@ description: Result of parsing involute_circular_units.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -11,7 +11,7 @@ baseDiameter = pitchDiameter * cos(pressureAngle)
tipDiameter = pitchDiameter + 2 * module tipDiameter = pitchDiameter + 2 * module
gearHeight = .3 gearHeight = .3
angle001 = 6 angle001 = 6deg
sketch001 = startSketchOn(XY) sketch001 = startSketchOn(XY)
|> startProfile(at = [baseDiameter / 2, 0]) |> startProfile(at = [baseDiameter / 2, 0])
|> involuteCircular( |> involuteCircular(
@ -23,23 +23,23 @@ sketch001 = startSketchOn(XY)
|> line(endAbsolute = [lastSegX(%), lastSegY(%)]) |> line(endAbsolute = [lastSegX(%), lastSegY(%)])
|> arc( |> arc(
angleStart = asin(segEndY(seg01) / segEndX(seg01)), angleStart = asin(segEndY(seg01) / segEndX(seg01)),
angleEnd = 9, angleEnd = 9deg,
radius = tipDiameter / 2, radius = tipDiameter / 2,
tag = $seg02, tag = $seg02,
) )
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
angle = -12, angle = -12deg,
reverse = true, reverse = true,
) )
|> line(endAbsolute = [lastSegX(%), lastSegY(%)]) |> line(endAbsolute = [lastSegX(%), lastSegY(%)])
|> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2))
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()

View File

@ -304,13 +304,9 @@ description: Operations executed involute_circular_units.kcl
"type": "Number", "type": "Number",
"value": 6.0, "value": 6.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Cm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",

View File

@ -20,13 +20,9 @@ description: Variables in memory after executing involute_circular_units.kcl
"type": "Number", "type": "Number",
"value": 6.0, "value": 6.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Cm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"baseDiameter": { "baseDiameter": {
@ -138,9 +134,9 @@ description: Variables in memory after executing involute_circular_units.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 505, "commentStart": 508,
"end": 511, "end": 514,
"start": 505, "start": 508,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -158,9 +154,9 @@ description: Variables in memory after executing involute_circular_units.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 708, "commentStart": 714,
"end": 714, "end": 720,
"start": 708, "start": 714,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -202,9 +198,9 @@ description: Variables in memory after executing involute_circular_units.kcl
0.0 0.0
], ],
"tag": { "tag": {
"commentStart": 505, "commentStart": 508,
"end": 511, "end": 514,
"start": 505, "start": 508,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -252,9 +248,9 @@ description: Variables in memory after executing involute_circular_units.kcl
], ],
"radius": 5.75, "radius": 5.75,
"tag": { "tag": {
"commentStart": 708, "commentStart": 714,
"end": 714, "end": 720,
"start": 708, "start": 714,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },

View File

@ -1,6 +1,5 @@
--- ---
source: kcl-lib/src/simulation_tests.rs source: kcl-lib/src/simulation_tests.rs
assertion_line: 109
description: Result of unparsing involute_circular_units.kcl description: Result of unparsing involute_circular_units.kcl
--- ---
@settings(defaultLengthUnit = cm) @settings(defaultLengthUnit = cm)
@ -16,7 +15,7 @@ baseDiameter = pitchDiameter * cos(pressureAngle)
tipDiameter = pitchDiameter + 2 * module tipDiameter = pitchDiameter + 2 * module
gearHeight = .3 gearHeight = .3
angle001 = 6 angle001 = 6deg
sketch001 = startSketchOn(XY) sketch001 = startSketchOn(XY)
|> startProfile(at = [baseDiameter / 2, 0]) |> startProfile(at = [baseDiameter / 2, 0])
|> involuteCircular( |> involuteCircular(
@ -28,23 +27,23 @@ sketch001 = startSketchOn(XY)
|> line(endAbsolute = [lastSegX(%), lastSegY(%)]) |> line(endAbsolute = [lastSegX(%), lastSegY(%)])
|> arc( |> arc(
angleStart = asin(segEndY(seg01) / segEndX(seg01)), angleStart = asin(segEndY(seg01) / segEndX(seg01)),
angleEnd = 9, angleEnd = 9deg,
radius = tipDiameter / 2, radius = tipDiameter / 2,
tag = $seg02, tag = $seg02,
) )
|> involuteCircular( |> involuteCircular(
startRadius = baseDiameter / 2, startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2, endRadius = tipDiameter / 2,
angle = -12, angle = -12deg,
reverse = true, reverse = true,
) )
|> line(endAbsolute = [lastSegX(%), lastSegY(%)]) |> line(endAbsolute = [lastSegX(%), lastSegY(%)])
|> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2))
|> patternCircular2d( |> patternCircular2d(
%, %,
instances = nTeeth, instances = nTeeth,
center = [0, 0], center = [0, 0],
arcDegrees = 360, arcDegrees = 360deg,
rotateDuplicates = true, rotateDuplicates = true,
) )
|> close() |> close()

View File

@ -1135,13 +1135,13 @@ description: Result of parsing ball-bearing.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1868,13 +1868,13 @@ description: Result of parsing ball-bearing.kcl
"unlabeled": { "unlabeled": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1926,13 +1926,13 @@ description: Result of parsing ball-bearing.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "120", "raw": "120deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 120.0, "value": 120.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1948,13 +1948,13 @@ description: Result of parsing ball-bearing.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2330,13 +2330,13 @@ description: Result of parsing ball-bearing.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2901,13 +2901,13 @@ description: Result of parsing ball-bearing.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "/", "operator": "/",
@ -2984,13 +2984,13 @@ description: Result of parsing ball-bearing.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -1140,13 +1140,9 @@ description: Operations executed ball-bearing.kcl
"type": "Number", "type": "Number",
"value": 36.0, "value": 36.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Inches" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []

View File

@ -429,13 +429,13 @@ description: Result of parsing brake-rotor.kcl
"init": { "init": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -462,13 +462,13 @@ description: Result of parsing brake-rotor.kcl
"init": { "init": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "30", "raw": "30deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 30.0, "value": 30.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -528,13 +528,13 @@ description: Result of parsing brake-rotor.kcl
"init": { "init": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "5", "raw": "5deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 5.0, "value": 5.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -3374,13 +3374,13 @@ description: Result of parsing brake-rotor.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -4397,13 +4397,13 @@ description: Result of parsing brake-rotor.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -4965,13 +4965,13 @@ description: Result of parsing brake-rotor.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "-", "operator": "-",
@ -5092,13 +5092,13 @@ description: Result of parsing brake-rotor.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "-", "operator": "-",
@ -5618,13 +5618,13 @@ description: Result of parsing brake-rotor.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -6730,13 +6730,13 @@ description: Result of parsing brake-rotor.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -407,13 +407,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -440,13 +436,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 30.0, "value": 30.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -506,13 +498,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 5.0, "value": 5.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1002,13 +990,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1048,13 +1032,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 60.0, "value": 60.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1140,13 +1120,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 84.0, "value": 84.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1435,13 +1411,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1481,13 +1453,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 60.0, "value": 60.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1573,13 +1541,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 75.0, "value": 75.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1868,13 +1832,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -1914,13 +1874,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 60.0, "value": 60.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -2006,13 +1962,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 66.0, "value": 66.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -3200,13 +3152,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -3246,13 +3194,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 60.0, "value": 60.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -3338,13 +3282,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 84.0, "value": 84.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -3633,13 +3573,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -3679,13 +3615,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 60.0, "value": 60.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -3771,13 +3703,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 75.0, "value": 75.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -4066,13 +3994,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -4112,13 +4036,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 60.0, "value": 60.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -4204,13 +4124,9 @@ description: Operations executed brake-rotor.kcl
"type": "Number", "type": "Number",
"value": 66.0, "value": 66.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -572,13 +572,9 @@ description: Operations executed clock.kcl
"type": "Number", "type": "Number",
"value": -180.0, "value": -180.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",
@ -605,13 +601,9 @@ description: Operations executed clock.kcl
"type": "Number", "type": "Number",
"value": -84.0, "value": -84.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",

View File

@ -25,9 +25,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -38,9 +38,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 968, "commentStart": 980,
"end": 980, "end": 992,
"start": 968, "start": 980,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -67,9 +67,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -233,9 +233,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1312, "commentStart": 1324,
"end": 1318, "end": 1330,
"start": 1312, "start": 1324,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -246,9 +246,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1512, "commentStart": 1524,
"end": 1522, "end": 1534,
"start": 1512, "start": 1524,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capEnd001" "value": "capEnd001"
}, },
@ -275,9 +275,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 1312, "commentStart": 1324,
"end": 1318, "end": 1330,
"start": 1312, "start": 1324,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -322,9 +322,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -335,9 +335,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 968, "commentStart": 980,
"end": 980, "end": 992,
"start": 968, "start": 980,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -364,9 +364,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -571,9 +571,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -584,9 +584,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 968, "commentStart": 980,
"end": 980, "end": 992,
"start": 968, "start": 980,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -613,9 +613,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -769,13 +769,9 @@ description: Variables in memory after executing clock.kcl
"type": "Number", "type": "Number",
"value": -180.0, "value": -180.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"hourHandArmLength": { "hourHandArmLength": {
@ -846,13 +842,9 @@ description: Variables in memory after executing clock.kcl
"type": "Number", "type": "Number",
"value": -84.0, "value": -84.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"minuteHandArmLength": { "minuteHandArmLength": {
@ -1839,9 +1831,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -1942,9 +1934,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 1312, "commentStart": 1324,
"end": 1318, "end": 1330,
"start": 1312, "start": 1324,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -1989,9 +1981,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2002,9 +1994,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 968, "commentStart": 980,
"end": 980, "end": 992,
"start": 968, "start": 980,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -2031,9 +2023,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2241,9 +2233,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2254,9 +2246,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 968, "commentStart": 980,
"end": 980, "end": 992,
"start": 968, "start": 980,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -2283,9 +2275,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2598,9 +2590,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2611,9 +2603,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 968, "commentStart": 980,
"end": 980, "end": 992,
"start": 968, "start": 980,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -2640,9 +2632,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2851,9 +2843,9 @@ description: Variables in memory after executing clock.kcl
7.054165456091913 7.054165456091913
], ],
"tag": { "tag": {
"commentStart": 9962, "commentStart": 10163,
"end": 9969, "end": 10170,
"start": 9962, "start": 10163,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg004" "value": "seg004"
}, },
@ -2876,9 +2868,9 @@ description: Variables in memory after executing clock.kcl
19.554165456091912 19.554165456091912
], ],
"tag": { "tag": {
"commentStart": 10158, "commentStart": 10359,
"end": 10165, "end": 10366,
"start": 10158, "start": 10359,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg002" "value": "seg002"
}, },
@ -3186,9 +3178,9 @@ description: Variables in memory after executing clock.kcl
-119.46453889126977 -119.46453889126977
], ],
"tag": { "tag": {
"commentStart": 11501, "commentStart": 11732,
"end": 11508, "end": 11739,
"start": 11501, "start": 11732,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg003" "value": "seg003"
}, },
@ -3211,9 +3203,9 @@ description: Variables in memory after executing clock.kcl
-120.77114468211543 -120.77114468211543
], ],
"tag": { "tag": {
"commentStart": 11705, "commentStart": 11936,
"end": 11712, "end": 11943,
"start": 11705, "start": 11936,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg005" "value": "seg005"
}, },
@ -3569,9 +3561,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -3582,9 +3574,9 @@ description: Variables in memory after executing clock.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 968, "commentStart": 980,
"end": 980, "end": 992,
"start": 968, "start": 980,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -3611,9 +3603,9 @@ description: Variables in memory after executing clock.kcl
], ],
"radius": 250.0, "radius": 250.0,
"tag": { "tag": {
"commentStart": 889, "commentStart": 901,
"end": 895, "end": 907,
"start": 889, "start": 901,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },

View File

@ -439,13 +439,13 @@ description: Result of parsing cold-plate.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -773,13 +773,13 @@ description: Result of parsing cold-plate.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1031,13 +1031,13 @@ description: Result of parsing cold-plate.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "77", "raw": "77deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 77.0, "value": 77.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -1131,13 +1131,13 @@ description: Result of parsing cold-plate.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "77", "raw": "77deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 77.0, "value": 77.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1865,13 +1865,13 @@ description: Result of parsing cold-plate.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2070,13 +2070,13 @@ description: Result of parsing cold-plate.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -2289,13 +2289,13 @@ description: Result of parsing cold-plate.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -1015,9 +1015,9 @@ description: Variables in memory after executing cold-plate.kcl
1.25 1.25
], ],
"tag": { "tag": {
"commentStart": 856, "commentStart": 859,
"end": 862, "end": 865,
"start": 856, "start": 859,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg07" "value": "seg07"
}, },
@ -1040,9 +1040,9 @@ description: Variables in memory after executing cold-plate.kcl
1.25 1.25
], ],
"tag": { "tag": {
"commentStart": 905, "commentStart": 908,
"end": 911, "end": 914,
"start": 905, "start": 908,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg09" "value": "seg09"
}, },
@ -1089,9 +1089,9 @@ description: Variables in memory after executing cold-plate.kcl
0.625 0.625
], ],
"tag": { "tag": {
"commentStart": 1012, "commentStart": 1018,
"end": 1018, "end": 1024,
"start": 1012, "start": 1018,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg08" "value": "seg08"
}, },
@ -1157,9 +1157,9 @@ description: Variables in memory after executing cold-plate.kcl
1.047006236503076 1.047006236503076
], ],
"tag": { "tag": {
"commentStart": 1189, "commentStart": 1201,
"end": 1195, "end": 1207,
"start": 1189, "start": 1201,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -1346,9 +1346,9 @@ description: Variables in memory after executing cold-plate.kcl
-3.0 -3.0
], ],
"tag": { "tag": {
"commentStart": 1594, "commentStart": 1606,
"end": 1600, "end": 1612,
"start": 1594, "start": 1606,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg05" "value": "seg05"
}, },
@ -1376,9 +1376,9 @@ description: Variables in memory after executing cold-plate.kcl
-3.0 -3.0
], ],
"tag": { "tag": {
"commentStart": 1661, "commentStart": 1676,
"end": 1667, "end": 1682,
"start": 1661, "start": 1676,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -1401,9 +1401,9 @@ description: Variables in memory after executing cold-plate.kcl
-1.0 -1.0
], ],
"tag": { "tag": {
"commentStart": 1736, "commentStart": 1751,
"end": 1742, "end": 1757,
"start": 1736, "start": 1751,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg06" "value": "seg06"
}, },
@ -1431,9 +1431,9 @@ description: Variables in memory after executing cold-plate.kcl
-0.9999999999999984 -0.9999999999999984
], ],
"tag": { "tag": {
"commentStart": 1804, "commentStart": 1822,
"end": 1810, "end": 1828,
"start": 1804, "start": 1822,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -1480,9 +1480,9 @@ description: Variables in memory after executing cold-plate.kcl
0.9999999999999998 0.9999999999999998
], ],
"tag": { "tag": {
"commentStart": 1940, "commentStart": 1961,
"end": 1946, "end": 1967,
"start": 1940, "start": 1961,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },

View File

@ -734,13 +734,13 @@ description: Result of parsing countersunk-plate.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "-", "operator": "-",
@ -986,13 +986,13 @@ description: Result of parsing countersunk-plate.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1386,13 +1386,13 @@ description: Result of parsing countersunk-plate.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,

View File

@ -961,13 +961,13 @@ description: Result of parsing cpu-cooler.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1165,13 +1165,13 @@ description: Result of parsing cpu-cooler.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -972,13 +972,9 @@ description: Operations executed cpu-cooler.kcl
"type": "Number", "type": "Number",
"value": 50.0, "value": 50.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []
@ -1071,13 +1067,9 @@ description: Operations executed cpu-cooler.kcl
"type": "Number", "type": "Number",
"value": 30.0, "value": 30.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []

View File

@ -603,13 +603,13 @@ description: Result of parsing cycloidal-gear.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "+", "operator": "+",
@ -650,13 +650,13 @@ description: Result of parsing cycloidal-gear.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -797,13 +797,13 @@ description: Result of parsing cycloidal-gear.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
} }
} }
@ -871,13 +871,13 @@ description: Result of parsing cycloidal-gear.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -971,13 +971,13 @@ description: Result of parsing cycloidal-gear.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
} }
} }
@ -1045,13 +1045,13 @@ description: Result of parsing cycloidal-gear.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -1815,13 +1815,13 @@ description: Result of parsing cycloidal-gear.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "80", "raw": "80deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 80.0, "value": 80.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,

View File

@ -765,13 +765,13 @@ description: Result of parsing exhaust-manifold.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "80", "raw": "80deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 80.0, "value": 80.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -962,13 +962,13 @@ description: Result of parsing exhaust-manifold.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "85", "raw": "85deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 85.0, "value": 85.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1885,13 +1885,13 @@ description: Result of parsing exhaust-manifold.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "1", "raw": "1deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 1.0, "value": 1.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2027,13 +2027,13 @@ description: Result of parsing exhaust-manifold.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "24.3", "raw": "24.3deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 24.3, "value": 24.3,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2169,13 +2169,13 @@ description: Result of parsing exhaust-manifold.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "25.2", "raw": "25.2deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 25.2, "value": 25.2,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2530,13 +2530,13 @@ description: Result of parsing exhaust-manifold.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "40", "raw": "40deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 40.0, "value": 40.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -2606,13 +2606,13 @@ description: Result of parsing exhaust-manifold.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "80", "raw": "80deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 80.0, "value": 80.0,
"suffix": "None" "suffix": "Deg"
} }
} }
} }
@ -2676,13 +2676,13 @@ description: Result of parsing exhaust-manifold.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "40", "raw": "40deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 40.0, "value": 40.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -2982,13 +2982,13 @@ description: Result of parsing exhaust-manifold.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "40", "raw": "40deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 40.0, "value": 40.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -3058,13 +3058,13 @@ description: Result of parsing exhaust-manifold.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "80", "raw": "80deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 80.0, "value": 80.0,
"suffix": "None" "suffix": "Deg"
} }
} }
} }
@ -3128,13 +3128,13 @@ description: Result of parsing exhaust-manifold.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "40", "raw": "40deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 40.0, "value": 40.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -3477,13 +3477,13 @@ description: Result of parsing exhaust-manifold.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "40", "raw": "40deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 40.0, "value": 40.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -3553,13 +3553,13 @@ description: Result of parsing exhaust-manifold.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "80", "raw": "80deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 80.0, "value": 80.0,
"suffix": "None" "suffix": "Deg"
} }
} }
} }

View File

@ -501,13 +501,9 @@ description: Operations executed exhaust-manifold.kcl
"type": "Number", "type": "Number",
"value": 1.0, "value": 1.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Inches" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []
@ -853,13 +849,9 @@ description: Operations executed exhaust-manifold.kcl
"type": "Number", "type": "Number",
"value": 24.3, "value": 24.3,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Inches" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []
@ -1205,13 +1197,9 @@ description: Operations executed exhaust-manifold.kcl
"type": "Number", "type": "Number",
"value": 25.2, "value": 25.2,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Inches" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []

View File

@ -28,9 +28,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2009, "commentStart": 2024,
"end": 2015, "end": 2030,
"start": 2009, "start": 2024,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -62,9 +62,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2183, "commentStart": 2207,
"end": 2189, "end": 2213,
"start": 2183, "start": 2207,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -75,9 +75,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2232, "commentStart": 2256,
"end": 2238, "end": 2262,
"start": 2232, "start": 2256,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -88,9 +88,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2271, "commentStart": 2295,
"end": 2277, "end": 2301,
"start": 2271, "start": 2295,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg05" "value": "seg05"
}, },
@ -122,9 +122,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2455, "commentStart": 2488,
"end": 2461, "end": 2494,
"start": 2455, "start": 2488,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg07" "value": "seg07"
}, },
@ -135,9 +135,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2512, "commentStart": 2545,
"end": 2518, "end": 2551,
"start": 2512, "start": 2545,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg08" "value": "seg08"
}, },
@ -148,9 +148,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2562, "commentStart": 2595,
"end": 2568, "end": 2601,
"start": 2562, "start": 2595,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg09" "value": "seg09"
}, },
@ -192,9 +192,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.25 -1.25
], ],
"tag": { "tag": {
"commentStart": 2009, "commentStart": 2024,
"end": 2015, "end": 2030,
"start": 2009, "start": 2024,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg01" "value": "seg01"
}, },
@ -289,9 +289,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.2499999999999996 -1.2499999999999996
], ],
"tag": { "tag": {
"commentStart": 2183, "commentStart": 2207,
"end": 2189, "end": 2213,
"start": 2183, "start": 2207,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -314,9 +314,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.2499999999999996 -1.2499999999999996
], ],
"tag": { "tag": {
"commentStart": 2232, "commentStart": 2256,
"end": 2238, "end": 2262,
"start": 2232, "start": 2256,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -339,9 +339,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
1.3500000000000005 1.3500000000000005
], ],
"tag": { "tag": {
"commentStart": 2271, "commentStart": 2295,
"end": 2277, "end": 2301,
"start": 2271, "start": 2295,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg05" "value": "seg05"
}, },
@ -436,9 +436,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
1.3500000000000008 1.3500000000000008
], ],
"tag": { "tag": {
"commentStart": 2455, "commentStart": 2488,
"end": 2461, "end": 2494,
"start": 2455, "start": 2488,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg07" "value": "seg07"
}, },
@ -461,9 +461,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
1.3500000000000008 1.3500000000000008
], ],
"tag": { "tag": {
"commentStart": 2512, "commentStart": 2545,
"end": 2518, "end": 2551,
"start": 2512, "start": 2545,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg08" "value": "seg08"
}, },
@ -486,9 +486,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.25 -1.25
], ],
"tag": { "tag": {
"commentStart": 2562, "commentStart": 2595,
"end": 2568, "end": 2601,
"start": 2562, "start": 2595,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg09" "value": "seg09"
}, },

View File

@ -1007,13 +1007,13 @@ description: Result of parsing food-service-spatula.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1140,13 +1140,13 @@ description: Result of parsing food-service-spatula.kcl
"expression": { "expression": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "270", "raw": "270deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 270.0, "value": 270.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1167,13 +1167,13 @@ description: Result of parsing food-service-spatula.kcl
"expression": { "expression": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1611,13 +1611,13 @@ description: Result of parsing food-service-spatula.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1778,13 +1778,13 @@ description: Result of parsing food-service-spatula.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1953,32 +1953,6 @@ description: Result of parsing food-service-spatula.kcl
}, },
{ {
"arguments": [ "arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
},
{ {
"type": "LabeledArg", "type": "LabeledArg",
"label": { "label": {
@ -2026,7 +2000,22 @@ description: Result of parsing food-service-spatula.kcl
"start": 0, "start": 0,
"type": "CallExpressionKw", "type": "CallExpressionKw",
"type": "CallExpressionKw", "type": "CallExpressionKw",
"unlabeled": null "unlabeled": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
}, },
{ {
"arguments": [ "arguments": [
@ -2088,13 +2077,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
} }
@ -2123,32 +2112,6 @@ description: Result of parsing food-service-spatula.kcl
}, },
{ {
"arguments": [ "arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
},
{ {
"type": "LabeledArg", "type": "LabeledArg",
"label": { "label": {
@ -2204,7 +2167,22 @@ description: Result of parsing food-service-spatula.kcl
"start": 0, "start": 0,
"type": "CallExpressionKw", "type": "CallExpressionKw",
"type": "CallExpressionKw", "type": "CallExpressionKw",
"unlabeled": null "unlabeled": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
}, },
{ {
"arguments": [ "arguments": [
@ -2849,13 +2827,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "163.087610", "raw": "163.087610deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 163.08761, "value": 163.08761,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2871,13 +2849,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "196.912390", "raw": "196.912390deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 196.91239, "value": 196.91239,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -5698,13 +5676,13 @@ description: Result of parsing food-service-spatula.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90.0", "raw": "90.0deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -5917,13 +5895,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90.0", "raw": "90.0deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -6093,13 +6071,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90.0", "raw": "90.0deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -6115,13 +6093,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180.0", "raw": "180.0deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -6309,13 +6287,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180.0", "raw": "180.0deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -6331,13 +6309,13 @@ description: Result of parsing food-service-spatula.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "270.0", "raw": "270.0deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 270.0, "value": 270.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -2134,13 +2134,9 @@ description: Operations executed food-service-spatula.kcl
"type": "Number", "type": "Number",
"value": 90.0, "value": 90.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Mm" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"visibility": "default", "visibility": "default",

View File

@ -27,9 +27,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1590, "commentStart": 1592,
"end": 1599, "end": 1601,
"start": 1590, "start": 1592,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "backEdge" "value": "backEdge"
}, },
@ -90,9 +90,9 @@ description: Variables in memory after executing food-service-spatula.kcl
-30.0 -30.0
], ],
"tag": { "tag": {
"commentStart": 1590, "commentStart": 1592,
"end": 1599, "end": 1601,
"start": 1590, "start": 1592,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "backEdge" "value": "backEdge"
}, },
@ -299,9 +299,9 @@ description: Variables in memory after executing food-service-spatula.kcl
-30.0 -30.0
], ],
"tag": { "tag": {
"commentStart": 1590, "commentStart": 1592,
"end": 1599, "end": 1601,
"start": 1590, "start": 1592,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "backEdge" "value": "backEdge"
}, },
@ -551,9 +551,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 4336, "commentStart": 4356,
"end": 4348, "end": 4368,
"start": 4336, "start": 4356,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "gripEdgeTop" "value": "gripEdgeTop"
}, },
@ -713,9 +713,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0 7.0
], ],
"tag": { "tag": {
"commentStart": 4336, "commentStart": 4356,
"end": 4348, "end": 4368,
"start": 4336, "start": 4356,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "gripEdgeTop" "value": "gripEdgeTop"
}, },
@ -1058,9 +1058,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 4336, "commentStart": 4356,
"end": 4348, "end": 4368,
"start": 4336, "start": 4356,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "gripEdgeTop" "value": "gripEdgeTop"
}, },
@ -1220,9 +1220,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0 7.0
], ],
"tag": { "tag": {
"commentStart": 4336, "commentStart": 4356,
"end": 4348, "end": 4368,
"start": 4336, "start": 4356,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "gripEdgeTop" "value": "gripEdgeTop"
}, },
@ -1538,9 +1538,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0 7.0
], ],
"tag": { "tag": {
"commentStart": 4336, "commentStart": 4356,
"end": 4348, "end": 4368,
"start": 4336, "start": 4356,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "gripEdgeTop" "value": "gripEdgeTop"
}, },
@ -1729,9 +1729,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2988, "commentStart": 2996,
"end": 3005, "end": 3013,
"start": 2988, "start": 2996,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "handleBottomEdge" "value": "handleBottomEdge"
}, },
@ -1756,9 +1756,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 3136, "commentStart": 3144,
"end": 3150, "end": 3158,
"start": 3136, "start": 3144,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "handleTopEdge" "value": "handleTopEdge"
}, },
@ -1800,9 +1800,9 @@ description: Variables in memory after executing food-service-spatula.kcl
3.5 3.5
], ],
"tag": { "tag": {
"commentStart": 2988, "commentStart": 2996,
"end": 3005, "end": 3013,
"start": 2988, "start": 2996,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "handleBottomEdge" "value": "handleBottomEdge"
}, },
@ -1863,9 +1863,9 @@ description: Variables in memory after executing food-service-spatula.kcl
91.32128900000001 91.32128900000001
], ],
"tag": { "tag": {
"commentStart": 3136, "commentStart": 3144,
"end": 3150, "end": 3158,
"start": 3136, "start": 3144,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "handleTopEdge" "value": "handleTopEdge"
}, },
@ -2211,9 +2211,9 @@ description: Variables in memory after executing food-service-spatula.kcl
3.5 3.5
], ],
"tag": { "tag": {
"commentStart": 2988, "commentStart": 2996,
"end": 3005, "end": 3013,
"start": 2988, "start": 2996,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "handleBottomEdge" "value": "handleBottomEdge"
}, },
@ -2274,9 +2274,9 @@ description: Variables in memory after executing food-service-spatula.kcl
91.32128900000001 91.32128900000001
], ],
"tag": { "tag": {
"commentStart": 3136, "commentStart": 3144,
"end": 3150, "end": 3158,
"start": 3136, "start": 3144,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "handleTopEdge" "value": "handleTopEdge"
}, },
@ -2536,9 +2536,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 4336, "commentStart": 4356,
"end": 4348, "end": 4368,
"start": 4336, "start": 4356,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "gripEdgeTop" "value": "gripEdgeTop"
}, },
@ -2698,9 +2698,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0 7.0
], ],
"tag": { "tag": {
"commentStart": 4336, "commentStart": 4356,
"end": 4348, "end": 4368,
"start": 4336, "start": 4356,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "gripEdgeTop" "value": "gripEdgeTop"
}, },
@ -3371,9 +3371,9 @@ description: Variables in memory after executing food-service-spatula.kcl
-30.0 -30.0
], ],
"tag": { "tag": {
"commentStart": 1590, "commentStart": 1592,
"end": 1599, "end": 1601,
"start": 1590, "start": 1592,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "backEdge" "value": "backEdge"
}, },

View File

@ -394,13 +394,13 @@ description: Result of parsing french-press.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -765,13 +765,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1411,13 +1411,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1433,13 +1433,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "205", "raw": "205deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 205.0, "value": 205.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1503,13 +1503,13 @@ description: Result of parsing french-press.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -1597,13 +1597,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "30", "raw": "30deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 30.0, "value": 30.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1620,13 +1620,13 @@ description: Result of parsing french-press.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "120", "raw": "120deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 120.0, "value": 120.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -1696,13 +1696,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "150", "raw": "150deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 150.0, "value": 150.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1791,13 +1791,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1813,13 +1813,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2105,13 +2105,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2127,13 +2127,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2196,13 +2196,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "150", "raw": "150deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 150.0, "value": 150.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2338,13 +2338,13 @@ description: Result of parsing french-press.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "120", "raw": "120deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 120.0, "value": 120.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -2367,13 +2367,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "30", "raw": "30deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 30.0, "value": 30.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2437,13 +2437,13 @@ description: Result of parsing french-press.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -2585,13 +2585,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "205", "raw": "205deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 205.0, "value": 205.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2607,13 +2607,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2980,13 +2980,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -3611,13 +3611,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -3634,13 +3634,13 @@ description: Result of parsing french-press.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "30", "raw": "30deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 30.0, "value": 30.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -4284,13 +4284,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "30", "raw": "30deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 30.0, "value": 30.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -4416,13 +4416,13 @@ description: Result of parsing french-press.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "60", "raw": "60deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 60.0, "value": 60.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -4492,13 +4492,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "30", "raw": "30deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 30.0, "value": 30.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -5045,13 +5045,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "10", "raw": "10deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 10.0, "value": 10.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -5307,13 +5307,13 @@ description: Result of parsing french-press.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -6262,13 +6262,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -6675,13 +6675,13 @@ description: Result of parsing french-press.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -152,13 +152,9 @@ description: Operations executed french-press.kcl
"type": "Number", "type": "Number",
"value": 360.0, "value": 360.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Inches" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []

View File

@ -4412,9 +4412,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 479, "commentStart": 482,
"end": 500, "end": 503,
"start": 479, "start": 482,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "rectangleSegmentB001" "value": "rectangleSegmentB001"
}, },
@ -4425,9 +4425,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 602, "commentStart": 605,
"end": 623, "end": 626,
"start": 602, "start": 605,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "rectangleSegmentC001" "value": "rectangleSegmentC001"
}, },
@ -4480,9 +4480,9 @@ description: Variables in memory after executing french-press.kcl
5.7 5.7
], ],
"tag": { "tag": {
"commentStart": 479, "commentStart": 482,
"end": 500, "end": 503,
"start": 479, "start": 482,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "rectangleSegmentB001" "value": "rectangleSegmentB001"
}, },
@ -4505,9 +4505,9 @@ description: Variables in memory after executing french-press.kcl
6.45 6.45
], ],
"tag": { "tag": {
"commentStart": 602, "commentStart": 605,
"end": 623, "end": 626,
"start": 602, "start": 605,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "rectangleSegmentC001" "value": "rectangleSegmentC001"
}, },
@ -4658,9 +4658,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -4678,9 +4678,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -4698,9 +4698,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -4718,9 +4718,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -4738,9 +4738,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -4758,9 +4758,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -4778,9 +4778,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -4834,9 +4834,9 @@ description: Variables in memory after executing french-press.kcl
5.7 5.7
], ],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -4884,9 +4884,9 @@ description: Variables in memory after executing french-press.kcl
0.37321452147779016 0.37321452147779016
], ],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -4934,9 +4934,9 @@ description: Variables in memory after executing french-press.kcl
-0.9660159630635361 -0.9660159630635361
], ],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -4984,9 +4984,9 @@ description: Variables in memory after executing french-press.kcl
-0.13301270189221936 -0.13301270189221936
], ],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -5028,9 +5028,9 @@ description: Variables in memory after executing french-press.kcl
-0.03301270189221936 -0.03301270189221936
], ],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -5078,9 +5078,9 @@ description: Variables in memory after executing french-press.kcl
-0.11339745962155623 -0.11339745962155623
], ],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -5128,9 +5128,9 @@ description: Variables in memory after executing french-press.kcl
-0.17890072079287297 -0.17890072079287297
], ],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -5319,9 +5319,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -5339,9 +5339,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -5359,9 +5359,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -5379,9 +5379,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -5399,9 +5399,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -5419,9 +5419,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -5439,9 +5439,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -5495,9 +5495,9 @@ description: Variables in memory after executing french-press.kcl
5.7 5.7
], ],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -5545,9 +5545,9 @@ description: Variables in memory after executing french-press.kcl
0.37321452147779016 0.37321452147779016
], ],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -5595,9 +5595,9 @@ description: Variables in memory after executing french-press.kcl
-0.9660159630635361 -0.9660159630635361
], ],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -5645,9 +5645,9 @@ description: Variables in memory after executing french-press.kcl
-0.13301270189221936 -0.13301270189221936
], ],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -5689,9 +5689,9 @@ description: Variables in memory after executing french-press.kcl
-0.03301270189221936 -0.03301270189221936
], ],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -5739,9 +5739,9 @@ description: Variables in memory after executing french-press.kcl
-0.11339745962155623 -0.11339745962155623
], ],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -5789,9 +5789,9 @@ description: Variables in memory after executing french-press.kcl
-0.17890072079287297 -0.17890072079287297
], ],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -5980,9 +5980,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -6000,9 +6000,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -6020,9 +6020,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -6040,9 +6040,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -6060,9 +6060,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -6080,9 +6080,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -6100,9 +6100,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -6156,9 +6156,9 @@ description: Variables in memory after executing french-press.kcl
5.7 5.7
], ],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -6206,9 +6206,9 @@ description: Variables in memory after executing french-press.kcl
0.37321452147779016 0.37321452147779016
], ],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -6256,9 +6256,9 @@ description: Variables in memory after executing french-press.kcl
-0.9660159630635361 -0.9660159630635361
], ],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -6306,9 +6306,9 @@ description: Variables in memory after executing french-press.kcl
-0.13301270189221936 -0.13301270189221936
], ],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -6350,9 +6350,9 @@ description: Variables in memory after executing french-press.kcl
-0.03301270189221936 -0.03301270189221936
], ],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -6400,9 +6400,9 @@ description: Variables in memory after executing french-press.kcl
-0.11339745962155623 -0.11339745962155623
], ],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -6450,9 +6450,9 @@ description: Variables in memory after executing french-press.kcl
-0.17890072079287297 -0.17890072079287297
], ],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -6641,9 +6641,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -6661,9 +6661,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -6681,9 +6681,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -6701,9 +6701,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -6721,9 +6721,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -6741,9 +6741,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -6761,9 +6761,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -6817,9 +6817,9 @@ description: Variables in memory after executing french-press.kcl
5.7 5.7
], ],
"tag": { "tag": {
"commentStart": 1091, "commentStart": 1097,
"end": 1097, "end": 1103,
"start": 1091, "start": 1097,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge1" "value": "edge1"
}, },
@ -6867,9 +6867,9 @@ description: Variables in memory after executing french-press.kcl
0.37321452147779016 0.37321452147779016
], ],
"tag": { "tag": {
"commentStart": 1205, "commentStart": 1220,
"end": 1211, "end": 1226,
"start": 1205, "start": 1220,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge2" "value": "edge2"
}, },
@ -6917,9 +6917,9 @@ description: Variables in memory after executing french-press.kcl
-0.9660159630635361 -0.9660159630635361
], ],
"tag": { "tag": {
"commentStart": 1326, "commentStart": 1350,
"end": 1332, "end": 1356,
"start": 1326, "start": 1350,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge3" "value": "edge3"
}, },
@ -6967,9 +6967,9 @@ description: Variables in memory after executing french-press.kcl
-0.13301270189221936 -0.13301270189221936
], ],
"tag": { "tag": {
"commentStart": 1425, "commentStart": 1455,
"end": 1433, "end": 1463,
"start": 1425, "start": 1455,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edgeLen" "value": "edgeLen"
}, },
@ -7011,9 +7011,9 @@ description: Variables in memory after executing french-press.kcl
-0.03301270189221936 -0.03301270189221936
], ],
"tag": { "tag": {
"commentStart": 1511, "commentStart": 1541,
"end": 1517, "end": 1547,
"start": 1511, "start": 1541,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge4" "value": "edge4"
}, },
@ -7061,9 +7061,9 @@ description: Variables in memory after executing french-press.kcl
-0.11339745962155623 -0.11339745962155623
], ],
"tag": { "tag": {
"commentStart": 1642, "commentStart": 1681,
"end": 1648, "end": 1687,
"start": 1642, "start": 1681,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge5" "value": "edge5"
}, },
@ -7111,9 +7111,9 @@ description: Variables in memory after executing french-press.kcl
-0.17890072079287297 -0.17890072079287297
], ],
"tag": { "tag": {
"commentStart": 1775, "commentStart": 1823,
"end": 1781, "end": 1829,
"start": 1775, "start": 1823,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "edge6" "value": "edge6"
}, },
@ -8128,9 +8128,9 @@ description: Variables in memory after executing french-press.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 2929, "commentStart": 2995,
"end": 2934, "end": 3000,
"start": 2929, "start": 2995,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg1" "value": "seg1"
}, },
@ -8198,9 +8198,9 @@ description: Variables in memory after executing french-press.kcl
1.11 1.11
], ],
"tag": { "tag": {
"commentStart": 2929, "commentStart": 2995,
"end": 2934, "end": 3000,
"start": 2929, "start": 2995,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg1" "value": "seg1"
}, },

View File

@ -382,13 +382,13 @@ description: Result of parsing hammer.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -497,13 +497,13 @@ description: Result of parsing hammer.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "10", "raw": "10deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 10.0, "value": 10.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -803,13 +803,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -945,13 +945,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1079,13 +1079,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "23", "raw": "23deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 23.0, "value": 23.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1797,13 +1797,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1819,13 +1819,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "270", "raw": "270deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 270.0, "value": 270.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -2645,13 +2645,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "177", "raw": "177deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 177.0, "value": 177.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -3452,13 +3452,13 @@ description: Result of parsing hammer.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -3482,13 +3482,13 @@ description: Result of parsing hammer.kcl
"argument": { "argument": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "270", "raw": "270deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 270.0, "value": 270.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"commentStart": 0, "commentStart": 0,
@ -5480,13 +5480,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "90", "raw": "90deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 90.0, "value": 90.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -5924,13 +5924,13 @@ description: Result of parsing hammer.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

View File

@ -891,13 +891,9 @@ description: Operations executed hammer.kcl
"type": "Number", "type": "Number",
"value": 360.0, "value": 360.0,
"ty": { "ty": {
"type": "Default", "type": "Known",
"len": { "type": "Angle",
"type": "Inches" "type": "Degrees"
},
"angle": {
"type": "Degrees"
}
} }
}, },
"sourceRange": [] "sourceRange": []

View File

@ -15,9 +15,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 3375, "commentStart": 3405,
"end": 3381, "end": 3411,
"start": 3375, "start": 3405,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg05" "value": "seg05"
}, },
@ -28,9 +28,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 3419, "commentStart": 3449,
"end": 3431, "end": 3461,
"start": 3419, "start": 3449,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "capStart001" "value": "capStart001"
}, },
@ -57,9 +57,9 @@ description: Variables in memory after executing hammer.kcl
], ],
"radius": 0.45, "radius": 0.45,
"tag": { "tag": {
"commentStart": 3375, "commentStart": 3405,
"end": 3381, "end": 3411,
"start": 3375, "start": 3405,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg05" "value": "seg05"
}, },
@ -224,9 +224,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 617, "commentStart": 623,
"end": 623, "end": 629,
"start": 617, "start": 623,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -258,9 +258,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 779, "commentStart": 788,
"end": 785, "end": 794,
"start": 779, "start": 788,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -278,9 +278,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 863, "commentStart": 875,
"end": 869, "end": 881,
"start": 863, "start": 875,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -438,9 +438,9 @@ description: Variables in memory after executing hammer.kcl
11.77770605137785 11.77770605137785
], ],
"tag": { "tag": {
"commentStart": 617, "commentStart": 623,
"end": 623, "end": 629,
"start": 617, "start": 623,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -530,9 +530,9 @@ description: Variables in memory after executing hammer.kcl
12.799999999999999 12.799999999999999
], ],
"tag": { "tag": {
"commentStart": 779, "commentStart": 788,
"end": 785, "end": 794,
"start": 779, "start": 788,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -579,9 +579,9 @@ description: Variables in memory after executing hammer.kcl
11.624999999999998 11.624999999999998
], ],
"tag": { "tag": {
"commentStart": 863, "commentStart": 875,
"end": 869, "end": 881,
"start": 863, "start": 875,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -810,9 +810,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 617, "commentStart": 623,
"end": 623, "end": 629,
"start": 617, "start": 623,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -844,9 +844,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 779, "commentStart": 788,
"end": 785, "end": 794,
"start": 779, "start": 788,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -864,9 +864,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 863, "commentStart": 875,
"end": 869, "end": 881,
"start": 863, "start": 875,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -1024,9 +1024,9 @@ description: Variables in memory after executing hammer.kcl
11.77770605137785 11.77770605137785
], ],
"tag": { "tag": {
"commentStart": 617, "commentStart": 623,
"end": 623, "end": 629,
"start": 617, "start": 623,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -1116,9 +1116,9 @@ description: Variables in memory after executing hammer.kcl
12.799999999999999 12.799999999999999
], ],
"tag": { "tag": {
"commentStart": 779, "commentStart": 788,
"end": 785, "end": 794,
"start": 779, "start": 788,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -1165,9 +1165,9 @@ description: Variables in memory after executing hammer.kcl
11.624999999999998 11.624999999999998
], ],
"tag": { "tag": {
"commentStart": 863, "commentStart": 875,
"end": 869, "end": 881,
"start": 863, "start": 875,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -2208,9 +2208,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 617, "commentStart": 623,
"end": 623, "end": 629,
"start": 617, "start": 623,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -2242,9 +2242,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 779, "commentStart": 788,
"end": 785, "end": 794,
"start": 779, "start": 788,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2262,9 +2262,9 @@ description: Variables in memory after executing hammer.kcl
"id": "[uuid]", "id": "[uuid]",
"sourceRange": [], "sourceRange": [],
"tag": { "tag": {
"commentStart": 863, "commentStart": 875,
"end": 869, "end": 881,
"start": 863, "start": 875,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },
@ -2422,9 +2422,9 @@ description: Variables in memory after executing hammer.kcl
11.77770605137785 11.77770605137785
], ],
"tag": { "tag": {
"commentStart": 617, "commentStart": 623,
"end": 623, "end": 629,
"start": 617, "start": 623,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg03" "value": "seg03"
}, },
@ -2514,9 +2514,9 @@ description: Variables in memory after executing hammer.kcl
12.799999999999999 12.799999999999999
], ],
"tag": { "tag": {
"commentStart": 779, "commentStart": 788,
"end": 785, "end": 794,
"start": 779, "start": 788,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg02" "value": "seg02"
}, },
@ -2563,9 +2563,9 @@ description: Variables in memory after executing hammer.kcl
11.624999999999998 11.624999999999998
], ],
"tag": { "tag": {
"commentStart": 863, "commentStart": 875,
"end": 869, "end": 881,
"start": 863, "start": 875,
"type": "TagDeclarator", "type": "TagDeclarator",
"value": "seg04" "value": "seg04"
}, },

View File

@ -334,7 +334,7 @@ description: Artifact commands helical-gear.kcl
"segment": { "segment": {
"type": "line", "type": "line",
"end": { "end": {
"x": -5.816564508980187, "x": -5.816564508980192,
"y": 18.856838998639372, "y": 18.856838998639372,
"z": 0.0 "z": 0.0
}, },
@ -507,7 +507,7 @@ description: Artifact commands helical-gear.kcl
"segment": { "segment": {
"type": "line", "type": "line",
"end": { "end": {
"x": -0.603024957692658, "x": -0.6030249576926529,
"y": 22.992093443190416, "y": 22.992093443190416,
"z": 0.0 "z": 0.0
}, },
@ -715,7 +715,7 @@ description: Artifact commands helical-gear.kcl
"segment": { "segment": {
"type": "line", "type": "line",
"end": { "end": {
"x": 1.8787542118590292, "x": 1.8787542118590241,
"y": 22.923138585530168, "y": 22.923138585530168,
"z": 0.0 "z": 0.0
}, },
@ -750,7 +750,7 @@ description: Artifact commands helical-gear.kcl
"segment": { "segment": {
"type": "line", "type": "line",
"end": { "end": {
"x": -1.6644342460226098, "x": -1.664434246022614,
"y": 19.66322604122736, "y": 19.66322604122736,
"z": 0.0 "z": 0.0
}, },

View File

@ -1081,13 +1081,13 @@ description: Result of parsing helical-gear.kcl
"right": { "right": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"start": 0, "start": 0,
@ -1107,13 +1107,13 @@ description: Result of parsing helical-gear.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1180,13 +1180,13 @@ description: Result of parsing helical-gear.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "180", "raw": "180deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 180.0, "value": 180.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -1920,13 +1920,13 @@ description: Result of parsing helical-gear.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "160", "raw": "160deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 160.0, "value": 160.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "/", "operator": "/",
@ -2420,13 +2420,13 @@ description: Result of parsing helical-gear.kcl
"left": { "left": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
}, },
"operator": "/", "operator": "/",
@ -2648,13 +2648,13 @@ description: Result of parsing helical-gear.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "360", "raw": "360deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 360.0, "value": 360.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -3414,13 +3414,13 @@ description: Result of parsing helical-gear.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "20", "raw": "20deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 20.0, "value": 20.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },
@ -3436,13 +3436,13 @@ description: Result of parsing helical-gear.kcl
"arg": { "arg": {
"commentStart": 0, "commentStart": 0,
"end": 0, "end": 0,
"raw": "35", "raw": "35deg",
"start": 0, "start": 0,
"type": "Literal", "type": "Literal",
"type": "Literal", "type": "Literal",
"value": { "value": {
"value": 35.0, "value": 35.0,
"suffix": "None" "suffix": "Deg"
} }
} }
}, },

Some files were not shown because too many files have changed in this diff Show More