From 1a2b85f4388dcab2865ea57534786d5d45050961 Mon Sep 17 00:00:00 2001 From: ChenX Date: Tue, 17 May 2022 15:53:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4:=E4=B8=8D=E5=86=8D=E5=BC=80?= =?UTF-8?q?=E5=9B=BE=E6=97=B6=E5=88=86=E6=9E=90=E5=A2=99=E6=B4=9E=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Room/ParseService/Hole/RoomWallRelevancyHoleParse.ts | 1 + src/GraphicsSystem/Viewer.ts | 6 ++++-- src/Reactor/RoomHoleReactor.ts | 8 ++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/DatabaseServices/Room/ParseService/Hole/RoomWallRelevancyHoleParse.ts b/src/DatabaseServices/Room/ParseService/Hole/RoomWallRelevancyHoleParse.ts index 46a8e51bf..2df9fbfa5 100644 --- a/src/DatabaseServices/Room/ParseService/Hole/RoomWallRelevancyHoleParse.ts +++ b/src/DatabaseServices/Room/ParseService/Hole/RoomWallRelevancyHoleParse.ts @@ -8,6 +8,7 @@ import { RoomWallPlaceLHoleHelper } from "./RoomWallPlaceLHoleHelper"; /** + * [弃用]我们已经保持了墙和洞的关联关系 * 分析墙和洞的关联关系 * 这个算法依赖于RoomWallParse的缓存结果,所以需要RoomWallParse计算过并且缓存才有用 */ diff --git a/src/GraphicsSystem/Viewer.ts b/src/GraphicsSystem/Viewer.ts index 06e2ccb5c..bae230979 100644 --- a/src/GraphicsSystem/Viewer.ts +++ b/src/GraphicsSystem/Viewer.ts @@ -18,7 +18,6 @@ import { Database } from '../DatabaseServices/Database'; import { Board } from '../DatabaseServices/Entity/Board'; import { Entity } from '../DatabaseServices/Entity/Entity'; import { RoomHolePolyline } from '../DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline'; -import { RoomWallRelevancyHoleParse } from '../DatabaseServices/Room/ParseService/Hole/RoomWallRelevancyHoleParse'; import { RoomParse } from '../DatabaseServices/Room/ParseService/RoomParseUtil'; import { DisposeTextShapeCache } from '../DatabaseServices/Text/Text'; import { ViewportEntity } from '../DatabaseServices/ViewportEntity'; @@ -27,6 +26,7 @@ import { GenerateRaycaster } from '../Editor/PointPick'; import { userConfig } from '../Editor/UserConfig'; import { equaln, equalv3, GetBox, GetBoxArr, isIntersect, isPerpendicularityTo, ZAxis, ZeroVec } from '../Geometry/GeUtils'; import { PlaneExt } from '../Geometry/Plane'; +import { UpdateHoleFakerWallsAndUpdateDraw, UpdateWallHolesDataAndUpdateDraw } from '../Reactor/RoomHoleReactor'; import { DownPanelStore } from '../UI/Store/DownPanelStore'; import { LightStore } from '../UI/Store/RightPanelStore/LightStore'; import { CameraType, CameraUpdate } from './CameraUpdate'; @@ -652,8 +652,10 @@ export class Viewer let pre = Date.now(); let room = new RoomParse(false, undefined, true).Parse(); + for (let wall of room.walls) UpdateWallHolesDataAndUpdateDraw(wall); let holes = app.Database.ModelSpace.Entitys.filter(e => e instanceof RoomHolePolyline) as RoomHolePolyline[]; - new RoomWallRelevancyHoleParse().Parse(holes, room.walls); + for (let hole of holes) UpdateHoleFakerWallsAndUpdateDraw(hole); + // new RoomWallRelevancyHoleParse().Parse(holes, room.walls); //保持了墙和洞的关联关系,所以不再需要这个 for (let index = 0; index < db.ModelSpace.Entitys.length; index++) { diff --git a/src/Reactor/RoomHoleReactor.ts b/src/Reactor/RoomHoleReactor.ts index a1c228347..05d8c7c26 100644 --- a/src/Reactor/RoomHoleReactor.ts +++ b/src/Reactor/RoomHoleReactor.ts @@ -5,7 +5,7 @@ import { RoomWallBase } from "../DatabaseServices/Room/Entity/Wall/RoomWallBase" import { CreateGetCurveParam } from "../DatabaseServices/Room/ParseService/GetCurveParam"; import { RoomWallParse } from "../DatabaseServices/Room/ParseService/RoomWallParse"; import { CurveMap } from "../Geometry/CurveMap"; -import { equalv3 } from "../Geometry/GeUtils"; +import { equalv2 } from "../Geometry/GeUtils"; /** @@ -110,7 +110,7 @@ export function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase) * 更新网洞的绘制 * 在墙移动的时候,或者网洞变化的时候 这个网洞的绘制就需要被更新 */ -function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline) +export function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline) { if (hole.IsErase) return; @@ -197,7 +197,7 @@ function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline) if (!r1.isReverse) fakerWalls[0].Reverse(); if (r2.isReverse) fakerWalls[1].Reverse(); - if (!equalv3(v.position, pts[1], 1e-4))//拐角点不再对齐 + if (!equalv2(v.position, pts[1], 1e-4))//拐角点不再对齐 { let length1 = pts[0].distanceTo(pts[1]); let length2 = pts[1].distanceTo(pts[2]); @@ -301,7 +301,7 @@ function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline) if (!updateHole) { - if (!equalv3(v1.position, pts[1], 1e-4) || !equalv3(v2.position, pts[2], 1e-4)) + if (!equalv2(v1.position, pts[1], 1e-4) || !equalv2(v2.position, pts[2], 1e-4)) updateHole = true; } }