import { Factory } from "../../src/DatabaseServices/CADFactory"; import { CADFile } from "../../src/DatabaseServices/CADFile"; import { Polyline } from "../../src/DatabaseServices/Polyline"; import { Curve } from "../../src/DatabaseServices/Curve"; import { Entity } from "../../src/DatabaseServices/Entity"; Factory(Polyline); function loadFile(data) { let file = new CADFile(); file.Data = data; let cus: Curve[] = []; let count = file.Read(); for (let i = 0; i < count; i++) { cus.push(file.ReadObject(undefined) as Curve); } return cus; } // file.only function EntityToMatchSnapshot(ens: Entity[]) { let f = new CADFile(); f.Write(ens.length); for (let e of ens) f.WriteObject(e); expect(f.Data).toMatchSnapshot(); } test('IKKGK圆与直线补圆弧', () => { let f = new CADFile(); f.Data = [1, ["Polyline", 1, 1, 5, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -47.808747539346534, 10.92028558763661, 0, 1], 2, 3, [-0.906131771640112, 6.969061295372345], 3.7897716494829594, [4.660056657223795, 6.487252124645892], 0, [18.466397865202012, 17.128892766521286], 0, false]] f.Read(); let pl = f.ReadObject() as Polyline; //负1 左边. 禁止补圆弧 let cus = pl.GetOffsetCurves(-1); EntityToMatchSnapshot(cus); pl.GetOffsetCurves(-5.654208780429431); // //翻转曲线后测试 pl.Reverse(); cus = pl.GetOffsetCurves(1); EntityToMatchSnapshot(cus); //圆丢失的问题 cus = pl.GetOffsetCurves(-1.926388985025112); EntityToMatchSnapshot(cus); }); test('闭合多段线偏移测试1', () => { 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) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = -1.5; i < 0; i += 0.01) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 2; i < 10; i += 1) { expect(cus[0].GetOffsetCurves(-i).length).toBe(0); } }) test('闭合多段线偏移测试2', () => { let data = [1, ["Polyline", 1, 1, 734, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 4, [8.176442643449754, 4.003694129881114], 0.6482011490054378, [8.554554536583165, 4.090460859042256], 0, [7.7292787370841225, 8.733182129315965], 0, [7.8227800907745895, 4.037582052934876], 1.223388515290821, true]] let cus = loadFile(data); expect(cus[0].GetOffsetCurves(-0.1799).length).toBe(2); for (let i = 0.2; i < 10; i += 1) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = -0.17; i < 0; i += 0.01) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = -0.18; i < -0.34; i -= 0.01) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 0.35; i < 3; i += 0.01) { expect(cus[0].GetOffsetCurves(-i).length).toBe(0); } }) test('闭合多段线偏移测试3', () => { let data = [1, ["Polyline", 1, 1, 1172, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 5, [12.52535684411379, 4.512623511896158], 0.39558516940595195, [13.121416971132648, 4.487590129452889], 0, [12.414545456418505, 8.796498405316765], 0, [12.015990240675425, 8.743859037199755], 0, [12.015990240675425, 4.4951100391838885], 0.8508932598252141, true]] let cus = loadFile(data); for (let i = 0.5; i < 10; i += 1) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 0.1; i <= 0.5; i += 0.01) { expect(cus[0].GetOffsetCurves(-i).length).toBe(1); } for (let i = 0.51; i <= 1; i += 0.1) { expect(cus[0].GetOffsetCurves(-i).length).toBe(0); } }) test('闭合多段线偏移测试4', () => { 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) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 0.1; i <= 0.9; i += 0.01) { expect(cus[0].GetOffsetCurves(-i).length).toBe(1); } for (let i = 1; i <= 2; i += 0.1) { 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) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 0.34; i <= 1; i += 0.1) { expect(cus[0].GetOffsetCurves(i).length).toBe(0); } }) test('闭合多段线偏移测试5', () => { 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) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } expect(cus[0].GetOffsetCurves(-1.3).length).toBe(2); 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) { expect(cus[0].GetOffsetCurves(-i).length).toBe(1); } for (let i = 2.9; i <= 6; i += 0.1) { let len = cus[0].GetOffsetCurves(-i).length; expect(len).toBe(0); } //反转曲线 cus[0].Reverse(); for (let i = 0.5; i < 10; i += 0.5) { expect(cus[0].GetOffsetCurves(-i).length).toBe(1); } expect(cus[0].GetOffsetCurves(1.3).length).toBe(2); 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) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 2.9; i <= 6; i += 0.1) { let len = cus[0].GetOffsetCurves(i).length; expect(len).toBe(0); } }) test('闭合多段线偏移测试6', () => { let data = [1, ["Polyline", 1, 1, 11080, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2.007355593658339, -15.226898894860806, 0, 1], 2, 6, [0.06393073988345588, -13.474722415885717], 0, [0.06393073988345643, -4.4950563800695225], 0, [6.069811270331949, -4.495056380069524], -0.9999999999999999, [6.0698112703319484, -9.101508437403805], 0.8261854469247998, [6.069811270331948, -13.53303193559881], 0, [0.06393073988345588, -13.474722415885717], 0, false]]; let cus = loadFile(data); for (let i = 0.5; i < 10; i += 0.5) { expect(cus[0].GetOffsetCurves(-i).length).toBe(1); } for (let i = 0.1; i <= 2.9; i += 0.1) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 3; i <= 6; i += 0.1) { let len = cus[0].GetOffsetCurves(i).length; expect(len).toBe(0); } }) test('闭合多段线偏移测试7', () => { let data = [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) { expect(cus[0].GetOffsetCurves(-i).length).toBe(1); } //内偏移 for (let i = 3.6; i > 0; i -= 0.1) { expect(cus[0].GetOffsetCurves(i).length).toBe(1); } for (let i = 3.7; i <= 4.7; i += 0.1) { 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) { expect(cus[0].GetOffsetCurves(i).length).toBe(0); } }) test('闭合多段线偏移测试8', () => { let data = [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) { expect(cus[0].GetOffsetCurves(-i).length).toBe(1); } //内偏移+ 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++) { expect(cus[0].GetOffsetCurves(i).length).toBe(3); } for (let i = 41; i <= 44.3; i += 0.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) { expect(cus[0].GetOffsetCurves(i).length).toBe(0); } }) test('闭合多段线偏移测试9', () => { let data = [1, ["Polyline", 1, 1, 12283, false, 2, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2494.1602062139054, -154.37421492307953, 0, 1], 2, 4, [-835.9056689963722, -81.71614968554674], -1.404257507243489, [-2.5205246091134654, -224.3682931983378], -0.7704346688180675, [-677.9527382520764, -55.635630094036955], 0, [-835.9056689963722, -81.71614968554674], 0, false]]; let cus = loadFile(data); //外偏移 - //内偏移+ })