computePrimitiveExtent = function (o) {
const extents = () => {
const xExtent = d3.extent(o.position.filter((_, i) => i % 3 === 0));
const yExtent = d3.extent(o.position.filter((_, i) => i % 3 === 1));
const zExtent = d3.extent(o.position.filter((_, i) => i % 3 === 2));
return {
min: [xExtent[0], yExtent[0], zExtent[0]],
max: [xExtent[1], yExtent[1], zExtent[1]]
}
}
const transformedExtents = extents.map((extent, i) => {
return o[i].modelMatrix
? {
min: m4.transformPoint(o.indices, extent.min),
max: m4.transformPoint(o.indices, extent.max)
}
: extent;
});
const xMin = d3.min(transformedExtents, (d) => d.min[0]);
const xMax = d3.max(transformedExtents, (d) => d.max[0]);
const yMin = d3.min(transformedExtents, (d) => d.min[1]);
const yMax = d3.max(transformedExtents, (d) => d.max[1]);
const zMin = d3.min(transformedExtents, (d) => d.min[2]);
const zMax = d3.max(transformedExtents, (d) => d.max[2]);
const min = [xMin, yMin, zMin],
max = [xMax, yMax, zMax];
const center = v3.divScalar(v3.add(min, max), 2);
const dia = v3.length(v3.subtract(max, min));
return {
min,
max,
center,
dia
};
}