Published
Edited
Oct 23, 2020
1 fork
Importers
Insert cell
md`# OBJ Parser: obj2sc
Code credit: Mikola Lysenko
Code source: https://github.com/mikolalysenko/obj2sc`
Insert cell
Insert cell
getScDimensions = scObject => {
const extent = reglScExtent(scObject);
const size = [
(extent[0][1]-extent[0][0]),
(extent[1][1]-extent[1][0]),
(extent[2][1]-extent[2][0])
];
return {
box : size,
center : [
0.5*(extent[0][1]+extent[0][0]),
0.5*(extent[1][1]+extent[1][0]),
0.5*(extent[2][1]+extent[2][0])
],
extent: extent,
radius : 0.5*Math.sqrt(size[0]*size[0]+size[1]*size[1]+size[2]*size[2])
};
}
Insert cell
getSCSdimensions = scs =>{
const min = [Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE];
const max = [Number.MIN_VALUE,Number.MIN_VALUE,Number.MIN_VALUE];
scs.forEach(d=>{
const sc = d.sc;
const e = reglScExtent(sc);
const M = d.modelMatrix;
const part_min = vec3.transformMat4([],[e[0][0],e[1][0],e[2][0]],M);
const part_max = vec3.transformMat4([],[e[0][1],e[1][1],e[2][1]],M);

[0,1,2].forEach((index) => {
min[index] = Math.min(min[index],part_min[index]);
max[index] = Math.max(max[index],part_max[index]);
})
})
const extent = [];
[0,1,2].forEach((index) => extent[index] = [min[index],max[index]]);

//return extent
const size = [
(extent[0][1]-extent[0][0]),
(extent[1][1]-extent[1][0]),
(extent[2][1]-extent[2][0])
];

return {
center : [
0.5*(extent[0][1]+extent[0][0]),
0.5*(extent[1][1]+extent[1][0]),
0.5*(extent[2][1]+extent[2][0])
],
extent: extent,
radius : 0.5*Math.sqrt(size[0]*size[0]+size[1]*size[1]+size[2]*size[2])
};
}
Insert cell
array2Darray = (A,n)=>Array.from(A).reduce((a, c, i,data) => {
return i % n === 0 ? a.concat([data.slice(i, i + n)]) : a;
}, []);
Insert cell
Insert cell
computeNormals = require('https://bundle.run/angle-normals@1.0.0')
Insert cell
vec3 = glMatrix.vec3
Insert cell
mat4 = glMatrix.mat4
Insert cell
glMatrix = require('https://bundle.run/gl-matrix@3.3.0')
Insert cell
d3 = require("d3")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more