project = (options, ...objects) => {
  const defaults = {
    axis: [0, 0, 1], // Z axis
    origin: [0, 0, 0]
  }
  const { axis, origin } = Object.assign({ }, defaults, options)

  objects = flatten(objects)
  if (objects.length === 0) throw new Error('wrong number of arguments')

  options = { axis, origin }

  const results = objects.map((object) => {
    // if (path.isA(object)) return project(options, object)
    // if (geom2.isA(object)) return project(options, object)
    if (geom3.isA(object)) return projectGeom3(options, object)
    return object
  })
  return results.length === 1 ? results[0] : results
}
Project the given 3D geometry on to the given plane.
@param {Object} options - options for project
@param {Array} [options.axis=[0,0,1]] the axis of the plane (default is Z axis)
@param {Array} [options.origin=[0,0,0]] the origin of the plane
@param {...Object} objects - the list of 3D geometry to project
@return {geom2|Array} the projected 2D geometry, or a list of 2D projected geometry
@alias module:modeling/extrusions.project

@example
let myshape = project({}, sphere({radius: 20, segments: 5}))