Merge remote-tracking branch 'origin/v2' into v2-ui
This commit is contained in:
commit
bcd648f71b
|
@ -46,6 +46,7 @@ import ZoneGroup from "./groups/zoneGroup";
|
||||||
import MeasurementTool from "../scene/tools/measurementTool";
|
import MeasurementTool from "../scene/tools/measurementTool";
|
||||||
import NavMesh from "../simulation/vehicle/navMesh/navMesh";
|
import NavMesh from "../simulation/vehicle/navMesh/navMesh";
|
||||||
import CalculateAreaGroup from "./groups/calculateAreaGroup";
|
import CalculateAreaGroup from "./groups/calculateAreaGroup";
|
||||||
|
import LayoutImage from "./layout/layoutImage";
|
||||||
|
|
||||||
export default function Builder() {
|
export default function Builder() {
|
||||||
const state = useThree<Types.ThreeState>(); // Importing the state from the useThree hook, which contains the scene, camera, and other Three.js elements.
|
const state = useThree<Types.ThreeState>(); // Importing the state from the useThree hook, which contains the scene, camera, and other Three.js elements.
|
||||||
|
@ -299,8 +300,12 @@ export default function Builder() {
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<MeasurementTool />
|
<MeasurementTool />
|
||||||
|
|
||||||
<CalculateAreaGroup />
|
<CalculateAreaGroup />
|
||||||
|
|
||||||
<NavMesh lines={lines} />
|
<NavMesh lines={lines} />
|
||||||
|
|
||||||
|
<LayoutImage />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
import { useMemo } from 'react';
|
||||||
|
import layout1 from '../../../assets/gltf-glb/layouts/floorplane_1.glb';
|
||||||
|
import layout2 from '../../../assets/gltf-glb/layouts/floorplane_2.glb';
|
||||||
|
import useLayoutStore from '../../../store/builder/uselayoutStore';
|
||||||
|
import { useGLTF } from '@react-three/drei';
|
||||||
|
import { useToggleView } from '../../../store/builder/store';
|
||||||
|
|
||||||
|
const modelPaths: Record<string, string> = {
|
||||||
|
'layout1': layout1,
|
||||||
|
'layout2': layout2
|
||||||
|
};
|
||||||
|
|
||||||
|
function LayoutModel() {
|
||||||
|
const { toggleView } = useToggleView();
|
||||||
|
const { currentLayout } = useLayoutStore();
|
||||||
|
if (!currentLayout) return null;
|
||||||
|
|
||||||
|
const path = modelPaths[currentLayout];
|
||||||
|
const gltf = useGLTF(path);
|
||||||
|
const cloned = useMemo(() => gltf?.scene?.clone(), [gltf]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{toggleView &&
|
||||||
|
<group position={[0,0,0]} scale={[0,0,0]} dispose={null}>
|
||||||
|
<primitive
|
||||||
|
object={cloned}
|
||||||
|
/>
|
||||||
|
</group>
|
||||||
|
}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LayoutModel;
|
|
@ -0,0 +1,37 @@
|
||||||
|
import { create } from 'zustand';
|
||||||
|
|
||||||
|
type Layout = null | 'layout1' | 'layout2';
|
||||||
|
|
||||||
|
type LayoutState = {
|
||||||
|
currentLayout: Layout;
|
||||||
|
setLayout: (layout: Layout) => void;
|
||||||
|
resetLayout: () => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const LAYOUT_STORAGE_KEY = 'currentLayout';
|
||||||
|
|
||||||
|
const useLayoutStore = create<LayoutState>((set) => ({
|
||||||
|
currentLayout: (() => {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
const storedLayout = localStorage.getItem(LAYOUT_STORAGE_KEY);
|
||||||
|
return storedLayout ? (JSON.parse(storedLayout) as Layout) : null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})(),
|
||||||
|
|
||||||
|
setLayout: (layout) => {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
localStorage.setItem(LAYOUT_STORAGE_KEY, JSON.stringify(layout));
|
||||||
|
}
|
||||||
|
set({ currentLayout: layout });
|
||||||
|
},
|
||||||
|
|
||||||
|
resetLayout: () => {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
localStorage.removeItem(LAYOUT_STORAGE_KEY);
|
||||||
|
}
|
||||||
|
set({ currentLayout: null });
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
export default useLayoutStore;
|
Loading…
Reference in New Issue