- {selectedActionSphere?.path?.modelName || "point name not found"}
+ {selectedActionSphere?.path?.modelName || "Vehicle point not found"}
-
-
-
-
- <>
- {console.log(selectedPoint)}
- >
-
-
handleResize(e, actionsContainerRef)}
- >
-
-
-
-
-
-
-
-
- {selectedPoint?.triggers.map((trigger) => (
-
-
setSelectedItem({ type: "trigger", item: trigger })}
- >
-
-
-
handleDeleteTrigger(trigger.uuid)}
- >
-
-
-
- ))}
-
-
handleResize(e, triggersContainerRef)}
- >
-
-
-
-
-
- {selectedItem && (
+
+
Vehicle Properties
+
+ {selectedPoint && (
<>
-
{selectedItem.item.name}
+
- {selectedItem.type === "action" && (
- <>
-
handleActionToggle(selectedItem.item.uuid)}
- />
- handleActionSelect(selectedItem.item.uuid, option)}
- />
+
- {/* Only show material dropdown for Spawn/Swap actions */}
- {(selectedItem.item.type === 'Spawn' || selectedItem.item.type === 'Swap') && (
- handleMaterialSelect(selectedItem.item.uuid, option)}
- />
- )}
+ handleHitCountChange(parseInt(value))}
+ />
- {/* Only show delay input for Delay actions */}
- {selectedItem.item.type === 'Delay' && (
- {
- const numValue = parseInt(value);
- handleDelayChange(
- selectedItem.item.uuid,
- !value ? 'Inherit' : numValue
- );
- }}
- />
- )}
+ handleBufferChange(parseInt(value))}
+ />
- {/* Only show spawn interval for Spawn actions */}
- {selectedItem.item.type === 'Spawn' && (
- {
- handleSpawnIntervalChange(selectedItem.item.uuid, (value === "") ? "Inherit" : parseInt(value));
- }}
- />
-
- )}
- >
- )}
-
- {selectedItem.type === "trigger" && (
- <>
- handleTriggerToggle(selectedItem.item.uuid)}
- />
-
- handleTriggerSelect(selectedItem.item.uuid, option)}
- />
- >
- )}
+ handleSpeedChange(parseFloat(value))}
+ />
>
)}
- {selectedPath && !selectedItem && (
-
- handleSpeedChange(parseFloat(value))}
- />
-
- )}
+
- By selecting points, you can create events and triggers.
+ Configure vehicle's movement and interaction properties.
);
};
-export default VehicleMechanics;
\ No newline at end of file
+export default React.memo(VehicleMechanics);
\ No newline at end of file
diff --git a/app/src/components/ui/Tools.tsx b/app/src/components/ui/Tools.tsx
index 1f5438d..3e605a8 100644
--- a/app/src/components/ui/Tools.tsx
+++ b/app/src/components/ui/Tools.tsx
@@ -23,6 +23,7 @@ import {
useDeleteModels,
useDeletePointOrLine,
useMovePoint,
+ useRefTextUpdate,
useSelectedWallItem,
useToggleView,
useToolMode,
@@ -53,6 +54,7 @@ const Tools: React.FC = () => {
const { movePoint, setMovePoint } = useMovePoint();
const { toolMode, setToolMode } = useToolMode();
const { activeTool, setActiveTool } = useActiveTool();
+ const { refTextupdate, setRefTextUpdate } = useRefTextUpdate();
// Reset activeTool whenever activeModule changes
useEffect(() => {
@@ -103,6 +105,7 @@ const Tools: React.FC = () => {
setTransformMode(null);
setMovePoint(false);
setDeletePointOrLine(false);
+ setRefTextUpdate((prevUpdate) => prevUpdate - 1);
switch (activeTool) {
case "Move":
diff --git a/app/src/components/ui/inputs/EyeDropInput.tsx b/app/src/components/ui/inputs/EyeDropInput.tsx
index 2823392..d29613a 100644
--- a/app/src/components/ui/inputs/EyeDropInput.tsx
+++ b/app/src/components/ui/inputs/EyeDropInput.tsx
@@ -1,18 +1,30 @@
import React from "react";
-import RegularDropDown from "./RegularDropDown";
import { EyeDroperIcon } from "../../icons/ExportCommonIcons";
-const EyeDropInput: React.FC = () => {
+interface EyeDropInputProps {
+ label: string;
+ value: string;
+ onChange: (value: string) => void;
+ options?: string[];
+}
+
+const EyeDropInput: React.FC
= ({
+ label = "Object",
+ onChange,
+}) => {
+ const handleEyeDropClick = () => {
+ // Here you would typically implement the eye dropper functionality
+ // For now, we'll just simulate selecting a value
+ const simulatedValue = "picked_value"; // Replace with actual eye dropper logic
+ onChange(simulatedValue);
+ };
+
return (
-
Object
+
{label}
-
{}}
- />
-
@@ -20,4 +32,4 @@ const EyeDropInput: React.FC = () => {
);
};
-export default EyeDropInput;
+export default EyeDropInput;
\ No newline at end of file
diff --git a/app/src/modules/builder/functions/draw.ts b/app/src/modules/builder/functions/draw.ts
index fc4dafa..0172707 100644
--- a/app/src/modules/builder/functions/draw.ts
+++ b/app/src/modules/builder/functions/draw.ts
@@ -17,7 +17,7 @@ async function Draw(
floorPlanGroup: Types.RefGroup,
ReferenceLineMesh: Types.RefMesh,
LineCreated: Types.RefBoolean,
- setRefTextUpdate: Types.NumberIncrementState,
+ setRefTextUpdate: any,
Tube: Types.RefTubeGeometry,
anglesnappedPoint: Types.RefVector3,
isAngleSnapped: Types.RefBoolean,
diff --git a/app/src/modules/scene/tools/measurementTool.tsx b/app/src/modules/scene/tools/measurementTool.tsx
index 3c56a21..f8054af 100644
--- a/app/src/modules/scene/tools/measurementTool.tsx
+++ b/app/src/modules/scene/tools/measurementTool.tsx
@@ -36,7 +36,7 @@ const MeasurementTool = () => {
isLeftMouseDown = false;
if (evt.button === 0 && !drag) {
raycaster.setFromCamera(pointer, camera);
- const intersects = raycaster.intersectObjects(scene.children, true).filter(intersect => !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && !(intersect.object.type === "GridHelper"));
+ const intersects = raycaster.intersectObjects(scene.children, true).filter(intersect => !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("agv-collider") && !(intersect.object.type === "GridHelper"));
if (intersects.length > 0) {
const intersectionPoint = intersects[0].point.clone();
@@ -83,7 +83,7 @@ const MeasurementTool = () => {
useFrame(() => {
if (points.length === 1) {
raycaster.setFromCamera(pointer, camera);
- const intersects = raycaster.intersectObjects(scene.children, true).filter(intersect => !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && !(intersect.object.type === "GridHelper"));
+ const intersects = raycaster.intersectObjects(scene.children, true).filter(intersect => !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("agv-collider") && !(intersect.object.type === "GridHelper"));
if (intersects.length > 0) {
updateMeasurement(points[0], intersects[0].point);
diff --git a/app/src/modules/scene/world/world.tsx b/app/src/modules/scene/world/world.tsx
index 16b4b53..eb7d555 100644
--- a/app/src/modules/scene/world/world.tsx
+++ b/app/src/modules/scene/world/world.tsx
@@ -29,6 +29,7 @@ import {
useUpdateScene,
useWalls,
useToolMode,
+ useRefTextUpdate,
} from "../../../store/store";
////////// 3D Function Imports //////////
@@ -118,7 +119,7 @@ export default function World() {
const { shadows, setShadows } = useShadows();
const { updateScene, setUpdateScene } = useUpdateScene();
const { walls, setWalls } = useWalls();
- const [RefTextupdate, setRefTextUpdate] = useState(-1000);
+ const { refTextupdate, setRefTextUpdate } = useRefTextUpdate();
// const loader = new GLTFLoader();
// const dracoLoader = new DRACOLoader();
@@ -158,7 +159,7 @@ export default function World() {
////////// All Toggle's //////////
useEffect(() => {
- setRefTextUpdate((prevUpdate) => prevUpdate - 1);
+ setRefTextUpdate((prevUpdate: number) => prevUpdate - 1);
if (dragPointControls.current) {
dragPointControls.current.enabled = false;
}
@@ -241,7 +242,7 @@ export default function World() {
diff --git a/app/src/modules/simulation/behaviour/behaviour.tsx b/app/src/modules/simulation/behaviour/behaviour.tsx
index 868900a..fa976aa 100644
--- a/app/src/modules/simulation/behaviour/behaviour.tsx
+++ b/app/src/modules/simulation/behaviour/behaviour.tsx
@@ -67,12 +67,11 @@ function Behaviour() {
point: {
uuid: pointUUID,
position: [pointPosition.x, pointPosition.y, pointPosition.z],
- actions: [{ uuid: THREE.MathUtils.generateUUID(), name: 'Action 1', type: 'Start', start: '', hitCount: 1, end: '', buffer: 0, isUsed: false }],
- triggers: [],
+ actions: { uuid: THREE.MathUtils.generateUUID(), name: 'Action 1', type: 'Start', start: '', hitCount: 1, end: '', buffer: 0 },
connections: { source: { pathUUID: item.modeluuid, pointUUID: pointUUID }, targets: [] },
+ speed: 2,
},
assetPosition: [...item.position],
- speed: 2,
};
newPaths.push(newVehiclePath);
diff --git a/app/src/modules/simulation/simulationtemp/path/pathCreator.tsx b/app/src/modules/simulation/simulationtemp/path/pathCreator.tsx
index 1c63289..c09b21c 100644
--- a/app/src/modules/simulation/simulationtemp/path/pathCreator.tsx
+++ b/app/src/modules/simulation/simulationtemp/path/pathCreator.tsx
@@ -93,6 +93,7 @@ const PathCreator = ({ simulationPaths, setSimulationPaths, connections, setConn
intersects = intersects.filter(
(intersect) =>
!intersect.object.name.includes("Roof") &&
+ !intersect.object.name.includes("agv-collider") &&
!intersect.object.name.includes("MeasurementReference") &&
!intersect.object.userData.isPathObject &&
!(intersect.object.type === "GridHelper")
@@ -146,6 +147,7 @@ const PathCreator = ({ simulationPaths, setSimulationPaths, connections, setConn
const intersects = raycaster.intersectObjects(scene.children, true).filter(
(intersect) =>
!intersect.object.name.includes("Roof") &&
+ !intersect.object.name.includes("agv-collider") &&
!intersect.object.name.includes("MeasurementReference") &&
!intersect.object.userData.isPathObject &&
!(intersect.object.type === "GridHelper")
@@ -262,6 +264,7 @@ const PathCreator = ({ simulationPaths, setSimulationPaths, connections, setConn
const intersects = raycaster.intersectObjects(scene.children, true).filter(
(intersect) =>
!intersect.object.name.includes("Roof") &&
+ !intersect.object.name.includes("agv-collider") &&
!intersect.object.name.includes("MeasurementReference") &&
!intersect.object.userData.isPathObject &&
!(intersect.object.type === "GridHelper")
diff --git a/app/src/store/store.ts b/app/src/store/store.ts
index 388f9d0..b3dc67b 100644
--- a/app/src/store/store.ts
+++ b/app/src/store/store.ts
@@ -203,6 +203,20 @@ export const useActiveLayer = create((set: any) => ({
setActiveLayer: (x: any) => set({ activeLayer: x }),
}));
+interface RefTextUpdateState {
+ refTextupdate: number;
+ setRefTextUpdate: (callback: (currentValue: number) => number | number) => void;
+}
+
+export const useRefTextUpdate = create((set) => ({
+ refTextupdate: -1000,
+ setRefTextUpdate: (callback) =>
+ set((state) => ({
+ refTextupdate:
+ typeof callback === "function" ? callback(state.refTextupdate) : callback,
+ })),
+}));
+
export const useResetCamera = create((set: any) => ({
resetCamera: false,
setResetCamera: (x: any) => set({ resetCamera: x }),
diff --git a/app/src/types/world/worldTypes.d.ts b/app/src/types/world/worldTypes.d.ts
index 71c2528..39ebeeb 100644
--- a/app/src/types/world/worldTypes.d.ts
+++ b/app/src/types/world/worldTypes.d.ts
@@ -310,10 +310,9 @@ interface VehicleEventsSchema {
point: {
uuid: string;
position: [number, number, number];
- actions: { uuid: string; name: string; type: string; start: string, hitCount: number, end: string, buffer: number; isUsed: boolean }[] | [];
- triggers: { uuid: string; name: string; type: string; isUsed: boolean }[] | [];
+ actions: { uuid: string; name: string; type: string; start: string, hitCount: number, end: string, buffer: number };
connections: { source: { pathUUID: string; pointUUID: string }; targets: { pathUUID: string; pointUUID: string }[] };
+ speed: number;
};
assetPosition: [number, number, number];
- speed: number;
}
\ No newline at end of file