diff --git a/packages/modeling/src/operations/hulls/hull.test.js b/packages/modeling/src/operations/hulls/hull.test.js index fe92c2880..0f7a6fcad 100644 --- a/packages/modeling/src/operations/hulls/hull.test.js +++ b/packages/modeling/src/operations/hulls/hull.test.js @@ -2,7 +2,9 @@ const test = require('ava') const { geom2, geom3, path2 } = require('../../geometries') -const { sphere, cuboid, ellipsoid } = require('../../primitives') +const { measureVolume } = require('../../measurements') + +const { sphere, cuboid, ellipsoid, torus } = require('../../primitives') const { center } = require('../transforms/center') @@ -274,3 +276,9 @@ test('hull (multiple, overlapping, geom3)', (t) => { t.notThrows(() => geom3.validate(obs)) t.is(pts.length, 92) }) + +test('hull (single, unconvex, geom3)', (t) => { + const geometry = torus() + const obs = hull(geometry) + t.assert(measureVolume(obs) > measureVolume(geometry)) +}) diff --git a/packages/modeling/src/operations/hulls/hullGeom3.js b/packages/modeling/src/operations/hulls/hullGeom3.js index af415ac30..c68185a21 100644 --- a/packages/modeling/src/operations/hulls/hullGeom3.js +++ b/packages/modeling/src/operations/hulls/hullGeom3.js @@ -16,11 +16,11 @@ const hullPoints3 = require('./hullPoints3') const hullGeom3 = (...geometries) => { geometries = flatten(geometries) - if (geometries.length === 1) return geometries[0] - // extract the unique vertices from the geometries const unique = toUniquePoints(geometries) + if (unique.length === 0) return geom3.create() + return geom3.create(hullPoints3(unique)) }