From 53aad5698fb113201e79b5cca981bdfb13d23d97 Mon Sep 17 00:00:00 2001
From: jinglun-cloud <jinglun2019@foxmail.com>
Date: 星期二, 05 五月 2026 14:45:44 +0800
Subject: [PATCH] 简化设备长宽计算的实现
---
src/main/webapp/components/MapCanvas.js | 53 +++++++++++++++++++----------------------------------
1 files changed, 19 insertions(+), 34 deletions(-)
diff --git a/src/main/webapp/components/MapCanvas.js b/src/main/webapp/components/MapCanvas.js
index 4571ca3..70fc985 100644
--- a/src/main/webapp/components/MapCanvas.js
+++ b/src/main/webapp/components/MapCanvas.js
@@ -1325,23 +1325,7 @@
return (value * 100).toFixed(1) + '%';
},
/******************setDeviceInfo浣跨敤鐨勫嚱鏁�:******************/
- getAnnulusAwarePoint(trackInfo, x, y, path) {
- return trackInfo.type === 'annulus'
- ? G.snapToAnnulusOuterPath(x, y, path)
- : { x, y };
- },
- /** 鐜┛锛氭妸 getPositionAfterMove 鐨勭粨鏋滃帇鍒拌建甯︿腑绾匡紱闈炵幆绌垮師鏍疯繑鍥� */
- applyAnnulusBandCenterToPosition(trackInfo, position) {
- if (!position || trackInfo.type !== 'annulus') {
- return position;
- }
- const c = G.centerAnnulusBandPoint(trackInfo, position.x, position.y, position.path);
- return { ...position, x: c.x, y: c.y };
- },
- computeFinalPosition(trackInfo, point, pathList, path, deltaDistance, angle) {
- const position = G.getPositionAfterMove({ point, pathList, path, deltaDistance, angle });
- return this.applyAnnulusBandCenterToPosition(trackInfo, position);
- },
+ // 鐜┛鏉$爜鍦ㄦ�婚暱涓婄殑鏈夌鍙锋宸�
calcSignedSegmentDelta(fromBarcode, toBarcode, trackInfo, totalSegmentCount) {
const from = Number(fromBarcode);
const to = Number(toBarcode);
@@ -1452,20 +1436,21 @@
) {
sprite.barcode = device.rgvPos;
sprite.time = nowMs();
- let tmpPassedSegmentCount = device.rgvPos - minBarcode;
- const passedSegmentCount =
- tmpPassedSegmentCount < 0
- ? tmpPassedSegmentCount + totalSegmentCount
- : tmpPassedSegmentCount;
+ const passedSegmentCount = this.calcSignedSegmentDelta(
+ minBarcode,
+ device.rgvPos,
+ sprite.trackInfo,
+ totalSegmentCount
+ );
const deltaDistance = (allDistance * passedSegmentCount) / totalSegmentCount;
const initPath = sprite.path;
- const initMovePoint = this.getAnnulusAwarePoint(
+ const initMovePoint = G.snapToAnnulusOuterPath(
sprite.trackInfo,
sprite.x,
sprite.y,
initPath
);
- let mappingInfo = this.computeFinalPosition(
+ let mappingInfo = G.computeFinalPosition(
sprite.trackInfo,
initMovePoint,
pathList,
@@ -1479,7 +1464,7 @@
sprite.rotation = G.getRotate(mappingInfo, mappingInfo.path) || sprite.rotation;
sprite.currentAngle = mappingInfo.angle;
sprite.mappingInfo = mappingInfo;
- const anchorPoint = this.getAnnulusAwarePoint(
+ const anchorPoint = G.snapToAnnulusOuterPath(
sprite.trackInfo,
mappingInfo.x,
mappingInfo.y,
@@ -1577,25 +1562,25 @@
} else {
smoothDistance = stepCap;
}
- const movePointBarcode = this.getAnnulusAwarePoint(
+ const movePointBarcode = G.snapToAnnulusOuterPath(
sprite.trackInfo,
sprite.x,
sprite.y,
path
);
const angle = Math.atan2(sprite.y - path.y, sprite.x - path.x);
- const raw = G.getPositionAfterMove({
- point: movePointBarcode,
+ const p = G.computeFinalPosition(
+ sprite.trackInfo,
+ movePointBarcode,
pathList,
path,
- deltaDistance: smoothDistance,
+ smoothDistance,
angle
- });
- const p = this.applyAnnulusBandCenterToPosition(sprite.trackInfo, raw);
+ );
sprite.path = p.path;
sprite.x = p.x;
sprite.y = p.y;
- sprite.rotation = G.getRotate(raw, raw.path) || sprite.rotation;
+ sprite.rotation = G.getRotate(p, p.path) || sprite.rotation;
const restDistanceAfter = G.calcDistance({ x: sprite.x, y: sprite.y }, sprite.mappingInfo);
if (restDistanceAfter <= EPSILON || Math.abs(smoothDistance) >= restDistance - EPSILON) {
this.finishDeviceMotion(sprite);
@@ -1625,7 +1610,7 @@
anchor.totalSegmentCount !== totalSegmentCount;
if (needResetAnchor) {
const anchorPath = sprite.path;
- const anchorPoint = this.getAnnulusAwarePoint(
+ const anchorPoint = G.snapToAnnulusOuterPath(
sprite.trackInfo,
sprite.x,
sprite.y,
@@ -1653,7 +1638,7 @@
const deltaDistance = (allDistance * passedSegmentCount) / totalSegmentCount;
const path = anchor.path || sprite.path;
const barcodeMovePoint = { x: anchor.x, y: anchor.y };
- let finalPosition = this.computeFinalPosition(
+ let finalPosition = G.computeFinalPosition(
sprite.trackInfo,
barcodeMovePoint,
pathList,
--
Gitblit v1.9.1