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

106 lines
2.3 KiB
JavaScript

import * as test from '../../test'
const TESTS = {};
let counter = 0;
addTest(sample1, [300, 300], true);
addTest(sample1, [300, 200], true);
addTest(sample1, [300, 400], false);
addTest(sample1, [500, 500], true);
addTest(sample1, [650, 300], false);
addTest(sample1, [460, 280], true);
addTest(sample1, [ 0, 100], false);
addTest(sample1, [1000, 100], false);
addTest(sample1, [550, 200], true);
addTest(sample1, [730, 200], true);
addTest(sample1, [100, 0], false);
addTest(sample1, [300, 0], false);
addTest(sample1, [800, 0], false);
addTest(sample1, [850, 50], false);
addTest(sample1, [770, 130], true);
addTest(sample1, [800, 700], false);
addTest(sample1, [350, 500], false);
addTest(sample1, [300, 400], false);
addTest(sample1, [100, 400], false);
addTest(sample2, [600, 100], false);
addTest(sample2, [525, 199], false);
addTest(sample2, [200, 140], true);
function addTest(sample, pt, expected) {
let testName = 'test' + (++counter);
TESTS[testName] = function (env) {
test.modeller(env.test((win, app) => {
let face = sample(app);
const result = rayCast(app, win, face, pt);
env.assertTrue(expected === result.inside);
env.done();
}));
}
}
function rayCast(app, win, face, pt) {
pt = new app.TPI.brep.geom.Point().set3(pt);
let result = face.rayCast(pt);
win.__DEBUG__.AddFace(face);
win.__DEBUG__.AddPoint(pt, result.inside ? 0x00ff00 : 0xff0000);
return result;
}
function sample1(app) {
return createFace(app.TPI,[
[500, 300],
[300, 300],
[100, 300],
[100, 100],
[300, 100],
[500, 100],
[800, 100],
[800, 600],
[500, 600],
[400, 500],
[500, 400],
], [[
[600, 500],
[700, 500],
[700, 200],
[600, 200],
]]);
}
function sample2(app) {
return createFace(app.TPI,[
[500, 100],
[100, 200],
[100, 100]
], []);
}
function createFace(tpi, _outer, _holes) {
const bb = new tpi.brep.builder();
const vx = p => bb.vertex(p[0], p[1], 0);
let outer = _outer.map(vx);
let holes = _holes.map(h => h.map(vx));
let face1 = bb.face();
face1.loop(outer);
for (let hole of holes) {
face1.loop(hole);
}
let face2 = bb.face();
outer.reverse();
face2.loop(outer);
for (let hole of holes) {
hole.reverse();
face2.loop(hole);
}
return bb.build().faces[0];
}
export default TESTS;