UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

67 lines (60 loc) 2.26 kB
import {TetGeometry} from '../TetGeometry'; import {sortedNumber3} from './sortedIndices'; import {TET_FACE_POINT_INDICES, Tetrahedron} from '../TetCommon'; import {Number3} from '../../../../../types/GlobalTypes'; const _sortedIndices: Number3 = [0, 0, 0]; const _sortedIndicesNeighbour: Number3 = [0, 0, 0]; export function updateTetNeighboursFromNewTet(tetGeometry: TetGeometry, tet: Tetrahedron) { for (let id0 = 0; id0 < 4; id0++) { const sharedPoint = tet.pointIds[id0]; const tetsSharingPoint = tetGeometry.tetrahedronsByPointId.get(sharedPoint); let faceIndex = 0; for (const facePointIndices of TET_FACE_POINT_INDICES) { if (!tetsSharingPoint) { continue; } sortedNumber3( tet.pointIds[facePointIndices[0]], tet.pointIds[facePointIndices[1]], tet.pointIds[facePointIndices[2]], _sortedIndices ); const [pt0, pt1, pt2] = _sortedIndices; tetsSharingPoint.forEach((tetId) => { if (tetId == tet.id) { return; } const tetSharingPoint = tetGeometry.tetrahedrons.get(tetId); if (!tetSharingPoint) { return; } let faceIndexNeighbour = 0; for (const facePointIndicesNeighbour of TET_FACE_POINT_INDICES) { sortedNumber3( tetSharingPoint.pointIds[facePointIndicesNeighbour[0]], tetSharingPoint.pointIds[facePointIndicesNeighbour[1]], tetSharingPoint.pointIds[facePointIndicesNeighbour[2]], _sortedIndicesNeighbour ); const [ptN0, ptN1, ptN2] = _sortedIndicesNeighbour; if (pt0 == ptN0 && pt1 == ptN1 && pt2 == ptN2) { tet.neighbours[faceIndex] = {id: tetSharingPoint.id, faceIndex: faceIndexNeighbour}; tetSharingPoint.neighbours[faceIndexNeighbour] = {id: tet.id, faceIndex: faceIndex}; } faceIndexNeighbour++; } // if(tetSharingPoint.pointIds.includes(tet.pointIds[facePointIndices[1]]) && tetSharingPoint.pointIds.includes(tet.pointIds[facePointIndices[2]])){ // tet.neighbours[faceIndex] = {tetSharingPoint.id} // } }); faceIndex++; } } } export function tetNeighbour(tetGeometry: TetGeometry, tetId: number, faceIndex: number) { const tetrahedron = tetGeometry.tetrahedrons.get(tetId); if (!tetrahedron) { return; } return tetrahedron.neighbours[faceIndex]?.id; }