From 400f4d2ff4444e311713d762201274d8983b4621 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期四, 09 五月 2024 14:09:01 +0800
Subject: [PATCH] #
---
src/components/box.jsx | 38 +++++++++++++++++++++++++++++++++-----
1 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/src/components/box.jsx b/src/components/box.jsx
index a3dd4dc..351575b 100644
--- a/src/components/box.jsx
+++ b/src/components/box.jsx
@@ -2,7 +2,13 @@
import { useFrame } from '@react-three/fiber';
import { useFBX, useAnimations } from '@react-three/drei';
import * as THREE from 'three';
-import { MODEL_BOX_SCALE } from '@/config/setting'
+import {
+ MODEL_BOX_SCALE,
+ SHELF_BAY_GROUP_COUNT,
+ SHELF_BAY_UNIT_SEPARTE_DISTANCE,
+ SHELF_LEV_UNIT_SEPARTE_DISTANCE,
+ SHELF_HEIGHT_FROM_GROUND
+} from '@/config/setting'
import * as Common from '../utils/common';
import { useStore } from '@/store';
@@ -11,7 +17,7 @@
}
const getShelfBay = (bay) => {
- return bay - (bay - 1) % 3;
+ return bay - (bay - 1) % SHELF_BAY_GROUP_COUNT;
}
const getShelfLev = (lev) => {
@@ -19,7 +25,7 @@
}
const getShelfNo = (row, bay, lev) => {
- return getShelfRow(row) + '-' + getShelfBay(bay) + '-' + getShelfLev(lev);
+ return Common.generateLocNo(getShelfRow(row), getShelfBay(bay), getShelfLev(lev));
}
const Box = (props) => {
@@ -27,6 +33,7 @@
const state = useStore();
const [pos, setPos] = useState([]);
+ const [rotaY, setRotaY] = useState(0);
const boxModel = useMemo(() => {
const fbx = useFBX('/models/box/box.fbx');
@@ -42,16 +49,37 @@
// from shelf
const shelfNo = getShelfNo(row, bay, lev);
const shelfPos = state.shelfList[shelfNo];
- setPos(shelfPos);
+ if (!shelfPos) { return }
+ const { row: shelfRow, bay: shelfBay, lev: shelfLev } = Common.parseLocNo(shelfNo);
+
+ // cal bay position
+ let posZByLev = shelfPos[2];
+ if (bay === shelfBay) {
+ posZByLev = shelfPos[2] + SHELF_BAY_UNIT_SEPARTE_DISTANCE;
+ }
+ if (bay === shelfBay + 1) {
+ posZByLev = shelfPos[2];
+ }
+ if (bay === shelfBay + 2) {
+ posZByLev = shelfPos[2] - SHELF_BAY_UNIT_SEPARTE_DISTANCE;
+ }
+
+ setPos([
+ shelfPos[0],
+ shelfPos[1] + SHELF_HEIGHT_FROM_GROUND + (lev - shelfLev) * SHELF_LEV_UNIT_SEPARTE_DISTANCE,
+ posZByLev
+ ]);
+ setRotaY(Math.PI / 2);
} else {
// from agv
setPos(position);
+ setRotaY(rotationY);
}
}, [props]);
return (
<>
- <group rotation-y={rotationY} position={pos}>
+ <group rotation-y={rotaY} position={pos}>
<primitive object={boxModel} castShadow />
</group>
</>
--
Gitblit v1.9.1