mirror of https://gitee.com/cf-fz/WebCAD.git
parent
53b15042b1
commit
cfc224e660
@ -0,0 +1,145 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`圆偏移 1`] = `
|
||||
Vector3 {
|
||||
"x": 2,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 2`] = `
|
||||
Vector3 {
|
||||
"x": 2,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 3`] = `
|
||||
Vector3 {
|
||||
"x": 5,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 4`] = `
|
||||
Vector3 {
|
||||
"x": 5,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 5`] = `
|
||||
Vector3 {
|
||||
"x": 20,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 6`] = `
|
||||
Vector3 {
|
||||
"x": 20,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 7`] = `
|
||||
Vector3 {
|
||||
"x": 20,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 8`] = `
|
||||
Vector3 {
|
||||
"x": 20,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 9`] = `
|
||||
Vector3 {
|
||||
"x": 5,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆偏移 10`] = `
|
||||
Vector3 {
|
||||
"x": 5,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆的切割2 1`] = `
|
||||
Vector3 {
|
||||
"x": 5,
|
||||
"y": 5,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆的切割2 2`] = `
|
||||
Vector3 {
|
||||
"x": 4.999999999999999,
|
||||
"y": -5,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆的切割2 3`] = `
|
||||
Vector3 {
|
||||
"x": 4.999999999999999,
|
||||
"y": -5,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆的切割2 4`] = `
|
||||
Vector3 {
|
||||
"x": 0,
|
||||
"y": 6.123233995736766e-16,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆的切割2 5`] = `
|
||||
Vector3 {
|
||||
"x": 0,
|
||||
"y": 6.123233995736766e-16,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`圆的切割2 6`] = `
|
||||
Vector3 {
|
||||
"x": 5,
|
||||
"y": 5,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`最近点 1`] = `
|
||||
Vector3 {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`最近点 2`] = `
|
||||
Vector3 {
|
||||
"x": 10,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
}
|
||||
`;
|
@ -0,0 +1,131 @@
|
||||
import { Circle } from '../../src/DatabaseServices/Circle';
|
||||
import { Vector3, Vector2 } from 'three';
|
||||
import { app } from '../../src/ApplicationServices/Application';
|
||||
import { Command } from '../../src/Editor/CommandMachine';
|
||||
import { PromptStatus } from '../../src/Editor/PromptResult';
|
||||
import { RenderType } from '../../src/GraphicsSystem/Enum';
|
||||
import { equal, equaln } from '../../src/Geometry/GeUtils';
|
||||
|
||||
test('圆参数', () =>
|
||||
{
|
||||
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
|
||||
circle.GetParamAtPoint(new Vector3(0, 0, 0))/*?*/
|
||||
expect(equaln(circle.GetParamAtPoint(new Vector3(0, 0, 0))/*?*/, 0.5)).toBeTruthy();
|
||||
|
||||
expect(equaln(circle.GetParamAtPoint(new Vector3(5, 5, 0)), 0.25)).toBeTruthy();
|
||||
|
||||
expect(equaln(circle.GetParamAtPoint(new Vector3(10, 0, 0)), 0)).toBeTruthy();
|
||||
|
||||
expect(circle.GetParamAtPoint(new Vector3(-5, -5, 0))).toBe(NaN);
|
||||
|
||||
expect(circle.GetParamAtPoint(new Vector3(10, 0, 0))).toBe(0);
|
||||
|
||||
});
|
||||
|
||||
test('半径为0的圆,参数', () =>
|
||||
{
|
||||
|
||||
let circle = new Circle(new Vector3(), 0);
|
||||
|
||||
expect(circle.GetParamAtPoint(new Vector3(0, 0, 0))).toBe(0);
|
||||
|
||||
});
|
||||
|
||||
test("圆的切割1", () =>
|
||||
{
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
let cs = circle.GetSplitCurves(0.5);
|
||||
expect(cs.length).toBe(0);
|
||||
});
|
||||
|
||||
test("圆的切割2", () =>
|
||||
{
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
|
||||
let cs = circle.GetSplitCurves([0.5, 0.75, 0.25]);
|
||||
|
||||
for (let c of cs)
|
||||
{
|
||||
expect(c.StartPoint).toMatchSnapshot()
|
||||
expect(c.EndPoint).toMatchSnapshot()
|
||||
}
|
||||
});
|
||||
|
||||
test("由距离得到圆参数", () =>
|
||||
{
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
expect(equaln(circle.GetParamAtDist(0.5 * Math.PI * 5), 0.25)).toBeTruthy();
|
||||
}
|
||||
);
|
||||
test("由距离得到对应点", () =>
|
||||
{
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
expect(equal(circle.GetPointAtDistance(0.5 * Math.PI * 5), new Vector3(5, 5, 0))).toBeTruthy();
|
||||
}
|
||||
);
|
||||
|
||||
test("由参数得到距离", () =>
|
||||
{
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
expect(equaln(circle.GetDistAtParam(0.5), Math.PI * 5)).toBeTruthy();
|
||||
}
|
||||
);
|
||||
test("由点得到距离", () =>
|
||||
{
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
expect(equaln(circle.GetDistAtPoint(new Vector3(5, 5, 0)), 0.5 * Math.PI * 5)).toBeTruthy();
|
||||
expect(circle.GetDistAtPoint(new Vector3(10, 0, 0))).toBe(0);
|
||||
}
|
||||
);
|
||||
|
||||
test('圆偏移', () =>
|
||||
{
|
||||
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
let arcs3 = circle.GetOffsetCurves(10);
|
||||
let arcs = circle.GetOffsetCurves(-3);
|
||||
|
||||
arcs3[0].StartPoint //?
|
||||
arcs3[0].EndPoint //?
|
||||
|
||||
arcs[0].StartPoint //?
|
||||
arcs[0].EndPoint //?
|
||||
// expect(arcs.length).toBe(1);
|
||||
// expect(arcs.length).toBe(Math.PI * 2);
|
||||
|
||||
let newArc = arcs[0];
|
||||
expect(newArc.StartPoint).toMatchSnapshot();
|
||||
expect(newArc.EndPoint).toMatchSnapshot();
|
||||
|
||||
let circle2 = new Circle(new Vector3(10, 0, 0), 10);
|
||||
let circles2 = circle2.GetOffsetCurves(-5)[0]; //?
|
||||
circles2.StartPoint //?
|
||||
circles2.EndPoint //?
|
||||
expect(circles2.StartPoint).toMatchSnapshot();
|
||||
expect(circles2.EndPoint).toMatchSnapshot();
|
||||
|
||||
circles2 = circle2.GetOffsetCurves(10)[0]; //?
|
||||
circles2.StartPoint //?
|
||||
circles2.EndPoint //?
|
||||
expect(circles2.StartPoint).toMatchSnapshot();
|
||||
expect(circles2.EndPoint).toMatchSnapshot();
|
||||
|
||||
expect(circles2.StartPoint).toMatchSnapshot();
|
||||
expect(circles2.EndPoint).toMatchSnapshot();
|
||||
circles2 = circle2.GetOffsetCurves(-5)[0]; //?
|
||||
circles2.StartPoint //?
|
||||
circles2.EndPoint //?
|
||||
expect(circles2.StartPoint).toMatchSnapshot();
|
||||
expect(circles2.EndPoint).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('最近点', () =>
|
||||
{
|
||||
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
||||
|
||||
expect(circle.GetClosestPointTo(new Vector3(-5, 0, 0), true)/*?*/).toMatchSnapshot();//0,0,0.
|
||||
expect(circle.GetClosestPointTo(new Vector3(8, 0, 0), true)/*?*/).toMatchSnapshot();//10,0,0.
|
||||
|
||||
});
|
@ -0,0 +1,118 @@
|
||||
import { Polyline } from "../../src/DatabaseServices/Polyline";
|
||||
import { Vector2, Vector3 } from "three";
|
||||
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.OnBothOperands);
|
||||
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.OnBothOperands);
|
||||
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.OnBothOperands);
|
||||
expect(pts4[0]).toEqual(new Vector3(2.5, 2.5, 0))
|
||||
expect(pts4.length).toBe(2);
|
||||
let pts5 = pl.IntersectWith(p4, IntersectOption.OnBothOperands);
|
||||
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);
|
||||
})
|
||||
})
|
||||
|
@ -0,0 +1,85 @@
|
||||
import { Vector2 } from "three";
|
||||
import { Polyline } from "../../src/DatabaseServices/Polyline";
|
||||
import { equaln } from "../../src/Geometry/GeUtils";
|
||||
|
||||
test('获得点,来自参数', () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
]);
|
||||
|
||||
//不闭合时
|
||||
pl.CloseMark = false;
|
||||
for (let p = -2; p < 7; p += 0.2)
|
||||
{
|
||||
let pt = pl.GetPointAtParam(p);
|
||||
|
||||
//反向测试
|
||||
if (pt)
|
||||
{
|
||||
let pn = pl.GetParamAtPoint(pt);
|
||||
|
||||
if (equaln(pn, 0))
|
||||
{
|
||||
expect(equaln(p, 0) || equaln(p, pl.EndParam)).toBeTruthy();
|
||||
}
|
||||
else
|
||||
{
|
||||
expect(equaln(p, pn)).toBeTruthy();
|
||||
}
|
||||
}
|
||||
//测试一阶导数
|
||||
let deriv = pl.GetFistDeriv(p);
|
||||
expect(deriv).toMatchSnapshot();
|
||||
expect(pt).toMatchSnapshot();
|
||||
}
|
||||
//闭合时
|
||||
pl.CloseMark = true;
|
||||
for (let p = -2; p < 7; p += 0.3)
|
||||
{
|
||||
let pt = pl.GetPointAtParam(p);
|
||||
|
||||
//反向测试
|
||||
if (pt)
|
||||
{
|
||||
let pn = pl.GetParamAtPoint(pt);
|
||||
|
||||
if (equaln(pn, 0))
|
||||
{
|
||||
expect(equaln(pn, 0) || equaln(p, pl.EndParam)).toBeTruthy();
|
||||
}
|
||||
else
|
||||
{
|
||||
expect(equaln(p, pn)).toBeTruthy();
|
||||
}
|
||||
}
|
||||
|
||||
//测试一阶导数
|
||||
let deriv = pl.GetFistDeriv(p);
|
||||
expect(deriv).toMatchSnapshot();
|
||||
expect(pt).toMatchSnapshot();
|
||||
}
|
||||
});
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,472 @@
|
||||
import { Vector2, Vector3 } from 'three';
|
||||
|
||||
import { Polyline } from '../../src/DatabaseServices/Polyline';
|
||||
import { equal, equaln } from '../../src/Geometry/GeUtils';
|
||||
|
||||
test("多段线点获取参数", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.GetParamAtPoint(new Vector3(5, 0, 0))).toBe(1);
|
||||
expect(pl.GetParamAtPoint(new Vector3(6, 0, 0)) /*?*/).toBe(NaN);
|
||||
expect(pl.GetParamAtPoint(new Vector3(-2.5, 0, 0))/*?*/).toBe(-0.5);
|
||||
expect(pl.GetParamAtPoint(new Vector3(7.5, 2.5, 0))).toBe(1.5);
|
||||
expect(pl.GetParamAtPoint(new Vector3(5, 5, 0))).toBe(2);
|
||||
expect(pl.GetParamAtPoint(pl.GetPointAtParam(1.25)) /*?*/).toBe(1.25);
|
||||
expect(equaln(pl.GetParamAtPoint(new Vector3(0, 5, 0)), 4.5)).toBeTruthy();
|
||||
expect(pl.GetParamAtPoint(new Vector3(0, -5, 0))).toBe(5.5);
|
||||
expect(pl.GetParamAtPoint(new Vector3(0, 10, 0))).toBe(4);
|
||||
|
||||
let pl2 = new Polyline([
|
||||
{
|
||||
pt: new Vector2(1.5, 8.5),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(1.5, 1.5),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl2.GetParamAtPoint(new Vector3(1.5, 5))).toBe(0.5)
|
||||
|
||||
})
|
||||
|
||||
describe('多段线', () =>
|
||||
{
|
||||
|
||||
test("多段线参数获取点", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
|
||||
expect(equal(pl.GetPointAtParam(1), new Vector3(5, 0, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtParam(0.5), new Vector3(2.5, 0, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtParam(-0.5), new Vector3(-2.5, 0, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtParam(4.5), new Vector3(0, 5, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtParam(5), new Vector3(0, 0, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtParam(5.5), new Vector3(0, -5, 0))).toBeTruthy();
|
||||
})
|
||||
test("多段线参数获取弧长", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.GetDistAtParam(1)).toBe(5);
|
||||
expect(pl.GetDistAtParam(2)).toBe(5 + Math.PI * 2.5);
|
||||
expect(pl.GetDistAtParam(1.5)).toBe(5 + Math.PI * 2.5 / 2);
|
||||
expect(pl.GetDistAtParam(3)).toBe(5 + Math.PI * 5);
|
||||
expect(pl.GetDistAtParam(4)).toBe(5 + Math.PI * 5 + 5);
|
||||
expect(pl.GetDistAtParam(3.5)).toBe(5 + Math.PI * 5 + 2.5);
|
||||
})
|
||||
test("多段线弧长获取点", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(equal(pl.GetPointAtDistance(5), new Vector3(5, 0, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtDistance(2.5), new Vector3(2.5, 0, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtDistance(5 + Math.PI * 2.5), new Vector3(5, 5, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtDistance(5 + Math.PI * 2.5 * 2), new Vector3(5, 10, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetPointAtDistance(0), new Vector3(0, 0, 0))).toBeTruthy();
|
||||
})
|
||||
test("多段线距离获取参数", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.GetParamAtDist(5)).toBe(1);
|
||||
expect(pl.GetParamAtDist(5 + Math.PI * 2.5)).toBe(2);
|
||||
expect(pl.GetParamAtDist(5 + Math.PI * 2.5 / 2)).toBe(1.5);
|
||||
})
|
||||
test("多段线点获取弧长", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.GetDistAtPoint(new Vector3(0, 0, 0))).toBe(0);
|
||||
expect(pl.GetDistAtPoint(new Vector3(5, 0, 0))).toBe(5);
|
||||
expect(pl.GetDistAtPoint(new Vector3(7.5, 2.5, 0))).toBe(5 + Math.PI / 2 * 2.5);
|
||||
expect(pl.GetDistAtPoint(new Vector3(7.5, 2.5, 0))).toBe(5 + Math.PI / 2 * 2.5);
|
||||
expect(equaln(pl.Length, 20 + 2 * Math.PI * 2.5)).toBeTruthy();
|
||||
})
|
||||
test("多段线延伸,不闭合", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
let pl2 = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.IsClose).toBeTruthy();
|
||||
pl.Extend(5.5);
|
||||
expect(pl.EndPoint).toEqual(new Vector3(0, -5, 0));
|
||||
expect(pl.LineData.length).toEqual(6);
|
||||
expect(pl.GetPointAtParam(5)).toEqual(new Vector3(0, -5, 0));
|
||||
pl.Extend(-0.5);
|
||||
expect(pl.StartPoint).toEqual(new Vector3(-2.5, 0, 0));
|
||||
expect(pl.IsClose).toBeFalsy();
|
||||
pl2.Extend(4.5)
|
||||
expect(pl2.EndPoint).toEqual(new Vector3(-2.5, 10, 0));
|
||||
pl2.Extend(-0.5)
|
||||
expect(pl2.EndPoint).toEqual(new Vector3(-2.5, 10, 0));
|
||||
expect(pl2.StartPoint).toEqual(new Vector3(-2.5, 0, 0));
|
||||
|
||||
let pl3 = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 5),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
pl3.Extend(1.5);
|
||||
expect(equal(pl3.EndPoint, new Vector3(-2.5, 2.5, 0))).toBeTruthy();
|
||||
pl3.Extend(1 + 1 / 3);
|
||||
// expect(pl3.EndPoint).toEqual(new Vector3(0, 0, 0));
|
||||
expect(equal(pl3.EndPoint /*?*/, new Vector3(0, 0, 0))).toBeTruthy();
|
||||
})
|
||||
test("多段线延伸,闭合", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
pl.CloseMark = true;
|
||||
pl.Extend(5.5);
|
||||
expect(pl.EndPoint).toEqual(new Vector3());
|
||||
})
|
||||
test("多段线点在线上", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.GetParamAtPoint(new Vector3())).toBe(0);
|
||||
expect(pl.PtOnCurve(new Vector3(0, 0, 0))).toBeTruthy();
|
||||
expect(pl.PtOnCurve(new Vector3(5, 0, 0))).toBeTruthy();
|
||||
expect(pl.PtOnCurve(new Vector3(7.5, 2.5, 0))).toBeTruthy();
|
||||
expect(pl.PtOnCurve(new Vector3(7.5, 3.5, 0))).toBeFalsy();
|
||||
|
||||
})
|
||||
test("多段线最近点", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.GetClosestPointTo(new Vector3(), true)).toEqual(new Vector3());
|
||||
expect(pl.GetClosestPointTo(new Vector3(3.5, 2.5), true)).toEqual(new Vector3(3.5, 0, 0));
|
||||
expect(pl.GetClosestPointTo(new Vector3(1.5, 3.5), true)).toEqual(new Vector3(0, 3.5, 0));
|
||||
expect(equal(pl.GetClosestPointTo(new Vector3(1.5, 3.5), true), new Vector3(0, 3.5, 0))).toBeTruthy();
|
||||
expect(equal(pl.GetClosestPointTo(new Vector3(-0.5, -1), true), new Vector3(0, -1, 0))).toBeTruthy();
|
||||
|
||||
})
|
||||
test("多段线包围盒", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
expect(pl.BoundingBox.getSize()).toEqual(new Vector3(7.5, 10, 0))
|
||||
|
||||
})
|
||||
test("多段线反转", () =>
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
}
|
||||
])
|
||||
pl.Reverse();
|
||||
expect(pl.StartPoint).toEqual(new Vector3(0, 10, 0))
|
||||
})
|
||||
})
|
@ -0,0 +1,111 @@
|
||||
import { Polyline } from "../../src/DatabaseServices/Polyline";
|
||||
import { Vector2 } from "three";
|
||||
|
||||
|
||||
//构造测试的多段线
|
||||
function createTestPolyline(): Polyline
|
||||
{
|
||||
return new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
]);
|
||||
}
|
||||
|
||||
//切割测试
|
||||
{
|
||||
let pl = createTestPolyline();
|
||||
|
||||
test('多切刀', () =>
|
||||
{
|
||||
//不闭合标志
|
||||
pl.CloseMark = false;
|
||||
|
||||
//不包括0
|
||||
let cus = pl.GetSplitCurves([1.5, 2.5, 2.8, 2.8, 1.2, 2, 1.8, 1, 2.2]);//
|
||||
|
||||
for (let cu of cus)
|
||||
{
|
||||
expect(cu.LineData).toMatchSnapshot();
|
||||
}
|
||||
|
||||
//包括0
|
||||
let cus2 = pl.GetSplitCurves([1.5, 2.5, 2.8, 2.8, 1.2, 2, 1.8, 1, 2.2, 0]);//
|
||||
|
||||
for (let cu of cus)
|
||||
{
|
||||
expect(cu.LineData).toMatchSnapshot();
|
||||
}
|
||||
});
|
||||
|
||||
test('多切刀闭合', () =>
|
||||
{
|
||||
|
||||
//闭合标志
|
||||
pl.CloseMark = true;
|
||||
|
||||
//不包括0
|
||||
let cus = pl.GetSplitCurves([1.5, 2.5, 2.8, 2.8, 1.2, 2, 1.8, 1, 2.2]);//
|
||||
|
||||
for (let cu of cus)
|
||||
{
|
||||
expect(cu.LineData).toMatchSnapshot();
|
||||
}
|
||||
|
||||
//包括0
|
||||
let cus2 = pl.GetSplitCurves([1.5, 2.5, 2.8, 2.8, 1.2, 2, 1.8, 1, 2.2, 0]);//
|
||||
|
||||
for (let cu of cus)
|
||||
{
|
||||
expect(cu.LineData).toMatchSnapshot();
|
||||
}
|
||||
});
|
||||
|
||||
test('单刀', () =>
|
||||
{
|
||||
for (let p of [0, 1.5, 2, 2.5, 3])
|
||||
{
|
||||
let cus = pl.GetSplitCurves(p);
|
||||
for (let cu of cus)
|
||||
{
|
||||
//该测试用于数值精度的问题经常造成测试失败.请刷新测试.
|
||||
expect(cu.LineData).toMatchSnapshot();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
test('单刀闭合', () =>
|
||||
{
|
||||
pl.CloseMark = true;
|
||||
for (let p of [0, 1.5, 2, 2.5, 3])
|
||||
{
|
||||
let cus = pl.GetSplitCurves(p);
|
||||
for (let cu of cus)
|
||||
{
|
||||
expect(cu.LineData).toMatchSnapshot();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
import { Command } from "../Editor/CommandMachine";
|
||||
import { SelectSet } from "../Editor/SelectSet";
|
||||
import { PromptStatus } from "../Editor/PromptResult";
|
||||
import { app } from "../ApplicationServices/Application";
|
||||
|
||||
|
||||
export class Command_Export implements Command
|
||||
{
|
||||
async exec(ss: SelectSet)
|
||||
{
|
||||
if (ss.SelectEntityList.length === 0)
|
||||
{
|
||||
let ssRes = await app.m_Editor.GetSelection({ Msg: "请选择需要拷贝的实体:" });
|
||||
if (ssRes.Status != PromptStatus.OK)
|
||||
return;
|
||||
|
||||
ss = ssRes.SelectSet;
|
||||
}
|
||||
|
||||
for (let en of ss.SelectEntityList)
|
||||
{
|
||||
let ens = en.Export();
|
||||
en.Erase();
|
||||
|
||||
for (let e of ens)
|
||||
{
|
||||
app.m_Database.ModelSpace.Append(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
import { Command } from "../Editor/CommandMachine";
|
||||
import { app } from "../ApplicationServices/Application";
|
||||
import { PromptStatus } from "../Editor/PromptResult";
|
||||
import { Line } from "../DatabaseServices/Line";
|
||||
|
||||
|
||||
export class Command_TestBox implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
let ss = await app.m_Editor.GetSelection();
|
||||
if (ss.Status != PromptStatus.OK)
|
||||
return;
|
||||
|
||||
for (let en of ss.SelectSet.SelectEntityList)
|
||||
{
|
||||
let box = en.BoundingBox;
|
||||
|
||||
let line = new Line(box.min, box.max);
|
||||
|
||||
app.m_Database.ModelSpace.Append(line);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
import { Command } from "../Editor/CommandMachine";
|
||||
import { app } from "../ApplicationServices/Application";
|
||||
import { Line } from "../DatabaseServices/Line";
|
||||
import { Curve, ExtendType } from "../DatabaseServices/Curve";
|
||||
import { PromptStatus } from "../Editor/PromptResult";
|
||||
import { Polyline } from "../DatabaseServices/Polyline";
|
||||
|
||||
|
||||
export class Command_ClosePt implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
|
||||
let cuRes = await app.m_Editor.GetEntity();
|
||||
|
||||
|
||||
if (cuRes.Entity instanceof Curve)
|
||||
{
|
||||
let cu = cuRes.Entity as Curve;
|
||||
let line = new Line();
|
||||
app.m_Database.ModelSpace.Append(line);
|
||||
|
||||
let extend = false;
|
||||
while (true)
|
||||
{
|
||||
app.m_Editor.AddNoSnapEntity(line);
|
||||
let p = await app.m_Editor.GetPoint({
|
||||
KeyWordList: [{ key: "C", msg: (extend ? "不" : "") + "延伸" }],
|
||||
Callback: p =>
|
||||
{
|
||||
line.StartPoint = p;
|
||||
|
||||
line.EndPoint = cu.GetClosestPointTo(p, extend);
|
||||
}
|
||||
})
|
||||
if (p.Status === PromptStatus.Keyword)
|
||||
{
|
||||
extend = !extend;
|
||||
}
|
||||
if (p.Status === PromptStatus.Cancel)
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
import { app } from '../ApplicationServices/Application';
|
||||
import { Circle } from '../DatabaseServices/Circle';
|
||||
import { Curve } from '../DatabaseServices/Curve';
|
||||
import { Command } from '../Editor/CommandMachine';
|
||||
import { PromptStatus } from '../Editor/PromptResult';
|
||||
import { IntersectOption } from '../GraphicsSystem/IntersectWith';
|
||||
|
||||
|
||||
export class Command_INsTest implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
|
||||
let ss = await app.m_Editor.GetSelection();
|
||||
if (ss.Status != PromptStatus.OK)
|
||||
return;
|
||||
|
||||
let cus = ss.SelectSet.SelectEntityList.filter(e => e instanceof Curve);
|
||||
|
||||
for (let i = 0; i < cus.length; i++)
|
||||
{
|
||||
let cu = cus[i];
|
||||
for (let j = i + 1; j < cus.length; j++)
|
||||
{
|
||||
let cu2 = cus[j];
|
||||
|
||||
let ins = cu.IntersectWith(cu2, IntersectOption.OnBothOperands);
|
||||
|
||||
for (let p of ins)
|
||||
{
|
||||
let c = new Circle(p, 0.1);
|
||||
app.m_Database.ModelSpace.Append(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
app.m_Editor.UpdateScreen();
|
||||
}
|
||||
}
|
@ -0,0 +1,270 @@
|
||||
import { Command } from "../Editor/CommandMachine";
|
||||
import { Polyline } from "../DatabaseServices/Polyline";
|
||||
import { Vector2, Vector3 } from "three";
|
||||
import { app } from "../ApplicationServices/Application";
|
||||
import { Circle } from "../DatabaseServices/Circle";
|
||||
import { Arc } from "../DatabaseServices/Arc";
|
||||
import { Move, polar } from "../Geometry/GeUtils";
|
||||
import { IntersectOption } from "../GraphicsSystem/IntersectWith";
|
||||
import { Line } from "../DatabaseServices/Line";
|
||||
import { ExtendType } from "../DatabaseServices/Curve";
|
||||
|
||||
|
||||
export class Command_PLTest implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
|
||||
//this.intersect();
|
||||
// this.splitPolyline();
|
||||
|
||||
this.splitPolyline();
|
||||
|
||||
// this.testGetPointAtParam();
|
||||
}
|
||||
|
||||
|
||||
createPolyline()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
testClosePoint()
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
// {
|
||||
// pt: new Vector2(0, 10),
|
||||
// bul: 0
|
||||
// },
|
||||
// {
|
||||
// pt: new Vector2(0, 0),
|
||||
// bul: 0
|
||||
// }
|
||||
]);
|
||||
|
||||
// pl.CloseMark = true;
|
||||
|
||||
app.m_Database.ModelSpace.Append(pl);
|
||||
|
||||
|
||||
let lines: Line[] = [];
|
||||
let a = Math.PI / 180;
|
||||
let center = new Vector3(2.5, 2.5)
|
||||
for (let i = 0; i < 1; i++)
|
||||
{
|
||||
let p = polar(center.clone(), a * i, 3) as Vector3;
|
||||
|
||||
let pc = pl.GetClosestPointTo(p, true);
|
||||
|
||||
let line = new Line(p, pc);
|
||||
|
||||
app.m_Database.ModelSpace.Append(line);
|
||||
|
||||
lines.push(line);
|
||||
}
|
||||
|
||||
app.m_Editor.GetPoint({
|
||||
Callback: center =>
|
||||
{
|
||||
for (let i = 0; i < 1; i++)
|
||||
{
|
||||
let p = polar(center.clone(), a * i, 0) as Vector3;
|
||||
lines[i].StartPoint = p;
|
||||
lines[i].EndPoint = pl.GetClosestPointTo2(p, ExtendType.Back);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//TODO:[]多段线切割导致的数据错误,数据重用.
|
||||
splitPolyline()
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
]);
|
||||
|
||||
pl.CloseMark = true;
|
||||
let c = 0;
|
||||
for (let p of [7])
|
||||
// for (let p = -3; p < 7; p += 0.2)
|
||||
{
|
||||
// let pt = pl.GetPointAtParam(p);
|
||||
// if (!pt) continue;
|
||||
// let cir = new Circle(pt, 0.1);
|
||||
// c++;
|
||||
// cir.ColorIndex = c % 7 + 1;
|
||||
// app.m_Database.ModelSpace.Append(cir);
|
||||
// let d = pl.GetFistDeriv(p);
|
||||
|
||||
// let line = new Line(pt, pt.clone().add(d));
|
||||
// line.ColorIndex = c % 7 + 1;
|
||||
|
||||
// app.m_Database.ModelSpace.Append(line);
|
||||
|
||||
for (let cu of pl.GetOffsetCurves(p))
|
||||
{
|
||||
app.m_Database.ModelSpace.Append(cu);
|
||||
}
|
||||
}
|
||||
app.m_Database.ModelSpace.Append(pl);
|
||||
}
|
||||
|
||||
testGetPointAtParam()
|
||||
{
|
||||
let pl = new Polyline([
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 0),
|
||||
bul: 1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 5),
|
||||
bul: -1
|
||||
},
|
||||
{
|
||||
pt: new Vector2(5, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 10),
|
||||
bul: 0
|
||||
},
|
||||
{
|
||||
pt: new Vector2(0, 0),
|
||||
bul: 0
|
||||
}
|
||||
]);
|
||||
|
||||
pl.CloseMark = true;
|
||||
|
||||
console.log(pl.EndPoint);
|
||||
|
||||
let c = 0;
|
||||
|
||||
let v = pl.GetFistDeriv(7);
|
||||
console.log(v);
|
||||
|
||||
|
||||
let pt = app.m_Editor.GetPoint({
|
||||
|
||||
Callback: (pt) =>
|
||||
{
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
// for (let p of [1.5, 2.5, 2.8, 2.8, 1.2, 2, 1.8, 1, 2.2, 0])
|
||||
for (let p = -3; p < 7; p += 0.2)
|
||||
{
|
||||
let pt = pl.GetPointAtParam(p);
|
||||
if (!pt) continue;
|
||||
let cir = new Circle(pt, 0.1);
|
||||
c++;
|
||||
cir.ColorIndex = c % 7 + 1;
|
||||
app.m_Database.ModelSpace.Append(cir);
|
||||
let d = pl.GetFistDeriv(p);
|
||||
|
||||
let line = new Line(pt, pt.clone().add(d));
|
||||
|
||||
if (line.Length == 0)
|
||||
{
|
||||
console.log(1);
|
||||
}
|
||||
line.ColorIndex = c % 7 + 1;
|
||||
|
||||
app.m_Database.ModelSpace.Append(line);
|
||||
}
|
||||
app.m_Database.ModelSpace.Append(pl);
|
||||
}
|
||||
|
||||
intersect()
|
||||
{
|
||||
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
|
||||
},
|
||||
])
|
||||
app.m_Database.ModelSpace.Append(pl);
|
||||
app.m_Database.ModelSpace.Append(p4);
|
||||
console.log(pl.IntersectWith(p4, IntersectOption.ExtendArg));
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue