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