From d59b127388b6064fb01d6f28834d49e560257f2f Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期一, 14 十月 2024 17:01:57 +0800 Subject: [PATCH] # --- zy-acs-flow/src/map/tool.js | 98 +++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 87 insertions(+), 11 deletions(-) diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js index 2aafe7c..18ba33e 100644 --- a/zy-acs-flow/src/map/tool.js +++ b/zy-acs-flow/src/map/tool.js @@ -3,6 +3,7 @@ import { DEVICE_TYPE, DEVICE_Z_INDEX, + AGV_STATUS_MODE, } from './constants'; import shelf from '/map/shelf.svg'; @@ -10,6 +11,13 @@ import station from '/map/station.svg'; import direction from '/map/direction.svg'; import point from '/map/point.svg'; +// agv +import ctuEmptyNoBattery from '/map/agv/ctuEmptyNoBattery.svg'; +import ctuEmptyHalfBattery from '/map/agv/ctuEmptyHalfBattery.svg'; +import ctuEmptyFullBattery from '/map/agv/ctuEmptyFullBattery.svg'; +import ctuLoadedNoBattery from '/map/agv/ctuLoadedNoBattery.svg'; +import ctuLoadedHalfBattery from '/map/agv/ctuLoadedHalfBattery.svg'; +import ctuLoadedFullBattery from '/map/agv/ctuLoadedFullBattery.svg'; let app, mapContainer, themeMode; let selectedSprite, effectTick, effectHalfCircle, effectRectangle; @@ -47,7 +55,7 @@ } } -export const generateSprite = (deviceType) => { +export const generateSprite = (deviceType, source) => { let sprite; switch (deviceType) { case DEVICE_TYPE.SHELF: @@ -75,6 +83,15 @@ sprite.zIndex = DEVICE_Z_INDEX.DIRECTION; break; + + case DEVICE_TYPE.AGV: + if (source) { + sprite = new PIXI.Sprite(PIXI.Texture.from(source, { resourceOptions: { scale: 1 } })); + } + sprite.width = 300; + sprite.height = 500; + sprite.zIndex = DEVICE_Z_INDEX.AGV; + break case DEVICE_TYPE.POINT: sprite = new PIXI.Sprite(PIXI.Texture.from(point, { resourceOptions: { scale: 1 } })); // sprite.width = 112; @@ -99,6 +116,17 @@ type: type, uuid: generateID() }; +} + +export const querySprite = (type, no) => { + if (!mapContainer) { + return; + } + for (const sprite of mapContainer.children) { + if (sprite.data?.type === type && sprite.data?.no === no) { + return sprite; + } + } } export const markSprite = (sprite) => { @@ -379,23 +407,71 @@ } +// service ------------------------ +export const getAgvStatusMode = (backpack, battery) => { + if (backpack === 0) { + if (battery < 10) { + return AGV_STATUS_MODE.EMPTY_NO_BATTERY; + } + if (battery < 80) { + return AGV_STATUS_MODE.EMPTY_HALF_BATTERY; + } + return AGV_STATUS_MODE.EMPTY_FULL_BATTERY; + } else { + if (battery < 10) { + return AGV_STATUS_MODE.LOADED_NO_BATTERY; + } + if (battery < 80) { + return AGV_STATUS_MODE.LOADED_HALF_BATTERY; + } + return AGV_STATUS_MODE.LOADED_FULL_BATTERY; + } +} - - - - - - - - +export const generateAgvSpriteTexture = (agvStatusMode) => { + switch (agvStatusMode) { + case AGV_STATUS_MODE.EMPTY_NO_BATTERY: + return ctuEmptyNoBattery; + case AGV_STATUS_MODE.EMPTY_HALF_BATTERY: + return ctuEmptyHalfBattery; + case AGV_STATUS_MODE.EMPTY_FULL_BATTERY: + return ctuEmptyFullBattery; + case AGV_STATUS_MODE.LOADED_NO_BATTERY: + return ctuLoadedNoBattery; + case AGV_STATUS_MODE.LOADED_HALF_BATTERY: + return ctuLoadedHalfBattery; + case AGV_STATUS_MODE.LOADED_FULL_BATTERY: + return ctuLoadedFullBattery; + default: + return; + } +} // dynamic graphic ---------------- export const generateDynamicGraphic = (curZone, data) => { + console.log("ws", curZone, data); - const dynamicData = JSON.parse(data); - console.log("ws", curZone, dynamicData); + for (const agvVo of data.agvVos) { + showAgvSprite(curZone, agvVo) + } +} + +const showAgvSprite = (curZone, agvVo) => { + const { agvNo, code, direction, backpack, battery, ...rest } = agvVo; + if (!code) { return } + const codeSprite = querySprite(DEVICE_TYPE.POINT, code); + if (!codeSprite) { return } + let agvSprite = querySprite(DEVICE_TYPE.AGV, agvNo); + if (!agvSprite) { + agvSprite = generateSprite(DEVICE_TYPE.AGV, generateAgvSpriteTexture(getAgvStatusMode(backpack, battery))); + initSprite(agvSprite, DEVICE_TYPE.AGV); + agvSprite.data.no = agvNo; + agvSprite.position.set(codeSprite.position.x, codeSprite.position.y); + mapContainer.addChild(agvSprite); + // viewFeature(shuttle, setCurSPrite); // todo + } } \ No newline at end of file -- Gitblit v1.9.1