From b501960bf52cfa58efd391b591ec7052b1f2af59 Mon Sep 17 00:00:00 2001 From: Zoe Date: Wed, 20 Jun 2018 17:06:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=A7=E5=92=8C=E7=9B=B4?= =?UTF-8?q?=E7=BA=BF=E8=BF=9E=E6=8E=A5,=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/Polyline/offset.test.ts | 106 +++++++++++++++++++++++++++ src/Add-on/test/testIntersect.ts | 2 +- src/GraphicsSystem/OffestPolyline.ts | 19 ++--- 3 files changed, 117 insertions(+), 10 deletions(-) diff --git a/__test__/Polyline/offset.test.ts b/__test__/Polyline/offset.test.ts index 0bf9e8d04..adf1bf0bd 100644 --- a/__test__/Polyline/offset.test.ts +++ b/__test__/Polyline/offset.test.ts @@ -273,3 +273,109 @@ test('闭合多段线偏移测试9', () => //内偏移+ }) +test('闭合多段线偏移测试10', () => +{ + let data = + [1, ["Polyline", 1, 1, 4133, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -38.7066882611841, -36.73336766355714, 0, 1], 2, 10, [57.916496677407835, -1.0361149153581897], 0, [57.916496677407835, 9.149866136686853], 0, [63.00948720343037, 6.40233177396418], 0, [67.96845166297861, 11.696361399698116], 0, [67.96845166297861, 5.866227508067071], 0, [76.41209385085804, 8.144670638129776], -0.6438035714487224, [82.13500688930966, 1.215523001409662], -0.16133386709235895, [73.7315725213725, -7.388950466238915], -0.24328993833238707, [62.473382937533245, -7.388950466238914], 0.16864648307761998, [53.5472469103464, -6.102300228085856], -1.9523252757782097, true]]; + let cus = loadFile(data); + //外偏移 - + for (let i = 1; i < 20; i++) + { + expect(cus[0].GetOffsetCurves(-i).length).toBe(1); + } + + //内偏移+ + expect(cus[0].GetOffsetCurves(2.3).length).toBe(1); + for (let i = 2.5; i < 4; i += 0.5) + { + expect(cus[0].GetOffsetCurves(i).length).toBe(2); + } + for (let i = 4.2; i <= 7.2; i += 0.4) + { + expect(cus[0].GetOffsetCurves(i).length).toBe(1); + } + for (let i = 7.5; i <= 15.5; i++) + { + expect(cus[0].GetOffsetCurves(i).length).toBe(0); + } +}) +test('闭合多段线偏移测试11', () => +{ + let data = + [1, ["Polyline", 1, 1, 109, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 9, [8.533519553072624, 3.044692737430166], 0, [8.198324022346368, 5.782122905027932], 0, [9.483240223463685, 4.594972067039105], 0, [10.293296089385473, 4.958100558659217], 0, [11.298882681564244, 3.50558659217877], 0, [11.648044692737429, 3.1424581005586587], 0, [9.525139664804467, 2.3324022346368705], 0, [9.748603351955305, 3.589385474860334], 0, [8.519553072625698, 1.3268156424580995], 0, true]]; + let cus = loadFile(data); + //外偏移 - + for (let i = 0.1; i <= 0.3; i += 0.1) + { + expect(cus[0].GetOffsetCurves(-i).length).toBe(1); + } + + //内偏移+ + expect(cus[0].GetOffsetCurves(0.15).length).toBe(1); + + for (let i = 0.2; i <= 0.7; i += 0.1) + { + expect(cus[0].GetOffsetCurves(i).length).toBe(2); + } + for (let i = 0.8; i <= 3.8; i++) + { + expect(cus[0].GetOffsetCurves(i).length).toBe(0); + } + +}) +test('闭合多段线偏移测试12', () => +{ + let data = + [1, ["Polyline", 1, 1, 4132, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 12, [13.549363225511495, 3.33570646745377], 0, [14.34284463241268, 4.996139781895137], 0, [14.523074259257426, 3.9557232996550056], 0, [15.838887129162556, 4.9814356943054605], 0, [15.943612070431213, 3.9627476292376005], 0, [17.33950450111622, 4.461280640196535], 0, [18.123624596131165, 2.7156799524846913], 0, [17.99903152781382, 1.6177035379380693], 0, [16.03466125512531, 2.900960499995888], 0, [15.014220997727234, 1.7794865537465168], 0, [14.332835411729478, 2.6268506799232134], 0, [13.549363225511495, 3.33570646745377], 0, false]]; + let cus = loadFile(data); + //外偏移 - + for (let i = 0.5; i <= 2; i += 0.5) + { + expect(cus[0].GetOffsetCurves(-i).length).toBe(1); + } + + //内偏移+ + expect(cus[0].GetOffsetCurves(0.3).length).toBe(1); + expect(cus[0].GetOffsetCurves(0.4).length).toBe(2); + expect(cus[0].GetOffsetCurves(0.46).length).toBe(3); + expect(cus[0].GetOffsetCurves(0.5).length).toBe(2); + expect(cus[0].GetOffsetCurves(0.9).length).toBe(1); + + for (let i = 0.5; i <= 0.85; i += 0.05) + { + expect(cus[0].GetOffsetCurves(i).length).toBe(2); + } + for (let i = 1; i <= 2; i += 0.1) + { + expect(cus[0].GetOffsetCurves(i).length).toBe(0); + } + +}) +test('闭合多段线偏移测试13', () => +{ + let data = + [1, ["Polyline", 1, 1, 2689, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13.053732578466253, -1.845982384833612, 0, 1], 2, 12, [10.73237450059647, 5.925995426719515], 0, [14.934000173256667, 9.279899014962986], 0, [15.443475259425389, 6.338838290261696], 0, [16.902963217271246, 7.476549375511614], 0, [17.07910144494388, 5.7632047972414195], 0, [18.04054823840169, 6.106578652047782], 0, [19.469515702452366, 2.925424892792106], 0, [19.064111106000592, -0.6472031134391991], 0, [17.253277279358528, 2.956832838161076], 0, [14.95258895308757, 3.1324290048358128], 0, [13.37431523183268, 1.7225442000746034], 0, [10.73237450059647, 5.925995426719515], 0, false]]; + let cus = loadFile(data); + //外偏移 - + for (let i = 0.5; i <= 2; i += 0.5) + { + expect(cus[0].GetOffsetCurves(-i).length).toBe(1); + } + //内偏移+ + expect(cus[0].GetOffsetCurves(1).length).toBe(1); + expect(cus[0].GetOffsetCurves(1.2).length).toBe(3); +}) +test('闭合多段线偏移测试14', () => +{ + let data = + [1, ["Polyline", 1, 1, 1625, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 14, [340.820007357324, -3.870032999900914], 0, [431.6163856609081, 116.2815653567217], 0, [485.54806901416487, 54.84040710617603], 0, [533.3356365423672, 67.81131829240235], 0, [624.1320148459513, 40.504136847715344], 0, [656.9006325795757, 23.43714844478601], -0.783383849320176, [633.0068488154745, -74.86870475608706], 0.4462700081240285, [605.0169878346704, -106.27196341747704], -0.8416099256631104, [529.9222388617812, -128.11770857322662], 0, [510.1245323143834, -22.98506001118185], 0, [430.251026588674, -129.48306764546098], 0, [430.251026588674, -65.99387078656383], 0, [351.74287993519897, -145.86737651227318], 0, [303.2726328708796, -87.83961594231337], 0, true]]; + let cus = loadFile(data); + //外偏移 - + for (let i = 0.5; i <= 2; i += 0.5) + { + // expect(cus[0].GetOffsetCurves(-i).length).toBe(1); + } + //内偏移+ + // expect(cus[0].GetOffsetCurves(1).length).toBe(1); + // expect(cus[0].GetOffsetCurves(1.2).length).toBe(3); +}) diff --git a/src/Add-on/test/testIntersect.ts b/src/Add-on/test/testIntersect.ts index 5129725a4..7e3cdb11f 100644 --- a/src/Add-on/test/testIntersect.ts +++ b/src/Add-on/test/testIntersect.ts @@ -94,7 +94,7 @@ export class TestIntersect implements Command let cus = exRefSsRes.SelectSet.SelectEntityList as Curve[]; if (cus.length === 2) { - let pt = cus[0].IntersectWith(cus[1], 0); + let pt = cus[0].IntersectWith(cus[1], IntersectOption.ExtendBoth); console.log('pt: ', pt); if (pt.length) { diff --git a/src/GraphicsSystem/OffestPolyline.ts b/src/GraphicsSystem/OffestPolyline.ts index 63b8b739f..863ef170f 100644 --- a/src/GraphicsSystem/OffestPolyline.ts +++ b/src/GraphicsSystem/OffestPolyline.ts @@ -373,26 +373,27 @@ export class PolyOffestUtil if (par1 > 1) { //laterline是圆弧且都是正假交点,补圆弧,否则连接 - if (par2 > 1 && laterLine instanceof Arc) + if (par2 > 0 && laterLine instanceof Arc) { - this.fillArc(endIndex - 1, endIndex, nextPt, frontLine, laterLine); + this.fillArc(startIndex, endIndex, nextPt, frontLine, laterLine); } else { this.appendNewCuAndContour(frontLine, nextPt, intPt, startIndex); } } - else if (frontLine instanceof Arc && par1 < 0 && par2 < 0) - { - //forntline是arc且都是负假交点,补圆弧 - this.appendNewCuAndContour(frontLine, nextPt, intPt, startIndex); - } + // else if (frontLine instanceof Arc && par1 < 0 && par2 < 0) + // { + // //forntline是arc且都是负假交点,补圆弧 + // // this.appendNewCuAndContour(frontLine, nextPt, intPt, startIndex); + // this.fillArc(startIndex, endIndex, nextPt, frontLine, laterLine); + // } else if (frontLine instanceof Arc) { //其余情况如果frontline是Arc,补圆弧,否则补直线 - this.fillArc(endIndex - 1, endIndex, nextPt, frontLine, laterLine); + this.fillArc(startIndex, endIndex, nextPt, frontLine, laterLine); } - else + else//frontLine is Line { this.appendNewCuAndContour(frontLine, nextPt, frontLine.EndPoint, startIndex); this.m_RetCurves.push(new Line(frontLine.EndPoint, laterLine.StartPoint));