You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/__test__/Polyline/offsetbug.test.ts

121 lines
7.2 KiB

import { Factory } from "../../src/DatabaseServices/CADFactory";
import { CADFiler } from "../../src/DatabaseServices/CADFiler";
import { Curve } from "../../src/DatabaseServices/Entity/Curve";
import { Polyline } from "../../src/DatabaseServices/Entity/Polyline";
Factory(Polyline);
function loadFile(data)
{
let file = new CADFiler();
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;
}
test('补充bug测试#IKWGF', () =>
{
//https://gitee.com/BearCAD/WebThreeJs/issues/IKWGF
let data =
[1, "Polyline", 1, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.073087818696886, -6.460623229461753, 0, 1], 2, 13, [2.913294797687863, 5.657009425680781], -0.10216571300036134, [3.0668619767188887, 5.578034682080925], 0, [4.6094463694365295, 5.578034682080925], -2.632498680881094, [4.609446369436524, 3.627167630057804], 0, [2.4566473988439355, 3.627167630057804], 0, [2.4566473988439355, 3.627167630057804], 0, [2.4566473988439355, 4.990312071734102], -0.11795690250598688, [2.37813156168231, 5.1728323699421965], 0, [1.8884393063583844, 5.1728323699421965], 0, [1.8884393063583844, 5.1728323699421965], 0, [1.8884393063583844, 6.15606936416185], 0, [2.913294797687864, 6.15606936416185], 0, [2.913294797687864, 5.657009425680784], 0, false];
let pl = loadFile(data)[0];
//situation 1
let cus = pl.GetOffsetCurves(0.3743);
expect(cus.length).toBe(3);
expect(cus[0].Length).toMatchSnapshot();
expect(cus[1].Length).toMatchSnapshot();
expect(cus[2].Length).toMatchSnapshot();
//situation 2
cus = pl.GetOffsetCurves(0.3602);
expect(cus.length).toBe(1);
expect(cus[0].Length).toMatchSnapshot();
//situation 3
cus = pl.GetOffsetCurves(0.4269);
expect(cus.length).toBe(2);
expect(cus[0].Length).toMatchSnapshot();
expect(cus[1].Length).toMatchSnapshot();
//situation 4
cus = pl.GetOffsetCurves(0.2286);
expect(cus.length).toBe(1);
expect(cus[0].Length).toMatchSnapshot();
//situation 5
cus = pl.GetOffsetCurves(0.2309);
expect(cus.length).toBe(2);
expect(cus[0].Length).toMatchSnapshot();
expect(cus[1].Length).toMatchSnapshot();
//situation 6
cus = pl.GetOffsetCurves(0.3792);
expect(cus.length).toBe(3);
expect(cus[0].Length).toMatchSnapshot();
expect(cus[1].Length).toMatchSnapshot();
expect(cus[2].Length).toMatchSnapshot();
});
test("偏移真交点判断错误", () =>
{
let data =
[1, "Polyline", 5, 2, 102, false, 1, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1671.5225704902539, 783.1395680459682, 0, 1], 0, 0, 2, 3, [-75, -2.842170943040401e-14], 0.9999999999999997, [75, 0], -0.9999999999999997, [225, -5.684341886080802e-14], 0.9999999999999923, true];
let pl = loadFile(data)[0];
//situation 1
let cus = pl.GetOffsetCurves(75);
expect(cus.length).toBe(1);
});
test("补圆弧错误01", () =>
{
let data =
[1, "Polyline", 5, 2, 102, false, 1, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, -248.36561743341508, -235.59093395827813, 0, 1], 0, 0, 2, 4, [150, 74.99999999999999], -0.9999999999999997, [300, 74.99999999999903], 0.5398412275759912, [90.31248359508209, 212.61322750888567], 0, [137.41283997485402, 33.411090345222135], 0.14801304447405583, true];
let pl = loadFile(data)[0];
let cus = pl.GetOffsetCurves(180);
expect(cus.length).toBe(1);
});
test("补圆弧错误02", () =>
{
let data =
[1, "Polyline", 5, 2, 101, false, 1, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 222.42531269162828, 290.34989003720335, 0, 1], 0, 0, 2, 5, [30.164179214139466, -146.93577608035883], 0, [-2.966375216967549, -20.884369768256875], -0.3337793930899486, [-74.99999999999987, -74.99999999999926], -0.4142135623730949, [-149.99999999999986, 6.821210263296962e-13], 0.4142135623730963, [-2.842170943040401e-14, -149.99999999999986], 0.050662063831163964, true];
let pl = loadFile(data)[0];
let cus = pl.GetOffsetCurves(120);
expect(cus.length).toBe(1);
cus = pl.GetOffsetCurves(145);
expect(cus.length).toBe(1);
});
test('方向判断错误', () =>
{
let plD = { "file": [1, "Polyline", 8, 2, 100, false, 1, 1, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 905.8692798363977, -201.17289418446444, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 46.0379459990736, -2.9086509590968035, 0, 1], 0, 2, 4, [339.450877196156, 791.6288697108841], 1.00000000428954, [336.55690134418086, 796.884809566722], 0.5932441531761995, [337.21656343856364, 602.2844235796431], 0.9999999957104566, [340.0748399325664, 607.5598624698049], -0.5932441531761995, true], "basePt": { "x": 108.6124401913877, "y": 77.99043062200967, "z": 0 } };
let f = new CADFiler(plD.file);
f.Read();
let pl = f.ReadObject() as Polyline;
let cus = pl.GetOffsetCurves(-6);
expect(cus.length).toBe(0);
});
test('椭圆弧', () =>
{
let plD = { "file": [1, "Polyline", 8, 2, 102, false, 1, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1289.9346364607509, 332.5030722578549, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 820.1803525743126, 581.2659525093524, 0, 1], 0, 2, 29, [432.0460356435176, 403.46037661698426], 0.021580076459698706, [463.92416271981983, 504.9908627206493], 0.023385317556476135, [485.74158736249274, 604.8737255606712], 0.027571231622566708, [496.47815104357187, 698.4385534824789], 0.03563178898710651, [495.63182397816263, 781.3103591222867], 0.050842162235323375, [483.2421794792187, 849.6141489537733], 0.07910092533357932, [459.88854355341005, 900.1561136786283], 0.12063838591401563, [426.6629062609251, 930.5729671996768], 0.13545567593018473, [385.11886147391715, 939.4424512521792], 0.09932499578553051, [337.19896255373715, 926.3498386195639], 0.06291985365077717, [285.14389071475034, 891.9073253171384], 0.04203344039554631, [231.38768326109079, 837.72540498682], 0.030968741370535888, [178.4439207075584, 766.3375640043748], 0.025115858156859405, [128.78819454839015, 681.0818184722556], 0.022236616398650932, [84.74235135041363, 585.9446322965887], 0.02136646021764985, [48.36592578812645, 485.3745145655607], 0.022236616398651377, [21.359839091328695, 384.07401220861504], 0.025115858156859405, [4.986865858853321, 286.77982412854294], 0.030968741370536998, [0.012588121797818985, 198.0413184252447], 0.04203344039554542, [6.669597578634011, 122.00780899964019], 0.06291985365077939, [24.646619865895417, 62.234538247294836], 0.09932499578553959, [53.103069401454434, 21.51643787536966], 0.13545567593018348, [90.70835423210053, 1.7574410023376004], 0.1206383859140207, [135.70409303442523, 3.881456361433834], 0.0791009253335779, [185.98633507120292, 27.78916735514042], 0.05084216223532371, [239.20393858949257, 72.36267598890424], 0.03563178898710676, [292.868507595897, 135.5177745389069], 0.027571231622567013, [344.47074648756154, 214.30140078880106], 0.023385317556475747, [391.5977919256808, 305.02971993685304], 0.021580076459698203, true], "basePt": { "x": 350.35357093768766, "y": 332.503072257855, "z": 0 }, "ucs": [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let f = new CADFiler(plD.file);
f.Read();
let pl = f.ReadObject() as Polyline;
let cus = pl.GetOffsetCurves(1);
expect(cus.length).toBe(1);
});