loaders/OctreeLoader.js

/**
 * @author André Storhaug <andr3.storhaug@gmail.com>
 */

import { PointOctree } from "sparse-octree";
import autoBind from 'auto-bind';
import { levelOfDetail } from "../mixins/levelOfDetail";

class OctreeLoader {
  /**
   * Create a OctreeLoader.
   * @classdesc Class for loading voxel data stored in a PointOctree.
   * @mixes levelOfDetail
   */
  constructor() {
    autoBind(this);
    Object.assign(this, levelOfDetail);
  }

	/**
	 * Parses a PointOctree.
   * @param {number[][][]} matrix The matrix to be transformed.
	 * @return {Promise<PointOctree>} Promise with an octree filled with voxel data.
	 */
  parse(octree) {
    let self = this;
    return new Promise((resolve) => {
      const newOctree = new PointOctree(octree.root.min, octree.max, 0, self.LOD.maxPoints, self.LOD.maxDepth);

      for (const leaf of octree.leaves()) {
        if (leaf.points !== null) {
          var i;
          for (i = 0; i < leaf.points.length; i++) {

            const point = leaf.points[i];
            const data = leaf.data[i];
            newOctree.insert(point, data);
          }
        }
      }
      resolve(newOctree);
    });
  }
}

export { OctreeLoader };