WIP: closer

This commit is contained in:
Pierre Jacquier
2024-12-04 17:53:04 -05:00
parent 9ba584487a
commit f407c53032
4 changed files with 29 additions and 13 deletions

View File

@ -45,6 +45,7 @@ import { TagDeclarator } from 'wasm-lib/kcl/bindings/TagDeclarator'
import { Models } from '@kittycad/lib'
import { ExtrudeFacePlane } from 'machines/modelingMachine'
import { Node } from 'wasm-lib/kcl/bindings/Node'
import { Artifact } from './std/artifactGraph'
export function startSketchOnDefault(
node: Node<Program>,
@ -602,18 +603,29 @@ export function addOffsetPlane({
*/
export function addShell({
node,
face,
selection,
thickness,
}: {
node: Node<Program>
face: PathToNode
selection: Selection
thickness: Expr
}): { modifiedAst: Node<Program>; pathToNode: PathToNode } {
}): { modifiedAst: Node<Program>; pathToNode: PathToNode } | Error {
const modifiedAst = structuredClone(node)
const name = findUniqueName(node, KCL_DEFAULT_CONSTANT_PREFIXES.SHELL)
// TODO: change to what's needed for shell
console.log(face, thickness)
const shell = createCallExpressionStdLib('shell', [])
console.log('selection, thickness', selection, thickness)
const baseNode = getNodeFromPath<VariableDeclarator>(
node,
selection.codeRef.pathToNode,
'VariableDeclarator'
)
console.log('baseNode', baseNode)
if (err(baseNode)) return baseNode
console.log("selection.artifact['subType']", selection.artifact['subType'])
const shell = createCallExpressionStdLib('shell', [
createObjectExpression({ faces: [ selection.artifact['subType'] ], thickness }),
createIdentifier(baseNode.node.id.name),
])
const declaration = createVariableDeclaration(name, shell)
modifiedAst.body.push(declaration)

View File

@ -288,10 +288,11 @@ export const modelingMachineCommandConfig: StateMachineCommandSetConfig<
args: {
selection: {
inputType: 'selection',
selectionTypes: ['face'],
multiple: true,
selectionTypes: ['cap', 'wall'],
// TODO: check if we can have multiple here
multiple: false,
required: true,
skip: false,
skip: true,
},
thickness: {
inputType: 'kcl',

View File

@ -193,7 +193,7 @@ export const toolbarConfig: Record<ToolbarModeName, ToolbarMode> = {
onClick: ({ commandBarSend }) => {
commandBarSend({
type: 'Find and select command',
data: { name: 'Offset plane', groupId: 'modeling' },
data: { name: 'Shell', groupId: 'modeling' },
})
},
disabled: (state) => !state.can({ type: 'Shell' }),

View File

@ -259,6 +259,7 @@ export type ModelingMachineEvent =
| { type: 'Make'; data: ModelingCommandSchema['Make'] }
| { type: 'Extrude'; data?: ModelingCommandSchema['Extrude'] }
| { type: 'Loft'; data?: ModelingCommandSchema['Loft'] }
| { type: 'Shell'; data?: ModelingCommandSchema['Shell'] }
| { type: 'Revolve'; data?: ModelingCommandSchema['Revolve'] }
| { type: 'Fillet'; data?: ModelingCommandSchema['Fillet'] }
| { type: 'Offset plane'; data: ModelingCommandSchema['Offset plane'] }
@ -1595,9 +1596,10 @@ export const modelingMachine = setup({
const { selection, thickness } = input
// TODO: extract selection
// const plane = selection.otherSelections[0]
// if (!(plane && plane instanceof Object && 'name' in plane))
// return trap('No plane selected')
console.log('selection', selection)
const graphSelection = selection.graphSelections[0]
if (!(graphSelection && graphSelection instanceof Object))
return trap('No plane selected')
// Insert the thickness variable if it exists
if (
@ -1619,13 +1621,14 @@ export const modelingMachine = setup({
const shellResult = addShell({
node: ast,
face: selection.graphSelections[0],
selection: graphSelection,
thickness:
'variableName' in thickness
? thickness.variableIdentifierAst
: thickness.valueAst,
})
if (trap(shellResult)) return
const updateAstResult = await kclManager.updateAst(
shellResult.modifiedAst,
true,