armbot conveyor bug fix
This commit is contained in:
@@ -55,15 +55,26 @@ const Simulations: React.FC = () => {
|
||||
};
|
||||
|
||||
const handleAddProduct = () => {
|
||||
const id = generateUUID();
|
||||
const name = `Product ${products.length + 1}`;
|
||||
addProduct(name, id);
|
||||
upsertProductOrEventApi({
|
||||
productName: name,
|
||||
productUuid: id,
|
||||
projectId: projectId,
|
||||
versionId: selectedVersion?.versionId || "",
|
||||
});
|
||||
if (selectedVersion) {
|
||||
const id = generateUUID();
|
||||
const name = `Product ${products.length + 1}`;
|
||||
addProduct(name, id);
|
||||
upsertProductOrEventApi({
|
||||
productName: name,
|
||||
productUuid: id,
|
||||
projectId: projectId,
|
||||
versionId: selectedVersion?.versionId || "",
|
||||
});
|
||||
|
||||
setSelectedProduct(id, name);
|
||||
const data = {
|
||||
productUuid: id,
|
||||
productName: name,
|
||||
versionUuid: selectedVersion.versionId,
|
||||
versionName: selectedVersion.versionName,
|
||||
};
|
||||
setMainState(data);
|
||||
}
|
||||
};
|
||||
|
||||
const handleRemoveProduct = (productUuid: string) => {
|
||||
|
||||
@@ -1,45 +1,199 @@
|
||||
import { useMemo } from 'react'
|
||||
import { Color, DoubleSide, ShaderMaterial, Vector3 } from 'three';
|
||||
import { useMemo, useState } from "react";
|
||||
import { Color, DoubleSide, ShaderMaterial, Vector3 } from "three";
|
||||
import { useFrame } from "@react-three/fiber";
|
||||
import { useSceneStore } from "../../../../../store/scene/useSceneStore";
|
||||
|
||||
function ZoneInstance({ zone }: { readonly zone: Zone }) {
|
||||
const zoneLayer = zone.points[0].layer;
|
||||
const { limitFps } = useSceneStore();
|
||||
const [time, setTime] = useState<number>();
|
||||
|
||||
// const zoneMaterial = useMemo(() => {
|
||||
// return new ShaderMaterial({
|
||||
// side: DoubleSide,
|
||||
// vertexShader: `
|
||||
// varying vec2 vUv;
|
||||
// void main() {
|
||||
// vUv = uv;
|
||||
// gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||
// }
|
||||
// `,
|
||||
// fragmentShader: `
|
||||
// varying vec2 vUv;
|
||||
// uniform vec3 uOuterColor;
|
||||
// uniform float uTime;
|
||||
|
||||
// void main() {
|
||||
// // Map vUv into -1..1 range like Shadertoy
|
||||
// vec2 uv = (vUv - 1.0) * 0.5;
|
||||
|
||||
// // Distortion loop – slowed down (uTime * 0.25)
|
||||
// for (float i = 1.0; i < 8.0; i++) {
|
||||
// uv.y += 0.1 * sin(uv.x * i * i + uTime * 0.25)
|
||||
// * sin(uv.y * i * i + uTime * 0.25);
|
||||
// }
|
||||
|
||||
// // Base color influenced by uv + zone color
|
||||
// vec3 col = uOuterColor;
|
||||
// col.r += uv.y * 0.2;
|
||||
// col.g += uv.y * 0.3;
|
||||
// col.b += uv.y * 0.4;
|
||||
|
||||
// // Fade vertically for a nicer top fade-out
|
||||
// float verticalFade = 1.0 - vUv.y;
|
||||
|
||||
// gl_FragColor = vec4(col * verticalFade, verticalFade);
|
||||
// }
|
||||
// `,
|
||||
// uniforms: {
|
||||
// uOuterColor: { value: new Color(zone.zoneColor) },
|
||||
// uTime: { value: time },
|
||||
// },
|
||||
// transparent: true,
|
||||
// depthWrite: false,
|
||||
// });
|
||||
// }, [time]);
|
||||
|
||||
// const zoneMaterial = useMemo(() => {
|
||||
// return new ShaderMaterial({
|
||||
// side: DoubleSide,
|
||||
// vertexShader: `
|
||||
// varying vec2 vUv;
|
||||
// void main(){
|
||||
// vUv = uv;
|
||||
// gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||
// }
|
||||
// `,
|
||||
// fragmentShader: `
|
||||
// varying vec2 vUv;
|
||||
// uniform float uTime;
|
||||
// uniform vec3 uOuterColor;
|
||||
|
||||
// void main() {
|
||||
// // UV mapping like fragCoord
|
||||
// vec2 uv = vUv;
|
||||
// vec2 p = uv * 2.0 - 1.0;
|
||||
// float t = uTime * 0.3;
|
||||
|
||||
// // Flow direction and movement
|
||||
// vec2 flowDir = normalize(vec2(-0.7, -1.0));
|
||||
// float flowSpeed = 2.0;
|
||||
// float flow = dot(p, flowDir) * flowSpeed + t;
|
||||
|
||||
// // Ripples
|
||||
// float rippleX = sin(p.x * 12.0 + t * 1.5) * cos(p.y * 8.0 + t * 2.0) * 0.3;
|
||||
// float rippleY = cos(p.y * 10.0 - t * 1.2) * sin(p.x * 7.0 + t * 0.8) * 0.4;
|
||||
// float distort = rippleX + rippleY;
|
||||
|
||||
// // Gradient to drive stripes
|
||||
// float gradient = fract(flow + distort * 0.5);
|
||||
|
||||
// // Smooth liquid band
|
||||
// float band = smoothstep(0.2, 0.6, gradient) - smoothstep(0.6, 0.9, gradient);
|
||||
|
||||
// // Darker zone color
|
||||
// vec3 darkColor = uOuterColor * 0.4;
|
||||
|
||||
// // Mix between dark and bright zone color
|
||||
// vec3 col = mix(darkColor, uOuterColor, band);
|
||||
|
||||
// // Vertical fade
|
||||
// float verticalFade = 1.0 - vUv.y;
|
||||
|
||||
// gl_FragColor = vec4(col * verticalFade, verticalFade);
|
||||
// }
|
||||
// `,
|
||||
// uniforms: {
|
||||
// uOuterColor: { value: new Color(zone.zoneColor) },
|
||||
// uTime: { value: time },
|
||||
// },
|
||||
// transparent: true,
|
||||
// depthWrite: false,
|
||||
// });
|
||||
// }, [zone.zoneColor, time]);
|
||||
|
||||
const zoneMaterial = useMemo(() => {
|
||||
return new ShaderMaterial({
|
||||
side: DoubleSide,
|
||||
vertexShader: `
|
||||
varying vec2 vUv;
|
||||
void main(){
|
||||
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||
vUv = uv;
|
||||
}
|
||||
`,
|
||||
varying vec2 vUv;
|
||||
void main() {
|
||||
vUv = uv;
|
||||
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||
}
|
||||
`,
|
||||
fragmentShader: `
|
||||
varying vec2 vUv;
|
||||
uniform vec3 uOuterColor;
|
||||
void main(){
|
||||
float alpha = 1.0 - vUv.y;
|
||||
gl_FragColor = vec4(uOuterColor, alpha);
|
||||
}
|
||||
`,
|
||||
#define TAU 6.28318530718
|
||||
#define MAX_ITER 5
|
||||
|
||||
varying vec2 vUv;
|
||||
uniform float uTime;
|
||||
uniform vec3 uOuterColor;
|
||||
|
||||
void main() {
|
||||
float time = uTime * 0.25;
|
||||
|
||||
// uv in [0,1]
|
||||
vec2 uv = vUv;
|
||||
|
||||
// convert to p space like Shadertoy
|
||||
vec2 p = mod(uv * TAU, TAU) - 250.0;
|
||||
vec2 i = vec2(p);
|
||||
|
||||
float c = 1.0;
|
||||
float inten = 0.005;
|
||||
|
||||
for (int n = 0; n < MAX_ITER; n++) {
|
||||
float t = time * (1.0 - (3.5 / float(n + 1)));
|
||||
i = p + vec2(
|
||||
cos(t - i.x) + sin(t + i.y),
|
||||
sin(t - i.y) + cos(t + i.x)
|
||||
);
|
||||
c += 1.0 / length(vec2(
|
||||
p.x / (sin(i.x + t) / inten),
|
||||
p.y / (cos(i.y + t) / inten)
|
||||
));
|
||||
}
|
||||
|
||||
c /= float(MAX_ITER);
|
||||
c = 1.17 - pow(c, 1.4);
|
||||
|
||||
// base fractal color
|
||||
vec3 fractalCol = vec3(pow(abs(c), 8.0));
|
||||
fractalCol = clamp(fractalCol + vec3(0.0, 0.35, 0.5), 0.0, 1.0);
|
||||
|
||||
// Mix between dark and bright zone color
|
||||
vec3 darkColor = uOuterColor * 0.4;
|
||||
vec3 col = mix(darkColor, uOuterColor, fractalCol.r);
|
||||
|
||||
// Vertical fade
|
||||
float verticalFade = 1.0 - vUv.y;
|
||||
|
||||
gl_FragColor = vec4(col * verticalFade, verticalFade);
|
||||
}
|
||||
`,
|
||||
uniforms: {
|
||||
uOuterColor: { value: new Color(zone.zoneColor) },
|
||||
uTime: { value: time },
|
||||
},
|
||||
transparent: true,
|
||||
depthWrite: false,
|
||||
})
|
||||
}, []);
|
||||
});
|
||||
}, [zone.zoneColor, time]);
|
||||
|
||||
useFrame(({ clock }) => {
|
||||
if (!limitFps) {
|
||||
setTime(clock.getElapsedTime());
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<mesh
|
||||
name={`Zone-${zone.zoneUuid}`}
|
||||
userData={zone}
|
||||
>
|
||||
<mesh name={`Zone-${zone.zoneUuid}`} userData={zone}>
|
||||
{zone.points.map((point, index: number) => {
|
||||
const nextPoint = zone.points[(index + 1) % zone.points.length];
|
||||
|
||||
const point1 = new Vector3(point.position[0], point.position[1], point.position[2]);
|
||||
const point2 = new Vector3(nextPoint.position[0], nextPoint.position[1], nextPoint.position[2]);
|
||||
const point1 = new Vector3(...point.position);
|
||||
const point2 = new Vector3(...nextPoint.position);
|
||||
|
||||
const planeWidth = point1.distanceTo(point2);
|
||||
const planeHeight = zone.zoneHeight;
|
||||
@@ -49,22 +203,14 @@ function ZoneInstance({ zone }: { readonly zone: Zone }) {
|
||||
const angle = Math.atan2(point2.z - point1.z, point2.x - point1.x);
|
||||
|
||||
return (
|
||||
<mesh
|
||||
key={index}
|
||||
position={midpoint}
|
||||
rotation={[0, -angle, 0]}
|
||||
>
|
||||
<mesh key={index} position={midpoint} rotation={[0, -angle, 0]}>
|
||||
<planeGeometry args={[planeWidth, planeHeight]} />
|
||||
<primitive
|
||||
object={zoneMaterial.clone()}
|
||||
attach="material"
|
||||
/>
|
||||
<primitive object={zoneMaterial.clone()} attach="material" />
|
||||
</mesh>
|
||||
);
|
||||
})}
|
||||
|
||||
</ mesh>
|
||||
)
|
||||
</mesh>
|
||||
);
|
||||
}
|
||||
|
||||
export default ZoneInstance
|
||||
export default ZoneInstance;
|
||||
|
||||
@@ -547,7 +547,6 @@ const DuplicationControls3D = () => {
|
||||
projectId,
|
||||
};
|
||||
|
||||
console.log("socket: ", socket);
|
||||
if (!socket?.connected) {
|
||||
// REST
|
||||
|
||||
|
||||
@@ -134,7 +134,12 @@ export function useTriggerHandler() {
|
||||
|
||||
if (action) {
|
||||
if (armBot) {
|
||||
if (action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "vehicle") {
|
||||
@@ -161,7 +166,12 @@ export function useTriggerHandler() {
|
||||
addArmBotToMonitor(armBot.modelUuid, () => {
|
||||
const vehicle = getVehicleById(action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid || "");
|
||||
if (vehicle) {
|
||||
if (vehicle.isActive === false && vehicle.state === "idle" && vehicle.isPicking && vehicle.currentLoad < vehicle.point.action.loadCapacity) {
|
||||
if (
|
||||
vehicle.isActive === false &&
|
||||
vehicle.state === "idle" &&
|
||||
vehicle.isPicking &&
|
||||
vehicle.currentLoad < vehicle.point.action.loadCapacity
|
||||
) {
|
||||
// Handle current action from vehicle
|
||||
setIsPaused(materialId, true);
|
||||
handleAction(action, materialId);
|
||||
@@ -192,6 +202,21 @@ export function useTriggerHandler() {
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (model?.type === "transfer") {
|
||||
const armBot = getArmBotById(trigger.triggeredAsset?.triggeredModel.modelUuid);
|
||||
if (armBot) {
|
||||
setIsPaused(materialId, true);
|
||||
addArmBotToMonitor(armBot.modelUuid, () => {
|
||||
const conveyor = getConveyorById(action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid || "");
|
||||
if (conveyor) {
|
||||
setIsPaused(materialId, true);
|
||||
|
||||
addConveyorToMonitor(conveyor.modelUuid, () => {
|
||||
handleAction(action, materialId);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (armBot.isActive === false && armBot.state === "idle") {
|
||||
// Handle current action from arm bot
|
||||
@@ -249,7 +274,12 @@ export function useTriggerHandler() {
|
||||
|
||||
if (action) {
|
||||
if (human) {
|
||||
if (action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "vehicle") {
|
||||
@@ -370,7 +400,12 @@ export function useTriggerHandler() {
|
||||
|
||||
if (action) {
|
||||
if (crane) {
|
||||
if (action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "human") {
|
||||
@@ -580,7 +615,12 @@ export function useTriggerHandler() {
|
||||
|
||||
if (action) {
|
||||
if (crane) {
|
||||
if (action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "human") {
|
||||
@@ -818,7 +858,13 @@ export function useTriggerHandler() {
|
||||
|
||||
const action = getActionByUuid(selectedProduct.productUuid, trigger.triggeredAsset.triggeredAction.actionUuid);
|
||||
|
||||
if (action && action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action &&
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "roboticArm") {
|
||||
@@ -1104,7 +1150,13 @@ export function useTriggerHandler() {
|
||||
|
||||
const action = getActionByUuid(selectedProduct.productUuid, trigger.triggeredAsset.triggeredAction.actionUuid);
|
||||
|
||||
if (action && action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action &&
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "roboticArm") {
|
||||
@@ -1214,7 +1266,13 @@ export function useTriggerHandler() {
|
||||
|
||||
const action = getActionByUuid(selectedProduct.productUuid, trigger.triggeredAsset.triggeredAction.actionUuid);
|
||||
|
||||
if (action && action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action &&
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "roboticArm") {
|
||||
@@ -1327,7 +1385,13 @@ export function useTriggerHandler() {
|
||||
|
||||
const action = getActionByUuid(selectedProduct.productUuid, trigger.triggeredAsset.triggeredAction.actionUuid);
|
||||
|
||||
if (action && action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid && action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid && action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid) {
|
||||
if (
|
||||
action &&
|
||||
action.triggers.length > 0 &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid &&
|
||||
action.triggers[0]?.triggeredAsset?.triggeredPoint?.pointUuid
|
||||
) {
|
||||
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
if (model?.type === "roboticArm") {
|
||||
|
||||
Reference in New Issue
Block a user