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()
|> revolve(
axis = revolveAxis,
angle = 90
angle = 90deg
)
`
)

View File

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

View File

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

View File

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

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

1
package-lock.json generated
View File

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

View File

@ -27,7 +27,7 @@ insideWall = extrude(insideWallSketch, length = overallThickness)
// Create the sketch of one of the balls
ballsSketch = startSketchOn(XY)
|> startProfile(at = [shaftDia / 2 + wallThickness, 0.001])
|> arc(angleStart = 180, angleEnd = 0, radius = sphereDia / 2)
|> arc(angleStart = 180deg, angleEnd = 0, radius = sphereDia / 2)
|> close()
// 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)
|> startProfile(at = [
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 = [-chainWidth, 0])
|> close()
@ -54,7 +54,7 @@ chainSketch = startSketchOn(XY)
// Revolve the chain sketch
chainHead = revolve(chainSketch, axis = X)
|> patternCircular3d(
arcDegrees = 360,
arcDegrees = 360deg,
axis = [0, 0, 1],
center = [0, 0, 0],
instances = nBalls,
@ -72,9 +72,9 @@ linkSketch = startSketchOn(XZ)
)
// Revolve the link sketch
linkRevolve = revolve(linkSketch, axis = Y, angle = 360 / nBalls)
linkRevolve = revolve(linkSketch, axis = Y, angle = 360deg / nBalls)
|> patternCircular3d(
arcDegrees = 360,
arcDegrees = 360deg,
axis = [0, 0, 1],
center = [0, 0, 0],
instances = nBalls,

View File

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

View File

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

View File

@ -14,15 +14,15 @@ coldPlate = startSketchOn(YZ)
|> startProfile(at = [0, tubeDiameter * 2])
|> xLine(length = bendRadius - (tubeDiameter / 2))
|> yLine(length = -tubeDiameter)
|> tangentialArc(angle = 180, radius = tubeDiameter / 2)
|> tangentialArc(angle = 180deg, radius = tubeDiameter / 2)
|> yLine(length = tubeDiameter)
|> xLine(length = bendRadius * 2 - tubeDiameter, tag = $seg07)
|> yLine(length = -tubeDiameter, tag = $seg09)
|> tangentialArc(angle = 180, radius = tubeDiameter / 2)
|> tangentialArc(angle = 180deg, radius = tubeDiameter / 2)
|> yLine(length = tubeDiameter, tag = $seg08)
|> xLine(length = bendRadius - (tubeDiameter / 2))
|> angledLine(angle = -77, length = tubeDiameter / 3)
|> tangentialArc(angle = 77, radius = tubeDiameter, tag = $seg01)
|> angledLine(angle = -77deg, length = tubeDiameter / 3)
|> tangentialArc(angle = 77deg, radius = tubeDiameter, tag = $seg01)
|> angledLine(angle = tangentToEnd(seg01), length = 1)
|> yLine(endAbsolute = 0)
|> xLine(endAbsolute = 0)
@ -34,11 +34,11 @@ coldPlate = startSketchOn(YZ)
copperTubePath = startSketchOn(offsetPlane(XY, offset = tubeDiameter))
|> startProfile(at = [-7.35, -bendRadius * 3])
|> 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)
|> tangentialArc(angle = -180, radius = bendRadius, tag = $seg03)
|> tangentialArc(angle = -180deg, radius = bendRadius, tag = $seg03)
|> 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))
// 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)
// 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)
|> tangentialArc(radius = r2, angle = (tangentAngle - 90) * 2)
|> tangentialArc(radius = r2, angle = (tangentAngle - 90deg) * 2)
|> angledLine(angle = tangentAngle, length = -tangentLength)
|> tangentialArc(radius = r1, angle = -tangentAngle * 2)
|> angledLine(angle = -tangentAngle, length = -tangentLength)
|> tangentialArc(radius = r2, angle = (tangentAngle - 90) * 2)
|> tangentialArc(radius = r2, angle = (tangentAngle - 90deg) * 2)
|> angledLine(angle = tangentAngle, length = tangentLength)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()

View File

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

View File

@ -20,32 +20,32 @@ fn fanBlade(offsetHeight, startAngle) {
15 * cos(startAngle),
15 * sin(startAngle)
])
|> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15)
|> arc(angleStart = startAngle, angleEnd = startAngle + 14deg, radius = 15)
|> arc(
endAbsolute = [
fanSize * 22 / 50 * cos(startAngle - 20),
fanSize * 22 / 50 * sin(startAngle - 20)
fanSize * 22 / 50 * cos(startAngle - 20deg),
fanSize * 22 / 50 * sin(startAngle - 20deg)
],
interiorAbsolute = [
fanSize * 11 / 50 * cos(startAngle + 3),
fanSize * 11 / 50 * sin(startAngle + 3)
fanSize * 11 / 50 * cos(startAngle + 3deg),
fanSize * 11 / 50 * sin(startAngle + 3deg)
],
)
|> arc(
endAbsolute = [
fanSize * 22 / 50 * cos(startAngle - 24),
fanSize * 22 / 50 * sin(startAngle - 24)
fanSize * 22 / 50 * cos(startAngle - 24deg),
fanSize * 22 / 50 * sin(startAngle - 24deg)
],
interiorAbsolute = [
fanSize * 22 / 50 * cos(startAngle - 22),
fanSize * 22 / 50 * sin(startAngle - 22)
fanSize * 22 / 50 * cos(startAngle - 22deg),
fanSize * 22 / 50 * sin(startAngle - 22deg)
],
)
|> arc(
endAbsolute = [profileStartX(%), profileStartY(%)],
interiorAbsolute = [
fanSize * 11 / 50 * cos(startAngle - 5),
fanSize * 11 / 50 * sin(startAngle - 5)
fanSize * 11 / 50 * cos(startAngle - 5deg),
fanSize * 11 / 50 * sin(startAngle - 5deg)
],
)
|> 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
crossSections = [
fanBlade(offsetHeight = 4.5, startAngle = 50),
fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30),
fanBlade(offsetHeight = 4.5, startAngle = 50deg),
fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30deg),
fanBlade(offsetHeight = fanHeight - 2, startAngle = 0)
]
bladeLoft = loft(crossSections)
@ -63,7 +63,7 @@ bladeLoft = loft(crossSections)
instances = 9,
axis = [1, 0, 0],
center = [0, 0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)

View File

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

View File

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

View File

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

View File

@ -8,7 +8,7 @@
removableSticker = startSketchOn(-XY)
|> startProfile(at = [-12, -12])
|> 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)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001)
|> 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 * sin(helixAngleP) + gearPitch * cos(-helixAngleP)
])
|> arc(angleStart = 90 + helixAngleP, angleEnd = -90 + helixAngleP, radius = gearPitch)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60)
|> tangentialArc(radius = gearPitch, angle = -180)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60)
|> tangentialArc(radius = gearPitch, angle = -180)
|> arc(angleStart = 90deg + helixAngleP, angleEnd = -90deg + helixAngleP, radius = gearPitch)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60deg)
|> tangentialArc(radius = gearPitch, angle = -180deg)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60deg)
|> tangentialArc(radius = gearPitch, angle = -180deg)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%)
|> subtract2d(tool = circle(center = [0, 0], radius = holeDiameter / 2))
@ -40,5 +40,5 @@ cycloidalGear(
gearPitch = .3,
gearHeight = 1.5,
holeDiameter = 0.297,
helixAngle = -80,
helixAngle = -80deg,
)

View File

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

View File

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

View File

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

View File

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

View File

@ -29,8 +29,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius)
|> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close()
// 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,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 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
|> 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -93,7 +93,7 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
helicalGear(
nTeeth = 21,
module = 2,
pressureAngle = 20,
helixAngle = 35,
pressureAngle = 20deg,
helixAngle = 35deg,
gearHeight = 7,
)

View File

@ -29,8 +29,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius)
|> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close()
// 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,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 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
|> 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -113,7 +113,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 200 / nTeeth + helixCalc, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 200deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2,
@ -129,7 +129,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -164,8 +164,8 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
ringGear(
nTeeth = 42,
module = 1.5,
pressureAngle = 14,
helixAngle = -25,
pressureAngle = 14deg,
helixAngle = -25deg,
gearHeight = 5,
)
@ -173,8 +173,8 @@ ringGear(
helicalGear(
nTeeth = 12,
module = 1.5,
pressureAngle = 14,
helixAngle = 25,
pressureAngle = 14deg,
helixAngle = 25deg,
gearHeight = 5,
)
@ -183,8 +183,8 @@ numPlanetGears = 3
helicalGear(
nTeeth = 12,
module = 1.5,
pressureAngle = 14,
helixAngle = -25,
pressureAngle = 14deg,
helixAngle = -25deg,
gearHeight = 5,
)
|> translate(y = (12 + 12) / 2 * 1.5 + 2.7)
@ -192,6 +192,6 @@ helicalGear(
instances = numPlanetGears,
axis = [0, 0, 1],
center = [0, 0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = false,
)

View File

@ -17,26 +17,26 @@ tankSketch = startSketchOn(YZ)
|> startProfile(at = [portDiameter / 2, tankHeight])
|> yLine(length = -0.6)
|> xLine(length = 0.1)
|> tangentialArc(angle = -110, radius = 0.1)
|> tangentialArc(angle = 40, radius = 0.6)
|> tangentialArc(angle = -110, radius = 0.1)
|> tangentialArc(angle = 180, radius = 0.1)
|> tangentialArc(angle = -90, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01)
|> tangentialArc(angle = -110deg, radius = 0.1)
|> tangentialArc(angle = 40deg, radius = 0.6)
|> tangentialArc(angle = -110deg, radius = 0.1)
|> tangentialArc(angle = 180deg, radius = 0.1)
|> tangentialArc(angle = -90deg, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01)
|> 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)
|> yLine(length = wallThickness)
|> xLine(length = segLen(seg08))
|> tangentialArc(angle = 90, radius = 2 - wallThickness)
|> tangentialArc(angle = 90deg, radius = 2 - wallThickness)
|> 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)
|> yLine(endAbsolute = profileStartY(%))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
// 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
valveBody = startSketchOn(offsetPlane(XY, offset = tankHeight - 0.5))
@ -61,10 +61,10 @@ valve = union([valveBody, valvePort])
bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))
|> startProfile(at = [0, tankDiameter / 2 + wallThickness])
|> xLine(length = -0.1)
|> tangentialArc(angle = 35, radius = tankDiameter / 2 + wallThickness)
|> tangentialArc(angle = -135, radius = 0.25 - wallThickness, tag = $seg06)
|> tangentialArc(angle = 35deg, radius = tankDiameter / 2 + wallThickness)
|> tangentialArc(angle = -135deg, radius = 0.25 - wallThickness, tag = $seg06)
|> 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)
|> mirror2d(axis = Y)
|> close()
@ -73,10 +73,10 @@ bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67)
bracketProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))
|> startProfile(at = [0, tankDiameter / 2])
|> xLine(length = -0.1)
|> tangentialArc(angle = 35, radius = tankDiameter / 2)
|> tangentialArc(angle = -135, radius = 0.25, tag = $seg04)
|> tangentialArc(angle = 35deg, radius = tankDiameter / 2)
|> tangentialArc(angle = -135deg, radius = 0.25, tag = $seg04)
|> 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)
|> mirror2d(axis = Y)
|> close()

View File

@ -27,7 +27,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 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
|> 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -78,7 +78,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
herringboneGear(
nTeeth = 25,
module = 1,
pressureAngle = 14,
helixAngle = 40,
pressureAngle = 14deg,
helixAngle = 40deg,
gearHeight = 8,
)

View File

@ -27,7 +27,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 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
|> 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -98,7 +98,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
angle = helixCalc,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 220 / nTeeth + helixCalc, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 220deg / nTeeth + helixCalc, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 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
|> 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -153,8 +153,8 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
ringGear(
nTeeth = 58,
module = 1.5,
pressureAngle = 14,
helixAngle = -35,
pressureAngle = 14deg,
helixAngle = -35deg,
gearHeight = 8,
)
@ -162,8 +162,8 @@ ringGear(
herringboneGear(
nTeeth = 18,
module = 1.5,
pressureAngle = 14,
helixAngle = 35,
pressureAngle = 14deg,
helixAngle = 35deg,
gearHeight = 8,
)
@ -172,8 +172,8 @@ numPlanetGears = 4
herringboneGear(
nTeeth = 18,
module = 1.5,
pressureAngle = 14,
helixAngle = -35,
pressureAngle = 14deg,
helixAngle = -35deg,
gearHeight = 8,
)
|> translate(y = 18 * 1.5 + 1.95)
@ -181,6 +181,6 @@ herringboneGear(
instances = numPlanetGears,
axis = [0, 0, 1],
center = [0, 0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = false,
)

View File

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

View File

@ -22,7 +22,7 @@ row6 = row5 + keyHeight + spacing
sketch001 = startSketchOn(YZ)
|> startProfile(at = [0, 0])
|> 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 = [profileStartX(%), profileStartY(%)], tag = $seg04)
|> close()
@ -66,13 +66,13 @@ plane001 = {
fn keyFn(originStart, keyWidth, keyHeight, repeats, color) {
sketch002 = startSketchOn(plane001)
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)
|> tangentialArc(radius = 0.1, angle = 90)
|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = keyHeight - .2, tag = $rectangleSegmentB001)
|> tangentialArc(radius = 0.1, angle = 90)
|> tangentialArc(radius = 0.1, angle = 90deg)
|> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = keyHeight - .2, tag = $rectangleSegmentB001)
|> tangentialArc(radius = 0.1, angle = 90deg)
|> 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)
|> close()
|> extrude(length = keyDepth)
@ -263,15 +263,15 @@ fn z(origin, scale, depth) {
])
|> yLine(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)
|> xLine(length = 0.63 * scale)
|> yLine(length = 0.225 * 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)
|> 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))
|> xLine(endAbsolute = 0 + origin[0])
|> yLine(length = -0.225 * scale)
@ -289,9 +289,9 @@ fn o(origin, scale, depth) {
.788 * scale + origin[0],
.921 * scale + origin[1]
])
|> arc(angleStart = 47.15 + 6, angleEnd = 47.15 - 6 + 180, radius = .525 * scale)
|> angledLine(angle = 47.15, length = .24 * scale)
|> arc(angleStart = 47.15 - 11 + 180, angleEnd = 47.15 + 11, radius = .288 * scale)
|> arc(angleStart = 47.15deg + 6deg, angleEnd = 47.15deg - 6deg + 180deg, radius = .525 * scale)
|> angledLine(angle = 47.15deg, length = .24 * scale)
|> arc(angleStart = 47.15deg - 11deg + 180deg, angleEnd = 47.15deg + 11deg, radius = .288 * scale)
|> close()
|> extrude(length = -depth)
|> appearance(color = baseColor)
@ -301,9 +301,9 @@ fn o(origin, scale, depth) {
.16 * scale + origin[0],
.079 * scale + origin[1]
])
|> arc(angleStart = 47.15 + 6 - 180, angleEnd = 47.15 - 6, radius = .525 * scale)
|> angledLine(angle = 47.15, length = -.24 * scale)
|> arc(angleStart = 47.15 - 11, angleEnd = 47.15 + 11 - 180, radius = .288 * scale)
|> arc(angleStart = 47.15deg + 6deg - 180deg, angleEnd = 47.15deg - 6deg, radius = .525 * scale)
|> angledLine(angle = 47.15deg, length = -.24 * scale)
|> arc(angleStart = 47.15deg - 11deg, angleEnd = 47.15deg + 11deg - 180deg, radius = .288 * scale)
|> close()
|> extrude(length = -depth)
|> appearance(color = baseColor)

View File

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

View File

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

View File

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

View File

@ -10,8 +10,8 @@ hookRadius = 12
shankLength = 5
threadedEndLength = 30
nutDistance = 20
hookStartAngle = 290
hookEndAngle = 150
hookStartAngle = 290deg
hookEndAngle = 150deg
approximatePitch = boltDiameter * 0.15
threadDepth = 0.6134 * approximatePitch
@ -19,7 +19,7 @@ innerRadius = boltDiameter / 2 - threadDepth
boltNumberOfRevolutions = threadedEndLength / approximatePitch
// 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))
shankOffset = hypotenuse + side
@ -86,4 +86,4 @@ boltThreadSectionShapeForRevolve = startProfile(
|> close()
// 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)
|> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius)
|> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close()
// 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,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 160 / nTeeth, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 160deg / nTeeth, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2,
angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180 / nTeeth),
angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180deg / nTeeth),
reverse = true,
)
// 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -71,6 +71,6 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
spurGear(
nTeeth = 21,
module = 1.5,
pressureAngle = 14,
pressureAngle = 14deg,
gearHeight = 6,
)

View File

@ -22,21 +22,21 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
angle = 0,
tag = $seg01,
)
|> line(endAbsolute = polar(angle = 160 / nTeeth, length = tipDiameter / 2))
|> line(endAbsolute = polar(angle = 160deg / nTeeth, length = tipDiameter / 2))
|> involuteCircular(
startRadius = baseDiameter / 2,
endRadius = tipDiameter / 2,
angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180 / nTeeth),
angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180deg / nTeeth),
reverse = true,
)
// 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -52,7 +52,7 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
spurGear(
nTeeth = 17,
module = 1.5,
pressureAngle = 14,
pressureAngle = 14deg,
gearHeight = 9,
)
@ -60,7 +60,7 @@ spurGear(
spurGear(
nTeeth = 51,
module = 1.5,
pressureAngle = 14,
pressureAngle = 14deg,
gearHeight = 7,
)
// 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)
|> yLine(length = stockThickness, tag = $seg06)
|> 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) + 90, length = stockThickness, tag = $seg05)
|> angledLine(angle = segAng(seg03) + 180, length = segLen(seg03), tag = $seg07)
|> angledLine(angle = tangentToEnd(seg01) + 90deg, length = stockThickness, tag = $seg05)
|> angledLine(angle = segAng(seg03) + 180deg, length = segLen(seg03), tag = $seg07)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> extrude(

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -816,7 +816,16 @@ impl ArgData {
}
match self.ty.as_deref() {
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("Point3d") => Some((
index + 2,

View File

@ -106,7 +106,7 @@ mod tests {
let snippet = data.to_autocomplete_snippet();
assert_eq!(
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();
assert_eq!(
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.
pub(super) const SIGNIFICANT_ATTRS: [&str; 2] = [SETTINGS, NO_PRELUDE];
pub(super) const SIGNIFICANT_ATTRS: [&str; 3] = [SETTINGS, NO_PRELUDE, WARNINGS];
pub(crate) const SETTINGS: &str = "settings";
pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit";
@ -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(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)]
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.
pub(super) fn expect_number(expr: &Expr) -> Result<String, KclError> {
if let Expr::Literal(lit) = expr {

View File

@ -49,9 +49,20 @@ impl ExecutorContext {
for annotation in annotations {
if annotation.name() == Some(annotations::SETTINGS) {
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;
}
if updated_angle {
exec_state.warn(
CompilationError::err(
annotation.as_source_range(),
"Prefer to use explicit units for angles",
),
annotations::WARN_ANGLE_UNITS,
);
}
} else {
exec_state.err(CompilationError::err(
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",
));
}
} 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 {
exec_state.warn(CompilationError::err(
annotation.as_source_range(),
"Unknown annotation",
));
exec_state.warn(
CompilationError::err(annotation.as_source_range(), "Unknown annotation"),
annotations::WARN_UNKNOWN_ATTR,
);
}
}
Ok(no_prelude)
@ -685,7 +736,8 @@ impl ExecutorContext {
exec_state.warn(CompilationError::err(
metadata.source_range,
"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()];
new_meta.extend(meta);
@ -1163,12 +1215,12 @@ impl Node<BinaryExpression> {
let value = match self.operator {
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);
KclValue::Number { value: l + r, meta, ty }
}
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);
KclValue::Number { value: l - r, meta, ty }
}
@ -1193,32 +1245,32 @@ impl Node<BinaryExpression> {
ty: exec_state.current_default_units(),
},
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);
KclValue::Bool { value: l != r, meta }
}
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);
KclValue::Bool { value: l > r, meta }
}
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);
KclValue::Bool { value: l >= r, meta }
}
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);
KclValue::Bool { value: l < r, meta }
}
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);
KclValue::Bool { value: l <= r, meta }
}
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);
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),
);
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 crate::{
errors::Severity,
exec::UnitType,
execution::{parse_execute, ContextType},
ExecutorSettings, UnitLen,
@ -2141,4 +2194,29 @@ c = ((PI * 2) / 3): number(deg)
let result = parse_execute(ast).await.unwrap();
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::{
errors::{KclError, KclErrorDetails},
execution::{
annotations,
cad_op::{Group, OpArg, OpKclValue, Operation},
kcl_value::FunctionSource,
memory,
@ -290,16 +291,19 @@ impl FunctionDefinition<'_> {
callsite: SourceRange,
) -> Result<Option<KclValue>, KclError> {
if self.deprecated {
exec_state.warn(CompilationError::err(
callsite,
format!(
"{} is deprecated, see the docs for a recommended replacement",
match &fn_name {
Some(n) => format!("`{n}`"),
None => "This function".to_owned(),
}
exec_state.warn(
CompilationError::err(
callsite,
format!(
"{} is deprecated, see the docs for a recommended replacement",
match &fn_name {
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)?;

View File

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

View File

@ -604,8 +604,9 @@ impl ExecutorContext {
settings: &self.settings,
};
let cache_result = cache::get_changed_program(old, new).await;
// Get the program that actually changed from the old and new information.
let (clear_scene, program, import_check_info) = match cache::get_changed_program(old, new).await {
let (clear_scene, program, import_check_info) = match cache_result {
CacheResult::ReExecute {
clear_scene,
reapply_settings,

View File

@ -108,6 +108,9 @@ pub(super) struct ModuleState {
pub(super) path: ModulePath,
/// Artifacts for only this module.
pub artifacts: ModuleArtifactState,
pub(super) allowed_warnings: Vec<&'static str>,
pub(super) denied_warnings: Vec<&'static str>,
}
impl ExecState {
@ -133,8 +136,19 @@ impl ExecState {
}
/// Log a warning.
pub fn warn(&mut self, mut e: CompilationError) {
e.severity = Severity::Warning;
pub fn warn(&mut self, mut e: CompilationError, name: &'static str) {
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);
}
@ -502,6 +516,8 @@ impl ModuleState {
kcl_version: "0.1".to_owned(),
},
artifacts: Default::default(),
allowed_warnings: Vec::new(),
denied_warnings: Vec::new(),
}
}
@ -526,10 +542,11 @@ impl MetaSettings {
pub(crate) fn update_from_annotation(
&mut self,
annotation: &crate::parsing::ast::types::Node<Annotation>,
) -> Result<bool, KclError> {
) -> Result<(bool, bool), KclError> {
let properties = annotations::expect_properties(annotations::SETTINGS, annotation)?;
let mut updated_len = false;
let mut updated_angle = false;
for p in properties {
match &*p.inner.key.name {
annotations::SETTINGS_UNIT_LENGTH => {
@ -542,6 +559,7 @@ impl MetaSettings {
let value = annotations::expect_ident(&p.inner.value)?;
let value = types::UnitAngle::from_str(value, annotation.as_source_range())?;
self.default_angle_units = value;
updated_angle = true;
}
annotations::SETTINGS_VERSION => {
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::{
execution::{
annotations,
kcl_value::{KclValue, TypeDef},
memory::{self},
ExecState, Plane, PlaneInfo, Point3d,
@ -505,7 +506,12 @@ impl NumericType {
///
/// This combinator function is suitable for comparisons where uncertainty should
/// 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::*;
match (a.ty, b.ty) {
(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),
(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),
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) if a1 == a2 => (a.n, b.n, t),
(t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 => {
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),
}
@ -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.
///
/// 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::*;
match (a.ty, b.ty) {
(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),
(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),
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) => (a1.adjust_to(a.n, a2).0, b.n, t),
(t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) => {
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, _) => {
(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 {
return Err(val.into());
};
@ -786,6 +832,14 @@ impl NumericType {
}
(Default { angle: a1, .. }, Known(UnitType::Angle(a2))) => {
let mut source_ranges = Into::<Vec<SourceRange>>::into(val);
// A single source range means it's not via a function or something.
if source_ranges.len() == 1 {
exec_state.warn(
CompilationError::err(source_ranges.pop().unwrap(), "Prefer to use explicit units for angles"),
annotations::WARN_ANGLE_UNITS,
);
}
let (value, ty) = a1.adjust_to(*value, *a2);
Ok(KclValue::Number {
value,
@ -1110,7 +1164,7 @@ impl KclValue {
PrimitiveType::Any => Ok(self.clone()),
PrimitiveType::Number(ty) => {
if convert_units {
return ty.coerce(self);
return ty.coerce(self, exec_state);
}
// Instead of converting units, reinterpret the number as having
@ -1126,10 +1180,10 @@ impl KclValue {
value: *n,
meta: meta.clone(),
};
return ty.coerce(&value);
return ty.coerce(&value, exec_state);
}
}
ty.coerce(self)
ty.coerce(self, exec_state)
}
PrimitiveType::String => match self {
KclValue::String { .. } => Ok(self.clone()),
@ -1147,54 +1201,56 @@ impl KclValue {
KclValue::Solid { .. } => Ok(self.clone()),
_ => Err(self.into()),
},
PrimitiveType::Plane => match self {
KclValue::String { value: s, .. }
if [
"xy", "xz", "yz", "-xy", "-xz", "-yz", "XY", "XZ", "YZ", "-XY", "-XZ", "-YZ",
]
.contains(&&**s) =>
{
Ok(self.clone())
}
KclValue::Plane { .. } => Ok(self.clone()),
KclValue::Object { value, meta } => {
let origin = value
.get("origin")
.and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?;
let x_axis = value
.get("xAxis")
.and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?;
let y_axis = value
.get("yAxis")
.and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?;
PrimitiveType::Plane => {
match self {
KclValue::String { value: s, .. }
if [
"xy", "xz", "yz", "-xy", "-xz", "-yz", "XY", "XZ", "YZ", "-XY", "-XZ", "-YZ",
]
.contains(&&**s) =>
{
Ok(self.clone())
}
KclValue::Plane { .. } => Ok(self.clone()),
KclValue::Object { value, meta } => {
let origin = value
.get("origin")
.and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?;
let x_axis = value
.get("xAxis")
.and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?;
let y_axis = value
.get("yAxis")
.and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?;
if value.get("zAxis").is_some() {
exec_state.warn(CompilationError::err(
if value.get("zAxis").is_some() {
exec_state.warn(CompilationError::err(
self.into(),
"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) })
}
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()),
}
_ => Err(self.into()),
},
}
PrimitiveType::Face => match self {
KclValue::Face { .. } => Ok(self.clone()),
_ => Err(self.into()),
@ -2347,14 +2403,18 @@ b = 180 / PI * a + 360
#[tokio::test(flavor = "multi_thread")]
async fn cos_coercions() {
let program = r#"
a = cos(units::toRadians(30))
a = cos(units::toRadians(30deg))
b = 3 / a
c = cos(30deg)
d = cos(30)
d = cos(1rad)
"#;
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("b", &result, 3.0, NumericType::default());

View File

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

View File

@ -28,7 +28,7 @@ use crate::{
errors::KclError,
execution::{
annotations,
types::{ArrayLen, UnitAngle, UnitLen},
types::{ArrayLen, UnitLen},
KclValue, Metadata, TagIdentifier,
},
parsing::{ast::digest::Digest, token::NumericSuffix, PIPE_OPERATOR},
@ -357,11 +357,7 @@ impl Node<Program> {
Ok(None)
}
pub fn change_default_units(
&self,
length_units: Option<UnitLen>,
angle_units: Option<UnitAngle>,
) -> Result<Self, KclError> {
pub fn change_default_units(&self, length_units: Option<UnitLen>) -> Result<Self, KclError> {
let mut new_program = self.clone();
let mut found = false;
for node in &mut new_program.inner_attrs {
@ -372,13 +368,6 @@ impl Node<Program> {
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
// preserve other things like comments.
node.reset_source();
@ -395,12 +384,6 @@ impl Node<Program> {
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);
}
@ -4256,7 +4239,7 @@ startSketchOn(XY)"#;
// Edit the ast.
let new_program = program
.change_default_units(Some(crate::execution::types::UnitLen::Mm), None)
.change_default_units(Some(crate::execution::types::UnitLen::Mm))
.unwrap();
let result = new_program.meta_settings().unwrap();
@ -4285,7 +4268,7 @@ startSketchOn(XY)
// Edit the ast.
let new_program = program
.change_default_units(Some(crate::execution::types::UnitLen::Mm), None)
.change_default_units(Some(crate::execution::types::UnitLen::Mm))
.unwrap();
let result = new_program.meta_settings().unwrap();
@ -4320,7 +4303,7 @@ startSketchOn(XY)
let program = crate::parsing::top_level_parse(code).unwrap();
let new_program = program
.change_default_units(Some(crate::execution::types::UnitLen::Cm), None)
.change_default_units(Some(crate::execution::types::UnitLen::Cm))
.unwrap();
let result = new_program.meta_settings().unwrap();

View File

@ -9,6 +9,7 @@ pub use crate::execution::fn_call::Args;
use crate::{
errors::{KclError, KclErrorDetails},
execution::{
annotations,
kcl_value::FunctionSource,
types::{NumericType, PrimitiveType, RuntimeType, UnitAngle, UnitLen, UnitType},
ExecState, ExtrudeSurface, Helix, KclObjectFields, KclValue, Metadata, PlaneInfo, Sketch, SketchSurface, Solid,
@ -21,7 +22,7 @@ use crate::{
sketch::FaceTag,
sweep::SweepPath,
},
ModuleId,
CompilationError, ModuleId,
};
const ERROR_STRING_SKETCH_TO_SOLID_HELPER: &str =
@ -56,9 +57,17 @@ impl TyF64 {
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 {
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,
_ => unreachable!(),
};
@ -68,9 +77,17 @@ impl TyF64 {
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 {
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,
_ => unreachable!(),
};

View File

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

View File

@ -5,6 +5,7 @@ use anyhow::Result;
use crate::{
errors::{KclError, KclErrorDetails},
execution::{
annotations,
types::{ArrayLen, NumericType, RuntimeType},
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).
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 = 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())))
}
/// Compute the sine of a number (in radians).
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 = 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())))
}
/// Compute the tangent of a number (in radians).
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 = 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())))
}
@ -114,7 +115,7 @@ pub async fn min(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
exec_state.warn(CompilationError::err(
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})`",
));
), annotations::WARN_UNKNOWN_UNITS);
}
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(
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})`",
));
), annotations::WARN_UNKNOWN_UNITS);
}
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> {
let y = args.get_kw_arg("y", &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);
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> {
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 (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();
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> {
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 (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();
Ok(KclValue::from_number_with_type(
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> {
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 (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();
Ok(KclValue::from_number_with_type(
result,

View File

@ -132,6 +132,8 @@ async fn inner_involute_circular(
args: Args,
) -> Result<Sketch, KclError> {
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
.batch_modeling_cmd(
@ -141,7 +143,7 @@ async fn inner_involute_circular(
segment: PathSegment::CircularInvolute {
start_radius: LengthUnit(start_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(),
},
}),
@ -157,11 +159,11 @@ async fn inner_involute_circular(
let theta = f64::sqrt(end_radius * end_radius - start_radius * start_radius) / start_radius;
let (x, y) = involute_curve(start_radius, theta);
end.x = x * libm::cos(angle.to_radians()) - y * libm::sin(angle.to_radians());
end.y = x * libm::sin(angle.to_radians()) + y * libm::cos(angle.to_radians());
end.x = x * libm::cos(angle_rad) - y * libm::sin(angle_rad);
end.y = x * libm::sin(angle_rad) + y * libm::cos(angle_rad);
end.x -= start_radius * libm::cos(angle.to_radians());
end.y -= start_radius * libm::sin(angle.to_radians());
end.x -= start_radius * libm::cos(angle_rad);
end.y -= start_radius * libm::sin(angle_rad);
if reverse.unwrap_or_default() {
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),
],
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(),
);
let to = [
@ -1256,8 +1258,8 @@ pub async fn relative_arc(
radius: TyF64,
tag: Option<TagNode>,
) -> Result<Sketch, KclError> {
let a_start = Angle::from_degrees(angle_start.to_degrees());
let a_end = Angle::from_degrees(angle_end.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(exec_state, args.source_range));
let radius = radius.to_length_units(from.units);
let (center, end) = arc_center_and_end(from.ignore_units(), a_start, a_end, radius);
if a_start == a_end {
@ -1409,7 +1411,7 @@ async fn inner_tangential_arc_radius_angle(
let (center, to, ccw) = match data {
TangentialArcData::RadiusAndOffset { radius, offset } => {
// 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.
// atan2 outputs radians.

View File

@ -6,7 +6,7 @@ use super::args::TyF64;
use crate::execution::types::{NumericType, UnitLen};
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)
}

View File

@ -5571398,7 +5571398,7 @@ description: Artifact commands import_async.kcl
"segment": {
"type": "line",
"end": {
"x": -5.816564508980187,
"x": -5.816564508980192,
"y": 18.856838998639372,
"z": 0.0
},
@ -5571814,7 +5571814,7 @@ description: Artifact commands import_async.kcl
"segment": {
"type": "line",
"end": {
"x": -1.6644342460226098,
"x": -1.664434246022614,
"y": 19.66322604122736,
"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 }]
5["Segment<br>[938, 966, 0]"]
%% [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 }]
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 }]
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 }]
9[Solid2d]
end
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 }]
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 }]
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 }]
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 }]
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 }]
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 }]
17[Solid2d]
end
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 }]
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 }]
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 }]
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 }]
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 }]
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 }]
25[Solid2d]
end
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 }]
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 }]
33[Solid2d]
end
1["Plane<br>[728, 745, 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]
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]
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]
28["SweepEdge Opposite"]
29["SweepEdge Opposite"]
30["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]
35[Wall]
%% face_code_ref=Missing NodePath
@ -84,11 +84,11 @@ flowchart LR
42["SweepEdge Adjacent"]
43["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 }]
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 }]
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 }]
1 --- 2
2 --- 3

View File

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

View File

@ -30,8 +30,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius)
|> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close()
// 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
|> 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -94,8 +94,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
helicalGear(
nTeeth = 21,
module = 2,
pressureAngle = 20,
helixAngle = 35,
pressureAngle = 20deg,
helixAngle = 35deg,
gearHeight = 7,
)

View File

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

View File

@ -34,8 +34,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth)
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius)
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius)
|> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius)
|> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius)
|> close()
// 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
|> 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
|> patternCircular2d(
%,
instances = nTeeth,
center = [0, 0],
arcDegrees = 360,
arcDegrees = 360deg,
rotateDuplicates = true,
)
|> close()
@ -98,8 +98,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
helicalGear(
nTeeth = 21,
module = 2,
pressureAngle = 20,
helixAngle = 35,
pressureAngle = 20deg,
helixAngle = 35deg,
gearHeight = 7,
)

View File

@ -1,34 +1,34 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[335, 375, 0]"]
2["Path<br>[338, 378, 0]"]
%% [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 }]
4["Segment<br>[525, 571, 0]"]
4["Segment<br>[528, 574, 0]"]
%% [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 }]
6["Segment<br>[728, 870, 0]"]
6["Segment<br>[734, 879, 0]"]
%% [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 }]
8["Segment<br>[928, 1002, 0]"]
8["Segment<br>[937, 1014, 0]"]
%% [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 }]
10[Solid2d]
end
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 }]
12["Segment<br>[1188, 1223, 0]"]
12["Segment<br>[1203, 1238, 0]"]
%% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }]
13[Solid2d]
end
1["Plane<br>[312, 329, 0]"]
1["Plane<br>[315, 332, 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 }]
15[Wall]
%% face_code_ref=Missing NodePath

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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