From 9bfb2fd94cf347116834855d6c1dd6e1d6dee10d Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 14 十月 2024 17:04:22 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/map/tool.js | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js
index 04a40b6..f8dfe7c 100644
--- a/zy-acs-flow/src/map/tool.js
+++ b/zy-acs-flow/src/map/tool.js
@@ -3,12 +3,21 @@
import {
DEVICE_TYPE,
DEVICE_Z_INDEX,
+ AGV_STATUS_MODE,
} from './constants';
import shelf from '/map/shelf.svg';
import charge from '/map/charge.svg';
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;
@@ -46,7 +55,7 @@
}
}
-export const generateSprite = (deviceType) => {
+export const generateSprite = (deviceType, source) => {
let sprite;
switch (deviceType) {
case DEVICE_TYPE.SHELF:
@@ -73,20 +82,51 @@
// sprite.height = 63;
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;
+ // sprite.height = 63;
+ sprite.zIndex = DEVICE_Z_INDEX.POINT;
+ break
default:
break;
+ }
+ if (sprite && deviceType !== DEVICE_TYPE.AGV) {
+ sprite.blendMode = PIXI.BLEND_MODES.MULTIPLY;
}
return sprite;
}
export const initSprite = (sprite, type) => {
sprite.anchor.set(0.5);
+ // sprite.alpha = 1;
sprite.cursor = 'pointer';
sprite.eventMode = 'static';
sprite.data = {
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) => {
@@ -245,7 +285,6 @@
}
}
-
export const showSelectedEffect = (sprite) => {
if (!sprite?.texture || !sprite?.texture?.valid) {
return;
@@ -365,4 +404,75 @@
parentElement.style.paddingLeft = param;
parentElement.style.paddingRight = param;
}
+}
+
+
+// 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);
+
+ 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);
+ agvSprite.rotation = rotationParseNum(direction);
+ mapContainer.addChild(agvSprite);
+ // viewFeature(shuttle, setCurSPrite); // todo
+ }
}
\ No newline at end of file
--
Gitblit v1.9.1