mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-08 17:33:15 +01:00
106 lines
2.3 KiB
JavaScript
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;
|