From f5cef8a9611f268415665a8bfcd9c6471ee5da88 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期二, 02 九月 2025 14:01:32 +0800
Subject: [PATCH] 1
---
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 e219ded..a22da46 100644
--- a/zy-acs-flow/src/map/tool.js
+++ b/zy-acs-flow/src/map/tool.js
@@ -2,6 +2,7 @@
import * as TWEEDLE from 'tweedle.js';
import {
MAP_DEFAULT_ROTATION,
+ MAP_MIRROR,
DEVICE_TYPE,
DEVICE_Z_INDEX,
AGV_STATUS_MODE,
@@ -11,6 +12,7 @@
DEVICE_SELECTED_EFFECT_COLOR,
POINT_ROUTE_DIRECTION,
ANIMATE_DURING_TIME,
+ AGV_ANGLE_OFFSET_VAL,
} from './constants';
import { getRouteList } from './http';
import PointRoute from "./PointRoute";
@@ -171,16 +173,17 @@
let batchMoveStartPos = null;
const batchMoving = (event) => {
- const scale = mapContainer.scale.x;
+ const scaleX = mapContainer.scale.x;
+ const scaleY = mapContainer.scale.y;
if (batchMove && batchMoveStartPos) {
// offset move val
var mouseMovement = {
- x: (event.global.x - batchMoveStartPos.x) / scale,
- y: (event.global.y - batchMoveStartPos.y) / scale
+ x: (event.global.x - batchMoveStartPos.x) / scaleX,
+ y: (event.global.y - batchMoveStartPos.y) / scaleY
};
for (let sprite of selectedSprites) {
- sprite.position.x = sprite.batchMoveStartPos.x + mouseMovement.x;
- sprite.position.y = sprite.batchMoveStartPos.y + mouseMovement.y;
+ sprite.position.x = sprite.batchMoveStartPos.x - mouseMovement.x;
+ sprite.position.y = sprite.batchMoveStartPos.y - mouseMovement.y;
}
}
}
@@ -373,7 +376,8 @@
return;
}
- mapContainer.scale.set(0.3);
+ const focusScale = 0.1;
+ mapContainer.scale.set(MAP_MIRROR ? -focusScale : focusScale, focusScale);
mapContainer.position.set(0, 0);
let bounds = sprite.getBounds();
@@ -500,7 +504,7 @@
const pointRoute = new PointRoute(POINT_ROUTE_DIRECTION[route.direction]);
pointRoute.setPoint(startPoint, endPoint);
pointRoute.clear();
- pointRoute.lineStyle(Math.max(7, 2 * (1 / mapContainer.scale.x)), themeMode === 'light' ? '#ced6e0' : '#535c68');
+ pointRoute.lineStyle(Math.max(7, 2 * (1 / Math.abs(mapContainer.scale.x))), themeMode === 'light' ? '#ced6e0' : '#535c68');
pointRoute.moveTo(startPoint.position.x, startPoint.position.y);
pointRoute.lineTo(endPoint.position.x, endPoint.position.y);
pointRoute.alpha = 1;
@@ -652,6 +656,56 @@
}
}
+export function createAgvJobPanel(parentContainer, text) {
+ const panelScale = 4;
+
+ const panel = new PIXI.Container();
+
+ const sideLen = 50 * panelScale;
+ const halfCircle = new PIXI.Graphics();
+ halfCircle.beginFill(themeMode === 'light' ? '#333333' : '#eee');
+ halfCircle.lineStyle(2 * panelScale, themeMode === 'light' ? '#333333' : '#eee');
+ halfCircle.arc(0, 0, sideLen, 0, Math.PI);
+ halfCircle.endFill();
+
+ const rectangle = new PIXI.Graphics();
+ rectangle.lineStyle(2 * panelScale, themeMode === 'light' ? '#333333' : '#eee', .8);
+ rectangle.drawRoundedRect(
+ -sideLen / 2, // 宸︿笂瑙� x
+ -sideLen / 2, // 宸︿笂瑙� y
+ sideLen, // 瀹�
+ sideLen - (20 * panelScale), // 楂� (鐣欎竴鐐圭┖闂达紝鐪嬭捣鏉ユ洿鍍忓崐鍦嗗鍣�)
+ 16 * panelScale // 鍦嗚
+ );
+ rectangle.endFill();
+ rectangle.mask = halfCircle;
+
+ panel.addChild(rectangle, halfCircle);
+
+ const msg = new PIXI.Text(text, {
+ fill: themeMode === 'light' ? '#2b2b2b' : '#eee',
+ fontSize: 12 * panelScale,
+ fontFamily: 'MicrosoftYaHei',
+ fontWeight: 'bolder',
+ align: 'center',
+ });
+ msg.anchor.set(0.5);
+ msg.position.set(0, -10 * panelScale);
+
+ panel.addChild(msg);
+ parentContainer.addChild(panel);
+
+ let phase = 0;
+ function onTick(delta) {
+ phase += delta / 6; // 鏃嬭浆閫熷害鍙皟
+ phase %= (Math.PI * 2);
+ halfCircle.rotation = phase;
+ }
+ app.ticker.add(onTick);
+
+ panel._onTick = onTick;
+ return panel;
+}
// dynamic graphic ----------------
@@ -662,17 +716,16 @@
}
}
-const agvRotationOffsetDegrees = 90;
-const agvRotationOffset = rotationParseNum(agvRotationOffsetDegrees);
+const agvRotationOffset = rotationParseNum(AGV_ANGLE_OFFSET_VAL);
const showAgvSprite = (curZone, agvVo, setCurSprite) => {
- const { agvNo, code, direction, battery, backpack, error } = agvVo;
+ const { agvNo, code, direction, battery, jobType, backpack: backpackCount, slots, error } = agvVo;
if (!code) { return; }
const codeSprite = querySprite(DEVICE_TYPE.POINT, code);
if (!codeSprite) { return; }
const targetRotation = rotationParseNum(direction);
- const backpackCount = backpack?.filter(item => item.loaded === true).length || 0;
+ // const backpackCount = backpack?.filter(item => item.loaded === true).length || 0;
let agvSprite = querySprite(DEVICE_TYPE.AGV, agvNo);
if (!agvSprite) {
@@ -697,6 +750,7 @@
});
agvText.anchor.set(0.5, 0.5);
agvText.position.set(0, 8);
+ agvText.scale.set(MAP_MIRROR ? -1 : 1, 1)
agvSprite.addChild(agvText);
agvSprite.updateTextRotation = () => {
@@ -720,6 +774,25 @@
}
animateRotation(agvSprite, targetRotation + agvRotationOffset, agvRotationOffset);
+ }
+
+ // job effect
+ if (jobType) {
+ if (!agvSprite.data.jobEffect) {
+ agvSprite.data.jobEffect = createAgvJobPanel(agvSprite, jobType + " (" + backpackCount + "/" + slots + ")");
+ agvSprite.data.jobEffect.x = -80;
+ agvSprite.data.jobEffect.y = 0;
+ }
+ if (agvSprite.data.jobEffect) {
+ agvSprite.data.jobEffect.rotation = -agvSprite.rotation - rotationParseNum(MAP_DEFAULT_ROTATION);
+ }
+ } else {
+ if (agvSprite.data.jobEffect) {
+ app.ticker.remove(agvSprite.data.jobEffect._onTick);
+ agvSprite.removeChild(agvSprite.data.jobEffect);
+ agvSprite.data.jobEffect.destroy(true);
+ agvSprite.data.jobEffect = null;
+ }
}
if (error) {
@@ -746,6 +819,9 @@
return;
}
const { agvNo, code: curCode, dynamicRoute } = agvVo;
+ if (!dynamicRoute || dynamicRoute.indexOf(curCode) === -1) {
+ return;
+ }
const agvPathName = 'agvPath-' + agvNo;
let agvPath = mapContainer.getChildByName(agvPathName);
--
Gitblit v1.9.1