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

118 lines
3.4 KiB

import { Vector2 } from "three";
import { Polyline } from "../../src/DatabaseServices/Entity/Polyline";
import { IntersectOption } from "../../src/GraphicsSystem/IntersectWith";
describe("相交", () =>
{
test("不相交曲线", () =>
{
let pl = new Polyline([
{
pt: new Vector2(37, 5),
bul: -1.63
},
{
pt: new Vector2(26.7, -4),
bul: 0.32
},
]);
let p2 = new Polyline([
{
pt: new Vector2(26, -3),
bul: 0.32
},
{
pt: new Vector2(9.5, -8.2),
bul: 2.01
},
]);
let pts = pl.IntersectWith(p2, IntersectOption.ExtendNone);
expect(pts.length).toBe(0);
let pts1 = pl.IntersectWith(p2, IntersectOption.ExtendBoth);
expect(pts1.length).toBe(2);
let pts2 = pl.IntersectWith(p2, IntersectOption.ExtendThis);
expect(pts2.length).toBe(0);
let pts3 = pl.IntersectWith(p2, IntersectOption.ExtendArg);
expect(pts3.length).toBe(1);
});
test("相交曲线", () =>
{
let pl = new Polyline([
{
pt: new Vector2(0, 0),
bul: 1
},
{
pt: new Vector2(0, 5),
bul: 0.32
},
]);
let p2 = new Polyline([
{
pt: new Vector2(-1, 0),
bul: -1
},
{
pt: new Vector2(4, 0),
bul: 0
},
]);
let p3 = new Polyline([
{
pt: new Vector2(0, 0),
bul: 0
},
{
pt: new Vector2(3, 3),
bul: 0
},
]);
let p4 = new Polyline([
{
pt: new Vector2(0, 0),
bul: 0
},
{
pt: new Vector2(1, 1),
bul: 0
},
]);
let p5 = new Polyline([
{
pt: new Vector2(1, 0),
bul: 0
},
{
pt: new Vector2(1, 0.5),
bul: 0
},
]);
let p6 = new Polyline([
{
pt: new Vector2(0, 0),
bul: 0
},
{
pt: new Vector2(3, 3),
bul: 0
},
]);
let pts = pl.IntersectWith(p2, IntersectOption.ExtendNone);
expect(pts.length).toBe(1);
let pts1 = pl.IntersectWith(p2, IntersectOption.ExtendBoth);
expect(pts1.length).toBe(2);
let pts2 = pl.IntersectWith(p2, IntersectOption.ExtendThis);
expect(pts2.length).toBe(2);
let pts3 = pl.IntersectWith(p2, IntersectOption.ExtendArg);
expect(pts3.length).toBe(1);
let pts4 = pl.IntersectWith(p3, IntersectOption.ExtendNone);
expect(pts).toMatchSnapshot();
expect(pts4.length).toBe(2);
let pts5 = pl.IntersectWith(p4, IntersectOption.ExtendNone);
expect(pts5.length).toBe(1);
let pts6 = pl.IntersectWith(p4, IntersectOption.ExtendArg);
expect(pts6.length).toBe(2);
let pts7 = p5.IntersectWith(p6, IntersectOption.ExtendThis);
expect(pts7.length).toBe(1);
});
});