From d179f3cdd7e10a78132ed03137256663fba13d13 Mon Sep 17 00:00:00 2001 From: ChenX Date: Thu, 16 Jun 2022 11:26:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=E5=9C=86=E5=BC=A7=E6=B4=9E?= =?UTF-8?q?=E5=9C=A8=E4=BC=98=E5=BC=A7=E5=A2=99=E4=B8=8A=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Reactor/RoomHoleReactor.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Reactor/RoomHoleReactor.ts b/src/Reactor/RoomHoleReactor.ts index ac8360f28..f2c5fdbda 100644 --- a/src/Reactor/RoomHoleReactor.ts +++ b/src/Reactor/RoomHoleReactor.ts @@ -352,7 +352,16 @@ export function GetHoleLengthOfIndex(hole: RoomHolePolyline, index: number): num return hole.Points[index].distanceTo(hole.Points[index + 1]); else if (wall instanceof RoomWallArc) { - let b = hole.Points[index].distanceTo(hole.Points[index + 1]); + let p1 = hole.Points[index]; + let p2 = hole.Points[index + 1]; + + let param1 = wall.GetParamAtPoint(p1.clone().setZ(wall.Z)); + let param2 = wall.GetParamAtPoint(p2.clone().setZ(wall.Z)); + + if (!isNaN(param1) && !isNaN(param2)) + return Math.abs(wall.GetDistAtParam(param1) - wall.GetDistAtParam(param2)); + + let b = p1.distanceTo(p2); if (b < 1e-4) return 0; let r = wall.Radius; let l = 2 * Math.asin(b / (2 * r)) * r;//http://zhidao.baidu.com/question/553357442/answer/1393358387