1.0.4 • Published 2 years ago

coloring-occlusion v1.0.4

Weekly downloads
-
License
ISC
Repository
gitlab
Last release
2 years ago

Occlusion Coloring

npm package containing a business logic for coloring the jaws occlusion

Getting started

npm install coloring-occlusion

Example

intersecting occlusal surfaces of teeth

screen

Usage

preparing

Перед использованием основной функции необходимо подготовить геометрию мешей для более быстрого вычисления. Это можно сделать с помощью функции prepareGeometry:

import { BufferGeometry } from "three";
import { prepareGeometry } from "coloring-occlusion";

const modelGeometry: BufferGeometry = new BufferGeometry();

const geometry: BufferGeometry = prepareGeometry(modelGeometry);

calculating

Все вычисления происходят в функции intersectGeometries . Для вызова функции нужно подготовить информацию, которая будет подаваться, а конкретно intersectGeometriesInfo, которая содержит в себе:

  • firstJaw: Array<Mesh> - первый массив мешей для пересечения
  • secondJaw: Array<Mesh> - второй массив
  • intersectingVector: Vector3 - вектор, который будет рейкастить из первого массива геометрий во второй (не наоборот!) Важно обратить внимание на то, что если мы ищем пересечения из нижней челюсти в верхнюю (стреляем из первого массива во второй) , то необходимо указывать вектор который смотрит вниз.
  • ranges: number[][] - набор диапазонов которые необходимо указывать для разделения пересекающегося меша. Этот набор диапазонов должен быть:
    1. Не пересекающимся
    2. Положительно рассположенным
    3. В объединении давать полный диапазон от минимальной до максимальной границы.
    4. Нижняя граница должна быть обязательна равна 0 (раз ищем пересечения)
    5. Верхняя граница должна быть гарантированно больше длины максимального пересечения (чтобы не появлялись пустоты в мешах пересечений), и одновременно не сильно большой, чтобы рейкастинг не был слишком долгим.
  • returningMeshes: boolean[] - массив из двух элементов, возвращает только те меши пересечений, которые нужны. Т.е. если returningMeshes = [true,false], то вернуться меши пересечений только для первой челюсти.

Примеры различных ranges

const ranges: number[][] = [
    [0, 0.1],
    [0.1, 0.3],
    [0.3, 5],
];

ranges1

const ranges: number[][] = [
  [0, 0.1],
  [0.1, 0.3],
  [0.3, 0.5],
  [0.5, 0.8],
  [0.8, 5],
];

ranges2

const ranges: number[][] = [
  [0, 0.2],
  [0.2, 5],
];

ranges3

По итогу вызов основной функции intersectGeometries может выглядить так:

  const intersectingVector = new Vector3(0, 0, 1);
  const ranges: number[][] = [
    [0, 0.2],
    [0.2, 5],
  ];
  const returningMeshes = [true, true];
  const info: intersectGeometriesInfo = {
    firstJaw: upperJaw,
    secondJaw: lowJaw,
    intersectingVector,
    ranges,
    returningMeshes,
  };

  const result = intersectGeometries(info);

Результат состоит из

  • firstJaw и/или secondJaw - массив мешей пересечений, длина которого равна ranges и которые расположены в том же порядке, что и диапазоны.
  • maxIntersection - длина максимально найденного пересечения, по заданному вектору. Важно отметить, что если длина реального максимального пересечения больше, чем верхняя граница в ranges, то в maxIntersection будет находиться направильный ответ
1.0.4

2 years ago

1.0.2

2 years ago

1.0.3

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago