import { CollapsiblePanel, CollapsiblePanelProps } from './CollapsiblePanel' import { v4 as uuidv4 } from 'uuid' import { EngineCommand } from '../lang/std/engineConnection' import { useState } from 'react' import { ActionButton } from '../components/ActionButton' import { faCheck } from '@fortawesome/free-solid-svg-icons' import { isReducedMotion } from 'lang/util' import { AstExplorer } from './AstExplorer' import { engineCommandManager } from '../lang/std/engineConnection' type SketchModeCmd = Extract< Extract['cmd'], { type: 'default_camera_enable_sketch_mode' } > export const DebugPanel = ({ className, ...props }: CollapsiblePanelProps) => { const [sketchModeCmd, setSketchModeCmd] = useState({ type: 'default_camera_enable_sketch_mode', origin: { x: 0, y: 0, z: 0 }, x_axis: { x: 1, y: 0, z: 0 }, y_axis: { x: 0, y: 1, z: 0 }, distance_to_plane: 100, ortho: true, animated: !isReducedMotion(), }) if (!sketchModeCmd) return null return (
distance_to_plane
{ setSketchModeCmd({ ...sketchModeCmd, distance_to_plane: Number(target.value), }) }} />
ortho
setSketchModeCmd({ ...sketchModeCmd, ortho: a.target.checked, }) } />
{ engineCommandManager.sendSceneCommand({ type: 'modeling_cmd_req', cmd: sketchModeCmd, cmd_id: uuidv4(), }) }} className="hover:border-succeed-50" icon={{ icon: faCheck, bgClassName: 'bg-succeed-80 group-hover:bg-succeed-70 hover:bg-succeed-70', iconClassName: 'text-succeed-20 group-hover:text-succeed-10 hover:text-succeed-10', }} > Send sketch mode command
) } const Xyz = ({ pointKey, data, onChange, }: { pointKey: 'origin' | 'y_axis' | 'x_axis' data: SketchModeCmd onChange: (a: SketchModeCmd) => void }) => { if (!data) return null return (
{pointKey}
{Object.entries(data[pointKey]).map(([axis, val]) => { return (
{axis}
{ onChange({ ...data, [pointKey]: { ...data[pointKey], [axis]: Number(target.value), }, }) }} />
) })}
) }