Add intersect constraint UI (#71)
* Add intersect constraint UI * add more combos for intersect constraint
This commit is contained in:
@ -17,6 +17,7 @@ import {
|
||||
createCallExpression,
|
||||
createIdentifier,
|
||||
createLiteral,
|
||||
createObjectExpression,
|
||||
createPipeSubstitution,
|
||||
createUnaryExpression,
|
||||
giveSketchFnCallTag,
|
||||
@ -43,6 +44,7 @@ export type ConstraintType =
|
||||
| 'setVertDistance'
|
||||
| 'setAngle'
|
||||
| 'setLength'
|
||||
| 'intersect'
|
||||
|
||||
function createCallWrapper(
|
||||
a: TooTip,
|
||||
@ -59,6 +61,38 @@ function createCallWrapper(
|
||||
}
|
||||
}
|
||||
|
||||
function intersectCallWrapper({
|
||||
fnName,
|
||||
angleVal,
|
||||
offsetVal,
|
||||
intersectTag,
|
||||
tag,
|
||||
valueUsedInTransform,
|
||||
}: {
|
||||
fnName: string
|
||||
angleVal: Value
|
||||
offsetVal: Value
|
||||
intersectTag: Value
|
||||
tag?: Value
|
||||
valueUsedInTransform?: number
|
||||
}): ReturnType<TransformCallback> {
|
||||
const firstArg: any = {
|
||||
angle: angleVal,
|
||||
offset: offsetVal,
|
||||
intersectTag,
|
||||
}
|
||||
if (tag) {
|
||||
firstArg['tag'] = tag
|
||||
}
|
||||
return {
|
||||
callExp: createCallExpression(fnName, [
|
||||
createObjectExpression(firstArg),
|
||||
createPipeSubstitution(),
|
||||
]),
|
||||
valueUsedInTransform,
|
||||
}
|
||||
}
|
||||
|
||||
export type TransformInfo = {
|
||||
tooltip: TooTip
|
||||
createNode: (a: {
|
||||
@ -71,7 +105,7 @@ export type TransformInfo = {
|
||||
}
|
||||
|
||||
type TransformMap = {
|
||||
[key in TooTip]: {
|
||||
[key in TooTip]?: {
|
||||
[key in LineInputsType | 'free']?: {
|
||||
[key in ConstraintType]?: TransformInfo
|
||||
}
|
||||
@ -307,6 +341,44 @@ const setHorzVertDistanceConstraintLineCreateNode =
|
||||
}
|
||||
}
|
||||
|
||||
const setAngledIntersectLineForLines: TransformInfo['createNode'] =
|
||||
({ referenceSegName, tag, forceValueUsedInTransform }) =>
|
||||
(args) => {
|
||||
const valueUsedInTransform = roundOff(
|
||||
args[1].type === 'Literal' ? Number(args[1].value) : 0,
|
||||
2
|
||||
)
|
||||
const angle = args[0].type === 'Literal' ? Number(args[0].value) : 0
|
||||
return intersectCallWrapper({
|
||||
fnName: 'angledLineThatIntersects',
|
||||
angleVal: createLiteral(angle),
|
||||
offsetVal:
|
||||
forceValueUsedInTransform || createLiteral(valueUsedInTransform),
|
||||
intersectTag: createLiteral(referenceSegName),
|
||||
tag,
|
||||
valueUsedInTransform,
|
||||
})
|
||||
}
|
||||
|
||||
const setAngledIntersectForAngledLines: TransformInfo['createNode'] =
|
||||
({ referenceSegName, tag, forceValueUsedInTransform, varValA }) =>
|
||||
(args) => {
|
||||
const valueUsedInTransform = roundOff(
|
||||
args[1].type === 'Literal' ? Number(args[1].value) : 0,
|
||||
2
|
||||
)
|
||||
// const angle = args[0].type === 'Literal' ? Number(args[0].value) : 0
|
||||
return intersectCallWrapper({
|
||||
fnName: 'angledLineThatIntersects',
|
||||
angleVal: varValA,
|
||||
offsetVal:
|
||||
forceValueUsedInTransform || createLiteral(valueUsedInTransform),
|
||||
intersectTag: createLiteral(referenceSegName),
|
||||
tag,
|
||||
valueUsedInTransform,
|
||||
})
|
||||
}
|
||||
|
||||
const transformMap: TransformMap = {
|
||||
line: {
|
||||
xRelative: {
|
||||
@ -404,6 +476,10 @@ const transformMap: TransformMap = {
|
||||
tooltip: 'angledLine',
|
||||
createNode: basicAngledLineCreateNode('ang'),
|
||||
},
|
||||
intersect: {
|
||||
tooltip: 'angledLineThatIntersects',
|
||||
createNode: setAngledIntersectLineForLines,
|
||||
},
|
||||
},
|
||||
},
|
||||
lineTo: {
|
||||
@ -524,6 +600,10 @@ const transformMap: TransformMap = {
|
||||
tooltip: 'angledLineToX',
|
||||
createNode: setHorzVertDistanceForAngleLineCreateNode('x'),
|
||||
},
|
||||
intersect: {
|
||||
tooltip: 'angledLineThatIntersects',
|
||||
createNode: setAngledIntersectForAngledLines,
|
||||
},
|
||||
},
|
||||
free: {
|
||||
equalLength: {
|
||||
@ -798,6 +878,10 @@ const transformMap: TransformMap = {
|
||||
tooltip: 'xLine',
|
||||
createNode: xyLineSetLength('xLine'),
|
||||
},
|
||||
intersect: {
|
||||
tooltip: 'angledLineThatIntersects',
|
||||
createNode: setAngledIntersectLineForLines,
|
||||
},
|
||||
},
|
||||
},
|
||||
yLine: {
|
||||
@ -817,6 +901,10 @@ const transformMap: TransformMap = {
|
||||
tooltip: 'yLineTo',
|
||||
createNode: setHorVertDistanceForXYLines('y'),
|
||||
},
|
||||
intersect: {
|
||||
tooltip: 'angledLineThatIntersects',
|
||||
createNode: setAngledIntersectLineForLines,
|
||||
},
|
||||
},
|
||||
},
|
||||
xLineTo: {
|
||||
|
Reference in New Issue
Block a user