UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

74 lines (61 loc) 3.57 kB
const test = require('ava') const { EPS } = require('../../maths/constants') const { geom3 } = require('../../geometries') const { cuboid } = require('../../primitives') const mayOverlap = require('./mayOverlap') const { center } = require('../transforms/center') test.only('mayOverlap: determination of overlap is reliable', (t) => { const geometry1 = center({ relativeTo: [0, 0, 0] }, cuboid({ size: [4, 4, 4] })) let geometry2 = center({ relativeTo: [0, 0, 0] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) // overlap at each corner geometry2 = center({ relativeTo: [3, 3, 3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [-3, 3, 3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [-3, -3, 3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [3, -3, 3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [-3, -3, -3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [3, -3, -3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [3, 3, -3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [-3, 3, -3] }, cuboid({ size: [2, 2, 2] })) t.true(mayOverlap(geometry1, geometry2)) // from issue #137, precision errors cause determination to fail // see the value of EPS const issue1 = center({ relativeTo: [0, 0, -1] }, cuboid({ size: [44, 26, 5] })) const issue2 = center({ relativeTo: [5, 0, -4.400001] }, cuboid({ size: [44, 26, 1.8] })) t.true(mayOverlap(issue1, issue2)) geometry2 = center({ relativeTo: [0, 0, 4 + 0.000001] }, cuboid({ size: [4, 4, 4] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [0, 0, -4 - 0.000001] }, cuboid({ size: [4, 4, 4] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [0, 4 + 0.000001, 0] }, cuboid({ size: [4, 4, 4] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [0, -4 - 0.000001, 0] }, cuboid({ size: [4, 4, 4] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [4 + 0.000001, 0, 0] }, cuboid({ size: [4, 4, 4] })) t.true(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [-4 - 0.000001, 0, 0] }, cuboid({ size: [4, 4, 4] })) t.true(mayOverlap(geometry1, geometry2)) // NO overlap tests t.false(mayOverlap(geometry1, geom3.create())) t.false(mayOverlap(geom3.create(), geometry1)) const eps = EPS + (EPS * 0.001) geometry2 = center({ relativeTo: [0, 0, 4 + eps] }, cuboid({ size: [4, 4, 4] })) t.false(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [0, 0, -4 - eps] }, cuboid({ size: [4, 4, 4] })) t.false(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [0, 4 + eps, 0] }, cuboid({ size: [4, 4, 4] })) t.false(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [0, -4 - eps, 0] }, cuboid({ size: [4, 4, 4] })) t.false(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [4 + eps, 0, 0] }, cuboid({ size: [4, 4, 4] })) t.false(mayOverlap(geometry1, geometry2)) geometry2 = center({ relativeTo: [-4 - eps, 0, 0] }, cuboid({ size: [4, 4, 4] })) t.false(mayOverlap(geometry1, geometry2)) })