"use client"; import { ReactNode, useContext, useRef, useState } from "react"; import { SceneViewContext, SceneViewContextType, } from "../providers/scene-view-provider"; import { Mesh, MeshStandardMaterial } from "three"; function Toggle({ title, onChange, defaultChecked, }: { title: string; onChange: () => void; defaultChecked?: boolean; }) { return ( ); } function Accordion({ children, title, }: { children?: ReactNode; title: string; }) { const [expanded, setExpanded] = useState(true); const accordionBodyRef = useRef(null); function handleClick() { if (!accordionBodyRef.current) return; accordionBodyRef.current.classList.toggle("hidden"); setExpanded(!expanded); } return (

{children}
); } export function Form() { const { sceneView } = useContext(SceneViewContext) as SceneViewContextType; function handleChange() { if (!sceneView) return; sceneView.toggleClippingBox(); } function handleChangeCG() { if (!sceneView) return; sceneView.toggleCoordinateGrid(); } function handleChangeWireframe() { if (!sceneView) return; sceneView.toggleWireFrame(); } function handleCheckboxChange(name: string) { if (!sceneView) return; const mesh = sceneView.model.getObjectByName(name); if (mesh) { mesh.visible = !mesh.visible; } } return (
{
{sceneView?.model.children.map((child) => { const key = `toggle-visibility-${child.name}`; const color = `#${( (child as Mesh).material as MeshStandardMaterial ).color.getHexString()}`; const visible = (child as Mesh).visible; return (
handleCheckboxChange(child.name)} className="hover:cursor-pointer" defaultChecked={visible ? true : false} />
); })}
}
); }