comments and naming tweaks

This commit is contained in:
Kurt Hutten Irev-Dev
2024-09-10 13:15:11 +10:00
parent 0abe4c4082
commit 04e82bf728
3 changed files with 48 additions and 55 deletions

View File

@ -36,7 +36,7 @@ import {
SegmentInputs,
SimplifiedArgDetails,
RawArgs,
CreateStdLibSketchCallExpr,
CreatedSketchExprResult,
} from 'lang/std/stdTypes'
import {
@ -2037,9 +2037,7 @@ export function replaceSketchLine({
pathToNode: PathToNode
fnName: ToolTip
segmentInput: SegmentInputs
replaceExistingCallback: (
rawArgs: RawArgs
) => ReturnType<CreateStdLibSketchCallExpr>
replaceExistingCallback: (rawArgs: RawArgs) => CreatedSketchExprResult
referencedSegment?: Path
}):
| {

View File

@ -1,4 +1,5 @@
import {
CreatedSketchExprResult,
CreateStdLibSketchCallExpr,
InputArg,
InputArgs,
@ -17,6 +18,7 @@ import {
PathToNode,
ProgramMemory,
sketchGroupFromKclValue,
Literal,
} from '../wasm'
import {
getNodeFromPath,
@ -78,7 +80,7 @@ function createCallWrapper(
val: [Expr, Expr] | Expr,
tag?: Expr,
valueUsedInTransform?: number
): ReturnType<CreateStdLibSketchCallExpr> {
): CreatedSketchExprResult {
const args =
tooltip === 'circle'
? []
@ -116,7 +118,7 @@ function createStdlibCallExpression(
val: Expr,
tag?: Expr,
valueUsedInTransform?: number
): ReturnType<CreateStdLibSketchCallExpr> {
): CreatedSketchExprResult {
const args = [val, createPipeSubstitution()]
if (tag) {
args.push(tag)
@ -141,7 +143,7 @@ function intersectCallWrapper({
intersectTag: Expr
tag?: Expr
valueUsedInTransform?: number
}): ReturnType<CreateStdLibSketchCallExpr> {
}): CreatedSketchExprResult {
const firstArg: any = {
angle: angleVal,
offset: offsetVal,
@ -261,13 +263,11 @@ const getMinAndSegAngVals = (
return [minVal, legAngle]
}
const getSignedLeg = (arg: Expr, legLenVal: BinaryPart) =>
arg.type === 'Literal' && Number(arg.value) < 0
? createUnaryExpression(legLenVal)
: legLenVal
const getSignedLeg = (arg: Literal, legLenVal: BinaryPart) =>
Number(arg.value) < 0 ? createUnaryExpression(legLenVal) : legLenVal
const getLegAng = (arg: Expr, legAngleVal: BinaryPart) => {
const ang = (arg.type === 'Literal' && Number(arg.value)) || 0
const getLegAng = (arg: Literal, legAngleVal: BinaryPart) => {
const ang = Number(arg.value) || 0
const normalisedAngle = ((ang % 360) + 360) % 360 // between 0 and 360
const truncatedTo90 = Math.floor(normalisedAngle / 90) * 90
const binExp = createBinaryExpressionWithUnary([
@ -277,18 +277,18 @@ const getLegAng = (arg: Expr, legAngleVal: BinaryPart) => {
return truncatedTo90 === 0 ? legAngleVal : binExp
}
const getAngleLengthSign = (arg: Expr, legAngleVal: BinaryPart) => {
const ang = (arg.type === 'Literal' && Number(arg.value)) || 0
const getAngleLengthSign = (arg: Literal, legAngleVal: BinaryPart) => {
const ang = Number(arg.value) || 0
const normalisedAngle = ((ang % 180) + 180) % 180 // between 0 and 180
return normalisedAngle > 90 ? createUnaryExpression(legAngleVal) : legAngleVal
}
function getClosesAngleDirection(
arg: Expr,
arg: Literal,
refAngle: number,
angleVal: BinaryPart
) {
const currentAng = (arg.type === 'Literal' && Number(arg.value)) || 0
const currentAng = Number(arg.value) || 0
const angDiff = Math.abs(currentAng - refAngle)
const normalisedAngle = ((angDiff % 360) + 360) % 360 // between 0 and 180
return normalisedAngle > 90
@ -454,11 +454,8 @@ const setAngledIntersectLineForLines: CreateStdLibSketchCallExpr = ({
forceValueUsedInTransform,
rawArgs: args,
}) => {
const valueUsedInTransform = roundOff(
args[1].expr.type === 'Literal' ? Number(args[1].expr.value) : 0,
2
)
const angle = args[0].expr.type === 'Literal' ? Number(args[0].expr.value) : 0
const valueUsedInTransform = roundOff(Number(args[1].expr.value) || 0, 2)
const angle = Number(args[0].expr.value) || 0
const varNamMap: { [key: number]: string } = {
0: 'ZERO',
90: 'QUARTER_TURN',
@ -485,10 +482,7 @@ const setAngledIntersectForAngledLines: CreateStdLibSketchCallExpr = ({
inputs,
rawArgs: args,
}) => {
const valueUsedInTransform = roundOff(
args[1].expr.type === 'Literal' ? Number(args[1].expr.value) : 0,
2
)
const valueUsedInTransform = roundOff(Number(args[1].expr.value) || 0, 2)
return intersectCallWrapper({
fnName: 'angledLineThatIntersects',
angleVal: inputs[0].expr,
@ -513,10 +507,7 @@ const setAngleBetweenCreateNode =
? getAngle(referencedSegment?.from, referencedSegment?.to)
: 0
let valueUsedInTransform = roundOff(
normaliseAngle(
(args[0].expr.type === 'Literal' ? Number(args[0].expr.value) : 0) -
refAngle
)
normaliseAngle((Number(args[0].expr.value) || 0) - refAngle)
)
let firstHalfValue = createSegAngle(referenceSegName) as BinaryPart
if (Math.abs(valueUsedInTransform) > 90) {
@ -824,9 +815,7 @@ const transformMap: TransformMap = {
tooltip: 'yLine',
createNode: ({ inputs, tag, rawArgs: args }) => {
const expr = inputs[1].expr
if (
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
)
if (Number(args[0].expr.value) >= 0)
return createCallWrapper('yLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper('yLine', createUnaryExpression(expr), tag)
@ -838,9 +827,7 @@ const transformMap: TransformMap = {
tooltip: 'xLine',
createNode: ({ inputs, tag, rawArgs: args }) => {
const expr = inputs[1].expr
if (
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
)
if (Number(args[0].expr.value) >= 0)
return createCallWrapper('xLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper('xLine', createUnaryExpression(expr), tag)
@ -895,9 +882,7 @@ const transformMap: TransformMap = {
tooltip: 'xLine',
createNode: ({ inputs, tag, rawArgs: args }) => {
const expr = inputs[1].expr
if (
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
)
if (Number(args[0].expr.value) >= 0)
return createCallWrapper('xLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper('xLine', createUnaryExpression(expr), tag)
@ -949,9 +934,7 @@ const transformMap: TransformMap = {
tooltip: 'yLine',
createNode: ({ inputs, tag, rawArgs: args }) => {
const expr = inputs[1].expr
if (
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
)
if (Number(args[0].expr.value) >= 0)
return createCallWrapper('yLine', expr, tag)
if (isExprBinaryPart(expr))
return createCallWrapper('yLine', createUnaryExpression(expr), tag)
@ -1806,8 +1789,8 @@ function createLastSeg(isX: boolean): CallExpression {
])
}
function getArgLiteralVal(arg: Expr): number {
return arg?.type === 'Literal' ? Number(arg.value) : 0
function getArgLiteralVal(arg: Literal): number {
return Number(arg.value) || 0
}
export type ConstraintLevel = 'free' | 'partial' | 'full'

View File

@ -63,9 +63,7 @@ export type SegmentInputs = StraightSegmentInput | ArcSegmentInput
*/
interface addCall extends ModifyAstBase {
segmentInput: SegmentInputs
replaceExistingCallback?: (
rawArgs: RawArgs
) => ReturnType<CreateStdLibSketchCallExpr>
replaceExistingCallback?: (rawArgs: RawArgs) => CreatedSketchExprResult
referencedSegment?: Path
spliceBetween?: boolean
}
@ -170,18 +168,32 @@ export type SimplifiedArgDetails =
index: 0 | 1
}
export type CreateStdLibSketchCallExpr = (args: {
inputs: InputArgs
referenceSegName: string
tag?: Expr
forceValueUsedInTransform?: Expr
rawArgs: InputArgs
referencedSegment?: Path
}) => {
/**
* Represents the result of creating a sketch expression (line, tangentialArcTo, angledLine, circle, etc.).
*
* @property {Expr} callExp - This is the main result; recasting the expression should give the user the new function call.
* @property {number} [valueUsedInTransform] - Aside from `callExp`, we also return the number used in the transform, which is useful for constraints.
* For example, when adding a "horizontal distance" constraint, we don't want the segments to move, just constrain them in place.
* So the second segment will probably be something like `lineTo([segEndX($firstSegTag) + someLiteral, 123], %)` where `someLiteral` is
* the value of the current horizontal distance, that we calculate to constrain the second segment without it moving.
* We can run the ast-mod to get this constraint `valueUsedInTransform` without applying the mod so that we can surface this to the user in a modal.
* We show them the modal where they can specify the distance they want to constrain to.
* We pre-fill this with the current value `valueUsedInTransform`, which they can accept or change, and we'll use that to apply the final ast-mod.
*/
export interface CreatedSketchExprResult {
callExp: Expr
valueUsedInTransform?: number
}
export type CreateStdLibSketchCallExpr = (args: {
inputs: InputArgs
rawArgs: RawArgs
referenceSegName: string
tag?: Expr
forceValueUsedInTransform?: Expr
referencedSegment?: Path
}) => CreatedSketchExprResult
export type TransformInfo = {
tooltip: ToolTip
createNode: CreateStdLibSketchCallExpr