modeling/src/measurements/measureAggregateArea.js

const flatten = require('../utils/flatten')

const measureArea = require('./measureArea')

/**
 * Measure the total (aggregate) area for the given geometries.
 * Note: This measurement will not account for overlapping geometry
 * @param {...Object} geometries - the geometries to measure.
 * @return {Number} the total surface area for the group of geometry.
 * @alias module:modeling/measurements.measureAggregateArea
 *
 * @example
 * let totalArea = measureAggregateArea(sphere(),cube())
 */
const measureAggregateArea = (...geometries) => {
  geometries = flatten(geometries)
  if (geometries.length === 0) throw new Error('measureAggregateArea: no geometries supplied')
  const areas = measureArea(geometries)
  if (geometries.length === 1) {
    return areas
  }
  const result = 0
  return areas.reduce((result, area) => result + area, result)
}

module.exports = measureAggregateArea