getSketchSegmentIndexFromSourceRange bug fix (#75)
* getSketchSegmentIndexFromSourceRange bug fix * test was verbose * rename function
This commit is contained in:
@ -41,7 +41,7 @@ import {
|
||||
findUniqueName,
|
||||
} from '../modifyAst'
|
||||
import { roundOff, getLength, getAngle } from '../../lib/utils'
|
||||
import { getSketchSegmentIndexFromSourceRange } from './sketchConstraints'
|
||||
import { getSketchSegmentFromSourceRange } from './sketchConstraints'
|
||||
import {
|
||||
intersectionWithParallelLine,
|
||||
perpendicularDistance,
|
||||
@ -1317,7 +1317,7 @@ export function addNewSketchLn({
|
||||
node,
|
||||
defaultLinePath
|
||||
).node
|
||||
const { from } = getSketchSegmentIndexFromSourceRange(sketch, [
|
||||
const { from } = getSketchSegmentFromSourceRange(sketch, [
|
||||
defaultLine.start,
|
||||
defaultLine.end,
|
||||
])
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { abstractSyntaxTree } from '../abstractSyntaxTree'
|
||||
import { executor } from '../executor'
|
||||
import { executor, SketchGroup } from '../executor'
|
||||
import { lexer } from '../tokeniser'
|
||||
import {
|
||||
ConstraintType,
|
||||
@ -8,6 +8,7 @@ import {
|
||||
} from './sketchcombos'
|
||||
import { recast } from '../recast'
|
||||
import { initPromise } from '../rust'
|
||||
import { getSketchSegmentFromSourceRange } from './sketchConstraints'
|
||||
|
||||
beforeAll(() => initPromise)
|
||||
|
||||
@ -362,3 +363,35 @@ describe('testing swaping out sketch calls with xLine/xLineTo while keeping vari
|
||||
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 { InternalFn } from './stdTypes'
|
||||
|
||||
export function getSketchSegmentIndexFromSourceRange(
|
||||
export function getSketchSegmentFromSourceRange(
|
||||
sketchGroup: SketchGroup,
|
||||
[rangeStart, rangeEnd]: Range
|
||||
): 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(
|
||||
({ __geoMeta: { sourceRange } }) =>
|
||||
sourceRange[0] <= rangeStart && sourceRange[1] >= rangeEnd
|
||||
|
@ -24,7 +24,7 @@ import {
|
||||
} from '../modifyAst'
|
||||
import { createFirstArg, getFirstArg, replaceSketchLine } from './sketch'
|
||||
import { ProgramMemory } from '../executor'
|
||||
import { getSketchSegmentIndexFromSourceRange } from './sketchConstraints'
|
||||
import { getSketchSegmentFromSourceRange } from './sketchConstraints'
|
||||
import { getAngle, roundOff } from '../../lib/utils'
|
||||
|
||||
type LineInputsType =
|
||||
@ -1157,12 +1157,9 @@ export function transformAstSketchLines({
|
||||
const sketchGroup = programMemory.root?.[varName]
|
||||
if (!sketchGroup || sketchGroup.type !== 'sketchGroup')
|
||||
throw new Error('not a sketch group')
|
||||
const seg = getSketchSegmentIndexFromSourceRange(sketchGroup, range)
|
||||
const seg = getSketchSegmentFromSourceRange(sketchGroup, range)
|
||||
const referencedSegment = referencedSegmentRange
|
||||
? getSketchSegmentIndexFromSourceRange(
|
||||
sketchGroup,
|
||||
referencedSegmentRange
|
||||
)
|
||||
? getSketchSegmentFromSourceRange(sketchGroup, referencedSegmentRange)
|
||||
: sketchGroup.value.find((path) => path.name === referenceSegName)
|
||||
const { to, from } = seg
|
||||
const { modifiedAst, valueUsedInTransform } = replaceSketchLine({
|
||||
|
Reference in New Issue
Block a user