UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

33 lines (27 loc) 1.12 kB
const flatten = require('../../utils/flatten') const geom2 = require('../../geometries/geom2') const geom3 = require('../../geometries/geom3') const path2 = require('../../geometries/path2') /** * Transform the given objects using the given matrix. * @param {mat4} matrix - a transformation matrix * @param {...Object} objects - the objects to transform * @return {Object|Array} the transformed object, or a list of transformed objects * @alias module:modeling/transforms.transform * * @example * const newsphere = transform(mat4.rotateX(TAU / 8), sphere()) */ const transform = (matrix, ...objects) => { // TODO how to check that the matrix is REAL? objects = flatten(objects) if (objects.length === 0) throw new Error('wrong number of arguments') const results = objects.map((object) => { if (path2.isA(object)) return path2.transform(matrix, object) if (geom2.isA(object)) return geom2.transform(matrix, object) if (geom3.isA(object)) return geom3.transform(matrix, object) return object }) return results.length === 1 ? results[0] : results } module.exports = transform