comments and naming tweaks
This commit is contained in:
@ -36,7 +36,7 @@ import {
|
|||||||
SegmentInputs,
|
SegmentInputs,
|
||||||
SimplifiedArgDetails,
|
SimplifiedArgDetails,
|
||||||
RawArgs,
|
RawArgs,
|
||||||
CreateStdLibSketchCallExpr,
|
CreatedSketchExprResult,
|
||||||
} from 'lang/std/stdTypes'
|
} from 'lang/std/stdTypes'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -2037,9 +2037,7 @@ export function replaceSketchLine({
|
|||||||
pathToNode: PathToNode
|
pathToNode: PathToNode
|
||||||
fnName: ToolTip
|
fnName: ToolTip
|
||||||
segmentInput: SegmentInputs
|
segmentInput: SegmentInputs
|
||||||
replaceExistingCallback: (
|
replaceExistingCallback: (rawArgs: RawArgs) => CreatedSketchExprResult
|
||||||
rawArgs: RawArgs
|
|
||||||
) => ReturnType<CreateStdLibSketchCallExpr>
|
|
||||||
referencedSegment?: Path
|
referencedSegment?: Path
|
||||||
}):
|
}):
|
||||||
| {
|
| {
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
CreatedSketchExprResult,
|
||||||
CreateStdLibSketchCallExpr,
|
CreateStdLibSketchCallExpr,
|
||||||
InputArg,
|
InputArg,
|
||||||
InputArgs,
|
InputArgs,
|
||||||
@ -17,6 +18,7 @@ import {
|
|||||||
PathToNode,
|
PathToNode,
|
||||||
ProgramMemory,
|
ProgramMemory,
|
||||||
sketchGroupFromKclValue,
|
sketchGroupFromKclValue,
|
||||||
|
Literal,
|
||||||
} from '../wasm'
|
} from '../wasm'
|
||||||
import {
|
import {
|
||||||
getNodeFromPath,
|
getNodeFromPath,
|
||||||
@ -78,7 +80,7 @@ function createCallWrapper(
|
|||||||
val: [Expr, Expr] | Expr,
|
val: [Expr, Expr] | Expr,
|
||||||
tag?: Expr,
|
tag?: Expr,
|
||||||
valueUsedInTransform?: number
|
valueUsedInTransform?: number
|
||||||
): ReturnType<CreateStdLibSketchCallExpr> {
|
): CreatedSketchExprResult {
|
||||||
const args =
|
const args =
|
||||||
tooltip === 'circle'
|
tooltip === 'circle'
|
||||||
? []
|
? []
|
||||||
@ -116,7 +118,7 @@ function createStdlibCallExpression(
|
|||||||
val: Expr,
|
val: Expr,
|
||||||
tag?: Expr,
|
tag?: Expr,
|
||||||
valueUsedInTransform?: number
|
valueUsedInTransform?: number
|
||||||
): ReturnType<CreateStdLibSketchCallExpr> {
|
): CreatedSketchExprResult {
|
||||||
const args = [val, createPipeSubstitution()]
|
const args = [val, createPipeSubstitution()]
|
||||||
if (tag) {
|
if (tag) {
|
||||||
args.push(tag)
|
args.push(tag)
|
||||||
@ -141,7 +143,7 @@ function intersectCallWrapper({
|
|||||||
intersectTag: Expr
|
intersectTag: Expr
|
||||||
tag?: Expr
|
tag?: Expr
|
||||||
valueUsedInTransform?: number
|
valueUsedInTransform?: number
|
||||||
}): ReturnType<CreateStdLibSketchCallExpr> {
|
}): CreatedSketchExprResult {
|
||||||
const firstArg: any = {
|
const firstArg: any = {
|
||||||
angle: angleVal,
|
angle: angleVal,
|
||||||
offset: offsetVal,
|
offset: offsetVal,
|
||||||
@ -261,13 +263,11 @@ const getMinAndSegAngVals = (
|
|||||||
return [minVal, legAngle]
|
return [minVal, legAngle]
|
||||||
}
|
}
|
||||||
|
|
||||||
const getSignedLeg = (arg: Expr, legLenVal: BinaryPart) =>
|
const getSignedLeg = (arg: Literal, legLenVal: BinaryPart) =>
|
||||||
arg.type === 'Literal' && Number(arg.value) < 0
|
Number(arg.value) < 0 ? createUnaryExpression(legLenVal) : legLenVal
|
||||||
? createUnaryExpression(legLenVal)
|
|
||||||
: legLenVal
|
|
||||||
|
|
||||||
const getLegAng = (arg: Expr, legAngleVal: BinaryPart) => {
|
const getLegAng = (arg: Literal, legAngleVal: BinaryPart) => {
|
||||||
const ang = (arg.type === 'Literal' && Number(arg.value)) || 0
|
const ang = Number(arg.value) || 0
|
||||||
const normalisedAngle = ((ang % 360) + 360) % 360 // between 0 and 360
|
const normalisedAngle = ((ang % 360) + 360) % 360 // between 0 and 360
|
||||||
const truncatedTo90 = Math.floor(normalisedAngle / 90) * 90
|
const truncatedTo90 = Math.floor(normalisedAngle / 90) * 90
|
||||||
const binExp = createBinaryExpressionWithUnary([
|
const binExp = createBinaryExpressionWithUnary([
|
||||||
@ -277,18 +277,18 @@ const getLegAng = (arg: Expr, legAngleVal: BinaryPart) => {
|
|||||||
return truncatedTo90 === 0 ? legAngleVal : binExp
|
return truncatedTo90 === 0 ? legAngleVal : binExp
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAngleLengthSign = (arg: Expr, legAngleVal: BinaryPart) => {
|
const getAngleLengthSign = (arg: Literal, legAngleVal: BinaryPart) => {
|
||||||
const ang = (arg.type === 'Literal' && Number(arg.value)) || 0
|
const ang = Number(arg.value) || 0
|
||||||
const normalisedAngle = ((ang % 180) + 180) % 180 // between 0 and 180
|
const normalisedAngle = ((ang % 180) + 180) % 180 // between 0 and 180
|
||||||
return normalisedAngle > 90 ? createUnaryExpression(legAngleVal) : legAngleVal
|
return normalisedAngle > 90 ? createUnaryExpression(legAngleVal) : legAngleVal
|
||||||
}
|
}
|
||||||
|
|
||||||
function getClosesAngleDirection(
|
function getClosesAngleDirection(
|
||||||
arg: Expr,
|
arg: Literal,
|
||||||
refAngle: number,
|
refAngle: number,
|
||||||
angleVal: BinaryPart
|
angleVal: BinaryPart
|
||||||
) {
|
) {
|
||||||
const currentAng = (arg.type === 'Literal' && Number(arg.value)) || 0
|
const currentAng = Number(arg.value) || 0
|
||||||
const angDiff = Math.abs(currentAng - refAngle)
|
const angDiff = Math.abs(currentAng - refAngle)
|
||||||
const normalisedAngle = ((angDiff % 360) + 360) % 360 // between 0 and 180
|
const normalisedAngle = ((angDiff % 360) + 360) % 360 // between 0 and 180
|
||||||
return normalisedAngle > 90
|
return normalisedAngle > 90
|
||||||
@ -454,11 +454,8 @@ const setAngledIntersectLineForLines: CreateStdLibSketchCallExpr = ({
|
|||||||
forceValueUsedInTransform,
|
forceValueUsedInTransform,
|
||||||
rawArgs: args,
|
rawArgs: args,
|
||||||
}) => {
|
}) => {
|
||||||
const valueUsedInTransform = roundOff(
|
const valueUsedInTransform = roundOff(Number(args[1].expr.value) || 0, 2)
|
||||||
args[1].expr.type === 'Literal' ? Number(args[1].expr.value) : 0,
|
const angle = Number(args[0].expr.value) || 0
|
||||||
2
|
|
||||||
)
|
|
||||||
const angle = args[0].expr.type === 'Literal' ? Number(args[0].expr.value) : 0
|
|
||||||
const varNamMap: { [key: number]: string } = {
|
const varNamMap: { [key: number]: string } = {
|
||||||
0: 'ZERO',
|
0: 'ZERO',
|
||||||
90: 'QUARTER_TURN',
|
90: 'QUARTER_TURN',
|
||||||
@ -485,10 +482,7 @@ const setAngledIntersectForAngledLines: CreateStdLibSketchCallExpr = ({
|
|||||||
inputs,
|
inputs,
|
||||||
rawArgs: args,
|
rawArgs: args,
|
||||||
}) => {
|
}) => {
|
||||||
const valueUsedInTransform = roundOff(
|
const valueUsedInTransform = roundOff(Number(args[1].expr.value) || 0, 2)
|
||||||
args[1].expr.type === 'Literal' ? Number(args[1].expr.value) : 0,
|
|
||||||
2
|
|
||||||
)
|
|
||||||
return intersectCallWrapper({
|
return intersectCallWrapper({
|
||||||
fnName: 'angledLineThatIntersects',
|
fnName: 'angledLineThatIntersects',
|
||||||
angleVal: inputs[0].expr,
|
angleVal: inputs[0].expr,
|
||||||
@ -513,10 +507,7 @@ const setAngleBetweenCreateNode =
|
|||||||
? getAngle(referencedSegment?.from, referencedSegment?.to)
|
? getAngle(referencedSegment?.from, referencedSegment?.to)
|
||||||
: 0
|
: 0
|
||||||
let valueUsedInTransform = roundOff(
|
let valueUsedInTransform = roundOff(
|
||||||
normaliseAngle(
|
normaliseAngle((Number(args[0].expr.value) || 0) - refAngle)
|
||||||
(args[0].expr.type === 'Literal' ? Number(args[0].expr.value) : 0) -
|
|
||||||
refAngle
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
let firstHalfValue = createSegAngle(referenceSegName) as BinaryPart
|
let firstHalfValue = createSegAngle(referenceSegName) as BinaryPart
|
||||||
if (Math.abs(valueUsedInTransform) > 90) {
|
if (Math.abs(valueUsedInTransform) > 90) {
|
||||||
@ -824,9 +815,7 @@ const transformMap: TransformMap = {
|
|||||||
tooltip: 'yLine',
|
tooltip: 'yLine',
|
||||||
createNode: ({ inputs, tag, rawArgs: args }) => {
|
createNode: ({ inputs, tag, rawArgs: args }) => {
|
||||||
const expr = inputs[1].expr
|
const expr = inputs[1].expr
|
||||||
if (
|
if (Number(args[0].expr.value) >= 0)
|
||||||
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
|
|
||||||
)
|
|
||||||
return createCallWrapper('yLine', expr, tag)
|
return createCallWrapper('yLine', expr, tag)
|
||||||
if (isExprBinaryPart(expr))
|
if (isExprBinaryPart(expr))
|
||||||
return createCallWrapper('yLine', createUnaryExpression(expr), tag)
|
return createCallWrapper('yLine', createUnaryExpression(expr), tag)
|
||||||
@ -838,9 +827,7 @@ const transformMap: TransformMap = {
|
|||||||
tooltip: 'xLine',
|
tooltip: 'xLine',
|
||||||
createNode: ({ inputs, tag, rawArgs: args }) => {
|
createNode: ({ inputs, tag, rawArgs: args }) => {
|
||||||
const expr = inputs[1].expr
|
const expr = inputs[1].expr
|
||||||
if (
|
if (Number(args[0].expr.value) >= 0)
|
||||||
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
|
|
||||||
)
|
|
||||||
return createCallWrapper('xLine', expr, tag)
|
return createCallWrapper('xLine', expr, tag)
|
||||||
if (isExprBinaryPart(expr))
|
if (isExprBinaryPart(expr))
|
||||||
return createCallWrapper('xLine', createUnaryExpression(expr), tag)
|
return createCallWrapper('xLine', createUnaryExpression(expr), tag)
|
||||||
@ -895,9 +882,7 @@ const transformMap: TransformMap = {
|
|||||||
tooltip: 'xLine',
|
tooltip: 'xLine',
|
||||||
createNode: ({ inputs, tag, rawArgs: args }) => {
|
createNode: ({ inputs, tag, rawArgs: args }) => {
|
||||||
const expr = inputs[1].expr
|
const expr = inputs[1].expr
|
||||||
if (
|
if (Number(args[0].expr.value) >= 0)
|
||||||
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
|
|
||||||
)
|
|
||||||
return createCallWrapper('xLine', expr, tag)
|
return createCallWrapper('xLine', expr, tag)
|
||||||
if (isExprBinaryPart(expr))
|
if (isExprBinaryPart(expr))
|
||||||
return createCallWrapper('xLine', createUnaryExpression(expr), tag)
|
return createCallWrapper('xLine', createUnaryExpression(expr), tag)
|
||||||
@ -949,9 +934,7 @@ const transformMap: TransformMap = {
|
|||||||
tooltip: 'yLine',
|
tooltip: 'yLine',
|
||||||
createNode: ({ inputs, tag, rawArgs: args }) => {
|
createNode: ({ inputs, tag, rawArgs: args }) => {
|
||||||
const expr = inputs[1].expr
|
const expr = inputs[1].expr
|
||||||
if (
|
if (Number(args[0].expr.value) >= 0)
|
||||||
!(args[0].expr.type === 'Literal' && Number(args[0].expr.value) < 0)
|
|
||||||
)
|
|
||||||
return createCallWrapper('yLine', expr, tag)
|
return createCallWrapper('yLine', expr, tag)
|
||||||
if (isExprBinaryPart(expr))
|
if (isExprBinaryPart(expr))
|
||||||
return createCallWrapper('yLine', createUnaryExpression(expr), tag)
|
return createCallWrapper('yLine', createUnaryExpression(expr), tag)
|
||||||
@ -1806,8 +1789,8 @@ function createLastSeg(isX: boolean): CallExpression {
|
|||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
function getArgLiteralVal(arg: Expr): number {
|
function getArgLiteralVal(arg: Literal): number {
|
||||||
return arg?.type === 'Literal' ? Number(arg.value) : 0
|
return Number(arg.value) || 0
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ConstraintLevel = 'free' | 'partial' | 'full'
|
export type ConstraintLevel = 'free' | 'partial' | 'full'
|
||||||
|
|||||||
@ -63,9 +63,7 @@ export type SegmentInputs = StraightSegmentInput | ArcSegmentInput
|
|||||||
*/
|
*/
|
||||||
interface addCall extends ModifyAstBase {
|
interface addCall extends ModifyAstBase {
|
||||||
segmentInput: SegmentInputs
|
segmentInput: SegmentInputs
|
||||||
replaceExistingCallback?: (
|
replaceExistingCallback?: (rawArgs: RawArgs) => CreatedSketchExprResult
|
||||||
rawArgs: RawArgs
|
|
||||||
) => ReturnType<CreateStdLibSketchCallExpr>
|
|
||||||
referencedSegment?: Path
|
referencedSegment?: Path
|
||||||
spliceBetween?: boolean
|
spliceBetween?: boolean
|
||||||
}
|
}
|
||||||
@ -170,18 +168,32 @@ export type SimplifiedArgDetails =
|
|||||||
index: 0 | 1
|
index: 0 | 1
|
||||||
}
|
}
|
||||||
|
|
||||||
export type CreateStdLibSketchCallExpr = (args: {
|
/**
|
||||||
inputs: InputArgs
|
* Represents the result of creating a sketch expression (line, tangentialArcTo, angledLine, circle, etc.).
|
||||||
referenceSegName: string
|
*
|
||||||
tag?: Expr
|
* @property {Expr} callExp - This is the main result; recasting the expression should give the user the new function call.
|
||||||
forceValueUsedInTransform?: Expr
|
* @property {number} [valueUsedInTransform] - Aside from `callExp`, we also return the number used in the transform, which is useful for constraints.
|
||||||
rawArgs: InputArgs
|
* For example, when adding a "horizontal distance" constraint, we don't want the segments to move, just constrain them in place.
|
||||||
referencedSegment?: Path
|
* 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
|
callExp: Expr
|
||||||
valueUsedInTransform?: number
|
valueUsedInTransform?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CreateStdLibSketchCallExpr = (args: {
|
||||||
|
inputs: InputArgs
|
||||||
|
rawArgs: RawArgs
|
||||||
|
referenceSegName: string
|
||||||
|
tag?: Expr
|
||||||
|
forceValueUsedInTransform?: Expr
|
||||||
|
referencedSegment?: Path
|
||||||
|
}) => CreatedSketchExprResult
|
||||||
|
|
||||||
export type TransformInfo = {
|
export type TransformInfo = {
|
||||||
tooltip: ToolTip
|
tooltip: ToolTip
|
||||||
createNode: CreateStdLibSketchCallExpr
|
createNode: CreateStdLibSketchCallExpr
|
||||||
|
|||||||
Reference in New Issue
Block a user