From 28f9d6aadef16cafb888ff6bcc97f99bde971d8d Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 10 五月 2024 13:58:20 +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