change types that that effected a lot of places

This commit is contained in:
Kurt Hutten Irev-Dev
2024-09-09 22:58:36 +10:00
parent 4219a2c31d
commit 99ffc82ffa
3 changed files with 254 additions and 414 deletions

View File

@ -324,22 +324,16 @@ export const lineTo: SketchLineHelper = {
const { callExp, valueUsedInTransform } = createCallback(
[
{
varExpression: createLiteral(roundOff(to[0], 2)),
varDetails: {
type: 'arrayItem',
index: 0,
argType: 'xAbsolute',
expr: createLiteral(roundOff(to[0], 2)),
},
type: 'arrayItem',
index: 0,
argType: 'xAbsolute',
expr: createLiteral(roundOff(to[0], 2)),
},
{
varExpression: createLiteral(roundOff(to[1], 2)),
varDetails: {
type: 'arrayItem',
index: 1,
argType: 'yAbsolute',
expr: createLiteral(roundOff(to[1], 2)),
},
type: 'arrayItem',
index: 1,
argType: 'yAbsolute',
expr: createLiteral(roundOff(to[1], 2)),
},
],
referencedSegment
@ -450,22 +444,16 @@ export const line: SketchLineHelper = {
const { callExp, valueUsedInTransform } = createCallback(
[
{
varExpression: createLiteral(roundOff(to[0] - from[0], 2)),
varDetails: {
type: 'arrayItem',
index: 0,
argType: 'xRelative',
expr: createLiteral(roundOff(to[0] - from[0], 2)),
},
type: 'arrayItem',
index: 0,
argType: 'xRelative',
expr: createLiteral(roundOff(to[0] - from[0], 2)),
},
{
varExpression: createLiteral(roundOff(to[1] - from[1], 2)),
varDetails: {
type: 'arrayItem',
index: 1,
argType: 'yRelative',
expr: createLiteral(roundOff(to[1] - from[1], 2)),
},
type: 'arrayItem',
index: 1,
argType: 'yRelative',
expr: createLiteral(roundOff(to[1] - from[1], 2)),
},
],
referencedSegment
@ -557,12 +545,9 @@ export const xLineTo: SketchLineHelper = {
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
const { callExp, valueUsedInTransform } = createCallback([
{
varExpression: createLiteral(roundOff(to[0], 2)),
varDetails: {
type: 'singleValue',
argType: 'xAbsolute',
expr: createLiteral(roundOff(to[0], 2)),
},
type: 'singleValue',
argType: 'xAbsolute',
expr: createLiteral(roundOff(to[0], 2)),
},
])
pipe.body[callIndex] = callExp
@ -634,12 +619,9 @@ export const yLineTo: SketchLineHelper = {
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
const { callExp, valueUsedInTransform } = createCallback([
{
varExpression: newVal,
varDetails: {
type: 'singleValue',
argType: 'yAbsolute',
expr: newVal,
},
type: 'singleValue',
argType: 'yAbsolute',
expr: newVal,
},
])
pipe.body[callIndex] = callExp
@ -711,12 +693,9 @@ export const xLine: SketchLineHelper = {
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
const { callExp, valueUsedInTransform } = createCallback([
{
varExpression: newVal,
varDetails: {
type: 'singleValue',
argType: 'xRelative',
expr: newVal,
},
type: 'singleValue',
argType: 'xRelative',
expr: newVal,
},
])
pipe.body[callIndex] = callExp
@ -784,12 +763,9 @@ export const yLine: SketchLineHelper = {
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
const { callExp, valueUsedInTransform } = createCallback([
{
varExpression: newVal,
varDetails: {
type: 'singleValue',
argType: 'yRelative',
expr: newVal,
},
type: 'singleValue',
argType: 'yRelative',
expr: newVal,
},
])
pipe.body[callIndex] = callExp
@ -869,22 +845,16 @@ export const tangentialArcTo: SketchLineHelper = {
const { callExp, valueUsedInTransform } = createCallback(
[
{
varExpression: toX,
varDetails: {
type: 'arrayItem',
index: 0,
argType: 'xRelative',
expr: toX,
},
type: 'arrayItem',
index: 0,
argType: 'xRelative',
expr: toX,
},
{
varExpression: toY,
varDetails: {
type: 'arrayItem',
index: 1,
argType: 'yAbsolute',
expr: toY,
},
type: 'arrayItem',
index: 1,
argType: 'yAbsolute',
expr: toY,
},
],
referencedSegment
@ -1016,33 +986,24 @@ export const circle: SketchLineHelper = {
if (replaceExisting && createCallback) {
const { callExp, valueUsedInTransform } = createCallback([
{
varExpression: x,
varDetails: {
type: 'arrayInObject',
index: 0,
key: 'center',
argType: 'xAbsolute',
expr: x,
},
type: 'arrayInObject',
index: 0,
key: 'center',
argType: 'xAbsolute',
expr: x,
},
{
varExpression: y,
varDetails: {
type: 'arrayInObject',
index: 1,
key: 'center',
argType: 'yAbsolute',
expr: y,
},
type: 'arrayInObject',
index: 1,
key: 'center',
argType: 'yAbsolute',
expr: y,
},
{
varExpression: radiusExp,
varDetails: {
type: 'objectProperty',
key: 'radius',
argType: 'radius',
expr: radiusExp,
},
type: 'objectProperty',
key: 'radius',
argType: 'radius',
expr: radiusExp,
},
])
@ -1196,24 +1157,18 @@ export const angledLine: SketchLineHelper = {
const { callExp, valueUsedInTransform } = createCallback(
[
{
varExpression: newAngleVal,
varDetails: {
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: newAngleVal,
},
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: newAngleVal,
},
{
varExpression: newLengthVal,
varDetails: {
type: 'arrayOrObjItem',
index: 1,
key: 'length',
argType: 'length',
expr: newLengthVal,
},
type: 'arrayOrObjItem',
index: 1,
key: 'length',
argType: 'length',
expr: newLengthVal,
},
],
referencedSegment
@ -1311,24 +1266,18 @@ export const angledLineOfXLength: SketchLineHelper = {
const newLine = createCallback
? createCallback([
{
varExpression: angle,
varDetails: {
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
{
varExpression: xLength,
varDetails: {
type: 'arrayOrObjItem',
index: 1,
key: 'length',
argType: 'xRelative',
expr: xLength,
},
type: 'arrayOrObjItem',
index: 1,
key: 'length',
argType: 'xRelative',
expr: xLength,
},
]).callExp
: createCallExpression('angledLineOfXLength', [
@ -1427,24 +1376,18 @@ export const angledLineOfYLength: SketchLineHelper = {
const newLine = createCallback
? createCallback([
{
varExpression: angle,
varDetails: {
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
{
varExpression: yLength,
varDetails: {
type: 'arrayOrObjItem',
index: 1,
key: 'length',
argType: 'yRelative',
expr: yLength,
},
type: 'arrayOrObjItem',
index: 1,
key: 'length',
argType: 'yRelative',
expr: yLength,
},
]).callExp
: createCallExpression('angledLineOfYLength', [
@ -1531,24 +1474,18 @@ export const angledLineToX: SketchLineHelper = {
const { callExp, valueUsedInTransform } = createCallback(
[
{
varExpression: angle,
varDetails: {
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
{
varExpression: xArg,
varDetails: {
type: 'arrayOrObjItem',
index: 1,
key: 'to',
argType: 'xAbsolute',
expr: xArg,
},
type: 'arrayOrObjItem',
index: 1,
key: 'to',
argType: 'xAbsolute',
expr: xArg,
},
],
referencedSegment
@ -1641,24 +1578,18 @@ export const angledLineToY: SketchLineHelper = {
const { callExp, valueUsedInTransform } = createCallback(
[
{
varExpression: angle,
varDetails: {
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
type: 'arrayOrObjItem',
index: 0,
key: 'angle',
argType: 'angle',
expr: angle,
},
{
varExpression: yArg,
varDetails: {
type: 'arrayOrObjItem',
index: 1,
key: 'to',
argType: 'yAbsolute',
expr: yArg,
},
type: 'arrayOrObjItem',
index: 1,
key: 'to',
argType: 'yAbsolute',
expr: yArg,
},
],
referencedSegment
@ -1763,22 +1694,16 @@ export const angledLineThatIntersects: SketchLineHelper = {
if (replaceExisting && createCallback) {
const { callExp, valueUsedInTransform } = createCallback([
{
varExpression: angle,
varDetails: {
type: 'objectProperty',
key: 'angle',
argType: 'angle',
expr: angle,
},
type: 'objectProperty',
key: 'angle',
argType: 'angle',
expr: angle,
},
{
varExpression: offset,
varDetails: {
type: 'objectProperty',
key: 'offset',
argType: 'intersectionOffset',
expr: offset,
},
type: 'objectProperty',
key: 'offset',
argType: 'intersectionOffset',
expr: offset,
},
])
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)

View File

@ -1,5 +1,6 @@
import {
SegmentInput,
InputArg,
InputArgs,
SimplifiedArgDetails,
TransformCallback,
} from './stdTypes'
@ -161,7 +162,7 @@ function intersectCallWrapper({
export type TransformInfo = {
tooltip: ToolTip
createNode: (a: {
inputs: SegmentInput[]
inputs: InputArgs
referenceSegName: string
tag?: Expr
forceValueUsedInTransform?: Expr
@ -188,13 +189,8 @@ const xyLineSetLength =
? forceValueUsedInTransform
: referenceSeg
? segRef
: args[0].varExpression
return createCallWrapper(
xOrY,
lineVal,
tag,
getArgLiteralVal(args[0].varExpression)
)
: args[0].expr
return createCallWrapper(xOrY, lineVal, tag, getArgLiteralVal(args[0].expr))
}
const basicAngledLineCreateNode =
@ -203,27 +199,25 @@ const basicAngledLineCreateNode =
valToForce: 'ang' | 'len' | 'none' = 'none',
varValToUse: 'ang' | 'len' | 'none' = 'none'
): TransformInfo['createNode'] =>
(
{ referenceSegName, tag, forceValueUsedInTransform, inputs } //, varValA, varValB }) =>
) =>
({ referenceSegName, tag, forceValueUsedInTransform, inputs }) =>
(args, path) => {
const refAng = path ? getAngle(path?.from, path?.to) : 0
const nonForcedAng =
varValToUse === 'ang'
? inputs[0].varExpression
? inputs[0].expr
: referenceSeg === 'ang'
? getClosesAngleDirection(
args[0].varExpression,
args[0].expr,
refAng,
createSegAngle(referenceSegName) as BinaryPart
)
: args[0].varExpression
: args[0].expr
const nonForcedLen =
varValToUse === 'len'
? inputs[1].varExpression
? inputs[1].expr
: referenceSeg === 'len'
? createSegLen(referenceSegName)
: args[1].varExpression
: args[1].expr
const shouldForceAng = valToForce === 'ang' && forceValueUsedInTransform
const shouldForceLen = valToForce === 'len' && forceValueUsedInTransform
return createCallWrapper(
@ -233,9 +227,7 @@ const basicAngledLineCreateNode =
shouldForceLen ? forceValueUsedInTransform : nonForcedLen,
],
tag,
getArgLiteralVal(
valToForce === 'ang' ? args[0].varExpression : args[1].varExpression
)
getArgLiteralVal(valToForce === 'ang' ? args[0].expr : args[1].expr)
)
}
const angledLineAngleCreateNode: TransformInfo['createNode'] =
@ -243,7 +235,7 @@ const angledLineAngleCreateNode: TransformInfo['createNode'] =
() =>
createCallWrapper(
'angledLine',
[inputs[0].varExpression, createSegLen(referenceSegName)],
[inputs[0].expr, createSegLen(referenceSegName)],
tag
)
@ -317,7 +309,7 @@ const setHorzVertDistanceCreateNode =
({ referenceSegName, tag, forceValueUsedInTransform }) => {
return (args, referencedSegment) => {
const valueUsedInTransform = roundOff(
getArgLiteralVal(args?.[index].varExpression) -
getArgLiteralVal(args?.[index].expr) -
(referencedSegment?.to?.[index] || 0),
2
)
@ -331,9 +323,7 @@ const setHorzVertDistanceCreateNode =
}
return createCallWrapper(
'lineTo',
!index
? [finalValue, args[1].varExpression]
: [args[0].varExpression, finalValue],
!index ? [finalValue, args[1].expr] : [args[0].expr, finalValue],
tag,
valueUsedInTransform
)
@ -347,7 +337,7 @@ const setHorzVertDistanceForAngleLineCreateNode =
({ referenceSegName, tag, forceValueUsedInTransform, inputs }) => {
return (args, referencedSegment) => {
const valueUsedInTransform = roundOff(
getArgLiteralVal(args?.[1].varExpression) -
getArgLiteralVal(args?.[1].expr) -
(referencedSegment?.to?.[index] || 0),
2
)
@ -358,7 +348,7 @@ const setHorzVertDistanceForAngleLineCreateNode =
])
return createCallWrapper(
xOrY === 'x' ? 'angledLineToX' : 'angledLineToY',
[inputs[0].varExpression, binExp],
[inputs[0].expr, binExp],
tag,
valueUsedInTransform
)
@ -374,7 +364,7 @@ const setAbsDistanceCreateNode =
({ tag, forceValueUsedInTransform }) =>
(args) => {
const valueUsedInTransform = roundOff(
getArgLiteralVal(args?.[index].varExpression),
getArgLiteralVal(args?.[index].expr),
2
)
const val =
@ -390,7 +380,7 @@ const setAbsDistanceCreateNode =
}
return createCallWrapper(
'lineTo',
!index ? [val, args[1].varExpression] : [args[0].varExpression, val],
!index ? [val, args[1].expr] : [args[0].expr, val],
tag,
valueUsedInTransform
)
@ -399,16 +389,13 @@ const setAbsDistanceForAngleLineCreateNode =
(xOrY: 'x' | 'y'): TransformInfo['createNode'] =>
({ tag, forceValueUsedInTransform, inputs }) => {
return (args) => {
const valueUsedInTransform = roundOff(
getArgLiteralVal(args?.[1].varExpression),
2
)
const valueUsedInTransform = roundOff(getArgLiteralVal(args?.[1].expr), 2)
const val =
(forceValueUsedInTransform as BinaryPart) ||
createLiteral(valueUsedInTransform)
return createCallWrapper(
xOrY === 'x' ? 'angledLineToX' : 'angledLineToY',
[inputs[0].varExpression, val],
[inputs[0].expr, val],
tag,
valueUsedInTransform
)
@ -421,7 +408,7 @@ const setHorVertDistanceForXYLines =
return (args, referencedSegment) => {
const index = xOrY === 'x' ? 0 : 1
const valueUsedInTransform = roundOff(
getArgLiteralVal(args?.[index].varExpression) -
getArgLiteralVal(args?.[index].expr) -
(referencedSegment?.to?.[index] || 0),
2
)
@ -442,7 +429,7 @@ const setHorVertDistanceForXYLines =
const setHorzVertDistanceConstraintLineCreateNode =
(isX: boolean): TransformInfo['createNode'] =>
({ referenceSegName, tag, inputs }) => {
let varVal = isX ? inputs[1].varExpression : inputs[0].varExpression
let varVal = isX ? inputs[1].expr : inputs[0].expr
varVal = isExprBinaryPart(varVal) ? varVal : createLiteral(0)
const varValBinExp = createBinaryExpressionWithUnary([
createLastSeg(!isX),
@ -451,7 +438,7 @@ const setHorzVertDistanceConstraintLineCreateNode =
return (args, referencedSegment) => {
const makeBinExp = (index: 0 | 1) => {
const arg = getArgLiteralVal(args?.[index].varExpression)
const arg = getArgLiteralVal(args?.[index].expr)
return createBinaryExpressionWithUnary([
createSegEnd(referenceSegName, isX),
createLiteral(
@ -471,15 +458,11 @@ const setAngledIntersectLineForLines: TransformInfo['createNode'] =
({ referenceSegName, tag, forceValueUsedInTransform }) =>
(args) => {
const valueUsedInTransform = roundOff(
args[1].varExpression.type === 'Literal'
? Number(args[1].varExpression.value)
: 0,
args[1].expr.type === 'Literal' ? Number(args[1].expr.value) : 0,
2
)
const angle =
args[0].varExpression.type === 'Literal'
? Number(args[0].varExpression.value)
: 0
args[0].expr.type === 'Literal' ? Number(args[0].expr.value) : 0
const varNamMap: { [key: number]: string } = {
0: 'ZERO',
90: 'QUARTER_TURN',
@ -504,14 +487,12 @@ const setAngledIntersectForAngledLines: TransformInfo['createNode'] =
({ referenceSegName, tag, forceValueUsedInTransform, inputs }) =>
(args) => {
const valueUsedInTransform = roundOff(
args[1].varExpression.type === 'Literal'
? Number(args[1].varExpression.value)
: 0,
args[1].expr.type === 'Literal' ? Number(args[1].expr.value) : 0,
2
)
return intersectCallWrapper({
fnName: 'angledLineThatIntersects',
angleVal: inputs[0].varExpression,
angleVal: inputs[0].expr,
offsetVal:
forceValueUsedInTransform || createLiteral(valueUsedInTransform),
intersectTag: createIdentifier(referenceSegName),
@ -529,9 +510,8 @@ const setAngleBetweenCreateNode =
: 0
let valueUsedInTransform = roundOff(
normaliseAngle(
(args[0].varExpression.type === 'Literal'
? Number(args[0].varExpression.value)
: 0) - refAngle
(args[0].expr.type === 'Literal' ? Number(args[0].expr.value) : 0) -
refAngle
)
)
let firstHalfValue = createSegAngle(referenceSegName) as BinaryPart
@ -555,10 +535,10 @@ const setAngleBetweenCreateNode =
? 'angledLineToX'
: 'angledLineToY',
tranformToType === 'none'
? [binExp, args[1].varExpression]
? [binExp, args[1].expr]
: tranformToType === 'xAbs'
? [binExp, inputs[0].varExpression]
: [binExp, inputs[1].varExpression],
? [binExp, inputs[0].expr]
: [binExp, inputs[1].expr],
tag,
valueUsedInTransform
)
@ -573,12 +553,12 @@ const transformMap: TransformMap = {
createNode: ({ referenceSegName, inputs, tag }) => {
const [minVal, legLenVal] = getMinAndSegLenVals(
referenceSegName,
inputs[0].varExpression
inputs[0].expr
)
return (args) =>
createCallWrapper(
'line',
[minVal, getSignedLeg(args[1].varExpression, legLenVal)],
[minVal, getSignedLeg(args[1].expr, legLenVal)],
tag
)
},
@ -588,7 +568,7 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
() =>
createCallWrapper('xLine', inputs[0].varExpression, tag),
createCallWrapper('xLine', inputs[0].expr, tag),
},
setVertDistance: {
tooltip: 'lineTo',
@ -601,12 +581,12 @@ const transformMap: TransformMap = {
createNode: ({ referenceSegName, inputs, tag }) => {
const [minVal, legLenVal] = getMinAndSegLenVals(
referenceSegName,
inputs[1].varExpression
inputs[1].expr
)
return (args) =>
createCallWrapper(
'line',
[getSignedLeg(args[0].varExpression, legLenVal), minVal],
[getSignedLeg(args[0].expr, legLenVal), minVal],
tag
)
},
@ -616,7 +596,7 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
() =>
createCallWrapper('yLine', inputs[1].varExpression, tag),
createCallWrapper('yLine', inputs[1].expr, tag),
},
setHorzDistance: {
tooltip: 'lineTo',
@ -633,7 +613,7 @@ const transformMap: TransformMap = {
createNode:
({ tag }) =>
(args) =>
createCallWrapper('xLine', args[0].varExpression, tag),
createCallWrapper('xLine', args[0].expr, tag),
},
vertical: {
tooltip: 'yLine',
@ -642,7 +622,7 @@ const transformMap: TransformMap = {
(args) =>
createCallWrapper(
'yLine',
getInputOfType(args, 'yRelative').varExpression,
getInputOfType(args, 'yRelative').expr,
tag
),
},
@ -695,7 +675,7 @@ const transformMap: TransformMap = {
createNode:
({ tag }) =>
(args) =>
createCallWrapper('xLineTo', args[0].varExpression, tag),
createCallWrapper('xLineTo', args[0].expr, tag),
},
vertical: {
tooltip: 'yLineTo',
@ -704,7 +684,7 @@ const transformMap: TransformMap = {
(args) =>
createCallWrapper(
'yLineTo',
getInputOfType(args, 'yAbsolute').varExpression,
getInputOfType(args, 'yAbsolute').expr,
tag
),
},
@ -719,18 +699,15 @@ const transformMap: TransformMap = {
'angleToMatchLengthX',
[
createIdentifier(referenceSegName),
inputs[0].varExpression,
inputs[0].expr,
createPipeSubstitution(),
]
)
return createCallWrapper(
'angledLineToX',
[
getAngleLengthSign(
args[0].varExpression,
angleToMatchLengthXCall
),
inputs[0].varExpression,
getAngleLengthSign(args[0].expr, angleToMatchLengthXCall),
inputs[0].expr,
],
tag
)
@ -741,7 +718,7 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
() =>
createCallWrapper('xLineTo', inputs[0].varExpression, tag),
createCallWrapper('xLineTo', inputs[0].expr, tag),
},
setAngleBetween: {
tooltip: 'angledLineToX',
@ -758,18 +735,15 @@ const transformMap: TransformMap = {
'angleToMatchLengthY',
[
createIdentifier(referenceSegName),
inputs[1].varExpression,
inputs[1].expr,
createPipeSubstitution(),
]
)
return createCallWrapper(
'angledLineToY',
[
getAngleLengthSign(
args[0].varExpression,
angleToMatchLengthYCall
),
inputs[1].varExpression,
getAngleLengthSign(args[0].expr, angleToMatchLengthYCall),
inputs[1].expr,
],
tag
)
@ -780,7 +754,7 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
() =>
createCallWrapper('yLineTo', inputs[1].varExpression, tag),
createCallWrapper('yLineTo', inputs[1].expr, tag),
},
setAngle: {
tooltip: 'angledLineToY',
@ -789,12 +763,9 @@ const transformMap: TransformMap = {
(args) => {
return createCallWrapper(
'angledLineToY',
[
forceValueUsedInTransform || args[0].varExpression,
inputs[1].varExpression,
],
[forceValueUsedInTransform || args[0].expr, inputs[1].expr],
tag,
getArgLiteralVal(args[0].varExpression)
getArgLiteralVal(args[0].expr)
)
},
},
@ -813,7 +784,7 @@ const transformMap: TransformMap = {
() =>
createCallWrapper(
'angledLine',
[inputs[0].varExpression, createSegLen(referenceSegName)],
[inputs[0].expr, createSegLen(referenceSegName)],
tag
),
},
@ -858,7 +829,7 @@ const transformMap: TransformMap = {
(args) =>
createCallWrapper(
'yLine',
getInputOfType(args, 'yRelative').varExpression,
getInputOfType(args, 'yRelative').expr,
tag
),
},
@ -867,7 +838,7 @@ const transformMap: TransformMap = {
createNode:
({ tag }) =>
(args) =>
createCallWrapper('xLine', args[0].varExpression, tag),
createCallWrapper('xLine', args[0].expr, tag),
},
},
length: {
@ -876,13 +847,8 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
([arg0]) => {
const expr = inputs[1].varExpression
if (
!(
arg0.varExpression.type === 'Literal' &&
Number(arg0.varExpression.value) < 0
)
)
const expr = inputs[1].expr
if (!(arg0.expr.type === 'Literal' && Number(arg0.expr.value) < 0))
return createCallWrapper('yLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper(
@ -899,13 +865,8 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
([arg0]) => {
const expr = inputs[1].varExpression
if (
!(
arg0.varExpression.type === 'Literal' &&
Number(arg0.varExpression.value) < 0
)
)
const expr = inputs[1].expr
if (!(arg0.expr.type === 'Literal' && Number(arg0.expr.value) < 0))
return createCallWrapper('xLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper(
@ -938,7 +899,7 @@ const transformMap: TransformMap = {
createNode:
({ tag }) =>
(args) =>
createCallWrapper('xLine', args[0].varExpression, tag),
createCallWrapper('xLine', args[0].expr, tag),
},
},
angle: {
@ -953,12 +914,12 @@ const transformMap: TransformMap = {
createNode: ({ referenceSegName, inputs, tag }) => {
const [minVal, legAngle] = getMinAndSegAngVals(
referenceSegName,
getInputOfType(inputs, 'xRelative').varExpression
getInputOfType(inputs, 'xRelative').expr
)
return (args) =>
createCallWrapper(
'angledLineOfXLength',
[getLegAng(args[0].varExpression, legAngle), minVal],
[getLegAng(args[0].expr, legAngle), minVal],
tag
)
},
@ -968,13 +929,8 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
([arg0]) => {
const expr = inputs[1].varExpression
if (
!(
arg0.varExpression.type === 'Literal' &&
Number(arg0.varExpression.value) < 0
)
)
const expr = inputs[1].expr
if (!(arg0.expr.type === 'Literal' && Number(arg0.expr.value) < 0))
return createCallWrapper('xLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper(
@ -1001,7 +957,7 @@ const transformMap: TransformMap = {
(args) =>
createCallWrapper(
'yLine',
getInputOfType(args, 'yRelative').varExpression,
getInputOfType(args, 'yRelative').expr,
tag
),
},
@ -1018,13 +974,13 @@ const transformMap: TransformMap = {
createNode: ({ referenceSegName, inputs, tag }) => {
const [minVal, legAngle] = getMinAndSegAngVals(
referenceSegName,
inputs[1].varExpression,
inputs[1].expr,
'legAngY'
)
return (args) =>
createCallWrapper(
'angledLineOfXLength',
[getLegAng(args[0].varExpression, legAngle), minVal],
[getLegAng(args[0].expr, legAngle), minVal],
tag
)
},
@ -1034,13 +990,8 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
([arg0]) => {
const expr = inputs[1].varExpression
if (
!(
arg0.varExpression.type === 'Literal' &&
Number(arg0.varExpression.value) < 0
)
)
const expr = inputs[1].expr
if (!(arg0.expr.type === 'Literal' && Number(arg0.expr.value) < 0))
return createCallWrapper('yLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper(
@ -1065,7 +1016,7 @@ const transformMap: TransformMap = {
createNode:
({ tag }) =>
(args) =>
createCallWrapper('xLineTo', args[0].varExpression, tag),
createCallWrapper('xLineTo', args[0].expr, tag),
},
},
angle: {
@ -1084,18 +1035,15 @@ const transformMap: TransformMap = {
'angleToMatchLengthX',
[
createIdentifier(referenceSegName),
inputs[1].varExpression,
inputs[1].expr,
createPipeSubstitution(),
]
)
return createCallWrapper(
'angledLineToX',
[
getAngleLengthSign(
args[0].varExpression,
angleToMatchLengthXCall
),
inputs[1].varExpression,
getAngleLengthSign(args[0].expr, angleToMatchLengthXCall),
inputs[1].expr,
],
tag
)
@ -1106,7 +1054,7 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
([arg0]) =>
createCallWrapper('xLineTo', inputs[1].varExpression, tag),
createCallWrapper('xLineTo', inputs[1].expr, tag),
},
},
},
@ -1123,7 +1071,7 @@ const transformMap: TransformMap = {
(args) =>
createCallWrapper(
'yLineTo',
getInputOfType(args, 'yAbsolute').varExpression,
getInputOfType(args, 'yAbsolute').expr,
tag
),
},
@ -1144,18 +1092,15 @@ const transformMap: TransformMap = {
'angleToMatchLengthY',
[
createIdentifier(referenceSegName),
inputs[1].varExpression,
inputs[1].expr,
createPipeSubstitution(),
]
)
return createCallWrapper(
'angledLineToY',
[
getAngleLengthSign(
args[0].varExpression,
angleToMatchLengthXCall
),
inputs[1].varExpression,
getAngleLengthSign(args[0].expr, angleToMatchLengthXCall),
inputs[1].expr,
],
tag
)
@ -1166,7 +1111,7 @@ const transformMap: TransformMap = {
createNode:
({ inputs, tag }) =>
() =>
createCallWrapper('yLineTo', inputs[1].varExpression, tag),
createCallWrapper('yLineTo', inputs[1].expr, tag),
},
},
},
@ -1177,7 +1122,7 @@ const transformMap: TransformMap = {
createNode:
({ referenceSegName, tag }) =>
(arg) => {
const argVal = getArgLiteralVal(arg[0].varExpression)
const argVal = getArgLiteralVal(arg[0].expr)
const segLen = createSegLen(referenceSegName) // as BinaryPart
if (argVal > 0)
return createCallWrapper('xLine', segLen, tag, argVal)
@ -1217,7 +1162,7 @@ const transformMap: TransformMap = {
createNode:
({ referenceSegName, tag }) =>
(arg) => {
const argVal = getArgLiteralVal(arg[0].varExpression)
const argVal = getArgLiteralVal(arg[0].expr)
let segLen = createSegLen(referenceSegName) as BinaryPart
if (argVal < 0) segLen = createUnaryExpression(segLen)
return createCallWrapper('yLine', segLen, tag, argVal)
@ -1301,18 +1246,14 @@ export function getRemoveConstraintsTransform(
createNode:
({ tag, referenceSegName }) =>
(args) => {
return createCallWrapper(
'line',
[args[0].varExpression, args[1].varExpression],
tag
)
return createCallWrapper('line', [args[0].expr, args[1].expr], tag)
// The following commented changes values to hardcode, but keeps the line type the same, maybe that's useful?
// if (name === 'angledLineThatIntersects') {
// return intersectCallWrapper({
// fnName: name,
// angleVal: args[0].varExpression,
// offsetVal: args[1].varExpression,
// angleVal: args[0].expr,
// offsetVal: args[1].expr,
// intersectTag: createIdentifier(referenceSegName),
// tag,
// })
@ -1388,25 +1329,21 @@ export function removeSingleConstraint({
// the inputDetails, input where we should use the rawValue(s)
if (inputDetails.type === 'arrayItem') {
const values = inputs.map(({ varDetails: varValue }) => {
const values = inputs.map((arg) => {
if (
!(
(varValue.type === 'arrayItem' ||
varValue.type === 'arrayOrObjItem') &&
varValue.index === inputDetails.index
(arg.type === 'arrayItem' || arg.type === 'arrayOrObjItem') &&
arg.index === inputDetails.index
)
)
return varValue.expr
return arg.expr
const literal = rawValues.find(
(rawValue) =>
(rawValue.varDetails.type === 'arrayItem' ||
rawValue.varDetails.type === 'arrayOrObjItem') &&
rawValue.varDetails.index === inputDetails.index
)?.varDetails?.expr
return (
(varValue.index === inputDetails.index && literal) ||
varValue.expr
)
(rawValue.type === 'arrayItem' ||
rawValue.type === 'arrayOrObjItem') &&
rawValue.index === inputDetails.index
)?.expr
return (arg.index === inputDetails.index && literal) || arg.expr
})
return createStdlibCallExpression(
callExp.node.callee.name as any,
@ -1422,54 +1359,52 @@ export function removeSingleConstraint({
[key: string]: Parameters<typeof createArrayExpression>[0]
} = {}
const otherThing: Parameters<typeof createObjectExpression>[0] = {}
inputs.forEach(({ varDetails: varValue, varExpression }) => {
inputs.forEach((arg) => {
if (
varValue.type !== 'objectProperty' &&
varValue.type !== 'arrayOrObjItem' &&
varValue.type !== 'arrayInObject'
arg.type !== 'objectProperty' &&
arg.type !== 'arrayOrObjItem' &&
arg.type !== 'arrayInObject'
)
return
const rawLiteralArrayInObject = rawValues.find(
(rawValue) =>
rawValue.varDetails.type === 'arrayInObject' &&
rawValue.varDetails.key === inputDetails.key &&
rawValue.varDetails.index ===
(varValue.type === 'arrayInObject' ? varValue.index : -1)
rawValue.type === 'arrayInObject' &&
rawValue.key === inputDetails.key &&
rawValue.index ===
(arg.type === 'arrayInObject' ? arg.index : -1)
)
const rawLiteralObjProp = rawValues.find(
(rawValue) =>
(rawValue.varDetails.type === 'objectProperty' ||
rawValue.varDetails.type === 'arrayOrObjItem' ||
rawValue.varDetails.type === 'arrayInObject') &&
rawValue.varDetails.key === inputDetails.key
(rawValue.type === 'objectProperty' ||
rawValue.type === 'arrayOrObjItem' ||
rawValue.type === 'arrayInObject') &&
rawValue.key === inputDetails.key
)
if (
inputDetails.type === 'arrayInObject' &&
rawLiteralArrayInObject?.varDetails.type === 'arrayInObject' &&
rawLiteralArrayInObject?.varDetails.index ===
inputDetails.index &&
rawLiteralArrayInObject?.varDetails.key === inputDetails.key
rawLiteralArrayInObject?.type === 'arrayInObject' &&
rawLiteralArrayInObject?.index === inputDetails.index &&
rawLiteralArrayInObject?.key === inputDetails.key
) {
if (!arrayDetailsNameBetterLater[varValue.key])
arrayDetailsNameBetterLater[varValue.key] = []
if (!arrayDetailsNameBetterLater[arg.key])
arrayDetailsNameBetterLater[arg.key] = []
arrayDetailsNameBetterLater[inputDetails.key][
inputDetails.index
] = rawLiteralArrayInObject.varDetails.expr
] = rawLiteralArrayInObject.expr
} else if (
inputDetails.type === 'objectProperty' &&
(rawLiteralObjProp?.varDetails.type === 'objectProperty' ||
rawLiteralObjProp?.varDetails.type === 'arrayOrObjItem') &&
rawLiteralObjProp?.varDetails.key === inputDetails.key &&
varValue.key === inputDetails.key
(rawLiteralObjProp?.type === 'objectProperty' ||
rawLiteralObjProp?.type === 'arrayOrObjItem') &&
rawLiteralObjProp?.key === inputDetails.key &&
arg.key === inputDetails.key
) {
otherThing[inputDetails.key] = rawLiteralObjProp.varDetails.expr
} else if (varValue.type === 'arrayInObject') {
if (!arrayDetailsNameBetterLater[varValue.key])
arrayDetailsNameBetterLater[varValue.key] = []
arrayDetailsNameBetterLater[varValue.key][varValue.index] =
varExpression
} else if (varValue.type === 'objectProperty') {
otherThing[varValue.key] = varExpression
otherThing[inputDetails.key] = rawLiteralObjProp.expr
} else if (arg.type === 'arrayInObject') {
if (!arrayDetailsNameBetterLater[arg.key])
arrayDetailsNameBetterLater[arg.key] = []
arrayDetailsNameBetterLater[arg.key][arg.index] = arg.expr
} else if (arg.type === 'objectProperty') {
otherThing[arg.key] = arg.expr
}
})
const createObjParam: Parameters<typeof createObjectExpression>[0] =
@ -1492,7 +1427,7 @@ export function removeSingleConstraint({
return createCallWrapper(
callExp.node.callee.name as any,
rawValues[0].varDetails.expr,
rawValues[0].expr,
tag
)
},
@ -1787,7 +1722,7 @@ export function transformAstSketchLines({
_referencedSegmentNameVal.type === 'Identifier' &&
String(_referencedSegmentNameVal.name)) ||
''
const inputs: SegmentInput[] = []
const inputs: InputArgs = []
getConstraintInfo(callExp.node, '', _pathToNode).forEach((a) => {
if (
@ -1802,43 +1737,31 @@ export function transformAstSketchLines({
if (a?.argPosition?.type === 'arrayItem') {
inputs.push({
varDetails: {
type: 'arrayItem',
index: a.argPosition.index,
expr: nodeMeta.node,
argType: a.type,
},
varExpression: nodeMeta.node,
type: 'arrayItem',
index: a.argPosition.index,
expr: nodeMeta.node,
argType: a.type,
})
} else if (a?.argPosition?.type === 'objectProperty') {
inputs.push({
varDetails: {
type: 'objectProperty',
key: a.argPosition.key,
expr: nodeMeta.node,
argType: a.type,
},
varExpression: nodeMeta.node,
type: 'objectProperty',
key: a.argPosition.key,
expr: nodeMeta.node,
argType: a.type,
})
} else if (a?.argPosition?.type === 'singleValue') {
inputs.push({
varDetails: {
type: 'singleValue',
argType: a.type,
expr: nodeMeta.node,
},
varExpression: nodeMeta.node,
type: 'singleValue',
argType: a.type,
expr: nodeMeta.node,
})
} else if (a?.argPosition?.type === 'arrayInObject') {
inputs.push({
varDetails: {
type: 'arrayInObject',
key: a.argPosition.key,
index: a.argPosition.index,
expr: nodeMeta.node,
argType: a.type,
},
varExpression: nodeMeta.node,
type: 'arrayInObject',
key: a.argPosition.key,
index: a.argPosition.index,
expr: nodeMeta.node,
argType: a.type,
})
}
})
@ -2039,9 +1962,6 @@ function isExprBinaryPart(expr: Expr): expr is BinaryPart {
return false
}
function getInputOfType(
a: SegmentInput[],
b: LineInputsType | 'radius'
): SegmentInput {
return a.find(({ varDetails }) => varDetails.argType === b) || a[0]
function getInputOfType(a: InputArgs, b: LineInputsType | 'radius'): InputArg {
return a.find(({ argType }) => argType === b) || a[0]
}

View File

@ -137,7 +137,7 @@ type _VarValue<T> =
* Which is why a union type is used that can be type narrowed using the {@link RawArg.type} property
* {@link RawArg.expr} is common to all of these types
*/
type InputArg = _VarValue<Expr>
export type InputArg = _VarValue<Expr>
/**
* {@link RawArg.expr} is the literal equivalent of whatever current expression is
@ -147,7 +147,7 @@ type InputArg = _VarValue<Expr>
*/
type RawArg = _VarValue<Literal>
type InputArgs = Array<InputArg>
export type InputArgs = Array<InputArg>
// /**
// * The literal equivalent of whatever current expression is
@ -174,13 +174,8 @@ export type SimplifiedArgDetails =
index: 0 | 1
}
export interface SegmentInput {
varExpression: Expr
varDetails: InputArg
}
export type TransformCallback = (
inputs: SegmentInput[],
inputs: InputArgs,
referencedSegment?: Path
) => {
callExp: Expr