code optimization

This commit is contained in:
2025-09-24 16:38:33 +05:30
parent a2b1229aa8
commit 14c4a3246f
10 changed files with 144 additions and 263 deletions

View File

@@ -48,7 +48,7 @@ const RealTimeHeatMap = () => {
u_radius: { value: RADIUS }, u_radius: { value: RADIUS },
u_opacity: { value: OPACITY }, u_opacity: { value: OPACITY },
u_debugMode: { value: debugModeMap[debugMode] }, u_debugMode: { value: debugModeMap[debugMode] },
u_growthRate: { value: GROWTH_TIME_MULTIPLIER }, u_growthRate: { value: GROWTH_TIME_MULTIPLIER },
}); });
useEffect(() => { useEffect(() => {
@@ -59,10 +59,33 @@ const RealTimeHeatMap = () => {
} }
}, [isReset, isPlaying]); }, [isReset, isPlaying]);
useEffect(() => { // Added human or vehicle
addMonitoringVehicle("26770368-55e8-4d40-87f7-8eacb48dc236");
addMonitoringHuman("264a51e7-d8b9-4093-95ac-fa7e2dc49cfa"); // useEffect(() => {
}, []); // const selectedProductData = getProductById(selectedProduct.productUuid);
// const newEvents: EventsSchema[] = [];
// if (selectedProductData) {
// determineExecutionMachineSequences([selectedProductData]).then((sequences) => {
// sequences.forEach((sequence) => {
// sequence.forEach((event) => {
// if (event.type === "human") {
// if (hasHuman(event.modelUuid)) {
// newEvents.push(event);
// }
// } else if (event.type === "vehicle") {
// if (hasVehicle(event.modelUuid)) {
// newEvents.push(event);
// }
// }
// });
// });
// setEvents(newEvents);
// });
// }
// }, [selectedProduct, products, monitoringHuman, monitoringVehicle]);
// All human or vehicle
useEffect(() => { useEffect(() => {
const selectedProductData = getProductById(selectedProduct.productUuid); const selectedProductData = getProductById(selectedProduct.productUuid);
@@ -72,14 +95,8 @@ const RealTimeHeatMap = () => {
determineExecutionMachineSequences([selectedProductData]).then((sequences) => { determineExecutionMachineSequences([selectedProductData]).then((sequences) => {
sequences.forEach((sequence) => { sequences.forEach((sequence) => {
sequence.forEach((event) => { sequence.forEach((event) => {
if (event.type === "human") { if (event.type === "human" || event.type === "vehicle") {
if (hasHuman(event.modelUuid)) { newEvents.push(event);
newEvents.push(event);
}
} else if (event.type === "vehicle") {
if (hasVehicle(event.modelUuid)) {
newEvents.push(event);
}
} }
}); });
}); });

View File

@@ -1,20 +1,21 @@
import * as THREE from "three"; import * as THREE from "three";
import { useEffect } from "react"; import { useEffect } from "react";
import { getFloorAssets } from "../../../services/factoryBuilder/asset/floorAsset/getFloorItemsApi"; import { useParams } from "react-router-dom";
import { useLoadingProgress, useRenameModeStore, useSelectedItem } from "../../../store/builder/store";
import { useSocketStore } from "../../../store/socket/useSocketStore";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";
import Models from "./models/models";
import useModuleStore from "../../../store/ui/useModuleStore";
import { useThree } from "@react-three/fiber"; import { useThree } from "@react-three/fiber";
import { CameraControls } from "@react-three/drei"; import { CameraControls } from "@react-three/drei";
import addAssetModel from "./functions/addAssetModel"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { useParams } from "react-router-dom"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";
import { useSocketStore } from "../../../store/socket/useSocketStore";
import useModuleStore from "../../../store/ui/useModuleStore";
import { useSceneContext } from "../../scene/sceneContext";
import { useLoadingProgress, useRenameModeStore, useSelectedItem } from "../../../store/builder/store";
import { useLeftData, useTopData } from "../../../store/visualization/useZone3DWidgetStore"; import { useLeftData, useTopData } from "../../../store/visualization/useZone3DWidgetStore";
import { getUserData } from "../../../functions/getUserData"; import { getUserData } from "../../../functions/getUserData";
import { useSceneContext } from "../../scene/sceneContext";
import useAssetResponseHandler from "../../collaboration/responseHandler/useAssetResponseHandler"; import useAssetResponseHandler from "../../collaboration/responseHandler/useAssetResponseHandler";
import Models from "./models/models";
import addAssetModel from "./functions/addAssetModel";
import { getFloorAssets } from "../../../services/factoryBuilder/asset/floorAsset/getFloorItemsApi";
const gltfLoaderWorker = new Worker(new URL("../../../services/factoryBuilder/webWorkers/gltfLoaderWorker.js", import.meta.url)); const gltfLoaderWorker = new Worker(new URL("../../../services/factoryBuilder/webWorkers/gltfLoaderWorker.js", import.meta.url));

View File

@@ -131,12 +131,41 @@ async function handleModelLoad(
opacity: 1, opacity: 1,
}; };
const socketData: any = {
organization,
modelUuid: newFloorItem.modelUuid,
modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId,
position: newFloorItem.position,
rotation: newFloorItem.rotation,
scale: newFloorItem.scale,
isLocked: false,
isVisible: true,
socketId: builderSocket?.id || "",
versionId: versionId,
projectId: projectId,
userId: userId,
};
const apiData: any = {
modelUuid: newFloorItem.modelUuid,
modelName: newFloorItem.modelName,
position: newFloorItem.position,
assetId: newFloorItem.assetId,
rotation: newFloorItem.rotation,
scale: newFloorItem.scale,
isLocked: false,
isVisible: true,
versionId: versionId,
projectId: projectId || "",
};
if (selectedItem.type) { if (selectedItem.type) {
const data = PointsCalculator(selectedItem.type, gltf.scene.clone(), new THREE.Vector3(...model.rotation)); const data = PointsCalculator(selectedItem.type, gltf.scene.clone(), new THREE.Vector3(...model.rotation));
if (!data?.points) return; if (!data?.points) return;
const eventData: any = { type: selectedItem.type, subType: selectedItem.subType }; const eventData: any = { type: selectedItem.type, subType: selectedItem.subType || "" };
const assetEvent = createEventData(newFloorItem, selectedItem.type, selectedItem.subType, data.points); const assetEvent = createEventData(newFloorItem, selectedItem.type, selectedItem.subType, data.points);
if (!assetEvent) return; if (!assetEvent) return;
@@ -155,227 +184,79 @@ async function handleModelLoad(
})); }));
} }
const completeData = { socketData.eventData = JSON.parse(JSON.stringify(eventData));
organization, apiData.eventData = JSON.parse(JSON.stringify(eventData));
modelUuid: newFloorItem.modelUuid, }
modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId,
position: newFloorItem.position,
rotation: newFloorItem.rotation,
scale: newFloorItem.scale,
isLocked: false,
isVisible: true,
socketId: builderSocket?.id || "",
eventData: eventData,
versionId: versionId,
projectId: projectId,
userId: userId,
};
if (!builderSocket?.connected) { if (!builderSocket?.connected) {
// API // API
setAssetsApi({ setAssetsApi(apiData)
modelUuid: newFloorItem.modelUuid, .then((data) => {
modelName: newFloorItem.modelName, if (!data.message) {
position: newFloorItem.position,
assetId: newFloorItem.assetId,
rotation: newFloorItem.rotation,
scale: newFloorItem.scale,
eventData: eventData,
isLocked: false,
isVisible: true,
versionId: versionId,
projectId: projectId || "",
})
.then((data) => {
if (!data.message) {
echo.error(`Error adding asset: ${newFloorItem.modelUuid}`);
return;
}
if (data.message === "Model created successfully" && data.data) {
const model: Asset = {
modelUuid: data.data.modelUuid,
modelName: data.data.modelName,
assetId: data.data.assetId,
position: data.data.position,
rotation: data.data.rotation,
scale: data.data.scale,
isLocked: data.data.isLocked,
isCollidable: true,
isVisible: data.data.isVisible,
opacity: 1,
eventData: data.data.eventData,
};
addAssetToScene(model, () => {
push3D({
type: "Scene",
actions: [
{
module: "builder",
actionType: "Asset-Add",
asset: {
type: "Asset",
timeStap: new Date().toISOString(),
assetData: model,
},
},
],
});
echo.info(`Added asset: ${model.modelName}`);
});
} else {
echo.error(`Error adding asset: ${data?.data?.modelName}`);
}
})
.catch(() => {
echo.error(`Error adding asset: ${newFloorItem.modelUuid}`); echo.error(`Error adding asset: ${newFloorItem.modelUuid}`);
}); return;
} else { }
// SOCKET if (data.message === "Model created successfully" && data.data) {
const model: Asset = {
modelUuid: data.data.modelUuid,
modelName: data.data.modelName,
assetId: data.data.assetId,
position: data.data.position,
rotation: data.data.rotation,
scale: data.data.scale,
isLocked: data.data.isLocked,
isCollidable: true,
isVisible: data.data.isVisible,
opacity: 1,
...(data.data.eventData ? { eventData: data.data.eventData } : {}),
};
const model: Asset = { addAssetToScene(model, () => {
modelUuid: completeData.modelUuid, push3D({
modelName: completeData.modelName, type: "Scene",
assetId: completeData.assetId, actions: [
position: completeData.position, {
rotation: completeData.rotation, module: "builder",
scale: completeData.scale, actionType: "Asset-Add",
isLocked: completeData.isLocked, asset: {
isCollidable: true, type: "Asset",
isVisible: completeData.isVisible, timeStap: new Date().toISOString(),
opacity: 1, assetData: model,
eventData: completeData.eventData, },
}; },
],
});
push3D({ echo.info(`Added asset: ${model.modelUuid}`);
type: "Scene", });
actions: [ } else {
{ echo.error(`Error adding asset: ${data?.data?.modelName}`);
module: "builder", }
actionType: "Asset-Add", })
asset: { .catch(() => {
type: "Asset", echo.error(`Error adding asset: ${newFloorItem.modelUuid}`);
timeStap: new Date().toISOString(),
assetData: model,
},
},
],
}); });
builderSocket.emit("v1:model-asset:add", completeData);
}
} else { } else {
const data = { // SOCKET
organization,
modelUuid: newFloorItem.modelUuid,
modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId,
position: newFloorItem.position,
rotation: newFloorItem.rotation,
scale: newFloorItem.scale,
isLocked: false,
isVisible: true,
socketId: builderSocket?.id || "",
versionId: versionId,
projectId: projectId,
userId: userId,
};
if (!builderSocket?.connected) { push3D({
// API type: "Scene",
actions: [
setAssetsApi({ {
modelUuid: newFloorItem.modelUuid, module: "builder",
modelName: newFloorItem.modelName, actionType: "Asset-Add",
position: newFloorItem.position, asset: {
assetId: newFloorItem.assetId, type: "Asset",
rotation: newFloorItem.rotation, timeStap: new Date().toISOString(),
scale: newFloorItem.scale, assetData: model,
isLocked: false,
isVisible: true,
versionId: versionId,
projectId: projectId || "",
})
.then((data) => {
if (!data.message) {
echo.error(`Error adding asset: ${newFloorItem.modelUuid}`);
return;
}
if (data.message === "Model created successfully" && data.data) {
const model: Asset = {
modelUuid: data.data.modelUuid,
modelName: data.data.modelName,
assetId: data.data.assetId,
position: data.data.position,
rotation: data.data.rotation,
scale: data.data.scale,
isLocked: data.data.isLocked,
isCollidable: true,
isVisible: data.data.isVisible,
opacity: 1,
};
addAssetToScene(model, () => {
push3D({
type: "Scene",
actions: [
{
module: "builder",
actionType: "Asset-Add",
asset: {
type: "Asset",
timeStap: new Date().toISOString(),
assetData: model,
},
},
],
});
echo.info(`Added asset: ${model.modelUuid}`);
});
} else {
echo.error(`Error adding asset: ${data?.data?.modelName}`);
}
})
.catch(() => {
echo.error(`Error adding asset: ${newFloorItem.modelUuid}`);
});
} else {
// SOCKET
const model: Asset = {
modelUuid: data.modelUuid,
modelName: data.modelName,
assetId: data.assetId,
position: data.position,
rotation: data.rotation,
scale: data.scale,
isLocked: data.isLocked,
isCollidable: true,
isVisible: data.isVisible,
opacity: 1,
};
push3D({
type: "Scene",
actions: [
{
module: "builder",
actionType: "Asset-Add",
asset: {
type: "Asset",
timeStap: new Date().toISOString(),
assetData: model,
},
}, },
], },
}); ],
});
builderSocket.emit("v1:model-asset:add", data); console.log("socketData: ", socketData);
} builderSocket.emit("v1:model-asset:add", socketData);
} }
} }

View File

@@ -5,7 +5,6 @@ import { CameraControls } from "@react-three/drei";
import { useLimitDistance, useRenderDistance } from "../../../../store/builder/store"; import { useLimitDistance, useRenderDistance } from "../../../../store/builder/store";
import { useSelectedAsset } from "../../../../store/simulation/useSimulationStore"; import { useSelectedAsset } from "../../../../store/simulation/useSimulationStore";
import { useSceneContext } from "../../../scene/sceneContext"; import { useSceneContext } from "../../../scene/sceneContext";
import { useBuilderStore } from "../../../../store/builder/useBuilderStore";
import Model from "./model/model"; import Model from "./model/model";
import { GLTFLoader } from "three/examples/jsm/Addons"; import { GLTFLoader } from "three/examples/jsm/Addons";

View File

@@ -368,7 +368,7 @@ const CutCopyPasteControls3D = () => {
const eventData: any = { const eventData: any = {
type: pastedAsset.userData.eventData.type, type: pastedAsset.userData.eventData.type,
subType: pastedAsset.userData.eventData.subType, subType: pastedAsset.userData.eventData.subType || "",
}; };
let points: THREE.Vector3[] = []; let points: THREE.Vector3[] = [];

View File

@@ -310,7 +310,7 @@ const DuplicationControls3D = () => {
const eventData: any = { const eventData: any = {
type: duplicatedAsset.userData.eventData.type, type: duplicatedAsset.userData.eventData.type,
subType: duplicatedAsset.userData.eventData.subType, subType: duplicatedAsset.userData.eventData.subType || "",
}; };
let points: THREE.Vector3[] = []; let points: THREE.Vector3[] = [];

View File

@@ -393,12 +393,12 @@ function MoveControls3D() {
const eventData = eventStore.getState().getEventByModelUuid(movedAsset.userData.modelUuid); const eventData = eventStore.getState().getEventByModelUuid(movedAsset.userData.modelUuid);
const productData = productStore.getState().getEventByModelUuid(productStore.getState().selectedProduct.productUuid, movedAsset.userData.modelUuid); const productData = productStore.getState().getEventByModelUuid(productStore.getState().selectedProduct.productUuid, movedAsset.userData.modelUuid);
// if (eventData) { if (eventData) {
// eventStore.getState().updateEvent(movedAsset.userData.modelUuid, { eventStore.getState().updateEvent(movedAsset.userData.modelUuid, {
// position: [position.x, position.y, position.z], position: [position.x, position.y, position.z],
// rotation: [movedAsset.rotation.x, movedAsset.rotation.y, movedAsset.rotation.z], rotation: [movedAsset.rotation.x, movedAsset.rotation.y, movedAsset.rotation.z],
// }); });
// } }
if (productData) { if (productData) {
const event = productStore.getState().updateEvent(productStore.getState().selectedProduct.productUuid, movedAsset.userData.modelUuid, { const event = productStore.getState().updateEvent(productStore.getState().selectedProduct.productUuid, movedAsset.userData.modelUuid, {

View File

@@ -128,6 +128,8 @@ export default function createEventData(asset: Asset, type: string, subType: str
], ],
}, },
}; };
return roboticArmEvent;
} else if (type === "StaticMachine") { } else if (type === "StaticMachine") {
const machineEvent: MachineEventSchema = { const machineEvent: MachineEventSchema = {
modelUuid: asset.modelUuid, modelUuid: asset.modelUuid,

View File

@@ -15,7 +15,6 @@ type assetType = {
} }
export const setAssetsApi = async (data: assetType) => { export const setAssetsApi = async (data: assetType) => {
console.log('data: ', data);
try { try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/setAsset`, { const response = await fetch(`${url_Backend_dwinzo}/api/V1/setAsset`, {
method: "POST", method: "POST",

View File

@@ -121,21 +121,3 @@ export const useHeatMapStore = create<HeatMapState>()(
hasHuman: (humanUuid) => get().monitoringHuman.includes(humanUuid), hasHuman: (humanUuid) => get().monitoringHuman.includes(humanUuid),
})) }))
); );
// useEffect(() => {
// const selectedProductData = getProductById(selectedProduct.productUuid);
// const newEvents: EventsSchema[] = [];
// if (selectedProductData) {
// determineExecutionMachineSequences([selectedProductData]).then((sequences) => {
// sequences.forEach((sequence) => {
// sequence.forEach((event) => {
// if (event.type === "human" || event.type === "vehicle") {
// newEvents.push(event);
// }
// });
// });
// setEvents(newEvents);
// });
// }
// }, [selectedProduct, products, monitoringHuman, monitoringVehicle]);