coloring-occlusion-v2
v1.0.5
Published
npm package containing a business logic for coloring the jaws occlusion
Downloads
13
Readme
Occlusion Coloring
npm package containing a business logic for coloring the jaws occlusion
Getting started
npm install coloring-occlusion
Examples
intersecting occlusal surfaces of teeth
minimal distance for two meshes
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[][]
- набор диапазонов которые необходимо указывать для разделения пересекающегося меша. Этот набор диапазонов должен быть:- Не пересекающимся
- Положительно рассположенным
- В объединении давать полный диапазон от минимальной до максимальной границы.
- Нижняя граница должна быть обязательна равна 0 (раз ищем пересечения)
- Верхняя граница должна быть гарантированно больше длины максимального пересечения (чтобы не появлялись пустоты в мешах пересечений), и одновременно не сильно большой, чтобы рейкастинг не был слишком долгим.
returningMeshes: boolean[]
- массив из двух элементов, возвращает только те меши пересечений, которые нужны. Т.е. еслиreturningMeshes = [true,false]
, то вернуться меши пересечений только для первой челюсти.
Примеры различных ranges
const ranges: number[][] = [
[0, 0.1],
[0.1, 0.3],
[0.3, 5],
];
const ranges: number[][] = [
[0, 0.1],
[0.1, 0.3],
[0.3, 0.5],
[0.5, 0.8],
[0.8, 5],
];
const ranges: number[][] = [
[0, 0.2],
[0.2, 5],
];
По итогу вызов основной функции 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
будет находиться направильный ответ
pair distance
Метод, который позволяет найти минимальное расстояние между двумя мешами по заданному единичному вектору. Перед использованием необходимо сделать подготовку геометрий аналогичную для функции раскраски.
Использование:
const firstMesh: Mesh = new Mesh();
const secondMesh: Mesh = new Mesh();
const calcVector: Vector3 = new Vector3().normalize();
const distance: number = getPairDistance(
firstMesh,
secondMesh,
calcVector
);
В случае, если меши пересекаются, то полученное расстояние будет указывать на максимальное пересечение со знаком минус.
Пример реализации: minimal distance for two meshes