UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

34 lines (27 loc) 794 B
const { EPS } = require('../../maths/constants') const vec2 = require('../../maths/vec2') const clone = require('./clone') /** * Close the given geometry. * @param {path2} geometry - the path to close * @returns {path2} a new path * @alias module:modeling/geometries/path2.close */ const close = (geometry) => { if (geometry.isClosed) return geometry const cloned = clone(geometry) cloned.isClosed = true if (cloned.points.length > 1) { // make sure the paths are formed properly const points = cloned.points const p0 = points[0] let pn = points[points.length - 1] while (vec2.distance(p0, pn) < (EPS * EPS)) { points.pop() if (points.length === 1) break pn = points[points.length - 1] } } return cloned } module.exports = close