修复共线时偏移bug,满测试覆盖率

pull/68/head
Zoe 6 years ago
parent dfef0ce3d9
commit 200c5ee2fd

@ -63,16 +63,15 @@ describe("闭合多段线", () =>
let data =
[1, ["Polyline", 1, 1, 3, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 4, [6.059716713881022, 3.983456090651555], 1.1217395195062214, [6.383002832861191, 4.064022662889515], 0, [4.929178470254959, 8.399433427762037], 1.2642365052895204, [5.750708215297452, 4.050991501416427], 0.7171789779484218, true]]
let cus = loadFile(data);
for (let i = 0.5; i < 10; i += 0.5)
for (let i = 1; i < 10; i += 1)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = -1.5; i < 0; i += 0.01)
for (let i = -0.5; i < -0.15; i += 0.05)
{
if (cus[0].GetOffsetCurves(i).length === 0) console.log(i);
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = 2; i < 10; i += 1)
for (let i = 2; i < 10; i += 2)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(0);
}
@ -85,19 +84,19 @@ describe("闭合多段线", () =>
let cus = loadFile(data);
expect(cus[0].GetOffsetCurves(-0.1799).length).toBe(2);
for (let i = 0.2; i < 10; i += 1)
for (let i = 0.2; i < 10; i += 2)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = -0.17; i < 0; i += 0.01)
for (let i = -0.17; i < 0; i += 0.03)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = -0.18; i < -0.34; i -= 0.01)
for (let i = -0.2; i > -0.34; i -= 0.02)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = 0.35; i < 3; i += 0.01)
for (let i = 0.35; i < 0.5; i += 0.05)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(0);
}
@ -126,22 +125,22 @@ describe("闭合多段线", () =>
let data =
[1, ["Polyline", 1, 1, 1453, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 5, [17.138593827490823, 4.9429359111242475], 0.6262511063576436, [18.12066066115083, 4.8347623552068075], 0, [18.12066066115083, 10.450468898178228], 0, [16.250318720818097, 10.450468898178228], 0, [16.250318720818097, 4.952028938447833], 0.8739221457690426, true]];
let cus = loadFile(data);
for (let i = 0.5; i < 10; i += 0.5)
for (let i = 1; i < 10; i += 2)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = 0.1; i <= 0.9; i += 0.01)
for (let i = 0.4; i <= 0.6; i += 0.02)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
for (let i = 1; i <= 2; i += 0.1)
for (let i = 1; i <= 2; i += 0.2)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(0);
}
//变换曲线顺序
data = [1, ["Polyline", 1, 1, 1891, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 5, [22.178278439318607, -1.9155229050126357], 0, [22.83746943877066, -1.800164480108526], 0, [23.79329638797614, -6.11786552651948], -0.871731137783436, [23.348342463346004, -6.282663276382493], -0.7430788314178012, [22.903388538715866, -6.267501883395095], 0, true]];
cus = loadFile(data);
for (let i = 0.01; i <= 0.33; i += 0.01)
for (let i = 0.01; i <= 0.33; i += 0.03)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
@ -155,7 +154,7 @@ describe("闭合多段线", () =>
let data =
[1, ["Polyline", 1, 1, 264, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 6, [0, 0], 0, [5, 0], 0.9999999999999999, [5, 5], -0.9999999999999999, [5, 10], 0, [0, 10], 0, [0, 0], 0, false]];
let cus = loadFile(data);
for (let i = 0.5; i < 10; i += 0.5)
for (let i = 0.5; i < 10; i += 1.5)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
@ -167,14 +166,14 @@ describe("闭合多段线", () =>
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
for (let i = 2.9; i <= 6; i += 0.1)
for (let i = 2.9; i <= 6; i += 0.5)
{
let len = cus[0].GetOffsetCurves(-i).length;
expect(len).toBe(0);
}
//反转曲线
cus[0].Reverse();
for (let i = 0.5; i < 10; i += 0.5)
for (let i = 0.5; i < 10; i += 1.5)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
@ -182,11 +181,11 @@ describe("闭合多段线", () =>
expect(cus[0].GetOffsetCurves(1.2).length).toBe(1);
expect(cus[0].GetOffsetCurves(2).length).toBe(1);
for (let i = 2; i <= 2.8; i += 0.1)
for (let i = 2; i <= 2.8; i += 0.2)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = 2.9; i <= 6; i += 0.1)
for (let i = 2.9; i <= 6; i += 1)
{
let len = cus[0].GetOffsetCurves(i).length;
expect(len).toBe(0);
@ -217,22 +216,22 @@ describe("闭合多段线", () =>
[1, ["Polyline", 1, 1, 3103, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 6, [7.068575921553821, 19.385189367549113], 0, [17.866251977281493, 27.179961431447197], -0.7242773730087224, [27.449988121418478, 20.215779833374317], -0.5496546648274403, [21.06083069199382, 18.554598901723907], 0.7351204491094537, [17.802360402987244, 16.70174324719076], -1.609719383557213, [7.068575921553821, 19.385189367549113], 0, true]];
let cus = loadFile(data);
//外偏移
for (let i = 0.1; i < 5; i += 0.1)
for (let i = 0.5; i < 5.5; i += 1)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
//内偏移
for (let i = 3.6; i > 0; i -= 0.1)
for (let i = 3.6; i > 0; i -= 0.6)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = 3.7; i <= 4.7; i += 0.1)
for (let i = 3.7; i <= 4.7; i += 0.2)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(2);
}
expect(cus[0].GetOffsetCurves(5).length).toBe(1);
for (let i = 6.1; i < 10; i += 0.5)
for (let i = 6.1; i < 10; i += 1)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(0);
}
@ -243,7 +242,7 @@ describe("闭合多段线", () =>
[1, ["Polyline", 1, 1, 8895, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 9, [-35.77751476623335, 275.4953263952156], 0, [220.87993293360785, 358.6317790975911], 0, [317.8724610863793, 154.43698298649332], 0, [128.26300755464567, 91.72000989522755], 0, [202.6482547094027, 193.81740795077644], 0, [96.90452100901277, 149.33211308371583], 0, [167.64343251892882, 238.30270281783706], 0, [-5.9221441755043855, 147.87357882577945], 0, [115.1361992332179, 265.2855865896607], 0, true]];
let cus = loadFile(data);
//外偏移 -
for (let i = 20; i < 200; i += 20)
for (let i = 20; i < 200; i += 100)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
@ -251,16 +250,16 @@ describe("闭合多段线", () =>
expect(cus[0].GetOffsetCurves(15).length).toBe(1);
expect(cus[0].GetOffsetCurves(17.8).length).toBe(2);
expect(cus[0].GetOffsetCurves(19).length).toBe(3);
for (let i = 20; i <= 40; i++)
for (let i = 20; i <= 40; i += 10)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(3);
}
for (let i = 41; i <= 44.3; i += 0.1)
for (let i = 41.3; i <= 44.3; i += 1)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(2);
}
expect(cus[0].GetOffsetCurves(45).length).toBe(1);
for (let i = 48; i <= 200; i += 10)
for (let i = 50; i <= 250; i += 100)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(0);
}
@ -272,16 +271,23 @@ describe("闭合多段线", () =>
let cus = loadFile(data);
//外偏移 -
//内偏移+
for (let i = -350; i <= 350; i += 50)
for (let i = -350; i <= 350; i += 100)
{
if (i === 0) continue;
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
expect(cus[0].GetOffsetCurves(360).length).toBe(0);
for (let i = 360; i <= 460; i += 50)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(0);
}
cus[0].Reverse();
for (let i = -350; i <= 350; i += 100)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
for (let i = 360; i <= 460; i += 50)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(0);
}
})
test('闭合多段线偏移测试10', () =>
{
@ -289,22 +295,22 @@ describe("闭合多段线", () =>
[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++)
for (let i = 5; i < 20; i += 5)
{
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)
for (let i = 2.5; i < 4; i += 1)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(2);
}
for (let i = 4.2; i <= 7.2; i += 0.4)
for (let i = 4.2; i <= 7.2; i += 0.8)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = 7.5; i <= 15.5; i++)
for (let i = 7.5; i <= 17.5; i += 5)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(0);
}
@ -351,11 +357,11 @@ describe("闭合多段线", () =>
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)
for (let i = 0.55; i <= 0.85; i++)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(2);
}
for (let i = 1; i <= 2; i += 0.1)
for (let i = 1; i <= 2; i += 0.2)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(0);
}
@ -550,7 +556,7 @@ describe("不规则不闭合多段线测试", () =>
}
})
test("test2", () =>
test("test2-共线线段", () =>
{
let data =
[1, ["Polyline", 1, 1, 8814, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 7, [15.642409533480423, -31.01626057276902], 0, [38.129771973149346, -31.016260572769028], 0, [32.85929640135194, -26.50707591689791], 0, [47.440945483324754, -26.50707591689791], 0, [45.33685543194063, -31.016260572769028], 0, [61.52187596164093, -31.016260572769035], 0, [70.31099992504923, -35.88209931313313], 0, false]];
@ -564,7 +570,18 @@ describe("不规则不闭合多段线测试", () =>
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
cus[0].Reverse();
expect(cus[0].GetOffsetCurves(-18).length).toBe(2);
data = [1, ["Polyline", 1, 1, 22696, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 7, [21.944751443449043, -31.01626057276902], 0, [38.129771973149346, -31.016260572769028], 0, [32.85929640135194, -26.50707591689791], 0, [47.440945483324754, -26.50707591689791], 0, [45.33685543194063, -31.016260572769028], 0, [61.52187596164093, -31.016260572769035], 0, [70.31099992504923, -35.88209931313313], 0, false]];
cus = loadFile(data);
expect(cus[0].GetOffsetCurves(11.4).length).toBe(1);
data = [1, ["Polyline", 1, 1, 24383, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -56.21146708819905, -48.62279820279199, 0, 1], 2, 7, [26.333787338902418, -31.01626057276902], 0, [35.05226039203026, -31.016260572769013], 0, [32.85929640135194, -26.50707591689791], 0, [47.440945483324754, -26.50707591689791], 0, [41.54871106124796, -31.016260572769013], 0, [61.52187596164093, -31.016260572769035], 0, [70.31099992504923, -35.88209931313313], 0, false]]
cus = loadFile(data);
expect(cus[0].GetOffsetCurves(5.2).length).toBe(1);
data = [1, ["Polyline", 1, 1, 4, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 6, [-3.158640226628895, -0.9915014164305944], 0, [-1.0906515580736538, -0.991501416430595], 0, [-1.983002832861189, 0.18413597733711037], 0, [1.0906515580736549, 0.3966005665722377], 0, [0.2974504249291776, -0.9915014164305944], 0, [3.966005665722378, -0.9915014164305953], 0, false]];
cus = loadFile(data);
expect(cus[0].GetOffsetCurves(2.01133).length).toBe(1);
})
test("test3", () =>
{
@ -582,18 +599,13 @@ describe("不规则不闭合多段线测试", () =>
let data =
[1, ["Polyline", 1, 1, 14565, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -131.50093441946296, -806.1569163328921, 0, 1], 2, 24, [256.5228611988947, -38.705370748164505], 0, [372.1955588024039, 31.844231195771492], 0, [372.1955588024039, -31.54297461172431], 0, [450.9819163032461, 37.57414810492366], 0, [423.0485713711294, -54.10452244151095], 0, [589.216161736542, 52.97329979827009], 0, [611.0614699526845, -2.177150452319474], 0, [672.6580767260702, 61.21005535517633], 0, [678.0298738284004, 13.938240854670997], 0, [735.329042919922, 21.100636991111184], 0, [684.1179105443746, -21.515620020708024], 0, [730.6734854312358, -32.61733403219032], 0, [815.1897598412304, 38.29038771856768], 0, [835.6025888300849, -8.981426781937659], 0, [862.1034545349137, 74.4604882075907], 0, [943.4539498526012, 74.46048820759069], 0, [986.972668777612, -29.064785548515978], 0, [924.5022496755805, -66.26627108118637], 0, [1001.0109652050348, -106.27541589934134], 0, [965.9152241364777, -128.73669018321777], 0, [1006.6262837760039, -176.46689803645526], 0, [904.1467198558175, -189.8032796425069], 0, [981.3573502066429, -242.44689124534239], 0, [1004.5205393118904, -256.48518767276516], 0, false]];
let cus = loadFile(data);
for (let i = 50; i <= 250; i += 50)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
expect(cus[0].GetOffsetCurves(-100).length).toBe(1);
expect(cus[0].GetOffsetCurves(46.8).length).toBe(2);
expect(cus[0].GetOffsetCurves(49.6).length).toBe(3);
expect(cus[0].GetOffsetCurves(86.6).length).toBe(2);
expect(cus[0].GetOffsetCurves(102.3).length).toBe(2);
for (let i = 110; i <= 200; i += 30)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
expect(cus[0].GetOffsetCurves(110).length).toBe(1);
})
test("test5", () =>
{
@ -650,21 +662,21 @@ describe("不规则不闭合多段线测试", () =>
[1, ["Polyline", 1, 1, 2347, false, 1, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -86.54515219838936, -34.782221464287886, 0, 1], 2, 5, [-51.274354719855246, 28.573003242461496], 0, [-13.931531095689206, 15.255196629685734], 3.7897716494829594, [-8.365342666825299, 14.77338745895928], 0, [5.4409985411529185, 25.415028100834675], 0.37399715496699776, [29.033295173881022, 23.38858533792915], 0, false]];
let cus = loadFile(data);
expect(cus[0].GetOffsetCurves(-3.133).length).toBe(2);
for (let i = 10; i <= 60; i++)
for (let i = 10; i <= 60; i += 10)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
for (let i = 5.9; i <= 43.3; i += 5)
for (let i = 5.9; i <= 43.3; i += 10)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
cus[0].Reverse();
expect(cus[0].GetOffsetCurves(3.133).length).toBe(2);
for (let i = 10; i <= 60; i++)
for (let i = 10; i <= 60; i += 10)
{
expect(cus[0].GetOffsetCurves(-i).length).toBe(1);
}
for (let i = 5.9; i <= 43.3; i += 5)
for (let i = 5.9; i <= 43.3; i += 10)
{
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
@ -680,6 +692,14 @@ describe("不规则不闭合多段线测试", () =>
expect(cus[0].GetOffsetCurves(i).length).toBe(1);
}
})
test("test9-2圆弧没交点", () =>
{
let data =
[1, ["Polyline", 1, 1, 23321, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 3, [-245.7800398731897, -124.83507012637789], 0.47532901948537815, [-247.69480466441718, -117.62074637472406], 0.12615539092932912, [-193.96898890583213, -126.5297489543612], 0, false]]
let cus = loadFile(data);
expect(cus[0].GetOffsetCurves(11.22).length).toBe(1);
expect(cus[0].GetOffsetCurves(-11.22).length).toBe(1);
})
})

@ -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], IntersectOption.ExtendBoth);
let pt = cus[0].IntersectWith(cus[1], 0);
console.log('pt: ', pt);
if (pt.length)
{

@ -93,7 +93,7 @@ export class TestTargeOnCurve implements Command
testPtIn(outline: Polyline, l: Curve)
{
if (outline.PtInCurve(l.StartPoint))
if (outline.PtInCurve(l.EndPoint))
{
l.ColorIndex = 3
} else

@ -1,4 +1,4 @@
import { Vector3, EquirectangularReflectionMapping } from 'three';
import { Vector3 } from 'three';
import { getDeterminantFor3V } from '../Common/CurveUtils';
import { Arc } from '../DatabaseServices/Arc';
import { Circle } from '../DatabaseServices/Circle';
@ -242,7 +242,7 @@ export function IntersectLAndLFor3D(p1: Vector3, p2: Vector3, p3: Vector3, p4: V
let v2 = p4.clone().sub(p3).normalize();
let w = p3.clone().sub(p1).normalize();
if (equaln(Math.abs(v1.dot(v2)), 1, 1e-6) && equaln(Math.abs(v1.dot(w)), 1, 1e-6)) //平行共线
if (equaln(Math.abs(v1.dot(v2)), 1, 1e-6) && (equal(w, new Vector3()) || equaln(Math.abs(v1.dot(w)), 1, 1e-6))) //平行共线
{
let pts = [p1, p2, p3, p4];
pts.sort(comparePoint('xyz'));

@ -61,7 +61,6 @@ export class PolyOffestUtil
// 裁剪并优化的曲线
let { boxCurves, outputCus } = this.trimByContours(this.m_RetCurves);
this.m_RetCurves = this.optimizeCus(boxCurves, outputCus);
this.m_RetCurves.push(...this.unNeedCutCus);
@ -115,7 +114,7 @@ export class PolyOffestUtil
}
})
//寻找自交线段
// 寻找自交线段
for (let i = 0; i < outputCus.length; i++)
{
let c1 = outputCus[i];
@ -133,45 +132,45 @@ export class PolyOffestUtil
if (c2b.min.y > c1b.max.y)
continue;
//如果线段端点相连,且交点不是端点,那就是2条共线的直线,删掉短的被包含的那条
let isLink = [c1.StartPoint, c1.EndPoint].some(p => equal(p, c2.StartPoint) || equal(p, c2.EndPoint));
if (isLink)
//被包含的直线删掉
if (c1 instanceof Line && c2 instanceof Line)
{
if (c1 instanceof Arc || c2 instanceof Arc) continue;
let pts = c1.IntersectWith(c2, IntersectOption.OnBothOperands);
if (pts.length === 1 && !(equal(pts[0], c2.StartPoint) || equal(pts[0], c2.EndPoint)))
//c1完全在c2内
if (c2.PtOnCurve(c1.StartPoint) && c2.PtOnCurve(c1.EndPoint))
{
if (c1.Length > c2.Length)
{
outputCus.splice(j, 1);
j--;
}
else
{
outputCus.splice(i, 1);
i--;
break;
}
outputCus.splice(i, 1);
i--;
break;
}
else if (c1.PtOnCurve(c2.StartPoint) && c1.PtOnCurve(c2.EndPoint))
{
// c2完全在c1内
outputCus.splice(j, 1);
j--;
continue;
}
continue;
}
//如果线段端点相连,跳过
let isLink = [c1.StartPoint, c1.EndPoint].some(p => equal(p, c2.StartPoint) || equal(p, c2.EndPoint));
if (isLink) continue;
let pts = c1.IntersectWith(c2, IntersectOption.OnBothOperands);
if (pts.length > 0)
{
//按照从左到右,从上到下,分别取前后部分,即去掉中间部分
let c1s = c1.GetSplitCurvesByPts(pts);
if (c1s.length === 2)
{
outputCus[i] = c1s[0];
boxCurves.set(c1s[0], c1s[0].BoundingBox);
}
let c2s = c2.GetSplitCurvesByPts(pts);
if (c2s.length === 2)
[c1, c2].forEach((c, index) =>
{
outputCus[j] = c2s[1];
boxCurves.set(c2s[1], c2s[1].BoundingBox);
}
let cs = c.GetSplitCurvesByPts(pts);
if (cs.length === 2)
{
let box = SortEntityByBox(cs, true);
index === 0 ? outputCus[i] = cs[index] : outputCus[j] = cs[index];
boxCurves.set(cs[index], box.get(cs[index]));
}
})
}
}
}
@ -502,11 +501,8 @@ export class PolyOffestUtil
let iPts = cirs.length > 1 ? frontLine.IntersectWith(cirs[1], 0) : [];
if (iPts.length === 0)
{
let dist = frontLine.EndPoint.distanceToSquared(cirs[0].Center);
if (equaln(dist, this.m_dist2))
iPts = [frontLine.EndPoint];
else
iPts = frontLine.IntersectWith(cirs[0], 0);
//第一个圆肯定和frontline相切,切点为frontline的终点
iPts = [frontLine.EndPoint];
}
else
{
@ -515,10 +511,10 @@ export class PolyOffestUtil
//#region 避免错误块
//假设我们认为连接一定能成功,那么下面的if不是必要的
if (!iPts)
{
console.error("补圆失败,距离为", this.m_OffestDist);
}
// if (!iPts)
// {
// console.error("补圆失败,距离为", this.m_OffestDist);
// }
//#endregion
let iPt = this.selectFitInterPt(iPts, frontLine.EndPoint);
@ -600,9 +596,6 @@ export class PolyOffestUtil
{
cu = onCu0Pts.length < onCu1Pts.length ? arc1 : arc2;
}
//防止加入0长度圆弧
if (equaln(cu.Length, 0, 1e-6))
return;
this.m_RetCurves.push(cu);

Loading…
Cancel
Save