This commit is contained in:
Kurt Hutten IrevDev
2022-12-23 07:47:22 +11:00
parent 544f20852c
commit 1c1ceae4d3
4 changed files with 51 additions and 40 deletions

View File

@ -155,7 +155,12 @@ function App() {
<OrbitControls <OrbitControls
enableDamping={false} enableDamping={false}
enablePan enablePan
enableRotate={!(guiMode.mode === 'canEditSketch' || guiMode.mode === 'sketch')} enableRotate={
!(
guiMode.mode === 'canEditSketch' ||
guiMode.mode === 'sketch'
)
}
enableZoom enableZoom
reverseOrbit={false} reverseOrbit={false}
/> />

View File

@ -1219,27 +1219,33 @@ export function changeArguments(
node: Program, node: Program,
pathToNode: (string | number)[], pathToNode: (string | number)[],
args: [number, number] args: [number, number]
): { modifiedAst: Program; pathToNode: (string | number)[] }{ ): { modifiedAst: Program; pathToNode: (string | number)[] } {
const _node = { ...node } const _node = { ...node }
const dumbyStartend = { start: 0, end: 0 } const dumbyStartend = { start: 0, end: 0 }
// const thePath = getNodePathFromSourceRange(_node, sourceRange) // const thePath = getNodePathFromSourceRange(_node, sourceRange)
const callExpression = getNodeFromPath(_node, pathToNode) as CallExpression const callExpression = getNodeFromPath(_node, pathToNode) as CallExpression
const newXArg: CallExpression['arguments'][number] = callExpression.arguments[0].type === 'Literal' ? { const newXArg: CallExpression['arguments'][number] =
type: 'Literal', callExpression.arguments[0].type === 'Literal'
...dumbyStartend, ? {
value: args[0], type: 'Literal',
raw: `${args[0]}`, ...dumbyStartend,
} : { value: args[0],
...callExpression.arguments[0] raw: `${args[0]}`,
} }
const newYArg: CallExpression['arguments'][number] = callExpression.arguments[1].type === 'Literal' ? { : {
type: 'Literal', ...callExpression.arguments[0],
...dumbyStartend, }
value: args[1], const newYArg: CallExpression['arguments'][number] =
raw: `${args[1]}`, callExpression.arguments[1].type === 'Literal'
} : { ? {
...callExpression.arguments[1] type: 'Literal',
} ...dumbyStartend,
value: args[1],
raw: `${args[1]}`,
}
: {
...callExpression.arguments[1],
}
callExpression.arguments = [newXArg, newYArg] callExpression.arguments = [newXArg, newYArg]
return { return {
modifiedAst: _node, modifiedAst: _node,

View File

@ -300,10 +300,10 @@ export type ViewerArtifact =
geo: LineGeos geo: LineGeos
} }
| { | {
type: 'sketchBase', type: 'sketchBase'
sourceRange: SourceRange, sourceRange: SourceRange
geo: BufferGeometry geo: BufferGeometry
} }
| { | {
type: 'parent' type: 'parent'
sourceRange: SourceRange sourceRange: SourceRange
@ -322,12 +322,12 @@ export const processShownObjects = (
): ViewerArtifact[] => { ): ViewerArtifact[] => {
if (geoMeta?.type === 'sketchGeo') { if (geoMeta?.type === 'sketchGeo') {
return geoMeta.sketch.map(({ geo, sourceRange, type }) => { return geoMeta.sketch.map(({ geo, sourceRange, type }) => {
if(type === 'toPoint') { if (type === 'toPoint') {
// const newGeo = geo.clone() // const newGeo = geo.clone()
const newGeo: LineGeos = { const newGeo: LineGeos = {
line: geo.line.clone(), line: geo.line.clone(),
tip: geo.tip.clone(), tip: geo.tip.clone(),
centre: geo.centre.clone(), centre: geo.centre.clone(),
} }
previousTransforms.forEach(({ rotation, transform }) => { previousTransforms.forEach(({ rotation, transform }) => {
Object.values(newGeo).forEach((geoItem) => { Object.values(newGeo).forEach((geoItem) => {
@ -342,7 +342,7 @@ export const processShownObjects = (
geo: newGeo, geo: newGeo,
sourceRange, sourceRange,
} }
} else if(type === 'base') { } else if (type === 'base') {
const newGeo = geo.clone() const newGeo = geo.clone()
previousTransforms.forEach(({ rotation, transform }) => { previousTransforms.forEach(({ rotation, transform }) => {
newGeo.rotateX(rotation[0]) newGeo.rotateX(rotation[0])
@ -356,8 +356,6 @@ export const processShownObjects = (
sourceRange, sourceRange,
} }
} }
console.log('type',type)
throw new Error('Unknown geo type') throw new Error('Unknown geo type')
}) })
} else if (geoMeta.type === 'transform') { } else if (geoMeta.type === 'transform') {

View File

@ -3,8 +3,8 @@ import { lexer } from './tokeniser'
import { abstractSyntaxTree, getNodeFromPath } from './abstractSyntaxTree' import { abstractSyntaxTree, getNodeFromPath } from './abstractSyntaxTree'
describe('testing getNodePathFromSourceRange', () => { describe('testing getNodePathFromSourceRange', () => {
it('test it gets the right path for a `lineTo` CallExpression within a SketchExpression', () => { it('test it gets the right path for a `lineTo` CallExpression within a SketchExpression', () => {
const code = ` const code = `
const myVar = 5 const myVar = 5
sketch sk3 { sketch sk3 {
lineTo(1, 2) lineTo(1, 2)
@ -12,16 +12,18 @@ describe('testing getNodePathFromSourceRange', () => {
close() close()
} }
` `
const subStr = 'lineTo(3, 4)' const subStr = 'lineTo(3, 4)'
const lineToSubstringIndex = code.indexOf(subStr) const lineToSubstringIndex = code.indexOf(subStr)
const sourceRange: [number, number] = [lineToSubstringIndex, lineToSubstringIndex + subStr.length] const sourceRange: [number, number] = [
lineToSubstringIndex,
lineToSubstringIndex + subStr.length,
]
const ast = abstractSyntaxTree(lexer(code)) const ast = abstractSyntaxTree(lexer(code))
const nodePath = getNodePathFromSourceRange(ast, sourceRange) const nodePath = getNodePathFromSourceRange(ast, sourceRange)
const node = getNodeFromPath(ast, nodePath) const node = getNodeFromPath(ast, nodePath)
expect([node.start, node.end]).toEqual(sourceRange) expect([node.start, node.end]).toEqual(sourceRange)
expect(node.type).toBe('CallExpression') expect(node.type).toBe('CallExpression')
})
})
}) })