simulation event data code optimization
This commit is contained in:
@@ -7,7 +7,7 @@ import MachineMechanics from "./mechanics/machineMechanics";
|
|||||||
import StorageMechanics from "./mechanics/storageMechanics";
|
import StorageMechanics from "./mechanics/storageMechanics";
|
||||||
import HumanMechanics from "./mechanics/humanMechanics";
|
import HumanMechanics from "./mechanics/humanMechanics";
|
||||||
import { AddIcon } from "../../../../icons/ExportCommonIcons";
|
import { AddIcon } from "../../../../icons/ExportCommonIcons";
|
||||||
import { handleAddEventToProduct } from "../../../../../modules/simulation/events/points/functions/handleAddEventToProduct";
|
import { handleAddEventToProduct } from "../../../../../modules/simulation/functions/handleAddEventToProduct";
|
||||||
import { useParams } from "react-router-dom";
|
import { useParams } from "react-router-dom";
|
||||||
import { useSceneContext } from "../../../../../modules/scene/sceneContext";
|
import { useSceneContext } from "../../../../../modules/scene/sceneContext";
|
||||||
import CraneMechanics from "./mechanics/craneMechanics";
|
import CraneMechanics from "./mechanics/craneMechanics";
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { useSimulationState, useSelectedAsset } from "../../../../store/simulati
|
|||||||
import { generateUUID } from "three/src/math/MathUtils";
|
import { generateUUID } from "three/src/math/MathUtils";
|
||||||
import RenderOverlay from "../../../templates/Overlay";
|
import RenderOverlay from "../../../templates/Overlay";
|
||||||
import EditWidgetOption from "../../../ui/menu/EditWidgetOption";
|
import EditWidgetOption from "../../../ui/menu/EditWidgetOption";
|
||||||
import { handleAddEventToProduct } from "../../../../modules/simulation/events/points/functions/handleAddEventToProduct";
|
import { handleAddEventToProduct } from "../../../../modules/simulation/functions/handleAddEventToProduct";
|
||||||
import { deleteEventDataApi } from "../../../../services/simulation/products/deleteEventDataApi";
|
import { deleteEventDataApi } from "../../../../services/simulation/products/deleteEventDataApi";
|
||||||
import { upsertProductOrEventApi } from "../../../../services/simulation/products/UpsertProductOrEventApi";
|
import { upsertProductOrEventApi } from "../../../../services/simulation/products/UpsertProductOrEventApi";
|
||||||
import { deleteProductApi } from "../../../../services/simulation/products/deleteProductApi";
|
import { deleteProductApi } from "../../../../services/simulation/products/deleteProductApi";
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
|
|||||||
import { retrieveGLTF, storeGLTF } from "../../../../utils/indexDB/idbUtils";
|
import { retrieveGLTF, storeGLTF } from "../../../../utils/indexDB/idbUtils";
|
||||||
import { Socket } from "socket.io-client";
|
import { Socket } from "socket.io-client";
|
||||||
import * as CONSTANTS from "../../../../types/world/worldConstants";
|
import * as CONSTANTS from "../../../../types/world/worldConstants";
|
||||||
import PointsCalculator from "../../../simulation/events/points/functions/pointsCalculator";
|
import PointsCalculator from "../../../simulation/functions/pointsCalculator";
|
||||||
|
import createEventData from "../../../simulation/functions/createEventData";
|
||||||
|
|
||||||
import { getUserData } from "../../../../functions/getUserData";
|
import { getUserData } from "../../../../functions/getUserData";
|
||||||
import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
|
import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
|
||||||
@@ -119,13 +120,6 @@ async function handleModelLoad(
|
|||||||
model.position.set(intersectPoint.x, intersectPoint.y, intersectPoint.z);
|
model.position.set(intersectPoint.x, intersectPoint.y, intersectPoint.z);
|
||||||
model.scale.set(...CONSTANTS.assetConfig.defaultScaleAfterGsap);
|
model.scale.set(...CONSTANTS.assetConfig.defaultScaleAfterGsap);
|
||||||
|
|
||||||
model.traverse((child: any) => {
|
|
||||||
if (child) {
|
|
||||||
child.castShadow = true;
|
|
||||||
child.receiveShadow = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const newFloorItem: Asset = {
|
const newFloorItem: Asset = {
|
||||||
modelUuid: model.uuid,
|
modelUuid: model.uuid,
|
||||||
modelName: selectedItem.name,
|
modelName: selectedItem.name,
|
||||||
@@ -146,277 +140,23 @@ async function handleModelLoad(
|
|||||||
|
|
||||||
const eventData: any = { type: selectedItem.type, subType: selectedItem.subType };
|
const eventData: any = { type: selectedItem.type, subType: selectedItem.subType };
|
||||||
|
|
||||||
if (selectedItem.type === "Conveyor") {
|
const assetEvent = createEventData(newFloorItem, selectedItem.type, selectedItem.subType, data.points);
|
||||||
const ConveyorEvent: ConveyorEventSchema = {
|
if (!assetEvent) return;
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "transfer",
|
|
||||||
subType: selectedItem.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
points: data.points.map((point: THREE.Vector3, index: number) => {
|
|
||||||
const triggers: TriggerSchema[] = [];
|
|
||||||
|
|
||||||
if (data.points && index < data.points.length - 1) {
|
addEvent(assetEvent);
|
||||||
triggers.push({
|
|
||||||
triggerUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
triggerName: `Trigger 1`,
|
|
||||||
triggerType: "onComplete",
|
|
||||||
delay: 0,
|
|
||||||
triggeredAsset: {
|
|
||||||
triggeredModel: {
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
},
|
|
||||||
triggeredPoint: {
|
|
||||||
pointName: `Point`,
|
|
||||||
pointUuid: "",
|
|
||||||
},
|
|
||||||
triggeredAction: {
|
|
||||||
actionName: `Action 1`,
|
|
||||||
actionUuid: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
if ("point" in assetEvent) {
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
eventData.point = {
|
||||||
position: [point.x, point.y, point.z],
|
uuid: assetEvent.point.uuid,
|
||||||
rotation: [0, 0, 0],
|
position: assetEvent.point.position,
|
||||||
action: {
|
rotation: assetEvent.point.rotation,
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: `Action 1`,
|
|
||||||
actionType: "default",
|
|
||||||
material: "Default Material",
|
|
||||||
delay: 0,
|
|
||||||
spawnInterval: 5,
|
|
||||||
spawnCount: 1,
|
|
||||||
triggers: triggers,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}),
|
|
||||||
};
|
};
|
||||||
|
} else if ("points" in assetEvent) {
|
||||||
for (let i = 0; i < ConveyorEvent.points.length - 1; i++) {
|
eventData.points = assetEvent.points.map((point) => ({
|
||||||
const currentPoint = ConveyorEvent.points[i];
|
|
||||||
const nextPoint = ConveyorEvent.points[i + 1];
|
|
||||||
|
|
||||||
if (currentPoint.action.triggers.length > 0) {
|
|
||||||
currentPoint.action.triggers[0].triggeredAsset!.triggeredPoint!.pointUuid = nextPoint.uuid;
|
|
||||||
currentPoint.action.triggers[0].triggeredAsset!.triggeredAction!.actionUuid = nextPoint.action.actionUuid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
addEvent(ConveyorEvent);
|
|
||||||
eventData.points = ConveyorEvent.points.map((point) => ({
|
|
||||||
uuid: point.uuid,
|
uuid: point.uuid,
|
||||||
position: point.position,
|
position: point.position,
|
||||||
rotation: point.rotation,
|
rotation: point.rotation,
|
||||||
}));
|
}));
|
||||||
} else if (selectedItem.type === "Vehicle") {
|
|
||||||
const vehicleEvent: VehicleEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "vehicle",
|
|
||||||
subType: selectedItem.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [data.points[0].x, data.points[0].y, data.points[0].z],
|
|
||||||
rotation: [0, 0, 0],
|
|
||||||
action: {
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "travel",
|
|
||||||
unLoadDuration: 5,
|
|
||||||
loadCapacity: 1,
|
|
||||||
steeringAngle: 0,
|
|
||||||
pickUpPoint: null,
|
|
||||||
unLoadPoint: null,
|
|
||||||
paths: {
|
|
||||||
initPickup: [],
|
|
||||||
pickupDrop: [],
|
|
||||||
dropPickup: [],
|
|
||||||
},
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(vehicleEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: vehicleEvent.point.uuid,
|
|
||||||
position: vehicleEvent.point.position,
|
|
||||||
rotation: vehicleEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (selectedItem.type === "ArmBot") {
|
|
||||||
const roboticArmEvent: RoboticArmEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "roboticArm",
|
|
||||||
subType: selectedItem.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [data.points[0].x, data.points[0].y, data.points[0].z],
|
|
||||||
rotation: [0, 0, 0],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "pickAndPlace",
|
|
||||||
process: {
|
|
||||||
startPoint: null,
|
|
||||||
endPoint: null,
|
|
||||||
},
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(roboticArmEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: roboticArmEvent.point.uuid,
|
|
||||||
position: roboticArmEvent.point.position,
|
|
||||||
rotation: roboticArmEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (selectedItem.type === "StaticMachine") {
|
|
||||||
const machineEvent: MachineEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "machine",
|
|
||||||
subType: selectedItem.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [data.points[0].x, data.points[0].y, data.points[0].z],
|
|
||||||
rotation: [0, 0, 0],
|
|
||||||
action: {
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "process",
|
|
||||||
processTime: 10,
|
|
||||||
swapMaterial: "Default Material",
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(machineEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: machineEvent.point.uuid,
|
|
||||||
position: machineEvent.point.position,
|
|
||||||
rotation: machineEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (selectedItem.type === "Storage") {
|
|
||||||
const storageEvent: StorageEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "storageUnit",
|
|
||||||
storageCapacity: 10,
|
|
||||||
storageCount: 10,
|
|
||||||
materialType: "Default material",
|
|
||||||
subType: selectedItem.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [data.points[0].x, data.points[0].y, data.points[0].z],
|
|
||||||
rotation: [0, 0, 0],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "store",
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(storageEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: storageEvent.point.uuid,
|
|
||||||
position: storageEvent.point.position,
|
|
||||||
rotation: storageEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (selectedItem.type === "Human") {
|
|
||||||
const humanEvent: HumanEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "human",
|
|
||||||
subType: selectedItem.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [data.points[0].x, data.points[0].y, data.points[0].z],
|
|
||||||
rotation: [0, 0, 0],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "worker",
|
|
||||||
loadCount: 1,
|
|
||||||
assemblyCount: 1,
|
|
||||||
assemblyCondition: {
|
|
||||||
conditionType: "material",
|
|
||||||
materialType: "Default material",
|
|
||||||
},
|
|
||||||
manufactureCount: 1,
|
|
||||||
loadCapacity: 1,
|
|
||||||
processTime: 10,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(humanEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: humanEvent.point.uuid,
|
|
||||||
position: humanEvent.point.position,
|
|
||||||
rotation: humanEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (selectedItem.type === "Crane") {
|
|
||||||
const craneEvent: CraneEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "crane",
|
|
||||||
subType: selectedItem.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [data.points[0].x, data.points[0].y, data.points[0].z],
|
|
||||||
rotation: [0, 0, 0],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "pickAndDrop",
|
|
||||||
maxPickUpCount: 1,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(craneEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: craneEvent.point.uuid,
|
|
||||||
position: craneEvent.point.position,
|
|
||||||
rotation: craneEvent.point.rotation,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const completeData = {
|
const completeData = {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { detectModifierKeys } from "../../../../utils/shortcutkeys/detectModifie
|
|||||||
import { getUserData } from "../../../../functions/getUserData";
|
import { getUserData } from "../../../../functions/getUserData";
|
||||||
import useAssetResponseHandler from "../../../collaboration/responseHandler/useAssetResponseHandler";
|
import useAssetResponseHandler from "../../../collaboration/responseHandler/useAssetResponseHandler";
|
||||||
|
|
||||||
|
import createEventData from "../../../simulation/functions/createEventData";
|
||||||
import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
|
import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
|
||||||
import { deleteFloorAssetApi } from "../../../../services/factoryBuilder/asset/floorAsset/deleteFloorAssetApi";
|
import { deleteFloorAssetApi } from "../../../../services/factoryBuilder/asset/floorAsset/deleteFloorAssetApi";
|
||||||
import { upsertProductOrEventApi } from "../../../../services/simulation/products/UpsertProductOrEventApi";
|
import { upsertProductOrEventApi } from "../../../../services/simulation/products/UpsertProductOrEventApi";
|
||||||
@@ -363,10 +364,8 @@ const CutCopyPasteControls3D = () => {
|
|||||||
isVisible: true,
|
isVisible: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
let updatedEventData = null;
|
|
||||||
|
|
||||||
if (pastedAsset.userData.eventData) {
|
if (pastedAsset.userData.eventData) {
|
||||||
updatedEventData = JSON.parse(JSON.stringify(pastedAsset.userData.eventData));
|
let updatedEventData = JSON.parse(JSON.stringify(pastedAsset.userData.eventData)) as EventsSchema;
|
||||||
updatedEventData.modelUuid = newFloorItem.modelUuid;
|
updatedEventData.modelUuid = newFloorItem.modelUuid;
|
||||||
|
|
||||||
const eventData: any = {
|
const eventData: any = {
|
||||||
@@ -374,240 +373,31 @@ const CutCopyPasteControls3D = () => {
|
|||||||
subType: pastedAsset.userData.eventData.subType,
|
subType: pastedAsset.userData.eventData.subType,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (pastedAsset.userData.eventData.type === "Conveyor") {
|
let points: THREE.Vector3[] = [];
|
||||||
const ConveyorEvent: ConveyorEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
if ("point" in updatedEventData) {
|
||||||
modelName: newFloorItem.modelName,
|
points = [new THREE.Vector3(...updatedEventData.point.position)];
|
||||||
position: newFloorItem.position,
|
} else if ("points" in updatedEventData) {
|
||||||
rotation: newFloorItem.rotation,
|
points = updatedEventData.points.map((point) => new THREE.Vector3(...point.position));
|
||||||
state: "idle",
|
}
|
||||||
type: "transfer",
|
|
||||||
subType: pastedAsset.userData.eventData.subType || "",
|
const assetEvent = createEventData(newFloorItem, updatedEventData.type, updatedEventData.subType, points);
|
||||||
speed: 1,
|
if (!assetEvent) return;
|
||||||
points: updatedEventData.points.map((point: any, index: number) => ({
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
addEvent(assetEvent);
|
||||||
position: [point.position[0], point.position[1], point.position[2]],
|
|
||||||
rotation: [point.rotation[0], point.rotation[1], point.rotation[2]],
|
if ("point" in assetEvent) {
|
||||||
action: {
|
eventData.point = {
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
uuid: assetEvent.point.uuid,
|
||||||
actionName: `Action 1`,
|
position: assetEvent.point.position,
|
||||||
actionType: "default",
|
rotation: assetEvent.point.rotation,
|
||||||
material: "Default Material",
|
|
||||||
delay: 0,
|
|
||||||
spawnInterval: 5,
|
|
||||||
spawnCount: 1,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
})),
|
|
||||||
};
|
};
|
||||||
addEvent(ConveyorEvent);
|
} else if ("points" in assetEvent) {
|
||||||
eventData.points = ConveyorEvent.points.map((point) => ({
|
eventData.points = assetEvent.points.map((point) => ({
|
||||||
uuid: point.uuid,
|
uuid: point.uuid,
|
||||||
position: point.position,
|
position: point.position,
|
||||||
rotation: point.rotation,
|
rotation: point.rotation,
|
||||||
}));
|
}));
|
||||||
} else if (pastedAsset.userData.eventData.type === "Vehicle") {
|
|
||||||
const vehicleEvent: VehicleEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "vehicle",
|
|
||||||
subType: pastedAsset.userData.eventData.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
action: {
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "travel",
|
|
||||||
unLoadDuration: 5,
|
|
||||||
loadCapacity: 1,
|
|
||||||
steeringAngle: 0,
|
|
||||||
pickUpPoint: null,
|
|
||||||
unLoadPoint: null,
|
|
||||||
paths: {
|
|
||||||
initPickup: [],
|
|
||||||
pickupDrop: [],
|
|
||||||
dropPickup: [],
|
|
||||||
},
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(vehicleEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: vehicleEvent.point.uuid,
|
|
||||||
position: vehicleEvent.point.position,
|
|
||||||
rotation: vehicleEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (pastedAsset.userData.eventData.type === "ArmBot") {
|
|
||||||
const roboticArmEvent: RoboticArmEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "roboticArm",
|
|
||||||
subType: pastedAsset.userData.eventData.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "pickAndPlace",
|
|
||||||
process: {
|
|
||||||
startPoint: null,
|
|
||||||
endPoint: null,
|
|
||||||
},
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(roboticArmEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: roboticArmEvent.point.uuid,
|
|
||||||
position: roboticArmEvent.point.position,
|
|
||||||
rotation: roboticArmEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (pastedAsset.userData.eventData.type === "StaticMachine") {
|
|
||||||
const machineEvent: MachineEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "machine",
|
|
||||||
subType: pastedAsset.userData.eventData.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
action: {
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "process",
|
|
||||||
processTime: 10,
|
|
||||||
swapMaterial: "Default Material",
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(machineEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: machineEvent.point.uuid,
|
|
||||||
position: machineEvent.point.position,
|
|
||||||
rotation: machineEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (pastedAsset.userData.eventData.type === "Storage") {
|
|
||||||
const storageEvent: StorageEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "storageUnit",
|
|
||||||
storageCapacity: 10,
|
|
||||||
storageCount: 10,
|
|
||||||
materialType: "Default material",
|
|
||||||
subType: pastedAsset.userData.eventData.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "store",
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(storageEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: storageEvent.point.uuid,
|
|
||||||
position: storageEvent.point.position,
|
|
||||||
rotation: storageEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (pastedAsset.userData.eventData.type === "Human") {
|
|
||||||
const humanEvent: HumanEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "human",
|
|
||||||
subType: pastedAsset.userData.eventData.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "worker",
|
|
||||||
loadCapacity: 1,
|
|
||||||
assemblyCount: 1,
|
|
||||||
assemblyCondition: {
|
|
||||||
conditionType: "material",
|
|
||||||
materialType: "Default material",
|
|
||||||
},
|
|
||||||
manufactureCount: 1,
|
|
||||||
loadCount: 1,
|
|
||||||
processTime: 10,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(humanEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: humanEvent.point.uuid,
|
|
||||||
position: humanEvent.point.position,
|
|
||||||
rotation: humanEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (pastedAsset.userData.eventData.type === "Crane") {
|
|
||||||
const craneEvent: CraneEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "crane",
|
|
||||||
subType: pastedAsset.userData.eventData.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "pickAndDrop",
|
|
||||||
maxPickUpCount: 1,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(craneEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: craneEvent.point.uuid,
|
|
||||||
position: craneEvent.point.position,
|
|
||||||
rotation: craneEvent.point.rotation,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
newFloorItem.eventData = eventData;
|
newFloorItem.eventData = eventData;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { getUserData } from "../../../../functions/getUserData";
|
|||||||
import { handleAssetPositionSnap } from "../selectionControls/selection3D/functions/handleAssetPositionSnap";
|
import { handleAssetPositionSnap } from "../selectionControls/selection3D/functions/handleAssetPositionSnap";
|
||||||
import useAssetResponseHandler from "../../../collaboration/responseHandler/useAssetResponseHandler";
|
import useAssetResponseHandler from "../../../collaboration/responseHandler/useAssetResponseHandler";
|
||||||
|
|
||||||
|
import createEventData from "../../../simulation/functions/createEventData";
|
||||||
import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
|
import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
|
||||||
|
|
||||||
const DuplicationControls3D = () => {
|
const DuplicationControls3D = () => {
|
||||||
@@ -304,10 +305,8 @@ const DuplicationControls3D = () => {
|
|||||||
isVisible: true,
|
isVisible: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
let updatedEventData = null;
|
|
||||||
|
|
||||||
if (duplicatedAsset.userData.eventData) {
|
if (duplicatedAsset.userData.eventData) {
|
||||||
updatedEventData = JSON.parse(JSON.stringify(duplicatedAsset.userData.eventData));
|
let updatedEventData = JSON.parse(JSON.stringify(duplicatedAsset.userData.eventData)) as EventsSchema;
|
||||||
updatedEventData.modelUuid = newFloorItem.modelUuid;
|
updatedEventData.modelUuid = newFloorItem.modelUuid;
|
||||||
|
|
||||||
const eventData: any = {
|
const eventData: any = {
|
||||||
@@ -315,240 +314,31 @@ const DuplicationControls3D = () => {
|
|||||||
subType: duplicatedAsset.userData.eventData.subType,
|
subType: duplicatedAsset.userData.eventData.subType,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (duplicatedAsset.userData.eventData.type === "Conveyor") {
|
let points: THREE.Vector3[] = [];
|
||||||
const ConveyorEvent: ConveyorEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
if ("point" in updatedEventData) {
|
||||||
modelName: newFloorItem.modelName,
|
points = [new THREE.Vector3(...updatedEventData.point.position)];
|
||||||
position: newFloorItem.position,
|
} else if ("points" in updatedEventData) {
|
||||||
rotation: newFloorItem.rotation,
|
points = updatedEventData.points.map((point) => new THREE.Vector3(...point.position));
|
||||||
state: "idle",
|
}
|
||||||
type: "transfer",
|
|
||||||
subType: duplicatedAsset.userData.eventData.subType || "",
|
const assetEvent = createEventData(newFloorItem, updatedEventData.type, updatedEventData.subType, points);
|
||||||
speed: 1,
|
if (!assetEvent) return;
|
||||||
points: updatedEventData.points.map((point: any, index: number) => ({
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
addEvent(assetEvent);
|
||||||
position: [point.position[0], point.position[1], point.position[2]],
|
|
||||||
rotation: [point.rotation[0], point.rotation[1], point.rotation[2]],
|
if ("point" in assetEvent) {
|
||||||
action: {
|
eventData.point = {
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
uuid: assetEvent.point.uuid,
|
||||||
actionName: `Action 1`,
|
position: assetEvent.point.position,
|
||||||
actionType: "default",
|
rotation: assetEvent.point.rotation,
|
||||||
material: "Default Material",
|
|
||||||
delay: 0,
|
|
||||||
spawnInterval: 5,
|
|
||||||
spawnCount: 1,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
})),
|
|
||||||
};
|
};
|
||||||
addEvent(ConveyorEvent);
|
} else if ("points" in assetEvent) {
|
||||||
eventData.points = ConveyorEvent.points.map((point) => ({
|
eventData.points = assetEvent.points.map((point) => ({
|
||||||
uuid: point.uuid,
|
uuid: point.uuid,
|
||||||
position: point.position,
|
position: point.position,
|
||||||
rotation: point.rotation,
|
rotation: point.rotation,
|
||||||
}));
|
}));
|
||||||
} else if (duplicatedAsset.userData.eventData.type === "Vehicle") {
|
|
||||||
const vehicleEvent: VehicleEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "vehicle",
|
|
||||||
subType: duplicatedAsset.userData.eventData.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
action: {
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "travel",
|
|
||||||
unLoadDuration: 5,
|
|
||||||
loadCapacity: 1,
|
|
||||||
steeringAngle: 0,
|
|
||||||
pickUpPoint: null,
|
|
||||||
unLoadPoint: null,
|
|
||||||
paths: {
|
|
||||||
initPickup: [],
|
|
||||||
pickupDrop: [],
|
|
||||||
dropPickup: [],
|
|
||||||
},
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(vehicleEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: vehicleEvent.point.uuid,
|
|
||||||
position: vehicleEvent.point.position,
|
|
||||||
rotation: vehicleEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (duplicatedAsset.userData.eventData.type === "ArmBot") {
|
|
||||||
const roboticArmEvent: RoboticArmEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "roboticArm",
|
|
||||||
subType: duplicatedAsset.userData.eventData.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "pickAndPlace",
|
|
||||||
process: {
|
|
||||||
startPoint: null,
|
|
||||||
endPoint: null,
|
|
||||||
},
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(roboticArmEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: roboticArmEvent.point.uuid,
|
|
||||||
position: roboticArmEvent.point.position,
|
|
||||||
rotation: roboticArmEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (duplicatedAsset.userData.eventData.type === "StaticMachine") {
|
|
||||||
const machineEvent: MachineEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "machine",
|
|
||||||
subType: duplicatedAsset.userData.eventData.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
action: {
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "process",
|
|
||||||
processTime: 10,
|
|
||||||
swapMaterial: "Default Material",
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(machineEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: machineEvent.point.uuid,
|
|
||||||
position: machineEvent.point.position,
|
|
||||||
rotation: machineEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (duplicatedAsset.userData.eventData.type === "Storage") {
|
|
||||||
const storageEvent: StorageEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "storageUnit",
|
|
||||||
storageCapacity: 10,
|
|
||||||
storageCount: 10,
|
|
||||||
materialType: "Default material",
|
|
||||||
subType: duplicatedAsset.userData.eventData.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "store",
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(storageEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: storageEvent.point.uuid,
|
|
||||||
position: storageEvent.point.position,
|
|
||||||
rotation: storageEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (duplicatedAsset.userData.eventData.type === "Human") {
|
|
||||||
const humanEvent: HumanEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "human",
|
|
||||||
subType: duplicatedAsset.userData.eventData.subType || "",
|
|
||||||
speed: 1,
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "worker",
|
|
||||||
loadCapacity: 1,
|
|
||||||
assemblyCount: 1,
|
|
||||||
assemblyCondition: {
|
|
||||||
conditionType: "material",
|
|
||||||
materialType: "Default material",
|
|
||||||
},
|
|
||||||
manufactureCount: 1,
|
|
||||||
loadCount: 1,
|
|
||||||
processTime: 10,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(humanEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: humanEvent.point.uuid,
|
|
||||||
position: humanEvent.point.position,
|
|
||||||
rotation: humanEvent.point.rotation,
|
|
||||||
};
|
|
||||||
} else if (duplicatedAsset.userData.eventData.type === "Crane") {
|
|
||||||
const craneEvent: CraneEventSchema = {
|
|
||||||
modelUuid: newFloorItem.modelUuid,
|
|
||||||
modelName: newFloorItem.modelName,
|
|
||||||
position: newFloorItem.position,
|
|
||||||
rotation: newFloorItem.rotation,
|
|
||||||
state: "idle",
|
|
||||||
type: "crane",
|
|
||||||
subType: duplicatedAsset.userData.eventData.subType || "",
|
|
||||||
point: {
|
|
||||||
uuid: THREE.MathUtils.generateUUID(),
|
|
||||||
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
|
|
||||||
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
actionUuid: THREE.MathUtils.generateUUID(),
|
|
||||||
actionName: "Action 1",
|
|
||||||
actionType: "pickAndDrop",
|
|
||||||
maxPickUpCount: 1,
|
|
||||||
triggers: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
addEvent(craneEvent);
|
|
||||||
eventData.point = {
|
|
||||||
uuid: craneEvent.point.uuid,
|
|
||||||
position: craneEvent.point.position,
|
|
||||||
rotation: craneEvent.point.rotation,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
newFloorItem.eventData = eventData;
|
newFloorItem.eventData = eventData;
|
||||||
@@ -631,7 +421,8 @@ const DuplicationControls3D = () => {
|
|||||||
modelName: newFloorItem.modelName,
|
modelName: newFloorItem.modelName,
|
||||||
assetId: newFloorItem.assetId,
|
assetId: newFloorItem.assetId,
|
||||||
position: [position.x, position.y, position.z],
|
position: [position.x, position.y, position.z],
|
||||||
rotation: [duplicatedAsset.rotation.x, duplicatedAsset.rotation.y, duplicatedAsset.rotation.z],
|
rotation: newFloorItem.rotation,
|
||||||
|
scale: newFloorItem.scale,
|
||||||
isLocked: false,
|
isLocked: false,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
socketId: builderSocket?.id,
|
socketId: builderSocket?.id,
|
||||||
|
|||||||
@@ -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, {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { useEffect, useRef, useState } from "react";
|
|||||||
import { useFrame, useThree } from "@react-three/fiber";
|
import { useFrame, useThree } from "@react-three/fiber";
|
||||||
import { useSubModuleStore } from "../../../../store/ui/useModuleStore";
|
import { useSubModuleStore } from "../../../../store/ui/useModuleStore";
|
||||||
import { useSelectedAction, useSelectedAsset, useSelectedEventData } from "../../../../store/simulation/useSimulationStore";
|
import { useSelectedAction, useSelectedAsset, useSelectedEventData } from "../../../../store/simulation/useSimulationStore";
|
||||||
import { handleAddEventToProduct } from "../points/functions/handleAddEventToProduct";
|
import { handleAddEventToProduct } from "../../functions/handleAddEventToProduct";
|
||||||
import { QuadraticBezierLine } from "@react-three/drei";
|
import { QuadraticBezierLine } from "@react-three/drei";
|
||||||
import { upsertProductOrEventApi } from "../../../../services/simulation/products/UpsertProductOrEventApi";
|
import { upsertProductOrEventApi } from "../../../../services/simulation/products/UpsertProductOrEventApi";
|
||||||
import { usePlayButtonStore } from "../../../../store/ui/usePlayButtonStore";
|
import { usePlayButtonStore } from "../../../../store/ui/usePlayButtonStore";
|
||||||
|
|||||||
248
app/src/modules/simulation/functions/createEventData.ts
Normal file
248
app/src/modules/simulation/functions/createEventData.ts
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
import { MathUtils, Vector3 } from "three";
|
||||||
|
|
||||||
|
export default function createEventData(asset: Asset, type: string, subType: string, points: Vector3[]): EventsSchema | null {
|
||||||
|
if (type === "Conveyor") {
|
||||||
|
const ConveyorEvent: ConveyorEventSchema = {
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
modelName: asset.modelName,
|
||||||
|
position: asset.position,
|
||||||
|
rotation: asset.rotation,
|
||||||
|
state: "idle",
|
||||||
|
type: "transfer",
|
||||||
|
subType: subType || "",
|
||||||
|
speed: 1,
|
||||||
|
points: points.map((point: Vector3, index: number) => {
|
||||||
|
const triggers: TriggerSchema[] = [];
|
||||||
|
|
||||||
|
if (points && index < points.length - 1) {
|
||||||
|
triggers.push({
|
||||||
|
triggerUuid: MathUtils.generateUUID(),
|
||||||
|
triggerName: `Trigger 1`,
|
||||||
|
triggerType: "onComplete",
|
||||||
|
delay: 0,
|
||||||
|
triggeredAsset: {
|
||||||
|
triggeredModel: {
|
||||||
|
modelName: asset.modelName,
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
},
|
||||||
|
triggeredPoint: {
|
||||||
|
pointName: `Point`,
|
||||||
|
pointUuid: "",
|
||||||
|
},
|
||||||
|
triggeredAction: {
|
||||||
|
actionName: `Action 1`,
|
||||||
|
actionUuid: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
uuid: MathUtils.generateUUID(),
|
||||||
|
position: [point.x, point.y, point.z],
|
||||||
|
rotation: [0, 0, 0],
|
||||||
|
action: {
|
||||||
|
actionUuid: MathUtils.generateUUID(),
|
||||||
|
actionName: `Action 1`,
|
||||||
|
actionType: "default",
|
||||||
|
material: "Default Material",
|
||||||
|
delay: 0,
|
||||||
|
spawnInterval: 5,
|
||||||
|
spawnCount: 1,
|
||||||
|
triggers: triggers,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
|
||||||
|
for (let i = 0; i < ConveyorEvent.points.length - 1; i++) {
|
||||||
|
const currentPoint = ConveyorEvent.points[i];
|
||||||
|
const nextPoint = ConveyorEvent.points[i + 1];
|
||||||
|
|
||||||
|
if (currentPoint.action.triggers.length > 0) {
|
||||||
|
currentPoint.action.triggers[0].triggeredAsset!.triggeredPoint!.pointUuid = nextPoint.uuid;
|
||||||
|
currentPoint.action.triggers[0].triggeredAsset!.triggeredAction!.actionUuid = nextPoint.action.actionUuid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ConveyorEvent;
|
||||||
|
} else if (type === "Vehicle") {
|
||||||
|
const vehicleEvent: VehicleEventSchema = {
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
modelName: asset.modelName,
|
||||||
|
position: asset.position,
|
||||||
|
rotation: asset.rotation,
|
||||||
|
state: "idle",
|
||||||
|
type: "vehicle",
|
||||||
|
subType: (subType as "" | "manual" | "automatic" | "semiAutomatic") || "",
|
||||||
|
speed: 1,
|
||||||
|
point: {
|
||||||
|
uuid: MathUtils.generateUUID(),
|
||||||
|
position: [points[0].x, points[0].y, points[0].z],
|
||||||
|
rotation: [0, 0, 0],
|
||||||
|
action: {
|
||||||
|
actionUuid: MathUtils.generateUUID(),
|
||||||
|
actionName: "Action 1",
|
||||||
|
actionType: "travel",
|
||||||
|
unLoadDuration: 5,
|
||||||
|
loadCapacity: 1,
|
||||||
|
steeringAngle: 0,
|
||||||
|
pickUpPoint: null,
|
||||||
|
unLoadPoint: null,
|
||||||
|
paths: {
|
||||||
|
initPickup: [],
|
||||||
|
pickupDrop: [],
|
||||||
|
dropPickup: [],
|
||||||
|
},
|
||||||
|
triggers: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return vehicleEvent;
|
||||||
|
} else if (type === "ArmBot") {
|
||||||
|
const roboticArmEvent: RoboticArmEventSchema = {
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
modelName: asset.modelName,
|
||||||
|
position: asset.position,
|
||||||
|
rotation: asset.rotation,
|
||||||
|
state: "idle",
|
||||||
|
type: "roboticArm",
|
||||||
|
subType: subType || "",
|
||||||
|
speed: 1,
|
||||||
|
point: {
|
||||||
|
uuid: MathUtils.generateUUID(),
|
||||||
|
position: [points[0].x, points[0].y, points[0].z],
|
||||||
|
rotation: [0, 0, 0],
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
actionUuid: MathUtils.generateUUID(),
|
||||||
|
actionName: "Action 1",
|
||||||
|
actionType: "pickAndPlace",
|
||||||
|
process: {
|
||||||
|
startPoint: null,
|
||||||
|
endPoint: null,
|
||||||
|
},
|
||||||
|
triggers: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
} else if (type === "StaticMachine") {
|
||||||
|
const machineEvent: MachineEventSchema = {
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
modelName: asset.modelName,
|
||||||
|
position: asset.position,
|
||||||
|
rotation: asset.rotation,
|
||||||
|
state: "idle",
|
||||||
|
type: "machine",
|
||||||
|
subType: subType || "",
|
||||||
|
point: {
|
||||||
|
uuid: MathUtils.generateUUID(),
|
||||||
|
position: [points[0].x, points[0].y, points[0].z],
|
||||||
|
rotation: [0, 0, 0],
|
||||||
|
action: {
|
||||||
|
actionUuid: MathUtils.generateUUID(),
|
||||||
|
actionName: "Action 1",
|
||||||
|
actionType: "process",
|
||||||
|
processTime: 10,
|
||||||
|
swapMaterial: "Default Material",
|
||||||
|
triggers: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return machineEvent;
|
||||||
|
} else if (type === "Storage") {
|
||||||
|
const storageEvent: StorageEventSchema = {
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
modelName: asset.modelName,
|
||||||
|
position: asset.position,
|
||||||
|
rotation: asset.rotation,
|
||||||
|
state: "idle",
|
||||||
|
type: "storageUnit",
|
||||||
|
storageCapacity: 10,
|
||||||
|
storageCount: 10,
|
||||||
|
materialType: "Default material",
|
||||||
|
subType: subType || "",
|
||||||
|
point: {
|
||||||
|
uuid: MathUtils.generateUUID(),
|
||||||
|
position: [points[0].x, points[0].y, points[0].z],
|
||||||
|
rotation: [0, 0, 0],
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
actionUuid: MathUtils.generateUUID(),
|
||||||
|
actionName: "Action 1",
|
||||||
|
actionType: "store",
|
||||||
|
triggers: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return storageEvent;
|
||||||
|
} else if (type === "Human") {
|
||||||
|
const humanEvent: HumanEventSchema = {
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
modelName: asset.modelName,
|
||||||
|
position: asset.position,
|
||||||
|
rotation: asset.rotation,
|
||||||
|
state: "idle",
|
||||||
|
type: "human",
|
||||||
|
subType: subType || "",
|
||||||
|
speed: 1,
|
||||||
|
point: {
|
||||||
|
uuid: MathUtils.generateUUID(),
|
||||||
|
position: [points[0].x, points[0].y, points[0].z],
|
||||||
|
rotation: [0, 0, 0],
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
actionUuid: MathUtils.generateUUID(),
|
||||||
|
actionName: "Action 1",
|
||||||
|
actionType: "worker",
|
||||||
|
loadCount: 1,
|
||||||
|
assemblyCount: 1,
|
||||||
|
assemblyCondition: {
|
||||||
|
conditionType: "material",
|
||||||
|
materialType: "Default material",
|
||||||
|
},
|
||||||
|
manufactureCount: 1,
|
||||||
|
loadCapacity: 1,
|
||||||
|
processTime: 10,
|
||||||
|
triggers: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return humanEvent;
|
||||||
|
} else if (type === "Crane") {
|
||||||
|
const craneEvent: CraneEventSchema = {
|
||||||
|
modelUuid: asset.modelUuid,
|
||||||
|
modelName: asset.modelName,
|
||||||
|
position: asset.position,
|
||||||
|
rotation: asset.rotation,
|
||||||
|
state: "idle",
|
||||||
|
type: "crane",
|
||||||
|
subType: (subType as "" | "pillarJib") || "",
|
||||||
|
point: {
|
||||||
|
uuid: MathUtils.generateUUID(),
|
||||||
|
position: [points[0].x, points[0].y, points[0].z],
|
||||||
|
rotation: [0, 0, 0],
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
actionUuid: MathUtils.generateUUID(),
|
||||||
|
actionName: "Action 1",
|
||||||
|
actionType: "pickAndDrop",
|
||||||
|
maxPickUpCount: 1,
|
||||||
|
triggers: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return craneEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
@@ -1,38 +1,38 @@
|
|||||||
import { upsertProductOrEventApi } from "../../../../../services/simulation/products/UpsertProductOrEventApi";
|
import { upsertProductOrEventApi } from "../../../services/simulation/products/UpsertProductOrEventApi";
|
||||||
|
|
||||||
interface HandleAddEventToProductParams {
|
interface HandleAddEventToProductParams {
|
||||||
event: EventsSchema | undefined;
|
event: EventsSchema | undefined;
|
||||||
addEvent: (productUuid: string, event: EventsSchema) => void;
|
addEvent: (productUuid: string, event: EventsSchema) => void;
|
||||||
selectedProduct: {
|
selectedProduct: {
|
||||||
productUuid: string;
|
productUuid: string;
|
||||||
productName: string;
|
productName: string;
|
||||||
}
|
}
|
||||||
clearSelectedAsset?: () => void;
|
clearSelectedAsset?: () => void;
|
||||||
versionId: string;
|
versionId: string;
|
||||||
projectId: string;
|
projectId: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const handleAddEventToProduct = ({
|
export const handleAddEventToProduct = ({
|
||||||
event,
|
event,
|
||||||
addEvent,
|
addEvent,
|
||||||
selectedProduct,
|
selectedProduct,
|
||||||
clearSelectedAsset,
|
clearSelectedAsset,
|
||||||
projectId,
|
projectId,
|
||||||
versionId
|
versionId
|
||||||
}: HandleAddEventToProductParams) => {
|
}: HandleAddEventToProductParams) => {
|
||||||
if (event && selectedProduct.productUuid) {
|
if (event && selectedProduct.productUuid) {
|
||||||
addEvent(selectedProduct.productUuid, event);
|
addEvent(selectedProduct.productUuid, event);
|
||||||
|
|
||||||
upsertProductOrEventApi({
|
upsertProductOrEventApi({
|
||||||
productName: selectedProduct.productName,
|
productName: selectedProduct.productName,
|
||||||
productUuid: selectedProduct.productUuid,
|
productUuid: selectedProduct.productUuid,
|
||||||
versionId,
|
versionId,
|
||||||
projectId: projectId || '',
|
projectId: projectId || '',
|
||||||
eventDatas: event
|
eventDatas: event
|
||||||
})
|
})
|
||||||
|
|
||||||
if (clearSelectedAsset) {
|
if (clearSelectedAsset) {
|
||||||
clearSelectedAsset();
|
clearSelectedAsset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user