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/IntersectSelf.test.ts

61 lines
7.8 KiB

import { Polyline } from "../../src/DatabaseServices/Entity/Polyline";
import { LoadCurvesFromFileData } from "../Utils/LoadEntity.util";
describe("多段线自交测试", () =>
{
test("1", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 5, [-405.4658285340993, 346.15614953113254], 0, [199.05178654403426, 293.2185491719283], 0, [-41.37296878534835, -275.93381387612317], 0, [-295.29944682260975, -125.79927409254014], 0, [-405.4658285340993, 346.15614953113254], 0, false], "basePt": { "x": -405.4658285340993, "y": -275.93381387612317, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeFalsy();
});
test("2", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 5, [-405.4658285340993, 346.15614953113254], 0, [199.05178654403426, 293.2185491719283], 0, [-41.37296878534835, -275.93381387612317], 0, [-329.7340533770039, -149.1338534587412], 0, [-168.03429997805506, 499.10567020310555], 0, false], "basePt": { "x": -405.4658285340993, "y": -275.93381387612317, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeTruthy();
});
test("3", () =>
{
let data = { "file": [2, "Polyline", 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 5, [-405.4658285340993, 346.15614953113254], 0, [199.05178654403426, 293.2185491719283], 0, [-41.37296878534835, -275.93381387612317], 0, [-329.7340533770039, -149.1338534587412], 0, [-168.03429997805506, 499.10567020310555], 0, false, "Polyline", 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 3, [350.9080380477244, -198.03631544369273], 0, [602.9728936312604, -450.10117102722876], 0, [450.7051441358635, -297.83342153183185], 0, false], "basePt": { "x": -405.4658285340993, "y": -450.10117102722876, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeTruthy();
});
test("4", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 102, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 4, [299.09997619187925, -843.5733706604224], 0, [975.021500869887, -932.7190956496634], -0.9667799920499004, [909.3278130216058, -1605.3849557429785], 0.9667799920499004, [975.021500869887, -932.7190956496634], 0, false], "basePt": { "x": 299.09997619187925, "y": -1606.0680424764628, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeTruthy();
});
test("5", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 108, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1212.5305724196535, 482.7356638308014, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 996.7017971879932, 325.233158998051, 0, 1], 0, 2, 2, [0, 0], 0.7155775946627989, [-118.0686402962823, 0], 0, true], "basePt": { "x": 1094.461932123371, "y": 482.7356638308014, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeFalsy();
});
test("6", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 121, false, 1, 7, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 351.73625918131165, 368.74059237065853, 1], 0, 0, true, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 351.73625918131165, 368.74059237065853, 1], 0, 2, 5, [0, 0], 0, [600, 0], 0, [600, 891.5082590745878], 0, [50, 891.5082590745878], 0.41421356237309503, [0, 841.5082590745878], 0, true], "basePt": { "x": 0, "y": 351.73625918131165, "z": 368.74059237065853 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeFalsy();
});
test("7", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 112, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5882.0163350721095, -731.8781048637103, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 3, [-575.8829196797014, 0], 0, [0, 0], 1.0114583228934644, [-546.610380563744, -20.217610565438804], 0, false], "basePt": { "x": 5306.133415392408, "y": -752.095715429149, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeTruthy();
});
test("存在0长度线段", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 657, false, 1, 7, 0, [6.123233995736766e-17, 3.0616169978683826e-16, 1, 0, 0, -1, 3.0616169978683826e-16, 0, 1, -1.874699728327322e-32, -6.123233995736766e-17, 0, -4.307695186480463e-12, 1515.3176391778895, -69649.98365070373, 1], 0, 0, true, [6.123233995736766e-17, 3.0616169978683826e-16, 1, 0, 0, -1, 3.0616169978683826e-16, 0, 1, -1.874699728327322e-32, -6.123233995736766e-17, 0, -4.307695186480463e-12, 1515.3176391778895, -69649.98365070373, 1], 0, 2, 27, [70350.00115102, 32.607], 0.279706873, [70369.892619953, 50.0254], 0.072615668, [70375.178451285, 70.93], 0, [70266.183079702, 70.93], 0, [70266.183079702, 87.9297], 0, [70375.17827523, 87.9297], 0.050805326, [70372.08281644, 102.8523], 0.188505204, [70358.569211378, 123.0919], 0.070936827, [70334.366200559, 129.3265], -0.030544906, [70290.698685351, 137.4962], -0.042995869, [70249.348921999, 153.2524], 0.265286301, [70220.838643761, 155.8282], 0.028618596, [70207.923905154, 143.7599], -0.147916383, [70199.453042623, 138.9386], -0.133448904, [70187.080781157, 142.1952], 0.297025308, [70170.245305009, 141.9041], 0.182683137, [70157.471986577, 115.0469], 0.100954508, [70161.26751983, 79.4298], 0.229336055, [70166.129434786, 21.2294], 0.321223029, [70180.286927378, 14.4487], 0.056105467, [70192.405227719, 18.9585], -0.310942714, [70206.574830772, 16.2486], -0.021437337, [70215.823047463, 7.2405], 0.3447941, [70240.855637261, 2.2044], 0.003242185, [70268.708331693, 13.991], -0.058997543, [70317.599075392, 26.9568], 0.02653927, [70350.001151, 32.607], 0, true], "basePt": { "x": -1.1789011248882874e-14, "y": 1356.8785152320816, "z": 507.4883358732627 }, "ucs": [6.123233995736766e-17, 3.0616169978683826e-16, 1, 0, 0, -1, 3.0616169978683826e-16, 0, 1, -1.874699728327322e-32, -6.123233995736766e-17, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeFalsy();
});
test("相切圆弧2个交点", () =>
{
let data = { "file": [1, "Polyline", 8, 2, 102, false, 1, 7, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 679.0663600848402, 19.06829661016957, 1], 0, 0, true, [0, -1, 1.224646799147353e-16, 0, 0, 1.224646799147353e-16, 1, 0, 1, 0, 0, 0, 0, 264338.06676908507, -7425.932803389861, 1], 0, 2, 8, [631.3248432089458, 314.9994999999999], 0.312964119, [537.6496864189976, 380], 0, [50, 380], 0.414213562, [0, 330.0000000000018], 0, [0, 1.8189894035458565e-12], 0, [1250, 0], 0, [1250, 249.9989999999998], 0, [725, 249.9989999999998], -0.312964119, true], "basePt": { "x": 0, "y": 679.0663600848402, "z": 19.06829661016957 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] };
let l = LoadCurvesFromFileData(data)[0] as Polyline;
expect(l.IsIntersectSelf()).toBeFalsy();
});
});