getSketchSegmentIndexFromSourceRange bug fix (#75)
* getSketchSegmentIndexFromSourceRange bug fix * test was verbose * rename function
This commit is contained in:
@ -41,7 +41,7 @@ import {
|
|||||||
findUniqueName,
|
findUniqueName,
|
||||||
} from '../modifyAst'
|
} from '../modifyAst'
|
||||||
import { roundOff, getLength, getAngle } from '../../lib/utils'
|
import { roundOff, getLength, getAngle } from '../../lib/utils'
|
||||||
import { getSketchSegmentIndexFromSourceRange } from './sketchConstraints'
|
import { getSketchSegmentFromSourceRange } from './sketchConstraints'
|
||||||
import {
|
import {
|
||||||
intersectionWithParallelLine,
|
intersectionWithParallelLine,
|
||||||
perpendicularDistance,
|
perpendicularDistance,
|
||||||
@ -1317,7 +1317,7 @@ export function addNewSketchLn({
|
|||||||
node,
|
node,
|
||||||
defaultLinePath
|
defaultLinePath
|
||||||
).node
|
).node
|
||||||
const { from } = getSketchSegmentIndexFromSourceRange(sketch, [
|
const { from } = getSketchSegmentFromSourceRange(sketch, [
|
||||||
defaultLine.start,
|
defaultLine.start,
|
||||||
defaultLine.end,
|
defaultLine.end,
|
||||||
])
|
])
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { abstractSyntaxTree } from '../abstractSyntaxTree'
|
import { abstractSyntaxTree } from '../abstractSyntaxTree'
|
||||||
import { executor } from '../executor'
|
import { executor, SketchGroup } from '../executor'
|
||||||
import { lexer } from '../tokeniser'
|
import { lexer } from '../tokeniser'
|
||||||
import {
|
import {
|
||||||
ConstraintType,
|
ConstraintType,
|
||||||
@ -8,6 +8,7 @@ import {
|
|||||||
} from './sketchcombos'
|
} from './sketchcombos'
|
||||||
import { recast } from '../recast'
|
import { recast } from '../recast'
|
||||||
import { initPromise } from '../rust'
|
import { initPromise } from '../rust'
|
||||||
|
import { getSketchSegmentFromSourceRange } from './sketchConstraints'
|
||||||
|
|
||||||
beforeAll(() => initPromise)
|
beforeAll(() => initPromise)
|
||||||
|
|
||||||
@ -362,3 +363,35 @@ describe('testing swaping out sketch calls with xLine/xLineTo while keeping vari
|
|||||||
expect(illegalConvert).toThrowError()
|
expect(illegalConvert).toThrowError()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('testing getSketchSegmentIndexFromSourceRange', () => {
|
||||||
|
const code = `
|
||||||
|
const part001 = startSketchAt([0, 0.04]) // segment-in-start
|
||||||
|
|> line([0, 0.4], %)
|
||||||
|
|> xLine(3.48, %)
|
||||||
|
|> line([2.14, 1.35], %) // normal-segment
|
||||||
|
|> xLine(3.54, %)
|
||||||
|
show(part001)`
|
||||||
|
it('normal case works', () => {
|
||||||
|
const programMemory = executor(abstractSyntaxTree(lexer(code)))
|
||||||
|
const index = code.indexOf('// normal-segment') - 7
|
||||||
|
const { __geoMeta, ...segment } = getSketchSegmentFromSourceRange(
|
||||||
|
programMemory.root['part001'] as SketchGroup,
|
||||||
|
[index, index]
|
||||||
|
)
|
||||||
|
expect(segment).toEqual({
|
||||||
|
type: 'toPoint',
|
||||||
|
to: [5.62, 1.79],
|
||||||
|
from: [3.48, 0.44],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
it('verify it works when the segment is in the `start` property', () => {
|
||||||
|
const programMemory = executor(abstractSyntaxTree(lexer(code)))
|
||||||
|
const index = code.indexOf('// segment-in-start') - 7
|
||||||
|
const { __geoMeta, ...segment } = getSketchSegmentFromSourceRange(
|
||||||
|
programMemory.root['part001'] as SketchGroup,
|
||||||
|
[index, index]
|
||||||
|
)
|
||||||
|
expect(segment).toEqual({ type: 'base', to: [0, 0.04], from: [0, 0.04] })
|
||||||
|
})
|
||||||
|
})
|
||||||
|
@ -8,10 +8,19 @@ import {
|
|||||||
import { SketchGroup } from '../executor'
|
import { SketchGroup } from '../executor'
|
||||||
import { InternalFn } from './stdTypes'
|
import { InternalFn } from './stdTypes'
|
||||||
|
|
||||||
export function getSketchSegmentIndexFromSourceRange(
|
export function getSketchSegmentFromSourceRange(
|
||||||
sketchGroup: SketchGroup,
|
sketchGroup: SketchGroup,
|
||||||
[rangeStart, rangeEnd]: Range
|
[rangeStart, rangeEnd]: Range
|
||||||
): SketchGroup['value'][number] {
|
): SketchGroup['value'][number] {
|
||||||
|
const startSourceRange = sketchGroup.start?.__geoMeta.sourceRange
|
||||||
|
if (
|
||||||
|
startSourceRange &&
|
||||||
|
startSourceRange[0] <= rangeStart &&
|
||||||
|
startSourceRange[1] >= rangeEnd &&
|
||||||
|
sketchGroup.start
|
||||||
|
)
|
||||||
|
return sketchGroup.start
|
||||||
|
|
||||||
const line = sketchGroup.value.find(
|
const line = sketchGroup.value.find(
|
||||||
({ __geoMeta: { sourceRange } }) =>
|
({ __geoMeta: { sourceRange } }) =>
|
||||||
sourceRange[0] <= rangeStart && sourceRange[1] >= rangeEnd
|
sourceRange[0] <= rangeStart && sourceRange[1] >= rangeEnd
|
||||||
|
@ -24,7 +24,7 @@ import {
|
|||||||
} from '../modifyAst'
|
} from '../modifyAst'
|
||||||
import { createFirstArg, getFirstArg, replaceSketchLine } from './sketch'
|
import { createFirstArg, getFirstArg, replaceSketchLine } from './sketch'
|
||||||
import { ProgramMemory } from '../executor'
|
import { ProgramMemory } from '../executor'
|
||||||
import { getSketchSegmentIndexFromSourceRange } from './sketchConstraints'
|
import { getSketchSegmentFromSourceRange } from './sketchConstraints'
|
||||||
import { getAngle, roundOff } from '../../lib/utils'
|
import { getAngle, roundOff } from '../../lib/utils'
|
||||||
|
|
||||||
type LineInputsType =
|
type LineInputsType =
|
||||||
@ -1157,12 +1157,9 @@ export function transformAstSketchLines({
|
|||||||
const sketchGroup = programMemory.root?.[varName]
|
const sketchGroup = programMemory.root?.[varName]
|
||||||
if (!sketchGroup || sketchGroup.type !== 'sketchGroup')
|
if (!sketchGroup || sketchGroup.type !== 'sketchGroup')
|
||||||
throw new Error('not a sketch group')
|
throw new Error('not a sketch group')
|
||||||
const seg = getSketchSegmentIndexFromSourceRange(sketchGroup, range)
|
const seg = getSketchSegmentFromSourceRange(sketchGroup, range)
|
||||||
const referencedSegment = referencedSegmentRange
|
const referencedSegment = referencedSegmentRange
|
||||||
? getSketchSegmentIndexFromSourceRange(
|
? getSketchSegmentFromSourceRange(sketchGroup, referencedSegmentRange)
|
||||||
sketchGroup,
|
|
||||||
referencedSegmentRange
|
|
||||||
)
|
|
||||||
: sketchGroup.value.find((path) => path.name === referenceSegName)
|
: sketchGroup.value.find((path) => path.name === referenceSegName)
|
||||||
const { to, from } = seg
|
const { to, from } = seg
|
||||||
const { modifiedAst, valueUsedInTransform } = replaceSketchLine({
|
const { modifiedAst, valueUsedInTransform } = replaceSketchLine({
|
||||||
|
Reference in New Issue
Block a user