add base sketch function to language
This commit is contained in:
@ -65,13 +65,13 @@ show(mySketch)
|
||||
expect(
|
||||
root.mySketch.map(({ previousPath, geo, ...rest }: any) => rest)
|
||||
).toEqual([
|
||||
{ type: 'base', from: [0, 0] },
|
||||
{ type: 'base', from: [0, 0], sourceRange: [0, 0] },
|
||||
{ type: 'toPoint', to: [0, 1], sourceRange: [25, 45], name: 'myPath' },
|
||||
{ type: 'toPoint', to: [1, 1], sourceRange: [48, 59] },
|
||||
{ type: 'toPoint', to: [1, 0], sourceRange: [67, 90], name: 'rightPath' },
|
||||
{
|
||||
type: 'close',
|
||||
firstPath: { type: 'base', from: [0, 0] },
|
||||
firstPath: { type: 'base', from: [0, 0], sourceRange: [0, 0] },
|
||||
sourceRange: [93, 100],
|
||||
},
|
||||
])
|
||||
|
||||
@ -76,7 +76,7 @@ export const executor = (
|
||||
return _programMemory.root[arg.name]
|
||||
}
|
||||
})
|
||||
if ('lineTo' === fnName || 'close' === fnName) {
|
||||
if ('lineTo' === fnName || 'close' === fnName || 'base' === fnName) {
|
||||
if (options.bodyType !== 'sketch') {
|
||||
throw new Error(
|
||||
`Cannot call ${fnName} outside of a sketch declaration`
|
||||
@ -108,7 +108,7 @@ export const executor = (
|
||||
return _programMemory.root[arg.name]
|
||||
}
|
||||
})
|
||||
if ('lineTo' === functionName || 'close' === functionName) {
|
||||
if ('lineTo' === functionName || 'close' === functionName || 'base' === functionName) {
|
||||
if (options.bodyType !== 'sketch') {
|
||||
throw new Error(
|
||||
`Cannot call ${functionName} outside of a sketch declaration`
|
||||
|
||||
@ -49,12 +49,14 @@ export type Path =
|
||||
| {
|
||||
type: 'base'
|
||||
from: Coords2d
|
||||
sourceRange: SourceRange
|
||||
}
|
||||
|
||||
function addBasePath(programMemory: ProgramMemory) {
|
||||
const base: Path = {
|
||||
type: 'base',
|
||||
from: [0, 0],
|
||||
sourceRange: [0, 0],
|
||||
}
|
||||
if (programMemory._sketch?.length === 0) {
|
||||
return {
|
||||
@ -90,6 +92,29 @@ function getCoordsFromPaths(paths: Path[], index = 0): Coords2d {
|
||||
}
|
||||
|
||||
export const sketchFns = {
|
||||
base: (programMemory: ProgramMemory,
|
||||
name: string = '',
|
||||
sourceRange: SourceRange,
|
||||
...args: any[]
|
||||
): PathReturn => {
|
||||
if(programMemory._sketch?.length > 0) {
|
||||
throw new Error('Base can only be called once')
|
||||
}
|
||||
const [x, y] = args as [number, number]
|
||||
let from: [number, number] = [x, y]
|
||||
const newPath: Path = {
|
||||
type: 'base',
|
||||
from,
|
||||
sourceRange,
|
||||
}
|
||||
return {
|
||||
programMemory: {
|
||||
...programMemory,
|
||||
_sketch: [...(programMemory?._sketch || []), newPath],
|
||||
},
|
||||
currentPath: newPath,
|
||||
}
|
||||
},
|
||||
close: (
|
||||
programMemory: ProgramMemory,
|
||||
name: string = '',
|
||||
|
||||
Reference in New Issue
Block a user