Fix adding constraint from UI to work

This commit is contained in:
Jonathan Tran
2025-04-14 15:32:53 -04:00
parent c1d0d8a762
commit bb0ba6ed0b
2 changed files with 25 additions and 29 deletions

View File

@ -3877,29 +3877,24 @@ export const getCircle = (
return new Error('expected the arguments to be for a circle') return new Error('expected the arguments to be for a circle')
} }
const getAngledLineThatIntersects = ( export const getAngledLineThatIntersects = (
callExp: CallExpression callExp: CallExpressionKw
): ):
| { | {
val: [Expr, Expr, Expr] val: [Expr, Expr, Expr]
tag?: Expr tag?: Expr
} }
| Error => { | Error => {
const firstArg = callExp.arguments[0] const angle = findKwArg(ARG_ANGLE, callExp)
if (firstArg.type === 'ObjectExpression') { const intersectTag = findKwArg(ARG_INTERSECT_TAG, callExp)
const tag = firstArg.properties.find((p) => p.key.name === 'tag')?.value const offset = findKwArg(ARG_OFFSET, callExp)
const angle = firstArg.properties.find((p) => p.key.name === 'angle')?.value if (!angle || !intersectTag || !offset) {
const offset = firstArg.properties.find( return new Error(
(p) => p.key.name === 'offset' `angledLineThatIntersects call needs angle, intersectTag, and offset args`
)?.value )
const intersectTag = firstArg.properties.find(
(p) => p.key.name === 'intersectTag'
)?.value
if (angle && offset && intersectTag) {
return { val: [angle, offset, intersectTag], tag }
}
} }
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) return getValuesForXYFns(arg)
} }
case 'angledLineThatIntersects':
return getAngledLineThatIntersects(lineCall)
case 'yLine': case 'yLine':
case 'xLine': { case 'xLine': {
const arg = findKwArgAny(DETERMINING_ARGS, lineCall) const arg = findKwArgAny(DETERMINING_ARGS, lineCall)
@ -4024,9 +4021,6 @@ export function getFirstArg(callExp: CallExpression):
if (['xLine', 'yLine', 'xLineTo', 'yLineTo'].includes(name)) { if (['xLine', 'yLine', 'xLineTo', 'yLineTo'].includes(name)) {
return getFirstArgValuesForXYLineFns(callExp) return getFirstArgValuesForXYLineFns(callExp)
} }
if (['angledLineThatIntersects'].includes(name)) {
return getAngledLineThatIntersects(callExp)
}
if (['tangentialArc'].includes(name)) { if (['tangentialArc'].includes(name)) {
// TODO probably needs it's own implementation // TODO probably needs it's own implementation
return getFirstArgValuesForXYFns(callExp) return getFirstArgValuesForXYFns(callExp)

View File

@ -7,9 +7,11 @@ import {
ARG_END_ABSOLUTE, ARG_END_ABSOLUTE,
ARG_END_ABSOLUTE_X, ARG_END_ABSOLUTE_X,
ARG_END_ABSOLUTE_Y, ARG_END_ABSOLUTE_Y,
ARG_INTERSECT_TAG,
ARG_LENGTH, ARG_LENGTH,
ARG_LENGTH_X, ARG_LENGTH_X,
ARG_LENGTH_Y, ARG_LENGTH_Y,
ARG_OFFSET,
ARG_TAG, ARG_TAG,
DETERMINING_ARGS, DETERMINING_ARGS,
} from '@src/lang/constants' } from '@src/lang/constants'
@ -36,6 +38,7 @@ import {
createFirstArg, createFirstArg,
fnNameToTooltip, fnNameToTooltip,
getAngledLine, getAngledLine,
getAngledLineThatIntersects,
getArgForEnd, getArgForEnd,
getCircle, getCircle,
getConstraintInfo, getConstraintInfo,
@ -345,20 +348,16 @@ function intersectCallWrapper({
tag?: Expr tag?: Expr
valueUsedInTransform?: number valueUsedInTransform?: number
}): CreatedSketchExprResult { }): CreatedSketchExprResult {
const firstArg: any = { const args: LabeledArg[] = [
angle: angleVal, createLabeledArg(ARG_ANGLE, angleVal),
offset: offsetVal, createLabeledArg(ARG_OFFSET, offsetVal),
intersectTag, createLabeledArg(ARG_INTERSECT_TAG, intersectTag),
}
const args: Expr[] = [
createObjectExpression(firstArg),
createPipeSubstitution(),
] ]
if (tag) { if (tag) {
args.push(tag) args.push(createLabeledArg(ARG_TAG, tag))
} }
return { return {
callExp: createCallExpression(fnName, args), callExp: createCallExpressionStdLibKw(fnName, null, args),
valueUsedInTransform, valueUsedInTransform,
} }
} }
@ -2335,6 +2334,9 @@ export function getConstraintLevelFromSourceRange(
) { ) {
return getAngledLine(nodeMeta.node) return getAngledLine(nodeMeta.node)
} }
if (name === 'angledLineThatIntersects') {
return getAngledLineThatIntersects(nodeMeta.node)
}
const arg = findKwArgAny(DETERMINING_ARGS, nodeMeta.node) const arg = findKwArgAny(DETERMINING_ARGS, nodeMeta.node)
if (arg === undefined) { if (arg === undefined) {
const argStr = nodeMeta.node.arguments.map((a) => a.label.name) const argStr = nodeMeta.node.arguments.map((a) => a.label.name)