jsketcher/test/coreTests/testCases/legacy/brep-enclose.js
2020-03-24 00:08:30 -07:00

138 lines
3.1 KiB
JavaScript

import * as test from '../../test'
export default {
/**
* *--> o<-------o
* |
* |
* |/
* o
*/
testEncloseClassificationCoiInNeg: function (env) {
test.modeller(env.test((win, app) => {
doTest(env, win, app, [100, 100], [10, 100], [10, 10], [-100, 100], [100, 100], true);
}));
},
/**
* <--- o<-------o
* |
* |
* |/
* o
*/
testEncloseClassificationCoiInPos: function (env) {
test.modeller(env.test((win, app) => {
doTest(env, win, app, [100, 100], [10, 100], [10, 10], [100, 100], [-100, 100], false);
}));
},
/**
* ^
* |
* o<-------o
* |
* |
* |/
* o
*/
testEncloseClassificationCoiOutNeg: function (env) {
test.modeller(env.test((win, app) => {
doTest(env, win, app, [100, 100], [10, 100], [10, 10], [10, 0], [10, 200], false);
}));
},
/**
* |
* \/
* o<-------o
* |
* |
* |/
* o
*/
testEncloseClassificationCoiOutPos: function (env) {
test.modeller(env.test((win, app) => {
doTest(env, win, app, [100, 100], [10, 100], [10, 10], [10, 200], [10, 0], true);
}));
},
/** *
* \
* \
* o<-------o
* |
* |
* |/
* o
*/
testEncloseClassificationEntersAngle: function (env) {
test.modeller(env.test((win, app) => {
doTest(env, win, app, [100, 100], [10, 100], [10, 10], [0, 110], [1000, -890], true);
}));
},
/**
* \
* \
* o<-------o
* |\
* | \
* |/ *
* o
*/
testEncloseClassificationLeavesAngle: function (env) {
test.modeller(env.test((win, app) => {
doTest(env, win, app, [100, 100], [10, 100], [10, 10], [1000, -890], [0, 110], false);
}));
},
}
function doTest(env, win, app, encA, encB, encC, curveA, curveB, expected) {
let [a, b] = createEnclosure(app.TPI, encA, encB, encC);
let curve = createCurve(app.TPI, curveA, curveB);
let result = app.TPI.brep.bool.isCurveEntersEnclose(curve, a, b) === 1;
draw(win, curve, a, b, result);
env.assertTrue(result === expected);
env.done();
}
function draw(win, curve, a, b, result) {
win.__DEBUG__.AddCurve(curve, result ? 0x00ff00 : 0xff0000);
win.__DEBUG__.AddHalfEdge(a);
win.__DEBUG__.AddHalfEdge(b);
}
function createEnclosure(tpi, a, b, c) {
a = new tpi.brep.topo.Vertex(pt(tpi, a));
b = new tpi.brep.topo.Vertex(pt(tpi, b));
c = new tpi.brep.topo.Vertex(pt(tpi, c));
let e1 = createEdge(tpi, a, b);
let e2 = createEdge(tpi, b, c);
let loop = new tpi.brep.topo.Loop();
loop.halfEdges.push(e1, e2);
loop.link();
let face = new tpi.brep.topo.Face(new tpi.brep.geom.createBoundingSurface([
a.point, b.point, c.point
]));
loop.face = face;
return [e1, e2];
}
function createEdge(tpi, a, b) {
return new tpi.brep.topo.Edge(tpi.brep.geom.BrepCurve.createLinearCurve(a.point, b.point), a, b).halfEdge1;
}
function createCurve(tpi, a, b) {
return tpi.brep.geom.BrepCurve.createLinearCurve(pt(tpi,a), pt(tpi,b));
}
const pt = (tpi, arr) => new tpi.brep.geom.Point().set3(arr);