diff --git a/app/src/components/layout/scenes/MainScene.tsx b/app/src/components/layout/scenes/MainScene.tsx
index d299dc9..7f398df 100644
--- a/app/src/components/layout/scenes/MainScene.tsx
+++ b/app/src/components/layout/scenes/MainScene.tsx
@@ -1,7 +1,9 @@
import React from "react";
import {
useLoadingProgress,
+ useRenameModeStore,
useSaveVersion,
+ useSelectedFloorItem,
useSocketStore,
useWidgetSubOption,
} from "../../../store/builder/store";
@@ -30,6 +32,10 @@ import {
import { useProductContext } from "../../../modules/simulation/products/productContext";
import { useProductStore } from "../../../store/simulation/useProductStore";
import RegularDropDown from "../../ui/inputs/RegularDropDown";
+import RenameTooltip from "../../ui/features/RenameTooltip";
+import { setFloorItemApi } from "../../../services/factoryBuilder/assest/floorAsset/setFloorItemApi";
+import { useAssetsStore } from "../../../store/builder/useAssetStore";
+import { useParams } from "react-router-dom";
function MainScene() {
const { products } = useProductStore();
@@ -47,13 +53,33 @@ function MainScene() {
const { selectedZone } = useSelectedZoneStore();
const { setFloatingWidget } = useFloatingWidget();
const { comparisonProduct } = useComparisonProduct();
-
+ const { selectedFloorItem, setSelectedFloorItem } = useSelectedFloorItem();
+ const { setName } = useAssetsStore();
+ const { projectId } = useParams()
+ const { isRenameMode, setIsRenameMode } = useRenameModeStore();
const handleSelectLayout = (option: string) => {
const product = products.find((product) => product.productName === option);
if (product) {
setMainProduct(product.productUuid, product.productName);
}
};
+ const handleObjectRename = async (newName: string) => {
+ const email = localStorage.getItem("email") ?? "";
+ const organization = email?.split("@")[1]?.split(".")[0];
+ let response = await setFloorItemApi(
+ organization,
+ selectedFloorItem.userData.modelUuid,
+ newName,
+ projectId
+ );
+ selectedFloorItem.userData = {
+ ...selectedFloorItem.userData,
+ modelName: newName
+ };
+ setSelectedFloorItem(selectedFloorItem);
+ setIsRenameMode(false);
+ setName(selectedFloorItem.userData.modelUuid, response.modelName);
+ }
return (
<>
@@ -79,6 +105,7 @@ function MainScene() {
{(isPlaying || comparisonProduct !== null) &&
activeModule !== "simulation" && }
+ {isRenameMode && selectedFloorItem?.userData.modelName && }
{/* remove this later */}
{activeModule === "builder" && !toggleThreeD && }
>
diff --git a/app/src/components/ui/list/List.tsx b/app/src/components/ui/list/List.tsx
index 22653ff..2ca44ac 100644
--- a/app/src/components/ui/list/List.tsx
+++ b/app/src/components/ui/list/List.tsx
@@ -122,7 +122,7 @@ const List: React.FC = ({ items = [], remove }) => {
zoneUuid: selectedZone.zoneUuid,
zoneName: newName,
};
- const response = await zoneCameraUpdate(zonesdata, organization,projectId);
+ const response = await zoneCameraUpdate(zonesdata, organization, projectId);
if (response.message === "zone updated") {
setSelectedZone((prev) => ({ ...prev, zoneName: newName }));
setZones((prevZones: any[]) =>
@@ -143,9 +143,11 @@ const List: React.FC = ({ items = [], remove }) => {
let response = await setFloorItemApi(
organization,
zoneAssetId.id,
- newName
+ newName,
+ projectId
);
// console.log("response: ", response);
+ console.log(' zoneAssetId.id,: ', zoneAssetId.id,);
setName(zoneAssetId.id, response.modelName);
}
diff --git a/app/src/modules/builder/asset/assetsGroup.tsx b/app/src/modules/builder/asset/assetsGroup.tsx
index c5aefb8..1ad1a30 100644
--- a/app/src/modules/builder/asset/assetsGroup.tsx
+++ b/app/src/modules/builder/asset/assetsGroup.tsx
@@ -1,7 +1,7 @@
import * as THREE from "three"
import { useEffect } from 'react'
import { getFloorAssets } from '../../../services/factoryBuilder/assest/floorAsset/getFloorItemsApi';
-import { useLoadingProgress, useSelectedFloorItem, useSelectedItem, useSocketStore } from '../../../store/builder/store';
+import { useLoadingProgress, useRenameModeStore, useSelectedFloorItem, useSelectedItem, useSocketStore } from '../../../store/builder/store';
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";
import { FloorItems, RefGroup, RefMesh } from "../../../types/world/worldTypes";
@@ -13,6 +13,7 @@ import { useThree } from "@react-three/fiber";
import { CameraControls } from "@react-three/drei";
import addAssetModel from "./functions/addAssetModel";
import { useParams } from "react-router-dom";
+import { useLeftData, useTopData } from "../../../store/visualization/useZone3DWidgetStore";
const gltfLoaderWorker = new Worker(
new URL(
@@ -31,9 +32,12 @@ function AssetsGroup({ floorGroup, plane }: { readonly floorGroup: RefGroup, rea
const { setSelectedFloorItem } = useSelectedFloorItem();
const { selectedItem, setSelectedItem } = useSelectedItem();
const { projectId } = useParams();
+ const { isRenameMode, setIsRenameMode } = useRenameModeStore();
const email = localStorage.getItem("email");
const organization = email!.split("@")[1].split(".")[0];
const userId = localStorage.getItem("userId")!;
+ const { setTop } = useTopData();
+ const { setLeft } = useLeftData();
const loader = new GLTFLoader();
const dracoLoader = new DRACOLoader();
@@ -257,6 +261,7 @@ function AssetsGroup({ floorGroup, plane }: { readonly floorGroup: RefGroup, rea
useEffect(() => {
const canvasElement = gl.domElement;
+
const onDrop = (event: any) => {
if (!event.dataTransfer?.files[0]) return;
@@ -272,11 +277,28 @@ function AssetsGroup({ floorGroup, plane }: { readonly floorGroup: RefGroup, rea
const onDragOver = (event: any) => {
event.preventDefault();
};
+ const onMouseMove = (evt: any) => {
+ if (!canvasElement) return;
+ const canvasRect = canvasElement.getBoundingClientRect();
+ const relativeX = evt.clientX - canvasRect.left;
+ const relativeY = evt.clientY - canvasRect.top;
+ if (!isRenameMode) {
+ setTop(relativeY);
+ setLeft(relativeX);
+ }
+
+
+ };
+ const onMouseUp = (evt: any) => {
+ setIsRenameMode(false);
+ }
if (activeModule === "builder") {
canvasElement.addEventListener("drop", onDrop);
canvasElement.addEventListener("dragover", onDragOver);
+ canvasElement.addEventListener("mousemove", onMouseMove);
+ canvasElement.addEventListener("mouseup", onMouseUp);
} else {
if ((controls as CameraControls)) {
const target = (controls as CameraControls).getTarget(new THREE.Vector3());
@@ -288,8 +310,10 @@ function AssetsGroup({ floorGroup, plane }: { readonly floorGroup: RefGroup, rea
return () => {
canvasElement.removeEventListener("drop", onDrop);
canvasElement.removeEventListener("dragover", onDragOver);
+ canvasElement.removeEventListener("mousemove", onMouseMove);
+ canvasElement.removeEventListener("mouseup", onMouseUp);
};
- }, [selectedItem, camera, pointer, activeModule, controls]);
+ }, [selectedItem, camera, pointer, activeModule, controls, isRenameMode]);
return (
diff --git a/app/src/modules/builder/groups/floorGroup.tsx b/app/src/modules/builder/groups/floorGroup.tsx
index 8835ede..4af21b9 100644
--- a/app/src/modules/builder/groups/floorGroup.tsx
+++ b/app/src/modules/builder/groups/floorGroup.tsx
@@ -87,10 +87,10 @@ const FloorGroup = ({
const canvasRect = canvasElement.getBoundingClientRect();
const relativeX = evt.clientX - canvasRect.left;
const relativeY = evt.clientY - canvasRect.top;
- if (!isRenameMode) {
- setTop(relativeY);
- setLeft(relativeX);
- }
+ // if (!isRenameMode) {
+ // setTop(relativeY);
+ // setLeft(relativeX);
+ // }
if (isLeftMouseDown) {
drag = true;
}
diff --git a/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx b/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx
index 2031f99..9952888 100644
--- a/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx
+++ b/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx
@@ -48,14 +48,24 @@ function VehicleInstance({ agvDetail }: Readonly<{ agvDetail: VehicleStatus }>)
const computePath = useCallback(
(start: any, end: any) => {
+ console.log('end: ', end);
try {
const navMeshQuery = new NavMeshQuery(navMesh);
const { path: segmentPath } = navMeshQuery.computePath(start, end);
- return (
- segmentPath?.map(({ x, y, z }) => [x, 0, z] as [number, number, number]) || []
- );
+ if (
+ segmentPath.length > 0 &&
+ Math.round(segmentPath[segmentPath.length - 1].x) == Math.round(end.x) &&
+ Math.round(segmentPath[segmentPath.length - 1].z) == Math.round(end.z)
+ ) {
+ console.log('if ', segmentPath);
+ return segmentPath?.map(({ x, y, z }) => [x, 0, z] as [number, number, number]) || [];
+ } else {
+ console.log("There is no path here...Choose valid path")
+ const { path: segmentPaths } = navMeshQuery.computePath(start, start);
+ return segmentPaths.map(({ x, y, z }) => [x, 0, z] as [number, number, number]) || [];
+ }
} catch {
- echo.error("Failed to compute path");
+ console.error("Failed to compute path");
return [];
}
},
@@ -96,6 +106,10 @@ function VehicleInstance({ agvDetail }: Readonly<{ agvDetail: VehicleStatus }>)
new THREE.Vector3(agvDetail?.position[0], agvDetail?.position[1], agvDetail?.position[2]),
agvDetail?.point?.action?.pickUpPoint?.position
);
+ // const toPickupPath = computePath(
+ // new THREE.Vector3(agvDetail?.position[0], agvDetail?.position[1], agvDetail?.position[2]),
+ // new THREE.Vector3(agvDetail?.position[0], agvDetail?.position[1], agvDetail?.position[2])
+ // );
setPath(toPickupPath);
setCurrentPhase('stationed-pickup');
setVehicleState(agvDetail.modelUuid, 'running');
diff --git a/app/src/pages/UserAuth.tsx b/app/src/pages/UserAuth.tsx
index dd6757f..6ec0036 100644
--- a/app/src/pages/UserAuth.tsx
+++ b/app/src/pages/UserAuth.tsx
@@ -61,14 +61,13 @@ const UserAuth: React.FC = () => {
const projects = await recentlyViewed(organization, res.message.userId);
console.log('projects: ', projects);
- if (Object.values(projects.RecentlyViewed).length > 0) {
- const firstId = (Object.values(projects?.RecentlyViewed || {})[0] as any)?._id;
- setLoadingProgress(1)
- navigate(`/${firstId}`)
- } else {
- if (res.message.isShare) {
+ if (res.message.isShare) {
+ if (Object.values(projects.RecentlyViewed).length > 0) {
+ const firstId = (Object.values(projects?.RecentlyViewed || {})[0] as any)?._id;
+ setLoadingProgress(1)
+ navigate(`/${firstId}`)
+ } else {
setLoadingProgress(1);
- // navigate("/Project");
navigate("/Dashboard");
}
}
diff --git a/app/src/services/factoryBuilder/assest/floorAsset/setFloorItemApi.ts b/app/src/services/factoryBuilder/assest/floorAsset/setFloorItemApi.ts
index 616c3c9..965245f 100644
--- a/app/src/services/factoryBuilder/assest/floorAsset/setFloorItemApi.ts
+++ b/app/src/services/factoryBuilder/assest/floorAsset/setFloorItemApi.ts
@@ -4,6 +4,7 @@ export const setFloorItemApi = async (
modelUuid?: string,
modelName?: string,
assetId?: string,
+ projectId?: string,
position?: Object,
rotation?: Object,
isLocked?: boolean,
@@ -14,6 +15,7 @@ export const setFloorItemApi = async (
organization,
modelUuid,
modelName,
+ projectId,
position,
rotation,
assetId,