UNPKG

@realsee/dnalogel

Version:
40 lines (39 loc) 1.16 kB
import { Vector3 as l } from "three"; import { centerPoint as A } from "../../shared-utils/three/centerPoint.js"; function w(r) { return a(r).reduce((e, [n, i, o]) => e + u(n, i, o), 0); } function b(r) { const t = a(r); if (t.length === 0) return; let e = 0, n = new l(); for (const [i, o, c] of t) { const s = u(i, o, c), g = d(i, o, c, s); e += s, n.add(g); } return n = n.divideScalar(e), { center: n, area: e }; } function u(r, t, e) { return t.clone().sub(r).cross(e.clone().sub(r)).length() / 2; } function d(r, t, e, n) { const i = n != null ? n : u(r, t, e); return A(r, t, e).multiplyScalar(i); } function a(r) { var i; const t = r.getAttribute("position"), e = (i = r.getIndex()) == null ? void 0 : i.array; if (!t || !e) return []; let n = []; for (let o = 0; o < e.length; o += 3) { const c = e[o], s = e[o + 1], g = e[o + 2], f = new l().fromArray([t.getX(c), t.getY(c), t.getZ(c)]), m = new l().fromArray([t.getX(s), t.getY(s), t.getZ(s)]), p = new l().fromArray([t.getX(g), t.getY(g), t.getZ(g)]); n.push([f, m, p]); } return n; } export { w as getGeometryArea, b as getGeometryInfo };