浏览代码

checkForDuplicateVertices mesh helper method

Alexander Rose 6 年之前
父节点
当前提交
40b7fe7c6e
共有 1 个文件被更改,包括 22 次插入0 次删除
  1. 22 0
      src/mol-geo/geometry/mesh/mesh.ts

+ 22 - 0
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;