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__/Booloperate/bool2.test.ts

76 lines
6.6 KiB

import { Region } from "../../src/DatabaseServices/Entity/Region";
import { BoolOpeartionType } from "../../src/GraphicsSystem/BoolOperateUtils";
import { LoadRegionsFromFileData } from "../Utils/LoadEntity.util";
test("#IRFL2面域消失", () =>
{
let data =
[2, "Region", 2, 1, 102, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -284.847850497852, -347.14497813089565, 0, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -284.847850497852, -347.14497813089565, 0, 1], 0, 2, 4, [258.7734554093699, 1.1368683772161603e-13], 0, [674.3301771838924, 5.684341886080802e-14], 0, [674.3301771838924, 1091.0460568668868], 0, [258.7734554093699, 1091.0460568668868], 0, true, 0, "Region", 2, 1, 103, false, 7, 0, [-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 389.4823496974607, -74.09892126400852, 0, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 389.4823496974607, -74.09892126400852, 0, 1], 0, 2, 4, [0, 0], 0, [415.5567321777343, 0], 0, [415.5567321777343, 18], 0, [0, 18], 0, true, 0];
let regs: Region[] = LoadRegionsFromFileData(data);
expect(regs.length).toBe(2);
let reg = regs[0].Clone();
reg.BooleanOper(regs[1], BoolOpeartionType.Subtract);
expect(reg.ShapeManager.ShapeList.length).toBe(2);
reg = regs[0].Clone();
reg.BooleanOper(regs[1], BoolOpeartionType.Intersection);
expect(reg.ShapeManager.ShapeList.length).toBe(1);
});
test('#IR8AN交集错误', () =>
{
let data =
[2, "Region", 2, 1, 104, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 111.34512004857766, 13.95089482226993, 0, 1], 0, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 111.34512004857766, 13.95089482226993, 0, 1], 0, 2, 4, [-97.39422719143477, -0.0000019651270122267306], 0, [674.3281411676799, -0.0000019651270122267306], 0, [674.3281421679894, 1199.9999984537135], 0, [-97.3942261911252, 1199.9999984537135], 0, true, 0, "Region", 2, 1, 105, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13.95089285714289, 113.95089285714292, 0, 1], 0, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13.95089285714289, 113.95089285714292, 0, 1], 0, 2, 13, [314.3387826639938, -99.99999883531063], 0, [318, -100], 0, [318, 0], 0, [579.5436603415255, 67.84500522108829], 0, [530.3246820683962, 361.2662670472655], 0, [446.27460696874186, 251.38290037066872], 0, [495.4935852418712, 1057.9616385444915], 0, [151.43841386299755, 1055.5264270248226], 0, [151.43841386299755, 155.52640117119142], 0, [0, 200], 0, [0, 0], 0, [140.39432277924786, -16.215571265653125], 0, [140.3943227792479, -100], 0, true, 0];
let regs: Region[] = LoadRegionsFromFileData(data);
expect(regs.length).toBe(2);
let reg = regs[0].Clone();
reg.BooleanOper(regs[1], BoolOpeartionType.Subtract);
expect(reg.ShapeManager.ShapeList.length).toBe(2);
reg = regs[0].Clone();
reg.BooleanOper(regs[1], BoolOpeartionType.Intersection);
expect(reg.ShapeManager.ShapeList.length).toBe(1);
});
test('布尔错误', () =>
{
let data =
[2, "Region", 2, 1, 117, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 4, [-112.67605633802839, -202.8168633802817], 0, [357.7464436619716, -202.8168633802817], 0, [357.7464436619716, 173.23943661971833], 0, [-112.67605633802839, 173.23943661971833], 0, true, 0, "Region", 2, 1, 116, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 4, [25.35211267605621, -202.81687464788737], 0, [225.3521126760562, -202.81687464788737], 0, [225.3521126760562, -49.295774647887384], 0, [25.35211267605621, -49.295774647887384], 0, true, 0];
let regs: Region[] = LoadRegionsFromFileData(data);
regs[0].BooleanOper(regs[1], BoolOpeartionType.Subtract);
expect(regs[0].ShapeManager.ShapeCount).toBe(1);
});
/*
如果曲线全部没有被破坏,那么有可能是内槽,也有可能将源轮廓分裂.
*/
test("包含差集的对象,差一点就可以切断", () =>
{
let data =
[2, "Region", 2, 1, 103, false, 7, 0, [6.123233995736766e-17, -1, 0, 0, 1, 6.123233995736766e-17, 0, 0, 0, 0, 1, 0, 7844.613399859296, 9627.014177659035, -0.000003860448487102985, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [6.123233995736766e-17, -1, 0, 0, 1, 6.123233995736766e-17, 0, 0, 0, 0, 1, 0, 7844.613399859296, 9627.014177659035, -0.000003860448487102985, 1], 0, 2, 5, [7094.5404957357605, -503.2636790371175], 0, [7942.380560966396, -503.2636790371175], 0, [7942.380560966396, 768.496418808835], 0, [7094.5404957357605, 768.496418808835], 0, [7094.5404957357605, -503.2636790371175], 0, true, 0, "Region", 2, 1, 102, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7341.349720822179, 1684.633616692639, -0.000003860448487102985, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7341.349720822179, 1684.633616692639, -0.000003860448487102985, 1], 0, 2, 6, [485.26368725963897, 323.50923230733497], 0, [485.26368725963886, 847.8400336226459], 0, [503.26368725963897, 847.8400336226459], 0, [503.26368725963897, 335.5092294277747], 0, [503.26368725963897, 0.00018987264593306463], 0, [485.26368725963897, 0.00018987264593306463], 0, true, 0];
let regs: Region[] = LoadRegionsFromFileData(data);
regs[0].BooleanOper(regs[1], BoolOpeartionType.Subtract);
expect(regs[0].ShapeManager.ShapeCount).toBe(2);
expect(regs[0].ShapeManager.ShapeList[0].Holes.length).toBe(0);
});
test('矩形只有尖角重合并进行并集', () =>
{
let d =
[2, "Region", 2, 1, 114, false, 7, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 1, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], 0, 2, 4, [1010.1971830985912, 770.3662408450699], 0, [1188.676083098591, 770.3662408450699], 0, [1188.676083098591, 1153.69014084507], 0, [1010.1971830985912, 1153.69014084507], 0, true, 0, "Region", 2, 1, 115, false, 7, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], 1, 1, 1, 1, 1, "Polyline", 2, 1, 0, false, 1, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], 0, 2, 4, [1188.676083098591, 1153.69014084507], 0, [1273.859183098591, 1153.69014084507], 0, [1273.859183098591, 1315.94364084507], 0, [1188.676083098591, 1315.94364084507], 0, true, 0];
let regs: Region[] = LoadRegionsFromFileData(d);
regs[0].BooleanOper(regs[1], BoolOpeartionType.Union);
let ens = regs[0].Explode();
//炸开后应该还是2个面域
expect(ens.length).toBe(2);
});