/**
 * Return true if the given vertex lies on the boundary of the
 * tetrahedral mesh — equivalently, if it sits on any face that has no
 * neighbouring tet (INVALID_NEIGHBOUR).
 *
 * Used by quality-improvement passes to skip boundary vertices when
 * smoothing or collapsing, because moving them would change the mesh's
 * external surface (which usually represents some geometric constraint
 * the caller wants preserved).
 *
 * Cost without `vertex_to_tets_map`: O(N) over the live tets, same as
 * {@link tetrahedral_mesh_find_tets_attached_to_vertex} which it shares
 * the same scan structure with.
 *
 * Cost with `vertex_to_tets_map`: O(deg(vertex)) — usually a small
 * constant. For repeated calls over many vertices in a tight loop
 * (e.g. a sliver-removal pass), build the map once via
 * {@link tetrahedral_mesh_build_vertex_to_tets_map} and pass it in.
 *
 * Note: boundary status is invariant under interior 2-3 / 3-2 flips, so
 * a once-per-pass cache stays valid for boundary queries even as the
 * pass commits flips, as long as a freshly-snapshotted cache is built
 * for each NEW pass.
 *
 * @param {TetrahedralMesh} mesh
 * @param {number} vertex_id
 * @param {Map<number, number[]>} [vertex_to_tets_map] optional cache
 * @returns {boolean}
 */
export function tetrahedral_mesh_vertex_is_boundary(mesh: TetrahedralMesh, vertex_id: number, vertex_to_tets_map?: Map<number, number[]>): boolean;
//# sourceMappingURL=tetrahedral_mesh_vertex_is_boundary.d.ts.map