diff --git a/src/mol-geo/geometry/mesh/mesh.ts b/src/mol-geo/geometry/mesh/mesh.ts index e87de9bf285eb9bc12a7c581d1ba1e3ebc3a1425..ad4cec0ba85172c3fb8b961543413b8248132f2b 100644 --- a/src/mol-geo/geometry/mesh/mesh.ts +++ b/src/mol-geo/geometry/mesh/mesh.ts @@ -103,6 +103,28 @@ export namespace Mesh { mesh.normalsComputed = true; } + export function checkForDuplicateVertices(mesh: Mesh, fractionDigits = 3) { + const v = mesh.vertexBuffer.ref.value + + const map = new Map<string, number>() + const hash = (v: Vec3, d: number) => `${v[0].toFixed(d)}|${v[1].toFixed(d)}|${v[2].toFixed(d)}` + let duplicates = 0 + + const a = Vec3.zero() + for (let i = 0, il = mesh.vertexCount; i < il; ++i) { + Vec3.fromArray(a, v, i * 3) + const k = hash(a, fractionDigits) + const count = map.get(k) + if (count !== undefined) { + duplicates += 1 + map.set(k, count + 1) + } else { + map.set(k, 1) + } + } + return duplicates + } + export function computeNormals(surface: Mesh): Task<Mesh> { return Task.create<Mesh>('Surface (Compute Normals)', async ctx => { if (surface.normalsComputed) return surface;