mirror of https://gitee.com/cf-fz/WebCAD.git
parent
8ce6c2638e
commit
e175e8eab7
@ -1,6 +1,292 @@
|
||||
import { LoadEntityFromFileData } from "../Utils/LoadEntity.util";
|
||||
import { Polyline } from "../../src/DatabaseServices/Entity/Polyline";
|
||||
import { Vector3 } from "three";
|
||||
import { FilletUtils, FilletRes } from "../../src/Add-on/FilletUtils";
|
||||
import { PromptEntityResult } from "../../src/Editor/PromptResult";
|
||||
import "../Utils/jest.util";
|
||||
|
||||
|
||||
//#IOX9F 倒角半径100
|
||||
test('', () =>
|
||||
{
|
||||
[1, "Polyline", 2, 1, 104, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5438.7151791877595, -4532.723515247859, -1.344596967101097e-7, 1], 1, 2, 4, [-272.5963980009974, 125.26453527188733], -0.6297899607010771, [268.45496627781176, 133.9101604837315], 0, [286.92760827694747, 96.87732841911384], 0, [648.509529180903, 718.346254972786], 0, false]
|
||||
});
|
||||
|
||||
function excepeRes(fres: FilletRes)
|
||||
{
|
||||
let len = 0;
|
||||
if (fres && fres.cu1)
|
||||
len = fres.cu1.Length;
|
||||
|
||||
expect(len).toMatchNumberSnapshot();
|
||||
}
|
||||
|
||||
test('首尾缺口倒角', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 105, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 4, [547.6394707904332, 156.420708807656], 0, [1451.8754993607672, 156.420708807656], 0, [1451.8754993607672, 1354.8058069129183], 0, [563.9810857645957, 249.02319366124436], 0, false]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(694.7372611476585, 156.420708807656, 0), new Vector3(628.6117019682237, 329.5140837798733, 0), new Vector3(1391.744556282656, 156.420708807656, 0), new Vector3(1451.8754993607672, 255.1882779806288, 0), new Vector3(1451.8754993607672, 1174.0426264535326, 0), new Vector3(1364.317471005074, 1245.7611458319013, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
});
|
||||
|
||||
test('首尾开口and跨越直线1', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 109, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 4, [1912.1643211330174, 150.15642306756], 0, [3347.5028363636384, 555.9731949259332], 0, [3347.5028363636384, 584.026300631579], 0, [1923.0587311157924, 1605.3772365167458], 0, false]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(3008.6463375692947, 826.9922414497031, 0), new Vector3(2953.8062841777946, 444.6624050289869, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
test('首尾开口and跨越直线2', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 145, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 7, [1765.3076108911919, 1872.4190121644488], 0, [3504.2406116319507, 2310.4177043718623], 0, [3458.7468373285233, 2322.549377519443], 0, [3495.1418567712653, 2377.141906683556], 0, [3431.0761383900667, 2352.76623008148], 0, [3520.0042980366775, 2441.6943897280908], 0, [1849.090982571283, 3377.7802807451185], 0, false]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(3175.187610856738, 2227.536544519773, 0), new Vector3(3244.4053600367315, 2596.0915538737186, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
test('首尾且点重叠', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 110, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 5, [4475.389771693963, 292.48317396453035], 0, [5793.726681473572, 292.48317396453035], 0, [5793.726681473572, 1165.0966523424624], 0, [4475.389771693963, 1165.0966523424624], 0, [4475.389771693963, 292.48317396453035], 0, false]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(4598.039581827028, 292.48317396453035, 0), new Vector3(4475.389771693963, 398.56637305394077, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
test('首尾重复并且closemark', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 111, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1914.7274165846702, 12.555589616967154, 0, 1], 0, 0, 2, 5, [4475.389771693963, 292.48317396453035], 0, [5793.726681473572, 292.48317396453035], 0, [5793.726681473572, 1165.0966523424624], 0, [4475.389771693963, 1165.0966523424624], 0, [4475.389771693963, 292.48317396453035], 0, true]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(6598.6773483589595, 305.0387635814975, 0), new Vector3(6390.117188278633, 422.42066338147515, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
test('只有closemark', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 112, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 4, [8430.400501032793, 279.92758434758196], 0, [9723.626231578504, 279.92758434758196], 0, [9723.626231578504, 1309.485932937372], 0, [8430.400501032793, 1309.485932937372], 0, true]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(8537.935865598118, 279.92758434758196, 0), new Vector3(8430.400501032793, 388.47038336421406, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
test('跨越首尾且首尾重叠', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 121, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 6, [12032.496266837241, 1167.7503167910863], 0, [10719.863427339778, 1167.7503167910863], 0, [10719.863427339778, 374.5161686031184], 0, [12222.34222567228, 374.5161686031184], 0, [12222.34222567228, 990.022185115731], 0, [12032.496266837241, 1167.7503167910868], 0, false]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(12222.34222567228, 793.6354478254848, 0), new Vector3(11763.529750469466, 1167.7503167910863, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
pl.CloseMark = true;
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
test('圆弧跨越分割线', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 150, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 17932.217574766102, 923.3102914449528, -1.344596967101097e-7, 1], 0, 0, 2, 4, [-272.5963980009974, 125.26453527188733], -0.6297899607010771, [268.45496627781176, 133.9101604837315], 0, [286.92760827694747, 96.87732841911384], 0, [648.509529180903, 718.346254972786], 0, false]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(18057.464592553017, 1195.9147384656944, -1.344596967101097e-7), new Vector3(18308.17874769076, 1173.2140591023185, -1.344596967101097e-7)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
test('自交多段线', () =>
|
||||
{
|
||||
|
||||
let f = [1, "Polyline", 5, 2, 147, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 5, [7963.40305968292, 5219.86997448622], 0, [8839.024211760872, 2266.977365882911], 0, [12322.878582794428, 3217.119467073881], 0, [5243.388417057789, 4055.4801445953253], 0, [6538.189907896463, 6756.864549942202], 0, false]
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [new Vector3(8203.851497581623, 3704.898990322766, 0), new Vector3(8309.132884106548, 4053.951311270369, 0), new Vector3(8963.280381174896, 3614.9666225288256, 0), new Vector3(8559.839423169416, 3208.483514643456, 0), new Vector3(7775.277793586963, 3755.651139480028, 0), new Vector3(8598.964992014366, 3076.538777155703, 0), new Vector3(8325.80177953219, 3997.738121377507, 0), new Vector3(8970.970528592596, 3614.0559471767297, 0)];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -0,0 +1,31 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`只有closemark 1`] = `"4641.27612"`;
|
||||
|
||||
exports[`圆弧跨越分割线 1`] = `"1420.95209"`;
|
||||
|
||||
exports[`自交多段线 1`] = `"7791.00495"`;
|
||||
|
||||
exports[`自交多段线 2`] = `"9003.48566"`;
|
||||
|
||||
exports[`自交多段线 3`] = `"0.00000"`;
|
||||
|
||||
exports[`自交多段线 4`] = `"0.00000"`;
|
||||
|
||||
exports[`跨越首尾且首尾重叠 1`] = `"4587.13386"`;
|
||||
|
||||
exports[`跨越首尾且首尾重叠 2`] = `"4587.13386"`;
|
||||
|
||||
exports[`首尾且点重叠 1`] = `"4377.60874"`;
|
||||
|
||||
exports[`首尾开口and跨越直线1 1`] = `"3288.97072"`;
|
||||
|
||||
exports[`首尾开口and跨越直线2 1`] = `"4039.68024"`;
|
||||
|
||||
exports[`首尾缺口倒角 1`] = `"3678.29690"`;
|
||||
|
||||
exports[`首尾缺口倒角 2`] = `"3516.46578"`;
|
||||
|
||||
exports[`首尾缺口倒角 3`] = `"3488.55655"`;
|
||||
|
||||
exports[`首尾重复并且closemark 1`] = `"4377.60874"`;
|
@ -0,0 +1,63 @@
|
||||
import { Vector3 } from "three";
|
||||
import { app } from "../../ApplicationServices/Application";
|
||||
import { copyTextToClipboard } from "../../Common/Utils";
|
||||
import { CADFiler } from "../../DatabaseServices/CADFiler";
|
||||
import { Command } from "../../Editor/CommandMachine";
|
||||
import { PromptStatus } from "../../Editor/PromptResult";
|
||||
import { HotCMD } from "../../Hot/HotCommand";
|
||||
|
||||
@HotCMD
|
||||
export class TestFillet implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
|
||||
let e1 = await app.Editor.GetEntity();
|
||||
|
||||
let f = new CADFiler();
|
||||
f.Write(1);
|
||||
f.WriteObject(e1.Entity);
|
||||
|
||||
let pts: Vector3[] = [];
|
||||
while (true)
|
||||
{
|
||||
let ptRes = await app.Editor.GetPoint();
|
||||
if (ptRes.Status === PromptStatus.OK)
|
||||
pts.push(ptRes.Point);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
let ptsStr = pts.map(p =>
|
||||
{
|
||||
return `new Vector3(${p.toArray().toString()})`
|
||||
}).join(",");
|
||||
|
||||
let str = `
|
||||
let f = ${JSON.stringify(f.Data)}
|
||||
|
||||
let pl = LoadEntityFromFileData(f)[0] as Polyline;
|
||||
|
||||
let fillet = new FilletUtils();
|
||||
|
||||
fillet.FilletRadius = 10;
|
||||
|
||||
let pts = [${ptsStr}];
|
||||
|
||||
|
||||
for (let i = 0; i + 1 < pts.length; i = i + 2)
|
||||
{
|
||||
let p1 = pts[i];
|
||||
let p2 = pts[i + 1];
|
||||
|
||||
let e1 = new PromptEntityResult(pl, p1);
|
||||
let e2 = new PromptEntityResult(pl, p2);
|
||||
let fres = fillet.Fillet(e1, e2);
|
||||
|
||||
excepeRes(fres);
|
||||
}
|
||||
`;
|
||||
|
||||
await copyTextToClipboard(str);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue