Sketch on plane WIP (#309)

create default planes wip
This commit is contained in:
Kurt Hutten
2023-09-13 08:36:47 +10:00
committed by GitHub
parent 5f3e1cfb6c
commit fd2ed8acbd
9 changed files with 567 additions and 133 deletions

View File

@ -1,4 +1,4 @@
import { useStore, toolTips } from './useStore'
import { useStore, toolTips, Selections } from './useStore'
import { extrudeSketch, sketchOnExtrudedFace } from './lang/modifyAst'
import { getNodePathFromSourceRange } from './lang/queryAst'
import { HorzVert } from './components/Toolbar/HorzVert'
@ -15,6 +15,8 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faSearch, faX } from '@fortawesome/free-solid-svg-icons'
import { Popover, Transition } from '@headlessui/react'
import styles from './Toolbar.module.css'
import { v4 as uuidv4 } from 'uuid'
import { useAppMode } from 'hooks/useAppMode'
export const Toolbar = () => {
const {
@ -24,6 +26,7 @@ export const Toolbar = () => {
ast,
updateAst,
programMemory,
engineCommandManager,
} = useStore((s) => ({
guiMode: s.guiMode,
setGuiMode: s.setGuiMode,
@ -31,7 +34,9 @@ export const Toolbar = () => {
ast: s.ast,
updateAst: s.updateAst,
programMemory: s.programMemory,
engineCommandManager: s.engineCommandManager,
}))
useAppMode()
useEffect(() => {
console.log('guiMode', guiMode)
@ -39,7 +44,7 @@ export const Toolbar = () => {
function ToolbarButtons() {
return (
<>
<span className="overflow-x-auto">
{guiMode.mode === 'default' && (
<button
onClick={() => {
@ -71,9 +76,18 @@ export const Toolbar = () => {
SketchOnFace
</button>
)}
{(guiMode.mode === 'canEditSketch' || false) && (
{guiMode.mode === 'canEditSketch' && (
<button
onClick={() => {
console.log('guiMode.pathId', guiMode.pathId)
engineCommandManager?.sendSceneCommand({
type: 'modeling_cmd_req',
cmd_id: uuidv4(),
cmd: {
type: 'edit_mode_enter',
target: guiMode.pathId,
},
})
setGuiMode({
mode: 'sketch',
sketchMode: 'sketchEdit',
@ -125,14 +139,23 @@ export const Toolbar = () => {
)}
{guiMode.mode === 'sketch' && (
<button onClick={() => setGuiMode({ mode: 'default' })}>
<button
onClick={() => {
engineCommandManager?.sendSceneCommand({
type: 'modeling_cmd_req',
cmd_id: uuidv4(),
cmd: { type: 'edit_mode_exit' },
})
setGuiMode({ mode: 'default' })
}}
>
Exit sketch
</button>
)}
{toolTips
.filter(
// (sketchFnName) => !['angledLineThatIntersects'].includes(sketchFnName)
(sketchFnName) => ['line'].includes(sketchFnName)
(sketchFnName) => ['sketch_line', 'move'].includes(sketchFnName)
)
.map((sketchFnName) => {
if (
@ -143,7 +166,18 @@ export const Toolbar = () => {
return (
<button
key={sketchFnName}
onClick={() =>
onClick={() => {
engineCommandManager?.sendSceneCommand({
type: 'modeling_cmd_req',
cmd_id: uuidv4(),
cmd: {
type: 'set_tool',
tool:
guiMode.sketchMode === sketchFnName
? 'select'
: (sketchFnName as any),
},
})
setGuiMode({
...guiMode,
...(guiMode.sketchMode === sketchFnName
@ -153,10 +187,11 @@ export const Toolbar = () => {
}
: {
sketchMode: sketchFnName,
waitingFirstClick: true,
isTooltip: true,
}),
})
}
}}
>
{sketchFnName}
{guiMode.sketchMode === sketchFnName && '✅'}
@ -180,7 +215,7 @@ export const Toolbar = () => {
<Intersect />
<RemoveConstrainingValues />
<SetAngleBetween />
</>
</span>
)
}