|
|
|
|
|
|
|
import { Line } from '../../src/DatabaseServices/Entity/Line';
|
|
|
|
import { Vector3 } from 'three';
|
|
|
|
|
|
|
|
test('直线参数', () =>
|
|
|
|
{
|
|
|
|
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 5, 0));
|
|
|
|
|
|
|
|
expect(l.GetParamAtPoint(new Vector3(0, 0, 0))).toBe(0);
|
|
|
|
|
|
|
|
expect(l.GetParamAtPoint(new Vector3(5, 5, 0))).toBe(1);
|
|
|
|
|
|
|
|
expect(l.GetParamAtPoint(new Vector3(-5, -5, 0))).toMatchSnapshot();
|
|
|
|
|
|
|
|
expect(l.GetParamAtPoint(new Vector3(10, 10, 0))).toMatchSnapshot();
|
|
|
|
|
|
|
|
|
|
|
|
expect(l.GetParamAtPoint(new Vector3(11, 10, 0))).toBe(NaN);
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
test('0长度直线,参数', () =>
|
|
|
|
{
|
|
|
|
|
|
|
|
let l = new Line(new Vector3(), new Vector3());
|
|
|
|
|
|
|
|
expect(l.GetParamAtPoint(new Vector3(0, 0, 0))).toBe(0);
|
|
|
|
|
|
|
|
expect(l.GetParamAtPoint(new Vector3(1, 0, 0))).toBe(NaN);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("直线的切割1", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
expect(l.GetSplitCurves(0.5)[0].EndPoint).toMatchObject({ 'x': 2.5, 'y': 0, 'z': 0 });
|
|
|
|
expect(l.GetSplitCurves(0.5)[1].EndPoint).toMatchObject({ 'x': 5, 'y': 0, 'z': 0 });
|
|
|
|
|
|
|
|
});
|
|
|
|
test("直线的切割2", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
expect(l.GetSplitCurves([0.5, 0.2, 0.8])[0].EndPoint).toMatchObject({ 'x': 1, 'y': 0, 'z': 0 });
|
|
|
|
expect(l.GetSplitCurves([0.2, 0.5, 0.8])[1].StartPoint).toMatchObject({ 'x': 1, 'y': 0, 'z': 0 });
|
|
|
|
expect(l.GetSplitCurves([0.2, 0.5, 0.8]).length).toBe(4);
|
|
|
|
});
|
|
|
|
test("直线延伸-反向", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
l.Extend(-1);
|
|
|
|
expect(l.StartPoint).toMatchObject({ 'x': -5, 'y': 0, 'z': 0 });
|
|
|
|
|
|
|
|
});
|
|
|
|
test("直线延伸-正向", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
l.Extend(2);
|
|
|
|
expect(l.EndPoint).toMatchObject({ 'x': 10, 'y': 0, 'z': 0 });
|
|
|
|
});
|
|
|
|
test("由距离得到直线参数", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
expect(l.GetParamAtDist(10)).toBe(2);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
test("由距离得到对应点", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
expect(l.GetPointAtDistance(-10)).toMatchObject({ "x": -10, 'y': 0, 'z': 0 });
|
|
|
|
}
|
|
|
|
);
|
|
|
|
test("由参数得到距离", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
expect(l.GetDistAtParam(-2)).toBe(-10);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
test("由点得到距离", () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
expect(l.GetDistAtPoint(new Vector3(-10, 0, 0))).toBe(-10);
|
|
|
|
expect(l.GetDistAtPoint(new Vector3(10, 0, 0))).toBe(10);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
test('直线偏移', () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 0, 0));
|
|
|
|
let lines = l.GetOffsetCurves(-10);
|
|
|
|
expect(lines.length).toBe(1);
|
|
|
|
|
|
|
|
let newLine = lines[0];
|
|
|
|
expect(newLine.StartPoint).toMatchSnapshot();
|
|
|
|
expect(newLine.EndPoint).toMatchSnapshot();
|
|
|
|
|
|
|
|
let l2 = new Line(new Vector3(0, 0, 0), new Vector3(5, 5, 0));
|
|
|
|
let lines2 = l2.GetOffsetCurves(-10)[0]; //?
|
|
|
|
lines2.StartPoint; //?
|
|
|
|
lines2.EndPoint; //?
|
|
|
|
expect(lines2.StartPoint).toMatchSnapshot();
|
|
|
|
expect(lines2.EndPoint).toMatchSnapshot();
|
|
|
|
|
|
|
|
lines2 = l2.GetOffsetCurves(10)[0]; //?
|
|
|
|
lines2.StartPoint; //?
|
|
|
|
lines2.EndPoint; //?
|
|
|
|
expect(lines2.StartPoint).toMatchSnapshot();
|
|
|
|
expect(lines2.EndPoint).toMatchSnapshot();
|
|
|
|
|
|
|
|
l2.EndPoint = l2.EndPoint.negate();
|
|
|
|
lines2 = l2.GetOffsetCurves(10)[0]; //?
|
|
|
|
lines2.StartPoint; //?
|
|
|
|
lines2.EndPoint; //?
|
|
|
|
expect(lines2.StartPoint).toMatchSnapshot();
|
|
|
|
expect(lines2.EndPoint).toMatchSnapshot();
|
|
|
|
lines2 = l2.GetOffsetCurves(-10)[0]; //?
|
|
|
|
lines2.StartPoint; //?
|
|
|
|
lines2.EndPoint; //?
|
|
|
|
expect(lines2.StartPoint).toMatchSnapshot();
|
|
|
|
expect(lines2.EndPoint).toMatchSnapshot();
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
test('最近点', () =>
|
|
|
|
{
|
|
|
|
let l = new Line(new Vector3(0, 0, 0), new Vector3(5, 5, 0));
|
|
|
|
expect(l.GetClosestPointTo(new Vector3(-5, 0, 0), true)/*?*/).toMatchSnapshot();//-5,0,0.
|
|
|
|
|
|
|
|
expect(l.GetClosestPointTo(new Vector3(-5, 0, 0), false)/*?*/).toMatchSnapshot();//0,0,0.
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test('拉伸直线的夹点', () =>
|
|
|
|
{
|
|
|
|
|
|
|
|
let line = new Line(new Vector3(0, 0, 0), new Vector3(10, 0, 0));
|
|
|
|
|
|
|
|
//测试拉伸一个参数
|
|
|
|
line.MoveStretchPoints([0], new Vector3(0, 5, 0));
|
|
|
|
|
|
|
|
expect(line.StartPoint.toArray()).toMatchObject([0, 5, 0]);
|
|
|
|
|
|
|
|
//测试同时拉伸2个点的情况下
|
|
|
|
line.MoveStretchPoints([0, 1], new Vector3(0, 5, 0));
|
|
|
|
|
|
|
|
expect(line.StartPoint /*?*/).toMatchSnapshot();
|
|
|
|
expect(line.EndPoint /*?*/).toMatchSnapshot();
|
|
|
|
|
|
|
|
|
|
|
|
line.MoveStretchPoints([1], new Vector3(5, 0, 0));
|
|
|
|
|
|
|
|
expect(line.StartPoint).toMatchSnapshot();
|
|
|
|
expect(line.EndPoint).toMatchSnapshot();
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
test('直线合并', () =>
|
|
|
|
{
|
|
|
|
let l1 = new Line(new Vector3(0), new Vector3(10));
|
|
|
|
let l2 = new Line(new Vector3(0), new Vector3(0));
|
|
|
|
|
|
|
|
//L1 -----------
|
|
|
|
//L2 --
|
|
|
|
l2.StartPoint = new Vector3(-5);
|
|
|
|
l2.EndPoint = new Vector3(-3);
|
|
|
|
expect(l1.Join(l2)).toBeFalsy();
|
|
|
|
|
|
|
|
//L1 -----------
|
|
|
|
//L2 -----------
|
|
|
|
l2.StartPoint = new Vector3(-5);
|
|
|
|
l2.EndPoint = new Vector3(5);
|
|
|
|
expect(l1.Join(l2)).toBeTruthy();
|
|
|
|
|
|
|
|
//L1 -----------
|
|
|
|
//L2 ----
|
|
|
|
l2.StartPoint = new Vector3(2);
|
|
|
|
l2.EndPoint = new Vector3(5);
|
|
|
|
expect(l1.Join(l2)).toBeTruthy();
|
|
|
|
|
|
|
|
//L1 -----------
|
|
|
|
//L2 ----
|
|
|
|
l2.StartPoint = new Vector3(9);
|
|
|
|
l2.EndPoint = new Vector3(12);
|
|
|
|
expect(l1.Join(l2)).toBeTruthy();
|
|
|
|
|
|
|
|
|
|
|
|
//L1 -----------
|
|
|
|
//L2 ----
|
|
|
|
l2.StartPoint = new Vector3(15);
|
|
|
|
l2.EndPoint = new Vector3(12);
|
|
|
|
expect(l1.Join(l2)).toBeTruthy();
|
|
|
|
|
|
|
|
//L1 -----------
|
|
|
|
//L2 ---------------------
|
|
|
|
l2.StartPoint = new Vector3(-2);
|
|
|
|
l2.EndPoint = new Vector3(12);
|
|
|
|
expect(l1.Join(l2)).toBeTruthy();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
test('直线合并容差', () =>
|
|
|
|
{
|
|
|
|
let l1 = new Line(new Vector3(0), new Vector3(10));
|
|
|
|
let l2 = new Line(new Vector3(10 + 1e-6), new Vector3(15));
|
|
|
|
expect(l1.Join(l2)).toBeTruthy();
|
|
|
|
l2 = new Line(new Vector3(-10), new Vector3(0 - 1e-5));
|
|
|
|
expect(l1.Join(l2, true, 1e-6)).toBeTruthy();
|
|
|
|
});
|
|
|
|
|
|
|
|
test('直线合并不平行', () =>
|
|
|
|
{
|
|
|
|
let l1 = new Line(new Vector3(0, 0, 0), new Vector3(0, 5, 0));
|
|
|
|
let l2 = new Line(new Vector3(1, 10, 0), new Vector3(0, 5, 0));
|
|
|
|
|
|
|
|
expect(l1.Join(l2)).toBeFalsy();
|
|
|
|
});
|