| | |
| | | // row |
| | | |
| | | |
| | | // bay |
| | | const realBayPos = [1589, 3540, 5491, 7442, 9393, 11344]; |
| | | const mapBayMaxAbs = 500; |
| | | |
| | | const calBayMapPos = (realPosition, minRealPosition = Math.min(...realBayPos), maxRealPosition = Math.max(...realBayPos), maxMapPosition = mapBayMaxAbs) => { |
| | | return ((realPosition - minRealPosition) / (maxRealPosition - minRealPosition)) * (2 * maxMapPosition) - maxMapPosition; |
| | | } |
| | | |
| | | console.log(Math.max(...realBayPos)); |
| | | |
| | | const shelfData = [ |
| | | { |
| | | no: '1-1-1', |
| | | position: [0, 0, 0], |
| | | rotationY: 0, |
| | | }, |
| | | { |
| | | no: '1-1-1', |
| | | position: [100, 0, 0], |
| | | no: '3-1-1', |
| | | position: [0, 0, calBayMapPos(realBayPos[5])], |
| | | rotationY: Math.PI / 2, |
| | | }, |
| | | { |
| | | no: '1-1-1', |
| | | position: [100, 0, 100], |
| | | rotationY: 0, |
| | | no: '3-4-1', |
| | | position: [0, 0, calBayMapPos(realBayPos[4])], |
| | | rotationY: Math.PI / 2, |
| | | }, |
| | | |
| | | // { |
| | | // no: '2-1-1', |
| | | // position: [100, 0, 0], |
| | | // rotationY: Math.PI / 2, |
| | | // } |
| | | { |
| | | no: '3-7-1', |
| | | position: [0, 0, calBayMapPos(realBayPos[3])], |
| | | rotationY: Math.PI / 2, |
| | | }, |
| | | { |
| | | no: '3-10-1', |
| | | position: [0, 0, calBayMapPos(realBayPos[2])], |
| | | rotationY: Math.PI / 2, |
| | | }, |
| | | { |
| | | no: '3-13-1', |
| | | position: [0, 0, calBayMapPos(realBayPos[1])], |
| | | rotationY: Math.PI / 2, |
| | | }, |
| | | { |
| | | no: '3-16-1', |
| | | position: [0, 0, calBayMapPos(realBayPos[0])], |
| | | rotationY: Math.PI / 2, |
| | | }, |
| | | ]; |
| | | |
| | | export default shelfData; |
| | |
| | | import { useMemo, useState, useEffect } from 'react'; |
| | | import { useGLTF } from '@react-three/drei'; |
| | | import { useGLTF, useFBX } from '@react-three/drei'; |
| | | import * as THREE from 'three'; |
| | | import { MODEL_SHELF_SCALE } from '@/config/setting' |
| | | import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'; |
| | | import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; |
| | | import Box from './box'; |
| | | |
| | | import * as Common from '../utils/common'; |
| | | |
| | | const Shelf = (props) => { |
| | | const { position = [0, 300, 0], rotationY = 0 } = props; |
| | |
| | | return ( |
| | | <> |
| | | <group rotation-y={rotationY} position={position}> |
| | | <primitive |
| | | {/* <primitive |
| | | castShadow |
| | | receiveShadow |
| | | object={nodes.物件_1001} |
| | | material={materials['材质_1.002']} |
| | | position={[0, 99, 0]} |
| | | scale={50000} |
| | | /> |
| | | /> */} |
| | | <mesh position={[0, 100, 0]}> |
| | | <boxGeometry args={[150, 200, 30]} /> |
| | | <meshStandardMaterial color={'orange'} transparent={true} opacity={.5} /> |
| | | </mesh> |
| | | </group> |
| | | {/* <Box rotationY={Math.PI / 2} position={[0, 100, -50]} /> |
| | | <Box rotationY={Math.PI / 2} position={[0, 100, 0]} /> |
| | |
| | | const timer = setInterval(() => { |
| | | const agvRealData = agvRealDataList[index]; |
| | | if (agvRealData) { |
| | | setAgvData(agvRealData); |
| | | // setAgvData(agvRealData); |
| | | } |
| | | index++; |
| | | }, INTERVAL_TIME * 1.1); |
| | |
| | | |
| | | const shelfEl = useMemo(() => { |
| | | return shelfData.map((data, index) => <Shelf key={index} {...data} />) |
| | | }, []); |
| | | |
| | | const shelfEl1 = useMemo(() => { |
| | | return shelfData.slice(0, 1).map((data, index) => <Shelf key={index} {...data} />) |
| | | }, []); |
| | | |
| | | const agvEl = useMemo(() => { |
| | |
| | | <group> |
| | | {tunnelEl} |
| | | {shelfEl} |
| | | {/* {shelfEl1} */} |
| | | {agvEl} |
| | | {boxEl} |
| | | </group> |