Files
Dwinzo_Demo/app/src/modules/builder/builder.tsx

130 lines
3.6 KiB
TypeScript
Raw Normal View History

2025-06-10 15:28:23 +05:30
////////// Three and React Three Fiber Imports //////////
import * as THREE from "three";
import { useEffect, useRef } from "react";
import { useFrame, useThree } from "@react-three/fiber";
import { Geometry } from "@react-three/csg";
2025-06-10 15:28:23 +05:30
////////// Zustand State Imports //////////
import {
useToggleView,
useWallVisibility,
useRoofVisibility,
useShadows,
useToolMode,
useRenderDistance,
useLimitDistance,
} from "../../store/builder/store";
////////// 3D Function Imports //////////
import * as Types from "../../types/world/worldTypes";
import SocketResponses from "../collaboration/socket/socketResponses.dev";
import Ground from "../scene/environment/ground";
import { findEnvironment } from "../../services/factoryBuilder/environment/findEnvironment";
2025-06-10 15:28:23 +05:30
import MeasurementTool from "../scene/tools/measurementTool";
import NavMesh from "../simulation/vehicle/navMesh/navMesh";
import CalculateAreaGroup from "./groups/calculateAreaGroup";
import LayoutImage from "./layout/layoutImage";
import AssetsGroup from "./asset/assetsGroup";
import DxfFile from "./dfx/LoadBlueprint";
import AislesGroup from "./aisle/aislesGroup";
import WallGroup from "./wall/wallGroup";
2025-08-26 17:25:04 +05:30
import WallAssetGroup from "./wallAsset/wallAssetGroup";
import FloorGroup from "./floor/floorGroup";
import ZoneGroup from "./zone/zoneGroup";
2025-08-26 17:25:04 +05:30
import Decal from "./Decal/decal";
import { useParams } from "react-router-dom";
2025-06-10 15:28:23 +05:30
import { useBuilderStore } from "../../store/builder/useBuilderStore";
2025-06-23 09:37:53 +05:30
import { getUserData } from "../../functions/getUserData";
2025-06-10 15:28:23 +05:30
export default function Builder() {
const state = useThree<Types.ThreeState>();
const plane = useRef<THREE.Mesh>(null);
const csgRef = useRef<any>(null);
2025-06-10 15:28:23 +05:30
const { toggleView } = useToggleView();
const { setToolMode } = useToolMode();
2025-06-10 15:28:23 +05:30
const { setRoofVisibility } = useRoofVisibility();
const { setWallVisibility } = useWallVisibility();
const { setShadows } = useShadows();
const { setRenderDistance } = useRenderDistance();
const { setLimitDistance } = useLimitDistance();
const { projectId } = useParams();
const { setHoveredPoint, setHoveredLine } = useBuilderStore();
2025-06-23 09:37:53 +05:30
const { userId, organization } = getUserData();
2025-06-10 15:28:23 +05:30
2025-06-10 15:28:23 +05:30
useEffect(() => {
if (!toggleView) {
setHoveredLine(null);
2025-06-10 15:28:23 +05:30
setHoveredPoint(null);
state.gl.domElement.style.cursor = 'default';
2025-06-12 09:31:51 +05:30
setToolMode('cursor');
2025-06-10 15:28:23 +05:30
}
}, [toggleView]);
useEffect(() => {
async function fetchVisibility() {
2025-06-23 09:37:53 +05:30
const data = await findEnvironment(organization, userId, projectId);
2025-06-10 15:28:23 +05:30
if (data) {
setRoofVisibility(data.roofVisibility);
setWallVisibility(data.wallVisibility);
setShadows(data.shadowVisibility);
setRenderDistance(data.renderDistance);
setLimitDistance(data.limitDistance);
}
}
fetchVisibility();
}, []);
useFrame(() => {
if (csgRef.current) {
csgRef.current.update();
}
})
2025-06-10 15:28:23 +05:30
return (
<>
<Ground plane={plane} />
2025-06-10 15:28:23 +05:30
<SocketResponses />
2025-06-10 15:28:23 +05:30
<AssetsGroup plane={plane} />
2025-06-10 15:28:23 +05:30
<mesh name='Walls-And-WallAssets-Group'>
<Geometry ref={csgRef} useGroups>
<WallGroup />
2025-06-10 15:28:23 +05:30
<WallAssetGroup />
</Geometry>
</mesh>
2025-08-26 17:25:04 +05:30
<Decal />
<AislesGroup />
2025-06-10 15:28:23 +05:30
<FloorGroup />
2025-06-10 15:28:23 +05:30
<ZoneGroup />
2025-06-12 09:31:51 +05:30
<MeasurementTool />
2025-06-10 15:28:23 +05:30
<CalculateAreaGroup />
2025-06-10 15:28:23 +05:30
<NavMesh />
<DxfFile />
<LayoutImage />
2025-06-10 15:28:23 +05:30
</>
);
}