From 6d030032d8b3894bd858d7f0998939915a2b7c43 Mon Sep 17 00:00:00 2001 From: ChenX Date: Mon, 16 Apr 2018 16:59:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=9C=86=E5=BC=A7=E5=90=88?= =?UTF-8?q?=E5=B9=B6=20=E8=A1=A5=E5=85=A8=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/Geometry/arc.test.ts | 45 +++++++++++++++++++++++++++++++++++ src/DatabaseServices/Arc.ts | 4 ++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/__test__/Geometry/arc.test.ts b/__test__/Geometry/arc.test.ts index e7d327812..9d2a7eddc 100644 --- a/__test__/Geometry/arc.test.ts +++ b/__test__/Geometry/arc.test.ts @@ -243,3 +243,48 @@ test('圆弧合并', () => expect(arc.StartAngle).toBe(0.5); expect(arc.EndAngle).toBe(1); }); + +test('容差相接', () => +{ + let arc = new Arc(new Vector3(), 1, 0, 1); + let arc2 = new Arc(new Vector3(), 1, 1 + 1e-5, 0.5); + + //终点对起点 + expect(arc.Join(arc2)).toBeTruthy(); + expect(arc.EndAngle).toBe(0.5); + + //起点对终点 + arc2.EndAngle = 0 + 1e-5; + + expect(arc.Join(arc2)).toBeTruthy(); + expect(equaln(arc.AllAngle, Math.PI * 2)); + + arc.StartAngle = 0; + arc.EndAngle = 1; + + arc2.StartAngle = 0; + arc2.EndAngle = 0.5; + + expect(arc.Join(arc2)).toBeTruthy(); + arc.StartAngle //? + expect(arc.EndAngle).toBe(0.5); + + //终点对起点 + arc.StartAngle = 0; + arc.EndAngle = 1; + + arc2.StartAngle = 0.5; + arc2.EndAngle = 1; + + expect(arc.Join(arc2)).toBeTruthy(); + + //起点对起点 + arc.StartAngle = 0; + arc.EndAngle = 1; + + arc2.StartAngle = 1; + arc2.EndAngle = 0; + expect(arc.Join(arc2)).toBeTruthy(); + + expect(arc.AllAngle).toBe(Math.PI * 2); +}); diff --git a/src/DatabaseServices/Arc.ts b/src/DatabaseServices/Arc.ts index 3a4ff497f..94e760415 100644 --- a/src/DatabaseServices/Arc.ts +++ b/src/DatabaseServices/Arc.ts @@ -305,7 +305,7 @@ export class Arc extends Curve } else if (equaln(sa, this.m_EndAngle))//this终点对起点 { - if (eaAllan < allAn) + if (eaAllan < allAn || equaln(ea, this.m_StartAngle)) this.ConverToCircle();//圆 else this.EndAngle = ea; @@ -321,7 +321,7 @@ export class Arc extends Curve return true; } - else if (equaln(ea, this.m_EndAngle))//this终点对起点 + else if (equaln(ea, this.m_EndAngle))//this终点对终点 { if (saAllan > allAn) this.StartAngle = sa;