From 3b599603ddcaa20e63c95c505f135f62761f61ce Mon Sep 17 00:00:00 2001 From: ZoeLeeFZ Date: Fri, 23 Oct 2020 11:29:41 +0800 Subject: [PATCH] =?UTF-8?q?!1238=20=E4=BF=AE=E5=A4=8D:=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=B1=82=E6=9D=BF=E9=92=89=E5=90=8E=E6=8B=86=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E4=B8=8D=E5=AF=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DrawBoard/ActivityLayerBoardTool.ts | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/Add-on/DrawBoard/ActivityLayerBoardTool.ts b/src/Add-on/DrawBoard/ActivityLayerBoardTool.ts index e2594ed26..fe6c32f08 100644 --- a/src/Add-on/DrawBoard/ActivityLayerBoardTool.ts +++ b/src/Add-on/DrawBoard/ActivityLayerBoardTool.ts @@ -278,12 +278,13 @@ class ActivityLayerBoardTool private AppendBoard(br: Board, brNailMap: WeakMap, nails: CylinderHole[]) { let oldNailIds = br.LayerNails.filter(n => n?.Object); + this.HandleNailList(nails, oldNailIds, brNailMap); for (let i = nails.length; i < oldNailIds.length; i++) oldNailIds[i]?.Object?.Erase(); - for (let i = 0; i < nails.length; i++) { let nId: ObjectId; + let otherBoard = brNailMap.get(nails[i]); if (i < oldNailIds.length) { let nail = oldNailIds[i].Object as CylinderHole; @@ -301,13 +302,55 @@ class ActivityLayerBoardTool br.Db.ModelSpace.Append(nails[i]); nId = nails[i].Id; br.AppendNails([nId]); - let otherBoard = brNailMap.get(nails[i]); nails[i].MId = br.Id; nails[i].FId = otherBoard.Id; otherBoard.AppendNails([nId]); } } } + private HandleNailList(newNails: CylinderHole[], oldNails: ObjectId[], naiMap: WeakMap) + { + if (oldNails.length < newNails.length) + { + let temp: CylinderHole[] = []; + for (let i = 0; i < oldNails.length; i++) + { + let nail = oldNails[i].Object as CylinderHole; + if (newNails.length === 0) break; + let j = 0; + for (; j < newNails.length; j++) + { + let newNail = newNails[j] as CylinderHole; + let otherBoard = naiMap.get(newNail); + if (otherBoard.Id === nail.FId) + break; + } + if (j < newNails.length) + temp.push(...newNails.splice(j, 1)); + } + newNails.unshift(...temp); + } + else + { + let temp: ObjectId[] = []; + + for (let i = 0; i < newNails.length; i++) + { + let nail = newNails[i]; + let otherBoard = naiMap.get(nail); + let j = 0; + for (; j < oldNails.length; j++) + { + let oldNail = oldNails[j].Object as CylinderHole; + if (oldNail.FId === otherBoard.Id) + break; + } + if (j < oldNails.length) + temp.push(...oldNails.splice(j, 1)); + } + oldNails.unshift(...temp); + } + } } export const activityLayerBoardTool = new ActivityLayerBoardTool();