{"version":3,"sources":["/home/runner/work/marching-squares/marching-squares/dist/cjs/index.cjs","../../src/interpolation.ts","../../src/options.ts","../../src/polygons.ts","../../src/quadtree.ts","../../src/isolines.ts","../../src/isobands.ts"],"names":["i","prepareCell"],"mappings":"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","file":"/home/runner/work/marching-squares/marching-squares/dist/cjs/index.cjs","sourcesContent":[null,"/*\n *  Compute the distance of a value 'v' from 'a' through linear interpolation\n *  between the values of 'a' and 'b'\n *\n *  Note, that we assume that 'a' and 'b' have unit distance (i.e. 1)\n */\nfunction linear(a: number, b: number, v: number) {\n  if (a < b) return (v - a) / (b - a);\n\n  return (a - v) / (a - b);\n}\n\n/*\n *  Compute the distance of a pair of values ('v0', 'v1') from 'a' through linear interpolation\n *  between the values of 'a' and 'b'\n *\n *  This function assumes that exactly one value, 'v0' or 'v1', is actually located\n *  between 'a' and 'b', and choses the right one automagically\n *\n *  Note, that we assume that 'a' and 'b' have unit distance (i.e. 1)\n */\nfunction linear_ab(a: number, b: number, v0: number, v1: number) {\n  if (v0 > v1) {\n    [v0, v1] = [v1, v0]; // swap\n  }\n\n  if (a < b) {\n    if (a < v0) return (v0 - a) / (b - a);\n    else return (v1 - a) / (b - a);\n  } else if (a > v1) {\n    return (a - v1) / (a - b);\n  }\n\n  return (a - v0) / (a - b);\n}\n\n/*\n *  Compute the distance of a pair of values ('v0', 'v1') from 'a' through linear interpolation\n *  between the values of 'a' and 'b'\n *\n *  This function automagically choses the value 'vN' that is closer to 'a'\n *\n *  Note, that we assume that 'a' and 'b' have unit distance (i.e. 1)\n */\nfunction linear_a(a: number, b: number, minV: number, maxV: number) {\n  if (a < b) return (minV - a) / (b - a);\n\n  return (a - maxV) / (a - b);\n}\n\n/*\n *  Compute the distance of a pair of values ('v0', 'v1') from 'a' through linear interpolation\n *  between the values of 'a' and 'b'\n *\n *  This function automagically choses the value 'vN' that is closer to 'b'\n *\n *  Note, that we assume that 'a' and 'b' have unit distance (i.e. 1)\n */\nfunction linear_b(a: number, b: number, minV: number, maxV: number) {\n  if (a < b) return (maxV - a) / (b - a);\n\n  return (a - minV) / (a - b);\n}\n\nexport { linear, linear_ab, linear_a, linear_b };\n","import * as interpolate from \"./interpolation.js\";\nimport { SuccessCallback } from \"./common.js\";\n\ninterface Options {\n  successCallback?: SuccessCallback;\n  verbose?: boolean;\n  polygons?: boolean;\n  linearRing?: boolean;\n  noQuadTree?: boolean;\n  noFrame?: boolean;\n}\n\nclass InternalOptions implements Options {\n  /* Settings common to all implemented algorithms */\n  successCallback: SuccessCallback | undefined;\n  verbose: boolean = false;\n  polygons: boolean = false;\n  polygons_full: boolean = false;\n  linearRing: boolean = true;\n  noQuadTree: boolean = false;\n  noFrame: boolean = false;\n\n  threshold?: number;\n}\n\nclass IsoLineOptions extends InternalOptions {\n  /* add interpolation functions (not yet user customizable) */\n  interpolate = interpolate.linear;\n}\n\nclass IsoBandOptions extends InternalOptions {\n  /* add interpolation functions (not yet user customizable) */\n  interpolate = interpolate.linear_ab;\n  interpolate_a = interpolate.linear_a;\n  interpolate_b = interpolate.linear_b;\n\n  minV?: number;\n  maxV?: number;\n}\n\n/* Compose settings specific to IsoBands algorithm */\nfunction isoBandOptions(userSettings: Options) {\n  const bandOptions = new IsoBandOptions();\n  type P = keyof Options;\n\n  for (const key of Object.keys(bandOptions)) {\n    const val = userSettings[key as P];\n    if (typeof val !== \"undefined\" && val !== null) {\n      bandOptions[key as P] = val as any;\n    }\n  }\n\n  /* restore compatibility */\n  bandOptions.polygons_full = !bandOptions.polygons;\n\n  /* add interpolation functions (not yet user customizable) */\n  bandOptions.interpolate = interpolate.linear_ab;\n  bandOptions.interpolate_a = interpolate.linear_a;\n  bandOptions.interpolate_b = interpolate.linear_b;\n\n  return bandOptions;\n}\n\n/* Compose settings specific to IsoLines algorithm */\nfunction isoLineOptions(userSettings: Options) {\n  const lineOptions = new IsoLineOptions();\n  type P = keyof Options;\n\n  for (const key of Object.keys(lineOptions)) {\n    const val = userSettings[key as P];\n    if (typeof val !== \"undefined\" && val !== null) {\n      lineOptions[key as P] = val as any;\n    }\n  }\n\n  /* restore compatibility */\n  lineOptions.polygons_full = !lineOptions.polygons;\n\n  /* add interpolation functions (not yet user customizable) */\n  lineOptions.interpolate = interpolate.linear;\n\n  return lineOptions;\n}\n\nexport {\n  isoBandOptions,\n  isoLineOptions,\n  Options,\n  InternalOptions,\n  IsoBandOptions,\n  IsoLineOptions,\n};\n","import {\n  type InternalOptions,\n  type IsoBandOptions,\n  type IsoLineOptions,\n} from \"./options.js\";\nimport {\n  type Coord,\n  type Path,\n  type Ring,\n  type LineEntry,\n  type LineCell,\n  type LineCellGrid,\n  type BandEntry,\n  type BandCell,\n  type BandCellGrid,\n} from \"./common.js\";\n\nfunction cell2Polygons(\n  cell: LineCell | BandCell,\n  x: number,\n  y: number,\n  settings: InternalOptions\n) {\n  const polygons: Ring[] = [];\n\n  cell.polygons.forEach(function (p) {\n    p.forEach(function (pp) {\n      pp[0] += x;\n      pp[1] += y;\n    });\n\n    if (settings.linearRing) p.push(p[0]);\n\n    polygons.push(p);\n  });\n\n  return polygons;\n}\n\nfunction entry_coordinate(\n  x: number,\n  y: number,\n  mode: 0 | 1 | 2 | 3,\n  path: Path\n): Coord {\n  if (mode === 0) {\n    /* down */\n    x += 1;\n    y += path[0][1];\n  } else if (mode === 1) {\n    /* left */\n    x += path[0][0];\n  } else if (mode === 2) {\n    /* up */\n    y += path[0][1];\n  } else if (mode === 3) {\n    /* right */\n    x += path[0][0];\n    y += 1;\n  }\n\n  return [x, y];\n}\n\nfunction skip_coordinate(x: number, y: number, mode: 0 | 1 | 2 | 3): Coord {\n  if (mode === 0) {\n    /* down */\n    x++;\n  } else if (mode === 1) {\n    /* left */\n    /* do nothing */\n  } else if (mode === 2) {\n    /* up */\n    y++;\n  } else if (mode === 3) {\n    /* right */\n    x++;\n    y++;\n  }\n\n  return [x, y];\n}\n\nfunction requireFrame(\n  data: number[][],\n  lowerBound: number,\n  upperBound: number\n) {\n  let frameRequired = true;\n  const cols = data[0].length;\n  const rows = data.length;\n\n  for (let j = 0; j < rows; j++) {\n    if (\n      data[j][0] < lowerBound ||\n      data[j][0] > upperBound ||\n      data[j][cols - 1] < lowerBound ||\n      data[j][cols - 1] > upperBound\n    ) {\n      frameRequired = false;\n      break;\n    }\n  }\n\n  if (\n    frameRequired &&\n    (data[rows - 1][0] < lowerBound ||\n      data[rows - 1][0] > upperBound ||\n      data[rows - 1][cols - 1] < lowerBound ||\n      data[rows - 1][cols - 1] > upperBound)\n  ) {\n    frameRequired = false;\n  }\n\n  if (frameRequired)\n    for (let i = 0; i < cols - 1; i++) {\n      if (\n        data[0][i] < lowerBound ||\n        data[0][i] > upperBound ||\n        data[rows - 1][i] < lowerBound ||\n        data[rows - 1][i] > upperBound\n      ) {\n        frameRequired = false;\n        break;\n      }\n    }\n\n  return frameRequired;\n}\n\nfunction requireLineFrame(data: number[][], threshold: number) {\n  let frameRequired = true;\n  const cols = data[0].length;\n  const rows = data.length;\n\n  for (let j = 0; j < rows; j++) {\n    if (data[j][0] >= threshold || data[j][cols - 1] >= threshold) {\n      frameRequired = false;\n      break;\n    }\n  }\n\n  if (\n    frameRequired &&\n    (data[rows - 1][0] >= threshold || data[rows - 1][cols - 1] >= threshold)\n  ) {\n    frameRequired = false;\n  }\n\n  if (frameRequired)\n    for (let i = 0; i < cols - 1; i++) {\n      if (data[0][i] >= threshold || data[rows - 1][i] > threshold) {\n        frameRequired = false;\n        break;\n      }\n    }\n\n  return frameRequired;\n}\n\nfunction traceBandPaths(\n  data: number[][],\n  cellGrid: BandCellGrid,\n  settings: IsoBandOptions\n) {\n  const polygons: Ring[] = [];\n  const rows = data.length - 1;\n  const cols = data[0].length - 1;\n\n  /*\n   * directions for out-of-grid moves are:\n   * 0 ... \"down\",\n   * 1 ... \"left\",\n   * 2 ... \"up\",\n   * 3 ... \"right\"\n   */\n  const valid_entries: BandEntry[][] = [\n    [\"rt\", \"rb\"] /* down */,\n    [\"br\", \"bl\"] /* left */,\n    [\"lb\", \"lt\"] /* up */,\n    [\"tl\", \"tr\"] /* right */,\n  ];\n  const add_x = [0, -1, 0, 1];\n  const add_y = [-1, 0, 1, 0];\n  const available_starts: BandEntry[] = [\n    \"bl\",\n    \"lb\",\n    \"lt\",\n    \"tl\",\n    \"tr\",\n    \"rt\",\n    \"rb\",\n    \"br\",\n  ];\n  const entry_dir: { [K in BandEntry]: number } = {\n    bl: 1,\n    br: 1,\n    lb: 2,\n    lt: 2,\n    tl: 3,\n    tr: 3,\n    rt: 0,\n    rb: 0,\n  };\n\n  // assume minV and maxV are defined\n  if (requireFrame(data, settings.minV!, settings.maxV!)) {\n    if (settings.linearRing)\n      polygons.push([\n        [0, 0],\n        [0, rows],\n        [cols, rows],\n        [cols, 0],\n        [0, 0],\n      ]);\n    else\n      polygons.push([\n        [0, 0],\n        [0, rows],\n        [cols, rows],\n        [cols, 0],\n      ]);\n  }\n\n  /* finally, start tracing back first polygon(s) */\n  cellGrid.forEach(function (a, i) {\n    a.forEach(function (cell, j) {\n      /* trace paths for all available edges that go through this cell */\n      for (let e = 0; e < 8; e++) {\n        const nextedge = available_starts[e];\n\n        if (typeof cell?.edges[nextedge] !== \"object\") continue;\n\n        /* start a new, full path */\n        let ee = cell.edges[nextedge]!, // assume edge is defined\n          enter = nextedge,\n          x = i,\n          y = j,\n          finalized = false;\n\n        const path: Path = [],\n          origin: Coord = [i + ee.path[0][0], j + ee.path[0][1]];\n\n        /* add start coordinate */\n        path.push(origin);\n\n        /* start traceback */\n        while (!finalized) {\n          let cc = cellGrid[x][y];\n\n          if (typeof cc?.edges[enter] !== \"object\") break;\n\n          ee = cc.edges[enter]!; // assume edge is defined\n\n          /* remove edge from cell */\n          delete cc.edges[enter];\n\n          /* add last point of edge to path arra, since we extend a polygon */\n          const point = ee.path[1];\n          point[0] += x;\n          point[1] += y;\n          path.push(point);\n\n          enter = ee.move.enter;\n          x = x + ee.move.x;\n          y = y + ee.move.y;\n\n          /* handle out-of-grid moves */\n          if (\n            typeof cellGrid[x] === \"undefined\" ||\n            typeof cellGrid[x][y] === \"undefined\"\n          ) {\n            let dir: 0 | 1 | 2 | 3 = 0,\n              count = 0;\n\n            if (x === cols) {\n              x--;\n              dir = 0; /* move downwards */\n            } else if (x < 0) {\n              x++;\n              dir = 2; /* move upwards */\n            } else if (y === rows) {\n              y--;\n              dir = 3; /* move right */\n            } else if (y < 0) {\n              y++;\n              dir = 1; /* move left */\n            } else {\n              throw new Error(\"Left the grid somewhere in the interior!\");\n            }\n\n            if (x === i && y === j && dir === entry_dir[nextedge]) {\n              finalized = true;\n              enter = nextedge;\n              break;\n            }\n\n            while (true) {\n              let found_entry = false;\n\n              if (count > 4)\n                throw new Error(\n                  \"Direction change counter overflow! This should never happen!\"\n                );\n\n              if (\n                !(\n                  typeof cellGrid[x] === \"undefined\" ||\n                  typeof cellGrid[x][y] === \"undefined\"\n                )\n              ) {\n                cc = cellGrid[x][y];\n\n                /* check for re-entry */\n                for (let s = 0; s < valid_entries[dir].length; s++) {\n                  const ve = valid_entries[dir][s];\n                  if (typeof cc?.edges[ve] === \"object\") {\n                    /* found re-entry */\n                    ee = cc.edges[ve]!; // assume edge is defined\n                    path.push(entry_coordinate(x, y, dir, ee.path));\n                    enter = ve;\n                    found_entry = true;\n                    break;\n                  }\n                }\n              }\n\n              if (found_entry) {\n                break;\n              } else {\n                path.push(skip_coordinate(x, y, dir));\n\n                x += add_x[dir];\n                y += add_y[dir];\n\n                /* change direction if we'e moved out of grid again */\n                if (\n                  typeof cellGrid[x] === \"undefined\" ||\n                  typeof cellGrid[x][y] === \"undefined\"\n                ) {\n                  if (\n                    (dir === 0 && y < 0) ||\n                    (dir === 1 && x < 0) ||\n                    (dir === 2 && y === rows) ||\n                    (dir === 3 && x === cols)\n                  ) {\n                    x -= add_x[dir];\n                    y -= add_y[dir];\n\n                    dir = (dir + 1) % 4;\n                    count++;\n                  }\n                }\n\n                if (x === i && y === j && dir === entry_dir[nextedge]) {\n                  /* we are back where we started off, so finalize the polygon */\n                  finalized = true;\n                  enter = nextedge;\n                  break;\n                }\n              }\n            }\n          }\n        }\n\n        if (\n          settings.linearRing &&\n          (path[path.length - 1][0] !== origin[0] ||\n            path[path.length - 1][1] !== origin[1])\n        )\n          path.push(origin);\n\n        polygons.push(path);\n      } /* end forall entry sites */\n    }); /* end foreach i */\n  }); /* end foreach j */\n\n  return polygons;\n}\n\nfunction traceLinePaths(\n  data: number[][],\n  cellGrid: LineCellGrid,\n  settings: IsoLineOptions\n) {\n  const polygons: Ring[] = [];\n  const rows = data.length - 1;\n  const cols = data[0].length - 1;\n\n  /*\n   * directions for out-of-grid moves are:\n   * 0 ... \"down\",\n   * 1 ... \"left\",\n   * 2 ... \"up\",\n   * 3 ... \"right\"\n   */\n  const valid_entries: LineEntry[] = [\n    \"right\" /* down */,\n    \"bottom\" /* left */,\n    \"left\" /* up */,\n    \"top\" /* right */,\n  ];\n  const add_x = [0, -1, 0, 1];\n  const add_y = [-1, 0, 1, 0];\n  const entry_dir = {\n    bottom: 1,\n    left: 2,\n    top: 3,\n    right: 0,\n  };\n\n  /* first, detect whether we need any outer frame */\n  if (!settings.noFrame) {\n    // assume threshold is defined\n    if (requireLineFrame(data, settings.threshold!)) {\n      if (settings.linearRing) {\n        polygons.push([\n          [0, 0],\n          [0, rows],\n          [cols, rows],\n          [cols, 0],\n          [0, 0],\n        ]);\n      } else {\n        polygons.push([\n          [0, 0],\n          [0, rows],\n          [cols, rows],\n          [cols, 0],\n        ]);\n      }\n    }\n  }\n\n  /* finally, start tracing back first polygon(s) */\n\n  cellGrid.forEach(function (a, i) {\n    a.forEach(function (cell, j) {\n      /* trace paths for all available edges that go through this cell */\n      for (let e = 0; e < 4; e++) {\n        const nextedge = valid_entries[e];\n\n        if (typeof cell?.edges[nextedge] !== \"object\") continue;\n\n        /* start a new, full path */\n        let ee = cell.edges[nextedge],\n          enter = nextedge,\n          x = i,\n          y = j,\n          finalized = false;\n\n        const path: Path = [],\n          origin: Coord = [i + ee.path[0][0], j + ee.path[0][1]];\n\n        /* add start coordinate */\n        path.push(origin);\n\n        /* start traceback */\n        while (!finalized) {\n          let cc = cellGrid[x][y];\n\n          if (typeof cc?.edges[enter] !== \"object\") break;\n\n          ee = cc.edges[enter]!; // assume edge is defined\n\n          /* remove edge from cell */\n          delete cc.edges[enter];\n\n          /* add last point of edge to path arra, since we extend a polygon */\n          const point = ee.path[1];\n          point[0] += x;\n          point[1] += y;\n          path.push(point);\n\n          enter = ee.move.enter;\n          x = x + ee.move.x;\n          y = y + ee.move.y;\n\n          /* handle out-of-grid moves */\n          if (\n            typeof cellGrid[x] === \"undefined\" ||\n            typeof cellGrid[x][y] === \"undefined\"\n          ) {\n            if (!settings.linearRing) break;\n\n            let dir: 0 | 1 | 2 | 3 = 0,\n              count = 0;\n\n            if (x === cols) {\n              x--;\n              dir = 0; /* move downwards */\n            } else if (x < 0) {\n              x++;\n              dir = 2; /* move upwards */\n            } else if (y === rows) {\n              y--;\n              dir = 3; /* move right */\n            } else if (y < 0) {\n              y++;\n              dir = 1; /* move left */\n            }\n\n            if (x === i && y === j && dir === entry_dir[nextedge]) {\n              finalized = true;\n              enter = nextedge;\n              break;\n            }\n\n            while (true) {\n              let found_entry = false;\n\n              if (count > 4)\n                throw new Error(\n                  \"Direction change counter overflow! This should never happen!\"\n                );\n\n              if (\n                !(\n                  typeof cellGrid[x] === \"undefined\" ||\n                  typeof cellGrid[x][y] === \"undefined\"\n                )\n              ) {\n                cc = cellGrid[x][y];\n\n                /* check for re-entry */\n                const ve = valid_entries[dir];\n                if (typeof cc?.edges[ve] === \"object\") {\n                  /* found re-entry */\n                  ee = cc.edges[ve]!; // assume edge is defined\n                  path.push(entry_coordinate(x, y, dir, ee.path));\n                  enter = ve;\n                  found_entry = true;\n                  break;\n                }\n              }\n\n              if (found_entry) {\n                break;\n              } else {\n                path.push(skip_coordinate(x, y, dir));\n\n                x += add_x[dir];\n                y += add_y[dir];\n\n                /* change direction if we'e moved out of grid again */\n                if (\n                  typeof cellGrid[x] === \"undefined\" ||\n                  typeof cellGrid[x][y] === \"undefined\"\n                ) {\n                  if (\n                    (dir === 0 && y < 0) ||\n                    (dir === 1 && x < 0) ||\n                    (dir === 2 && y === rows) ||\n                    (dir === 3 && x === cols)\n                  ) {\n                    x -= add_x[dir];\n                    y -= add_y[dir];\n\n                    dir = (dir + 1) % 4;\n                    count++;\n                  }\n                }\n\n                if (x === i && y === j && dir === entry_dir[nextedge]) {\n                  /* we are back where we started off, so finalize the polygon */\n                  finalized = true;\n                  enter = nextedge;\n                  break;\n                }\n              }\n            }\n          }\n        }\n\n        if (\n          settings.linearRing &&\n          (path[path.length - 1][0] !== origin[0] ||\n            path[path.length - 1][1] !== origin[1])\n        )\n          path.push(origin);\n\n        polygons.push(path);\n      } /* end forall entry sites */\n    }); /* end foreach i */\n  }); /* end foreach j */\n\n  return polygons;\n}\n\nexport { cell2Polygons, traceBandPaths, traceLinePaths };\n","/* quadTree node constructor */\n\ninterface Cell {\n  x: number;\n  y: number;\n}\n\nclass TreeNode {\n  lowerBound: number;\n  upperBound: number;\n  x: number;\n  y: number;\n  childA: TreeNode | null;\n  childB: TreeNode | null;\n  childC: TreeNode | null;\n  childD: TreeNode | null;\n\n  constructor(data: number[][], x: number, y: number, dx: number, dy: number) {\n    let dx_tmp = dx,\n      dy_tmp = dy,\n      msb_x = 0,\n      msb_y = 0;\n\n    /* left-bottom corner of current quadrant */\n    this.x = x;\n    this.y = y;\n\n    /*\n     *  child nodes are layed out in the following way:\n     *\n     *  (x, y + 1) ---- (x + 1, y + 1)\n     *  |             |              |\n     *  |      D      |      C       |\n     *  |             |              |\n     *  |----------------------------|\n     *  |             |              |\n     *  |      A      |      B       |\n     *  |             |              |\n     *  (x, y) ------------ (x + 1, y)\n     */\n    this.childA = null;\n    this.childB = null;\n    this.childC = null;\n    this.childD = null;\n\n    if (dx === 1 && dy === 1) {\n      /* do not further subdivision */\n      this.lowerBound = Math.min(\n        data[y][x],\n        data[y][x + 1],\n        data[y + 1][x + 1],\n        data[y + 1][x]\n      );\n      this.upperBound = Math.max(\n        data[y][x],\n        data[y][x + 1],\n        data[y + 1][x + 1],\n        data[y + 1][x]\n      );\n    } else {\n      /* get most significant bit from dx */\n      if (dx > 1) {\n        while (dx_tmp !== 0) {\n          dx_tmp = dx_tmp >> 1;\n          msb_x++;\n        }\n\n        if (dx === 1 << (msb_x - 1)) msb_x--;\n\n        dx_tmp = 1 << (msb_x - 1);\n      }\n\n      /* get most significant bit from dx */\n      if (dy > 1) {\n        while (dy_tmp !== 0) {\n          dy_tmp = dy_tmp >> 1;\n          msb_y++;\n        }\n\n        if (dy === 1 << (msb_y - 1)) msb_y--;\n\n        dy_tmp = 1 << (msb_y - 1);\n      }\n\n      this.childA = new TreeNode(data, x, y, dx_tmp, dy_tmp);\n      this.lowerBound = this.childA.lowerBound;\n      this.upperBound = this.childA.upperBound;\n\n      if (dx - dx_tmp > 0) {\n        this.childB = new TreeNode(data, x + dx_tmp, y, dx - dx_tmp, dy_tmp);\n        this.lowerBound = Math.min(this.lowerBound, this.childB.lowerBound);\n        this.upperBound = Math.max(this.upperBound, this.childB.upperBound);\n\n        if (dy - dy_tmp > 0) {\n          this.childC = new TreeNode(\n            data,\n            x + dx_tmp,\n            y + dy_tmp,\n            dx - dx_tmp,\n            dy - dy_tmp\n          );\n          this.lowerBound = Math.min(this.lowerBound, this.childC.lowerBound);\n          this.upperBound = Math.max(this.upperBound, this.childC.upperBound);\n        }\n      }\n\n      if (dy - dy_tmp > 0) {\n        this.childD = new TreeNode(data, x, y + dy_tmp, dx_tmp, dy - dy_tmp);\n        this.lowerBound = Math.min(this.lowerBound, this.childD.lowerBound);\n        this.upperBound = Math.max(this.upperBound, this.childD.upperBound);\n      }\n    }\n  }\n\n  /**\n   *  Retrieve a list of cells within a particular range of values by\n   *  recursivly traversing the quad tree to it's leaves.\n   *\n   *  @param  subsumed  If 'true' include all cells that are completely\n   *                    subsumed within the specified range. Otherwise,\n   *                    return only cells where at least one corner is\n   *                    outside the specified range.\n   *\n   *  @return   An array of objects 'o' where each object has exactly two\n   *            properties: 'o.x' and 'o.y' denoting the left-bottom corner\n   *            of the corresponding cell.\n   */\n  cellsInBand(\n    lowerBound: number,\n    upperBound: number,\n    subsumed: boolean | undefined\n  ) {\n    let cells: Cell[] = [];\n\n    subsumed = typeof subsumed === \"undefined\" ? true : subsumed;\n\n    if (this.lowerBound > upperBound || this.upperBound < lowerBound)\n      return cells;\n\n    if (!(this.childA || this.childB || this.childC || this.childD)) {\n      if (\n        subsumed ||\n        this.lowerBound <= lowerBound ||\n        this.upperBound >= upperBound\n      ) {\n        cells.push({\n          x: this.x,\n          y: this.y,\n        });\n      }\n    } else {\n      if (this.childA)\n        cells = cells.concat(\n          this.childA.cellsInBand(lowerBound, upperBound, subsumed)\n        );\n\n      if (this.childB)\n        cells = cells.concat(\n          this.childB.cellsInBand(lowerBound, upperBound, subsumed)\n        );\n\n      if (this.childD)\n        cells = cells.concat(\n          this.childD.cellsInBand(lowerBound, upperBound, subsumed)\n        );\n\n      if (this.childC)\n        cells = cells.concat(\n          this.childC.cellsInBand(lowerBound, upperBound, subsumed)\n        );\n    }\n\n    return cells;\n  }\n\n  cellsBelowThreshold(threshold: number, subsumed: boolean | undefined) {\n    let cells: Cell[] = [];\n\n    subsumed = typeof subsumed === \"undefined\" ? true : subsumed;\n\n    if (this.lowerBound > threshold) return cells;\n\n    if (!(this.childA || this.childB || this.childC || this.childD)) {\n      if (subsumed || this.upperBound >= threshold) {\n        cells.push({\n          x: this.x,\n          y: this.y,\n        });\n      }\n    } else {\n      if (this.childA)\n        cells = cells.concat(\n          this.childA.cellsBelowThreshold(threshold, subsumed)\n        );\n\n      if (this.childB)\n        cells = cells.concat(\n          this.childB.cellsBelowThreshold(threshold, subsumed)\n        );\n\n      if (this.childD)\n        cells = cells.concat(\n          this.childD.cellsBelowThreshold(threshold, subsumed)\n        );\n\n      if (this.childC)\n        cells = cells.concat(\n          this.childC.cellsBelowThreshold(threshold, subsumed)\n        );\n    }\n\n    return cells;\n  }\n}\n\n/*\n * Given a scalar field `data` construct a QuadTree\n * to efficiently lookup those parts of the scalar\n * field where values are within a particular\n * range of [lowerbound, upperbound] limits.\n */\nclass QuadTree {\n  data: number[][];\n  root: TreeNode;\n\n  constructor(data: number[][]) {\n    /* do some input checking */\n    if (!data) throw new Error(\"data is required\");\n\n    if (!Array.isArray(data) || !Array.isArray(data[0]))\n      throw new Error(\"data must be scalar field, i.e. array of arrays\");\n\n    if (data.length < 2) throw new Error(\"data must contain at least two rows\");\n\n    /* check if we've got a regular grid */\n    const cols = data[0].length;\n\n    if (cols < 2) throw new Error(\"data must contain at least two columns\");\n\n    for (let i = 1; i < data.length; i++) {\n      if (!Array.isArray(data[i]))\n        throw new Error(\"Row \" + i + \" is not an array\");\n\n      if (data[i].length != cols)\n        throw new Error(\n          \"unequal row lengths detected, please provide a regular grid\"\n        );\n    }\n\n    /* create pre-processing object */\n    this.data = data;\n    /* root node, i.e. entry to the data */\n    this.root = new TreeNode(data, 0, 0, data[0].length - 1, data.length - 1);\n  }\n}\n\nexport { QuadTree, QuadTree as quadTree, TreeNode };\n","import {\n  isoLineOptions,\n  type Options,\n  type IsoLineOptions,\n} from \"./options.js\";\nimport { cell2Polygons, traceLinePaths } from \"./polygons.js\";\nimport { QuadTree, type TreeNode } from \"./quadtree.js\";\nimport { type Ring, type LineCell, type LineCellGrid } from \"./common.js\";\n\n/*\n * Compute the iso lines for a scalar 2D field given\n * a certain threshold by applying the Marching Squares\n * Algorithm. The function returns a list of path coordinates\n */\n\nfunction isoLines(\n  input: number[][] | QuadTree,\n  thresholds: number[],\n  options?: Options\n) {\n  let settings: IsoLineOptions,\n    i: number,\n    j: number,\n    useQuadTree = false,\n    tree: QuadTree | null = null,\n    root: TreeNode | null = null,\n    data: number[][],\n    cellGrid: LineCellGrid = [],\n    linePolygons: Ring[],\n    ret: Ring[][] = [];\n\n  /* Defaults for optional args */\n  options = options ?? {};\n\n  /* validation */\n  if (!!options && typeof options !== \"object\")\n    throw new Error(\"options must be an object\");\n\n  /* process options */\n  settings = isoLineOptions(options);\n\n  /* check for input data */\n  if (!input) throw new Error(\"data is required\");\n  if (input instanceof QuadTree) {\n    tree = input;\n    root = input.root;\n    data = input.data;\n    if (!settings.noQuadTree) useQuadTree = true;\n  } else if (Array.isArray(input) && Array.isArray(input[0])) {\n    data = input;\n  } else {\n    throw new Error(\n      \"input is neither array of arrays nor object retrieved from 'QuadTree()'\"\n    );\n  }\n\n  if (thresholds === undefined || thresholds === null)\n    throw new Error(\"thresholds is required\");\n  if (!Array.isArray(thresholds))\n    throw new Error(\"thresholds must be an array\");\n\n  /* check and prepare input thresholds */\n\n  /* activate QuadTree optimization if not explicitly forbidden by user settings */\n  if (!settings.noQuadTree) useQuadTree = true;\n\n  /* check if all thresholds are numbers */\n  for (i = 0; i < thresholds.length; i++)\n    if (isNaN(+thresholds[i]))\n      throw new Error(\"thresholds[\" + i + \"] is not a number\");\n\n  /* create QuadTree root node if not already present */\n  if (useQuadTree && !root) {\n    tree = new QuadTree(data);\n    root = tree.root;\n    data = tree.data;\n  }\n\n  if (settings.verbose) {\n    if (settings.polygons)\n      console.log(\n        \"isoLines: returning single lines (polygons) for each grid cell\"\n      );\n    else\n      console.log(\n        \"isoLines: returning line paths (polygons) for entire data grid\"\n      );\n  }\n\n  /* Done with all input validation, now let's start computing stuff */\n\n  /* loop over all threhsold values */\n  thresholds.forEach(function (t, i) {\n    linePolygons = [];\n\n    /* store bounds for current computation in settings object */\n    settings.threshold = t;\n\n    if (settings.verbose)\n      console.log(\n        \"MarchingSquaresJS-isoLines: computing iso lines for threshold \" + t\n      );\n\n    if (settings.polygons) {\n      /* compose list of polygons for each single cell */\n      if (useQuadTree) {\n        /* go through list of cells retrieved from QuadTree */\n        root!\n          .cellsBelowThreshold(settings.threshold, true)\n          .forEach(function (c) {\n            const cell = prepareCell(data, c.x, c.y, settings);\n            if (cell) {\n              linePolygons = linePolygons.concat(\n                cell2Polygons(cell, c.x, c.y, settings)\n              );\n            }\n          });\n      } else {\n        /* go through entire array of input data */\n        for (j = 0; j < data.length - 1; ++j) {\n          for (i = 0; i < data[0].length - 1; ++i) {\n            const cell = prepareCell(data, i, j, settings);\n            if (cell) {\n              linePolygons = linePolygons.concat(\n                cell2Polygons(cell, i, j, settings)\n              );\n            }\n          }\n        }\n      }\n    } else {\n      /* sparse grid of input data cells */\n      cellGrid = [];\n      for (i = 0; i < data[0].length - 1; ++i) cellGrid[i] = [];\n\n      /* compose list of polygons for entire input grid */\n      if (useQuadTree) {\n        /* collect the cells */\n        root!\n          .cellsBelowThreshold(settings.threshold, false)\n          .forEach(function (c) {\n            cellGrid[c.x][c.y] = prepareCell(data, c.x, c.y, settings);\n          });\n      } else {\n        /* prepare cells */\n        for (i = 0; i < data[0].length - 1; ++i) {\n          for (j = 0; j < data.length - 1; ++j) {\n            cellGrid[i][j] = prepareCell(data, i, j, settings);\n          }\n        }\n      }\n\n      linePolygons = traceLinePaths(data, cellGrid, settings);\n    }\n\n    /* finally, add polygons to output array */\n    ret.push(linePolygons);\n\n    if (typeof settings.successCallback === \"function\") {\n      settings.successCallback(ret, t);\n    }\n  });\n\n  return ret;\n}\n\n/*\n * Thats all for the public interface, below follows the actual\n * implementation\n */\n\n/*\n * ################################\n * Isocontour implementation below\n * ################################\n */\n\nfunction prepareCell(\n  grid: number[][],\n  x: number,\n  y: number,\n  settings: IsoLineOptions\n): LineCell | undefined {\n  let cval = 0;\n  const x3 = grid[y + 1][x],\n    x2 = grid[y + 1][x + 1],\n    x1 = grid[y][x + 1],\n    x0 = grid[y][x],\n    threshold = settings.threshold!; // assume threshold defined\n\n  /*\n   * Note that missing data within the grid will result\n   * in horribly failing to trace full polygon paths\n   */\n  if (isNaN(x0) || isNaN(x1) || isNaN(x2) || isNaN(x3)) {\n    return;\n  }\n\n  /*\n   * Here we detect the type of the cell\n   *\n   * x3 ---- x2\n   * |      |\n   * |      |\n   * x0 ---- x1\n   *\n   * with edge points\n   *\n   * x0 = (x,y),\n   * x1 = (x + 1, y),\n   * x2 = (x + 1, y + 1), and\n   * x3 = (x, y + 1)\n   *\n   * and compute the polygon intersections with the edges\n   * of the cell. Each edge value may be (i) smaller, or (ii)\n   * greater or equal to the iso line threshold. We encode\n   * this property using 1 bit of information, where\n   *\n   * 0 ... below,\n   * 1 ... above or equal\n   *\n   * Then we store the cells value as vector\n   *\n   * cval = (x0, x1, x2, x3)\n   *\n   * where x0 is the least significant bit (0th),\n   * x1 the 2nd bit, and so on. This essentially\n   * enables us to work with a single integer number\n   */\n\n  cval |= x3 >= threshold ? 8 : 0;\n  cval |= x2 >= threshold ? 4 : 0;\n  cval |= x1 >= threshold ? 2 : 0;\n  cval |= x0 >= threshold ? 1 : 0;\n\n  /* make sure cval is a number */\n  cval = +cval;\n\n  /* compose the cell object */\n  const cell: LineCell = {\n    cval: cval,\n    polygons: [],\n    edges: {},\n    x0: x0,\n    x1: x1,\n    x2: x2,\n    x3: x3,\n  };\n\n  /*\n   * Compute interpolated intersections of the polygon(s)\n   * with the cell borders and (i) add edges for polygon\n   * trace-back, or (ii) a list of small closed polygons\n   */\n  let left, right, top, bottom, average;\n\n  switch (cval) {\n    case 0:\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, 0],\n          [0, 1],\n          [1, 1],\n          [1, 0],\n        ]);\n\n      break;\n\n    case 15:\n      /* cell is outside (above) threshold, no polygons */\n      break;\n\n    case 14 /* 1110 */:\n      left = settings.interpolate(x0, x3, threshold);\n      bottom = settings.interpolate(x0, x1, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.left = {\n          path: [\n            [0, left],\n            [bottom, 0],\n          ],\n          move: {\n            x: 0,\n            y: -1,\n            enter: \"top\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, 0],\n          [0, left],\n          [bottom, 0],\n        ]);\n\n      break;\n\n    case 13 /* 1101 */:\n      bottom = settings.interpolate(x0, x1, threshold);\n      right = settings.interpolate(x1, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.bottom = {\n          path: [\n            [bottom, 0],\n            [1, right],\n          ],\n          move: {\n            x: 1,\n            y: 0,\n            enter: \"left\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [bottom, 0],\n          [1, right],\n          [1, 0],\n        ]);\n\n      break;\n\n    case 11 /* 1011 */:\n      right = settings.interpolate(x1, x2, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.right = {\n          path: [\n            [1, right],\n            [top, 1],\n          ],\n          move: {\n            x: 0,\n            y: 1,\n            enter: \"bottom\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [1, right],\n          [top, 1],\n          [1, 1],\n        ]);\n\n      break;\n\n    case 7 /* 0111 */:\n      left = settings.interpolate(x0, x3, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.top = {\n          path: [\n            [top, 1],\n            [0, left],\n          ],\n          move: {\n            x: -1,\n            y: 0,\n            enter: \"right\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [top, 1],\n          [0, left],\n          [0, 1],\n        ]);\n\n      break;\n\n    case 1 /* 0001 */:\n      left = settings.interpolate(x0, x3, threshold);\n      bottom = settings.interpolate(x0, x1, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.bottom = {\n          path: [\n            [bottom, 0],\n            [0, left],\n          ],\n          move: {\n            x: -1,\n            y: 0,\n            enter: \"right\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [bottom, 0],\n          [0, left],\n          [0, 1],\n          [1, 1],\n          [1, 0],\n        ]);\n\n      break;\n\n    case 2 /* 0010 */:\n      bottom = settings.interpolate(x0, x1, threshold);\n      right = settings.interpolate(x1, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.right = {\n          path: [\n            [1, right],\n            [bottom, 0],\n          ],\n          move: {\n            x: 0,\n            y: -1,\n            enter: \"top\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, 0],\n          [0, 1],\n          [1, 1],\n          [1, right],\n          [bottom, 0],\n        ]);\n\n      break;\n\n    case 4 /* 0100 */:\n      right = settings.interpolate(x1, x2, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.top = {\n          path: [\n            [top, 1],\n            [1, right],\n          ],\n          move: {\n            x: 1,\n            y: 0,\n            enter: \"left\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, 0],\n          [0, 1],\n          [top, 1],\n          [1, right],\n          [1, 0],\n        ]);\n\n      break;\n\n    case 8 /* 1000 */:\n      left = settings.interpolate(x0, x3, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.left = {\n          path: [\n            [0, left],\n            [top, 1],\n          ],\n          move: {\n            x: 0,\n            y: 1,\n            enter: \"bottom\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, 0],\n          [0, left],\n          [top, 1],\n          [1, 1],\n          [1, 0],\n        ]);\n\n      break;\n\n    case 12 /* 1100 */:\n      left = settings.interpolate(x0, x3, threshold);\n      right = settings.interpolate(x1, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.left = {\n          path: [\n            [0, left],\n            [1, right],\n          ],\n          move: {\n            x: 1,\n            y: 0,\n            enter: \"left\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, 0],\n          [0, left],\n          [1, right],\n          [1, 0],\n        ]);\n\n      break;\n\n    case 9 /* 1001 */:\n      bottom = settings.interpolate(x0, x1, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.bottom = {\n          path: [\n            [bottom, 0],\n            [top, 1],\n          ],\n          move: {\n            x: 0,\n            y: 1,\n            enter: \"bottom\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [bottom, 0],\n          [top, 1],\n          [1, 1],\n          [1, 0],\n        ]);\n\n      break;\n\n    case 3 /* 0011 */:\n      left = settings.interpolate(x0, x3, threshold);\n      right = settings.interpolate(x1, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.right = {\n          path: [\n            [1, right],\n            [0, left],\n          ],\n          move: {\n            x: -1,\n            y: 0,\n            enter: \"right\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, left],\n          [0, 1],\n          [1, 1],\n          [1, right],\n        ]);\n\n      break;\n\n    case 6 /* 0110 */:\n      bottom = settings.interpolate(x0, x1, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n\n      if (settings.polygons_full) {\n        cell.edges.top = {\n          path: [\n            [top, 1],\n            [bottom, 0],\n          ],\n          move: {\n            x: 0,\n            y: -1,\n            enter: \"top\",\n          },\n        };\n      }\n\n      if (settings.polygons)\n        cell.polygons.push([\n          [0, 0],\n          [0, 1],\n          [top, 1],\n          [bottom, 0],\n        ]);\n\n      break;\n\n    case 10 /* 1010 */:\n      left = settings.interpolate(x0, x3, threshold);\n      right = settings.interpolate(x1, x2, threshold);\n      bottom = settings.interpolate(x0, x1, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n      average = (x0 + x1 + x2 + x3) / 4;\n\n      if (settings.polygons_full) {\n        if (average < threshold) {\n          cell.edges.left = {\n            path: [\n              [0, left],\n              [top, 1],\n            ],\n            move: {\n              x: 0,\n              y: 1,\n              enter: \"bottom\",\n            },\n          };\n          cell.edges.right = {\n            path: [\n              [1, right],\n              [bottom, 0],\n            ],\n            move: {\n              x: 0,\n              y: -1,\n              enter: \"top\",\n            },\n          };\n        } else {\n          cell.edges.right = {\n            path: [\n              [1, right],\n              [top, 1],\n            ],\n            move: {\n              x: 0,\n              y: 1,\n              enter: \"bottom\",\n            },\n          };\n          cell.edges.left = {\n            path: [\n              [0, left],\n              [bottom, 0],\n            ],\n            move: {\n              x: 0,\n              y: -1,\n              enter: \"top\",\n            },\n          };\n        }\n      }\n\n      if (settings.polygons) {\n        if (average < threshold) {\n          cell.polygons.push([\n            [0, 0],\n            [0, left],\n            [top, 1],\n            [1, 1],\n            [1, right],\n            [bottom, 0],\n          ]);\n        } else {\n          cell.polygons.push([\n            [0, 0],\n            [0, left],\n            [bottom, 0],\n          ]);\n          cell.polygons.push([\n            [top, 1],\n            [1, 1],\n            [1, right],\n          ]);\n        }\n      }\n\n      break;\n\n    case 5 /* 0101 */:\n      left = settings.interpolate(x0, x3, threshold);\n      right = settings.interpolate(x1, x2, threshold);\n      bottom = settings.interpolate(x0, x1, threshold);\n      top = settings.interpolate(x3, x2, threshold);\n      average = (x0 + x1 + x2 + x3) / 4;\n\n      if (settings.polygons_full) {\n        if (average < threshold) {\n          cell.edges.bottom = {\n            path: [\n              [bottom, 0],\n              [0, left],\n            ],\n            move: {\n              x: -1,\n              y: 0,\n              enter: \"right\",\n            },\n          };\n          cell.edges.top = {\n            path: [\n              [top, 1],\n              [1, right],\n            ],\n            move: {\n              x: 1,\n              y: 0,\n              enter: \"left\",\n            },\n          };\n        } else {\n          cell.edges.top = {\n            path: [\n              [top, 1],\n              [0, left],\n            ],\n            move: {\n              x: -1,\n              y: 0,\n              enter: \"right\",\n            },\n          };\n          cell.edges.bottom = {\n            path: [\n              [bottom, 0],\n              [1, right],\n            ],\n            move: {\n              x: 1,\n              y: 0,\n              enter: \"left\",\n            },\n          };\n        }\n      }\n\n      if (settings.polygons) {\n        if (average < threshold) {\n          cell.polygons.push([\n            [0, left],\n            [0, 1],\n            [top, 1],\n            [1, right],\n            [1, 0],\n            [bottom, 0],\n          ]);\n        } else {\n          cell.polygons.push([\n            [0, left],\n            [0, 1],\n            [top, 1],\n          ]);\n          cell.polygons.push([\n            [bottom, 0],\n            [1, right],\n            [1, 0],\n          ]);\n        }\n      }\n\n      break;\n  }\n\n  return cell;\n}\n\nexport { isoLines, isoLines as isoContours };\n","import {\n  isoBandOptions,\n  type Options,\n  type IsoBandOptions,\n} from \"./options.js\";\nimport { cell2Polygons, traceBandPaths } from \"./polygons.js\";\nimport { QuadTree } from \"./quadtree.js\";\nimport { type Ring, type BandCell, type BandCellGrid } from \"./common.js\";\n\n/*\n * lookup table to generate polygon paths or edges required to\n * trace the full polygon(s)\n */\nconst shapeCoordinates = {\n  square: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, 1],\n        [1, 1],\n        [1, 0],\n      ]);\n  },\n\n  triangle_bl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, leftbottom],\n        [bottomleft, 0],\n        [0, 0],\n      ]);\n  },\n\n  triangle_br: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomright, 0],\n        [1, rightbottom],\n        [1, 0],\n      ]);\n  },\n\n  triangle_tr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const righttop = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [1, righttop],\n        [topright, 1],\n        [1, 1],\n      ]);\n  },\n\n  triangle_tl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, lefttop],\n        [0, 1],\n        [topleft, 1],\n      ]);\n  },\n\n  tetragon_t: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const righttop = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, lefttop],\n        [0, 1],\n        [1, 1],\n        [1, righttop],\n      ]);\n  },\n\n  tetragon_r: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomright, 0],\n        [topright, 1],\n        [1, 1],\n        [1, 0],\n      ]);\n  },\n\n  tetragon_b: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, leftbottom],\n        [1, rightbottom],\n        [1, 0],\n      ]);\n  },\n\n  tetragon_l: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, 1],\n        [topleft, 1],\n        [bottomleft, 0],\n      ]);\n  },\n\n  tetragon_bl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomleft, 0],\n        [0, leftbottom],\n        [0, lefttop],\n        [bottomright, 0],\n      ]);\n  },\n\n  tetragon_br: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomleft, 0],\n        [1, righttop],\n        [1, rightbottom],\n        [bottomright, 0],\n      ]);\n  },\n\n  tetragon_tr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [1, rightbottom],\n        [topleft, 1],\n        [topright, 1],\n        [1, righttop],\n      ]);\n  },\n\n  tetragon_tl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [topright, 1],\n        [0, leftbottom],\n        [0, lefttop],\n        [topleft, 1],\n      ]);\n  },\n\n  tetragon_lr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, leftbottom],\n        [0, lefttop],\n        [1, righttop],\n        [1, rightbottom],\n      ]);\n  },\n\n  tetragon_tb: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomleft, 0],\n        [topleft, 1],\n        [topright, 1],\n        [bottomright, 0],\n      ]);\n  },\n\n  pentagon_tr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, 1],\n        [topleft, 1],\n        [1, rightbottom],\n        [1, 0],\n      ]);\n  },\n\n  pentagon_tl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, leftbottom],\n        [topright, 1],\n        [1, 1],\n        [1, 0],\n      ]);\n  },\n\n  pentagon_br: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, 1],\n        [1, 1],\n        [1, righttop],\n        [bottomleft, 0],\n      ]);\n  },\n\n  pentagon_bl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, lefttop],\n        [0, 1],\n        [1, 1],\n        [1, 0],\n        [bottomright, 0],\n      ]);\n  },\n\n  pentagon_tr_rl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, lefttop],\n        [0, 1],\n        [topleft, 1],\n        [1, righttop],\n        [1, rightbottom],\n      ]);\n  },\n\n  pentagon_rb_bt: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const righttop = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [topright, 1],\n        [1, 1],\n        [1, righttop],\n        [bottomright, 0],\n        [bottomleft, 0],\n      ]);\n  },\n\n  pentagon_bl_lr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomright, 0],\n        [0, leftbottom],\n        [0, lefttop],\n        [1, rightbottom],\n        [1, 0],\n      ]);\n  },\n\n  pentagon_lt_tb: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, leftbottom],\n        [topleft, 1],\n        [topright, 1],\n        [bottomleft, 0],\n      ]);\n  },\n\n  pentagon_bl_tb: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, lefttop],\n        [0, 1],\n        [topleft, 1],\n        [bottomright, 0],\n        [bottomleft, 0],\n      ]);\n  },\n\n  pentagon_lt_rl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate(x1, x3, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, leftbottom],\n        [0, lefttop],\n        [topright, 1],\n        [1, 1],\n        [1, righttop],\n      ]);\n  },\n\n  pentagon_tr_bt: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [topleft, 1],\n        [topright, 1],\n        [1, rightbottom],\n        [1, 0],\n        [bottomright, 0],\n      ]);\n  },\n\n  pentagon_rb_lr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, leftbottom],\n        [1, righttop],\n        [1, rightbottom],\n        [bottomleft, 0],\n      ]);\n  },\n\n  hexagon_lt_tr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, leftbottom],\n        [topleft, 1],\n        [topright, 1],\n        [1, rightbottom],\n        [1, 0],\n      ]);\n  },\n\n  hexagon_bl_lt: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomright, 0],\n        [0, leftbottom],\n        [0, lefttop],\n        [topright, 1],\n        [1, 1],\n        [1, 0],\n      ]);\n  },\n\n  hexagon_bl_rb: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomleft, 0],\n        [0, lefttop],\n        [0, 1],\n        [1, 1],\n        [1, righttop],\n        [bottomright, 0],\n      ]);\n  },\n\n  hexagon_tr_rb: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, 1],\n        [topleft, 1],\n        [1, righttop],\n        [1, rightbottom],\n        [bottomleft, 0],\n      ]);\n  },\n\n  hexagon_lt_rb: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, leftbottom],\n        [topright, 1],\n        [1, 1],\n        [1, righttop],\n        [bottomleft, 0],\n      ]);\n  },\n\n  hexagon_bl_tr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomright, 0],\n        [0, lefttop],\n        [0, 1],\n        [topleft, 1],\n        [1, rightbottom],\n        [1, 0],\n      ]);\n  },\n\n  heptagon_tr: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [topright, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"br\",\n        },\n      };\n      cell.edges.rt = {\n        path: [\n          [1, righttop],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomleft, 0],\n        [0, leftbottom],\n        [0, lefttop],\n        [topright, 1],\n        [1, 1],\n        [1, righttop],\n        [bottomright, 0],\n      ]);\n  },\n\n  heptagon_bl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.lb = {\n        path: [\n          [0, leftbottom],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [bottomleft, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tl\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [0, 0],\n        [0, leftbottom],\n        [topleft, 1],\n        [topright, 1],\n        [1, righttop],\n        [1, rightbottom],\n        [bottomleft, 0],\n      ]);\n  },\n\n  heptagon_tl: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [0, lefttop],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rt\",\n        },\n      };\n      cell.edges.tl = {\n        path: [\n          [topleft, 1],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomleft, 0],\n        [0, lefttop],\n        [0, 1],\n        [topleft, 1],\n        [1, righttop],\n        [1, rightbottom],\n        [bottomright, 0],\n      ]);\n  },\n\n  heptagon_br: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomright = opt.interpolate(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.br = {\n        path: [\n          [bottomright, 0],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [1, rightbottom],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lb\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomright, 0],\n        [0, leftbottom],\n        [0, lefttop],\n        [topleft, 1],\n        [topright, 1],\n        [1, rightbottom],\n        [1, 0],\n      ]);\n  },\n\n  octagon: function (\n    cell: BandCell,\n    x0: number,\n    x1: number,\n    x2: number,\n    x3: number,\n    opt: IsoBandOptions\n  ) {\n    // assume minV and maxV defined\n    const bottomleft = opt.interpolate_a(x0, x1, opt.minV!, opt.maxV!);\n    const bottomright = opt.interpolate_b(x0, x1, opt.minV!, opt.maxV!);\n    const leftbottom = opt.interpolate_a(x0, x3, opt.minV!, opt.maxV!);\n    const lefttop = opt.interpolate_b(x0, x3, opt.minV!, opt.maxV!);\n    const topleft = opt.interpolate_a(x3, x2, opt.minV!, opt.maxV!);\n    const topright = opt.interpolate_b(x3, x2, opt.minV!, opt.maxV!);\n    const righttop = opt.interpolate_b(x1, x2, opt.minV!, opt.maxV!);\n    const rightbottom = opt.interpolate_a(x1, x2, opt.minV!, opt.maxV!);\n\n    if (opt.polygons_full) {\n      cell.edges.bl = {\n        path: [\n          [bottomleft, 0],\n          [0, leftbottom],\n        ],\n        move: {\n          x: -1,\n          y: 0,\n          enter: \"rb\",\n        },\n      };\n      cell.edges.lt = {\n        path: [\n          [0, lefttop],\n          [topleft, 1],\n        ],\n        move: {\n          x: 0,\n          y: 1,\n          enter: \"bl\",\n        },\n      };\n      cell.edges.tr = {\n        path: [\n          [topright, 1],\n          [1, righttop],\n        ],\n        move: {\n          x: 1,\n          y: 0,\n          enter: \"lt\",\n        },\n      };\n      cell.edges.rb = {\n        path: [\n          [1, rightbottom],\n          [bottomright, 0],\n        ],\n        move: {\n          x: 0,\n          y: -1,\n          enter: \"tr\",\n        },\n      };\n    }\n\n    if (opt.polygons)\n      cell.polygons.push([\n        [bottomleft, 0],\n        [0, leftbottom],\n        [0, lefttop],\n        [topleft, 1],\n        [topright, 1],\n        [1, righttop],\n        [1, rightbottom],\n        [bottomright, 0],\n      ]);\n  },\n};\n\n/*\n * Compute isobands(s) for a scalar 2D field given a certain\n * threshold and a bandwidth by applying the Marching Squares\n * Algorithm. The function returns a list of path coordinates\n * either for individual polygons within each grid cell, or the\n * outline of connected polygons.\n */\nfunction isoBands(\n  input: number[][] | QuadTree,\n  thresholds: number[],\n  bandwidths: number[],\n  options?: Options\n) {\n  let i: number,\n    j: number,\n    settings: IsoBandOptions,\n    useQuadTree = false,\n    tree = null,\n    root = null,\n    data = null,\n    cellGrid: BandCellGrid = [],\n    bandPolygons: Ring[],\n    ret: Ring[][] = [];\n\n  /* Defaults for optional args */\n  options = options ?? {};\n\n  /* basic input validation */\n  if (!!options && typeof options !== \"object\")\n    throw new Error(\"options must be an object\");\n\n  settings = isoBandOptions(options);\n\n  /* check for input data */\n  if (!input) throw new Error(\"data is required\");\n  if (input instanceof QuadTree) {\n    tree = input;\n    root = input.root;\n    data = input.data;\n    if (!settings.noQuadTree) useQuadTree = true;\n  } else if (Array.isArray(input) && Array.isArray(input[0])) {\n    data = input;\n  } else {\n    throw new Error(\n      \"input is neither array of arrays nor object retrieved from 'QuadTree()'\"\n    );\n  }\n\n  if (thresholds === undefined || thresholds === null)\n    throw new Error(\"thresholds is required\");\n  if (!Array.isArray(thresholds))\n    throw new Error(\"thresholds must be an array\");\n  if (bandwidths === undefined || bandwidths === null)\n    throw new Error(\"bandwidths is required\");\n  if (!Array.isArray(bandwidths))\n    throw new Error(\"bandwidths must be an array\");\n\n  /* check and prepare input thresholds */\n\n  /* activate QuadTree optimization if not explicitly forbidden by user settings */\n  if (!settings.noQuadTree) useQuadTree = true;\n\n  /* check if all thresholds are numbers */\n  for (i = 0; i < thresholds.length; i++)\n    if (isNaN(+thresholds[i]))\n      throw new Error(\"thresholds[\" + i + \"] is not a number\");\n\n  if (thresholds.length !== bandwidths.length)\n    throw new Error(\"threshold and bandwidth arrays have unequal lengths\");\n\n  /* check bandwidth values */\n  for (i = 0; i < bandwidths.length; i++)\n    if (isNaN(+bandwidths[i]))\n      throw new Error(\"bandwidths[\" + i + \"] is not a number\");\n\n  /* create QuadTree root node if not already present */\n  if (useQuadTree && !root) {\n    tree = new QuadTree(data);\n    root = tree.root;\n    data = tree.data;\n  }\n\n  if (settings.verbose) {\n    if (settings.polygons)\n      console.log(\"isoBands: returning single polygons for each grid cell\");\n    else console.log(\"isoBands: returning polygon paths for entire data grid\");\n  }\n\n  /* Done with all input validation, now let's start computing stuff */\n\n  /* loop over all minV values */\n  thresholds.forEach(function (lowerBound, b) {\n    bandPolygons = [];\n\n    /* store bounds for current computation in settings object */\n    settings.minV = lowerBound;\n    settings.maxV = lowerBound + bandwidths[b];\n\n    if (settings.verbose)\n      console.log(\n        \"isoBands: computing isobands for [\" +\n          lowerBound +\n          \":\" +\n          (lowerBound + bandwidths[b]) +\n          \"]\"\n      );\n\n    if (settings.polygons) {\n      /* compose list of polygons for each single cell */\n      if (useQuadTree) {\n        /* go through list of cells retrieved from QuadTree */\n        root!\n          .cellsInBand(settings.minV, settings.maxV, true)\n          .forEach(function (c) {\n            const cell = prepareCell(data, c.x, c.y, settings);\n            if (cell) {\n              bandPolygons = bandPolygons.concat(\n                cell2Polygons(cell, c.x, c.y, settings)\n              );\n            }\n          });\n      } else {\n        /* go through entire array of input data */\n        for (j = 0; j < data.length - 1; ++j) {\n          for (i = 0; i < data[0].length - 1; ++i) {\n            const cell = prepareCell(data, i, j, settings);\n            if (cell) {\n              bandPolygons = bandPolygons.concat(\n                cell2Polygons(cell, i, j, settings)\n              );\n            }\n          }\n        }\n      }\n    } else {\n      /* sparse grid of input data cells */\n      cellGrid = [];\n      for (i = 0; i < data[0].length - 1; ++i) cellGrid[i] = [];\n\n      /* compose list of polygons for entire input grid */\n      if (useQuadTree) {\n        /* collect the cells */\n        root!\n          .cellsInBand(settings.minV, settings.maxV, false)\n          .forEach(function (c) {\n            cellGrid[c.x][c.y] = prepareCell(data, c.x, c.y, settings);\n          });\n      } else {\n        /* prepare cells */\n        for (i = 0; i < data[0].length - 1; ++i) {\n          for (j = 0; j < data.length - 1; ++j) {\n            cellGrid[i][j] = prepareCell(data, i, j, settings);\n          }\n        }\n      }\n\n      bandPolygons = traceBandPaths(data, cellGrid, settings);\n    }\n\n    /* finally, add polygons to output array */\n    ret.push(bandPolygons);\n\n    if (typeof settings.successCallback === \"function\")\n      settings.successCallback(ret, lowerBound, bandwidths[b]);\n  });\n\n  return ret;\n}\n\n/*\n * Thats all for the public interface, below follows the actual\n * implementation\n */\n\n/*\n *  For isoBands, each square is defined by the three states\n * of its corner points. However, since computers use power-2\n * values, we use 2bits per trit, i.e.:\n *\n * 00 ... below minV\n * 01 ... between minV and maxV\n * 10 ... above maxV\n *\n * Hence we map the 4-trit configurations as follows:\n *\n * 0000 => 0\n * 0001 => 1\n * 0002 => 2\n * 0010 => 4\n * 0011 => 5\n * 0012 => 6\n * 0020 => 8\n * 0021 => 9\n * 0022 => 10\n * 0100 => 16\n * 0101 => 17\n * 0102 => 18\n * 0110 => 20\n * 0111 => 21\n * 0112 => 22\n * 0120 => 24\n * 0121 => 25\n * 0122 => 26\n * 0200 => 32\n * 0201 => 33\n * 0202 => 34\n * 0210 => 36\n * 0211 => 37\n * 0212 => 38\n * 0220 => 40\n * 0221 => 41\n * 0222 => 42\n * 1000 => 64\n * 1001 => 65\n * 1002 => 66\n * 1010 => 68\n * 1011 => 69\n * 1012 => 70\n * 1020 => 72\n * 1021 => 73\n * 1022 => 74\n * 1100 => 80\n * 1101 => 81\n * 1102 => 82\n * 1110 => 84\n * 1111 => 85\n * 1112 => 86\n * 1120 => 88\n * 1121 => 89\n * 1122 => 90\n * 1200 => 96\n * 1201 => 97\n * 1202 => 98\n * 1210 => 100\n * 1211 => 101\n * 1212 => 102\n * 1220 => 104\n * 1221 => 105\n * 1222 => 106\n * 2000 => 128\n * 2001 => 129\n * 2002 => 130\n * 2010 => 132\n * 2011 => 133\n * 2012 => 134\n * 2020 => 136\n * 2021 => 137\n * 2022 => 138\n * 2100 => 144\n * 2101 => 145\n * 2102 => 146\n * 2110 => 148\n * 2111 => 149\n * 2112 => 150\n * 2120 => 152\n * 2121 => 153\n * 2122 => 154\n * 2200 => 160\n * 2201 => 161\n * 2202 => 162\n * 2210 => 164\n * 2211 => 165\n * 2212 => 166\n * 2220 => 168\n * 2221 => 169\n * 2222 => 170\n */\n\n/*\n * ####################################\n * Some small helper functions\n * ####################################\n */\n\nfunction computeCenterAverage(\n  bl: number,\n  br: number,\n  tr: number,\n  tl: number,\n  minV: number,\n  maxV: number\n) {\n  const average = (tl + tr + br + bl) / 4;\n\n  if (average > maxV) return 2; /* above isoband limits */\n\n  if (average < minV) return 0; /* below isoband limits */\n\n  return 1; /* within isoband limits */\n}\n\nfunction prepareCell(\n  grid: number[][],\n  x: number,\n  y: number,\n  opt: IsoBandOptions\n) {\n  /*  compose the 4-trit corner representation */\n  let cval = 0;\n  const x3 = grid[y + 1][x],\n    x2 = grid[y + 1][x + 1],\n    x1 = grid[y][x + 1],\n    x0 = grid[y][x],\n    minV = opt.minV!, // assume minV defined\n    maxV = opt.maxV!; // assume maxV defined\n\n  /*\n   * Note that missing data within the grid will result\n   * in horribly failing to trace full polygon paths\n   */\n  if (isNaN(x0) || isNaN(x1) || isNaN(x2) || isNaN(x3)) {\n    return;\n  }\n\n  /*\n   * Here we detect the type of the cell\n   *\n   * x3 ---- x2\n   * |      |\n   * |      |\n   * x0 ---- x1\n   *\n   * with edge points\n   *\n   * x0 = (x,y),\n   * x1 = (x + 1, y),\n   * x2 = (x + 1, y + 1), and\n   * x3 = (x, y + 1)\n   *\n   * and compute the polygon intersections with the edges\n   * of the cell. Each edge value may be (i) below, (ii) within,\n   * or (iii) above the values of the isoband limits. We\n   * encode this property using 2 bits of information, where\n   *\n   * 00 ... below,\n   * 01 ... within, and\n   * 10 ... above\n   *\n   * Then we store the cells value as vector\n   *\n   * cval = (x0, x1, x2, x3)\n   *\n   * where x0 are the two least significant bits (0th, 1st),\n   * x1 the 2nd and 3rd bit, and so on. This essentially\n   * enables us to work with a single integer number\n   */\n\n  cval |= x3 < minV ? 0 : x3 > maxV ? 128 : 64;\n  cval |= x2 < minV ? 0 : x2 > maxV ? 32 : 16;\n  cval |= x1 < minV ? 0 : x1 > maxV ? 8 : 4;\n  cval |= x0 < minV ? 0 : x0 > maxV ? 2 : 1;\n\n  /* make sure cval is a number */\n  cval = +cval;\n\n  /*\n   * cell center average trit for ambiguous cases, where\n   * 0 ... below iso band\n   * 1 ... within iso band\n   * 2 ... above isoband\n   */\n  let center_avg = 0;\n\n  let cell = {\n    cval: cval,\n    polygons: [],\n    edges: {},\n    x0: x0,\n    x1: x1,\n    x2: x2,\n    x3: x3,\n    x: x,\n    y: y,\n  };\n\n  /*\n   * Compute interpolated intersections of the polygon(s)\n   * with the cell borders and (i) add edges for polygon\n   * trace-back, or (ii) a list of small closed polygons\n   * according to look-up table\n   */\n  switch (cval) {\n    case 85 /* 1111 */:\n      shapeCoordinates.square(cell, x0, x1, x2, x3, opt);\n    /* fall through */\n    case 0: /* 0000 */\n    /* fall through */\n    case 170 /* 2222 */:\n      break;\n\n    /* single triangle cases */\n\n    case 169 /* 2221 */:\n      shapeCoordinates.triangle_bl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 166 /* 2212 */:\n      shapeCoordinates.triangle_br(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 154 /* 2122 */:\n      shapeCoordinates.triangle_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 106 /* 1222 */:\n      shapeCoordinates.triangle_tl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 1 /* 0001 */:\n      shapeCoordinates.triangle_bl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 4 /* 0010 */:\n      shapeCoordinates.triangle_br(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 16 /* 0100 */:\n      shapeCoordinates.triangle_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 64 /* 1000 */:\n      shapeCoordinates.triangle_tl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    /* single trapezoid cases */\n\n    case 168 /* 2220 */:\n      shapeCoordinates.tetragon_bl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 162 /* 2202 */:\n      shapeCoordinates.tetragon_br(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 138 /* 2022 */:\n      shapeCoordinates.tetragon_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 42 /* 0222 */:\n      shapeCoordinates.tetragon_tl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 2 /* 0002 */:\n      shapeCoordinates.tetragon_bl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 8 /* 0020 */:\n      shapeCoordinates.tetragon_br(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 32 /* 0200 */:\n      shapeCoordinates.tetragon_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 128 /* 2000 */:\n      shapeCoordinates.tetragon_tl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    /* single rectangle cases */\n\n    case 5 /* 0011 */:\n      shapeCoordinates.tetragon_b(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 20 /* 0110 */:\n      shapeCoordinates.tetragon_r(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 80 /* 1100 */:\n      shapeCoordinates.tetragon_t(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 65 /* 1001 */:\n      shapeCoordinates.tetragon_l(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 165 /* 2211 */:\n      shapeCoordinates.tetragon_b(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 150 /* 2112 */:\n      shapeCoordinates.tetragon_r(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 90 /* 1122 */:\n      shapeCoordinates.tetragon_t(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 105 /* 1221 */:\n      shapeCoordinates.tetragon_l(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 160 /* 2200 */:\n      shapeCoordinates.tetragon_lr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 130 /* 2002 */:\n      shapeCoordinates.tetragon_tb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 10 /* 0022 */:\n      shapeCoordinates.tetragon_lr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 40 /* 0220 */:\n      shapeCoordinates.tetragon_tb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    /* single pentagon cases */\n\n    case 101 /* 1211 */:\n      shapeCoordinates.pentagon_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 149 /* 2111 */:\n      shapeCoordinates.pentagon_tl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 86 /* 1112 */:\n      shapeCoordinates.pentagon_bl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 89 /* 1121 */:\n      shapeCoordinates.pentagon_br(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 69 /* 1011 */:\n      shapeCoordinates.pentagon_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 21 /* 0111 */:\n      shapeCoordinates.pentagon_tl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 84 /* 1110 */:\n      shapeCoordinates.pentagon_bl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 81 /* 1101 */:\n      shapeCoordinates.pentagon_br(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 96 /* 1200 */:\n      shapeCoordinates.pentagon_tr_rl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 24 /* 0120 */:\n      shapeCoordinates.pentagon_rb_bt(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 6 /* 0012 */:\n      shapeCoordinates.pentagon_bl_lr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 129 /* 2001 */:\n      shapeCoordinates.pentagon_lt_tb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 74 /* 1022 */:\n      shapeCoordinates.pentagon_tr_rl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 146 /* 2102 */:\n      shapeCoordinates.pentagon_rb_bt(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 164 /* 2210 */:\n      shapeCoordinates.pentagon_bl_lr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 41 /* 0221 */:\n      shapeCoordinates.pentagon_lt_tb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 66 /* 1002 */:\n      shapeCoordinates.pentagon_bl_tb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 144 /* 2100 */:\n      shapeCoordinates.pentagon_lt_rl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 36 /* 0210 */:\n      shapeCoordinates.pentagon_tr_bt(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 9 /* 0021 */:\n      shapeCoordinates.pentagon_rb_lr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 104 /* 1220 */:\n      shapeCoordinates.pentagon_bl_tb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 26 /* 0122 */:\n      shapeCoordinates.pentagon_lt_rl(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 134 /* 2012 */:\n      shapeCoordinates.pentagon_tr_bt(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 161 /* 2201 */:\n      shapeCoordinates.pentagon_rb_lr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    /* single hexagon cases */\n\n    case 37 /* 0211 */:\n      shapeCoordinates.hexagon_lt_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 148 /* 2110 */:\n      shapeCoordinates.hexagon_bl_lt(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 82 /* 1102 */:\n      shapeCoordinates.hexagon_bl_rb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 73 /* 1021 */:\n      shapeCoordinates.hexagon_tr_rb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 133 /* 2011 */:\n      shapeCoordinates.hexagon_lt_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 22 /* 0112 */:\n      shapeCoordinates.hexagon_bl_lt(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 88 /* 1120 */:\n      shapeCoordinates.hexagon_bl_rb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 97 /* 1201 */:\n      shapeCoordinates.hexagon_tr_rb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 145 /* 2101 */:\n      shapeCoordinates.hexagon_lt_rb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 25 /* 0121 */:\n      shapeCoordinates.hexagon_lt_rb(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 70 /* 1012 */:\n      shapeCoordinates.hexagon_bl_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    case 100 /* 1210 */:\n      shapeCoordinates.hexagon_bl_tr(cell, x0, x1, x2, x3, opt);\n      break;\n\n    /* 6-sided saddles */\n\n    case 17 /* 0101 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 2 */\n      if (center_avg === 0) {\n        shapeCoordinates.triangle_bl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.triangle_tr(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.hexagon_lt_rb(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 68 /* 1010 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 2 */\n      if (center_avg === 0) {\n        shapeCoordinates.triangle_tl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.triangle_br(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.hexagon_bl_tr(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 153 /* 2121 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 0 */\n      if (center_avg === 2) {\n        shapeCoordinates.triangle_bl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.triangle_tr(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.hexagon_lt_rb(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 102 /* 1212 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 0 */\n      if (center_avg === 2) {\n        shapeCoordinates.triangle_tl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.triangle_br(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.hexagon_bl_tr(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    /* 7-sided saddles */\n\n    case 152 /* 2120 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 0 */\n      if (center_avg === 2) {\n        shapeCoordinates.triangle_tr(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_bl(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_tr(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 137 /* 2021 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 0 */\n      if (center_avg === 2) {\n        shapeCoordinates.triangle_bl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_tr(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_bl(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 98 /* 1202 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 0 */\n      if (center_avg === 2) {\n        shapeCoordinates.triangle_tl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_br(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_tl(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 38 /* 0212 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 0 */\n      if (center_avg === 2) {\n        shapeCoordinates.triangle_br(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_tl(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_br(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 18 /* 0102 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 2 */\n      if (center_avg === 0) {\n        shapeCoordinates.triangle_tr(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_bl(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_tr(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 33 /* 0201 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 2 */\n      if (center_avg === 0) {\n        shapeCoordinates.triangle_bl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_tr(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_bl(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 72 /* 1020 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 2 */\n      if (center_avg === 0) {\n        shapeCoordinates.triangle_tl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_br(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_tl(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 132 /* 2010 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      /* should never be center_avg === 2 */\n      if (center_avg === 0) {\n        shapeCoordinates.triangle_br(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_tl(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.heptagon_br(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    /* 8-sided saddles */\n\n    case 136 /* 2020 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      if (center_avg === 0) {\n        shapeCoordinates.tetragon_tl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_br(cell, x0, x1, x2, x3, opt);\n      } else if (center_avg === 1) {\n        shapeCoordinates.octagon(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.tetragon_bl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_tr(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n\n    case 34 /* 0202 */:\n      center_avg = computeCenterAverage(x0, x1, x2, x3, minV, maxV);\n      if (center_avg === 0) {\n        shapeCoordinates.tetragon_bl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_tr(cell, x0, x1, x2, x3, opt);\n      } else if (center_avg === 1) {\n        shapeCoordinates.octagon(cell, x0, x1, x2, x3, opt);\n      } else {\n        shapeCoordinates.tetragon_tl(cell, x0, x1, x2, x3, opt);\n        shapeCoordinates.tetragon_br(cell, x0, x1, x2, x3, opt);\n      }\n      break;\n  }\n\n  return cell;\n}\n\nexport { isoBands };\n"]}