From bb0ba6ed0be0909aafbe352cbdc8fdf9e852f512 Mon Sep 17 00:00:00 2001 From: Jonathan Tran Date: Mon, 14 Apr 2025 15:32:53 -0400 Subject: [PATCH] Fix adding constraint from UI to work --- src/lang/std/sketch.ts | 32 +++++++++++++------------------- src/lang/std/sketchcombos.ts | 22 ++++++++++++---------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/src/lang/std/sketch.ts b/src/lang/std/sketch.ts index 0a97f6a89..c297e05f9 100644 --- a/src/lang/std/sketch.ts +++ b/src/lang/std/sketch.ts @@ -3877,29 +3877,24 @@ export const getCircle = ( return new Error('expected the arguments to be for a circle') } -const getAngledLineThatIntersects = ( - callExp: CallExpression +export const getAngledLineThatIntersects = ( + callExp: CallExpressionKw ): | { val: [Expr, Expr, Expr] tag?: Expr } | Error => { - const firstArg = callExp.arguments[0] - if (firstArg.type === 'ObjectExpression') { - const tag = firstArg.properties.find((p) => p.key.name === 'tag')?.value - const angle = firstArg.properties.find((p) => p.key.name === 'angle')?.value - const offset = firstArg.properties.find( - (p) => p.key.name === 'offset' - )?.value - const intersectTag = firstArg.properties.find( - (p) => p.key.name === 'intersectTag' - )?.value - if (angle && offset && intersectTag) { - return { val: [angle, offset, intersectTag], tag } - } + const angle = findKwArg(ARG_ANGLE, callExp) + const intersectTag = findKwArg(ARG_INTERSECT_TAG, callExp) + const offset = findKwArg(ARG_OFFSET, callExp) + if (!angle || !intersectTag || !offset) { + return new Error( + `angledLineThatIntersects call needs angle, intersectTag, and offset args` + ) } - return new Error('expected ArrayExpression or ObjectExpression') + const tag = findKwArg(ARG_TAG, callExp) + return { val: [angle, intersectTag, offset], tag } } /** @@ -3965,6 +3960,8 @@ export function getArgForEnd(lineCall: CallExpressionKw): } return getValuesForXYFns(arg) } + case 'angledLineThatIntersects': + return getAngledLineThatIntersects(lineCall) case 'yLine': case 'xLine': { const arg = findKwArgAny(DETERMINING_ARGS, lineCall) @@ -4024,9 +4021,6 @@ export function getFirstArg(callExp: CallExpression): if (['xLine', 'yLine', 'xLineTo', 'yLineTo'].includes(name)) { return getFirstArgValuesForXYLineFns(callExp) } - if (['angledLineThatIntersects'].includes(name)) { - return getAngledLineThatIntersects(callExp) - } if (['tangentialArc'].includes(name)) { // TODO probably needs it's own implementation return getFirstArgValuesForXYFns(callExp) diff --git a/src/lang/std/sketchcombos.ts b/src/lang/std/sketchcombos.ts index d436f7f99..7de525c9d 100644 --- a/src/lang/std/sketchcombos.ts +++ b/src/lang/std/sketchcombos.ts @@ -7,9 +7,11 @@ import { ARG_END_ABSOLUTE, ARG_END_ABSOLUTE_X, ARG_END_ABSOLUTE_Y, + ARG_INTERSECT_TAG, ARG_LENGTH, ARG_LENGTH_X, ARG_LENGTH_Y, + ARG_OFFSET, ARG_TAG, DETERMINING_ARGS, } from '@src/lang/constants' @@ -36,6 +38,7 @@ import { createFirstArg, fnNameToTooltip, getAngledLine, + getAngledLineThatIntersects, getArgForEnd, getCircle, getConstraintInfo, @@ -345,20 +348,16 @@ function intersectCallWrapper({ tag?: Expr valueUsedInTransform?: number }): CreatedSketchExprResult { - const firstArg: any = { - angle: angleVal, - offset: offsetVal, - intersectTag, - } - const args: Expr[] = [ - createObjectExpression(firstArg), - createPipeSubstitution(), + const args: LabeledArg[] = [ + createLabeledArg(ARG_ANGLE, angleVal), + createLabeledArg(ARG_OFFSET, offsetVal), + createLabeledArg(ARG_INTERSECT_TAG, intersectTag), ] if (tag) { - args.push(tag) + args.push(createLabeledArg(ARG_TAG, tag)) } return { - callExp: createCallExpression(fnName, args), + callExp: createCallExpressionStdLibKw(fnName, null, args), valueUsedInTransform, } } @@ -2335,6 +2334,9 @@ export function getConstraintLevelFromSourceRange( ) { return getAngledLine(nodeMeta.node) } + if (name === 'angledLineThatIntersects') { + return getAngledLineThatIntersects(nodeMeta.node) + } const arg = findKwArgAny(DETERMINING_ARGS, nodeMeta.node) if (arg === undefined) { const argStr = nodeMeta.node.arguments.map((a) => a.label.name)