add a constraintStomping check
This commit is contained in:
@ -1042,6 +1042,99 @@ profile004 = circleThreePoint(
|
|||||||
p3 = [66, 66.5],
|
p3 = [66, 66.5],
|
||||||
)
|
)
|
||||||
profile005 = circle(sketch001, center = [-67, -67.5], diameter = 68)
|
profile005 = circle(sketch001, center = [-67, -67.5], diameter = 68)
|
||||||
|
`)
|
||||||
|
})
|
||||||
|
it("make sure it doesn't stomp constraints", async () => {
|
||||||
|
let code = `sketch001 = startSketchOn(YZ)
|
||||||
|
profile001 = startProfile(sketch001, at = [100 + 0, 101])
|
||||||
|
|> line(end = [102, 103 + 0])
|
||||||
|
|> line(endAbsolute = [104 + 0, 105])
|
||||||
|
|> angledLine(angle = 206, length = 106 + 0)
|
||||||
|
|> angledLine(angle = -208 + 0, lengthX = 107)
|
||||||
|
|> angledLine(angle = 210, lengthY = 108 + 0)
|
||||||
|
|> angledLine(angle = 212 + 0, endAbsoluteX = 109)
|
||||||
|
|> angledLine(angle = 214, endAbsoluteY = 110 + 0)
|
||||||
|
|> arc(interiorAbsolute = [111 + 0, 112], endAbsolute = [113, 114 + 0])
|
||||||
|
|> tangentialArc(end = [115, -116 + 0])
|
||||||
|
|> tangentialArc(endAbsolute = [117 + 0, 118])
|
||||||
|
|> tangentialArc(angle = 224, radius = 119 + 0)
|
||||||
|
|> tangentialArc(angle = 226 + 0, diameter = 120)
|
||||||
|
|
||||||
|
profile002 = startProfile(sketch001, at = [-121 + 0, 122])
|
||||||
|
|> angledLine(angle = 130, length = 123 + 0, tag = $rectangleSegmentA001)
|
||||||
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 232, length = 124)
|
||||||
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|
|> close()
|
||||||
|
profile003 = circle(sketch001, center = [-125 + 0, -126], radius = 127 + 0)
|
||||||
|
profile004 = circleThreePoint(
|
||||||
|
sketch001,
|
||||||
|
p1 = [128, 129 + 0],
|
||||||
|
p2 = [130 + 0, 131],
|
||||||
|
p3 = [133, 132],
|
||||||
|
)
|
||||||
|
profile005 = circle(sketch001, center = [-134, -135 + 0], diameter = 136)
|
||||||
|
`
|
||||||
|
let ast = assertParse(code)
|
||||||
|
const result = await enginelessExecutor(ast)
|
||||||
|
const searchSnippets = [
|
||||||
|
'startProfile(sketch001, at = [100 + 0, 101])',
|
||||||
|
'startProfile(sketch001, at = [-121 + 0, 122])',
|
||||||
|
'circle(sketch001, center = [-125 + 0, -126], radius = 127 + 0)',
|
||||||
|
'circleThreePoint(',
|
||||||
|
'circle(sketch001, center = [-134, -135 + 0], diameter = 136)',
|
||||||
|
]
|
||||||
|
const ranges = searchSnippets.map((searchSnippet) => {
|
||||||
|
const startIndex = code.indexOf(searchSnippet)
|
||||||
|
return topLevelRange(startIndex, startIndex + searchSnippet.length)
|
||||||
|
})
|
||||||
|
const pathsToProfiles = ranges.map((range) =>
|
||||||
|
getNodePathFromSourceRange(ast, range)
|
||||||
|
)
|
||||||
|
|
||||||
|
if (err(result)) throw result
|
||||||
|
const scaledProfile = scaleProfiles({
|
||||||
|
ast,
|
||||||
|
factor: 0.5,
|
||||||
|
variables: result.variables,
|
||||||
|
pathsToProfile: pathsToProfiles,
|
||||||
|
})
|
||||||
|
if (err(scaledProfile)) throw scaledProfile
|
||||||
|
const pResult = parse(recast(scaledProfile.modifiedAst))
|
||||||
|
if (err(pResult) || !resultIsOk(pResult)) return
|
||||||
|
ast = pResult.program
|
||||||
|
const newCode = recast(ast)
|
||||||
|
if (err(newCode)) throw newCode
|
||||||
|
|
||||||
|
expect(newCode).toBe(`sketch001 = startSketchOn(YZ)
|
||||||
|
profile001 = startProfile(sketch001, at = [100 + 0, 50.5])
|
||||||
|
|> line(end = [51, 103 + 0])
|
||||||
|
|> line(endAbsolute = [104 + 0, 52.5])
|
||||||
|
|> angledLine(angle = -154, length = 106 + 0)
|
||||||
|
|> angledLine(angle = -208 + 0, lengthX = 53.5)
|
||||||
|
|> angledLine(angle = -150, lengthY = 108 + 0)
|
||||||
|
|> angledLine(angle = 212 + 0, endAbsoluteX = 54.5)
|
||||||
|
|> angledLine(angle = -146, endAbsoluteY = 110 + 0)
|
||||||
|
|> arc(interiorAbsolute = [111 + 0, 56], endAbsolute = [56.5, 114 + 0])
|
||||||
|
|> tangentialArc(end = [57.5, -116 + 0])
|
||||||
|
|> tangentialArc(endAbsolute = [117 + 0, 59])
|
||||||
|
|> tangentialArc(angle = 224deg, radius = 119 + 0)
|
||||||
|
|> tangentialArc(angle = 226 + 0, diameter = 60)
|
||||||
|
|
||||||
|
profile002 = startProfile(sketch001, at = [-121 + 0, 61])
|
||||||
|
|> angledLine(angle = 130, length = 123 + 0, tag = $rectangleSegmentA001)
|
||||||
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 232, length = 62)
|
||||||
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|
|> close()
|
||||||
|
profile003 = circle(sketch001, center = [-125 + 0, -63], radius = 127 + 0)
|
||||||
|
profile004 = circleThreePoint(
|
||||||
|
sketch001,
|
||||||
|
p1 = [64, 129 + 0],
|
||||||
|
p2 = [130 + 0, 65.5],
|
||||||
|
p3 = [66.5, 66],
|
||||||
|
)
|
||||||
|
profile005 = circle(sketch001, center = [-67, -135 + 0], diameter = 68)
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user