Browse Source

added Surface._unused_vertices()

Fabian Peter Hammerle 5 years ago
parent
commit
bd8039424c
2 changed files with 29 additions and 0 deletions
  1. 7 0
      freesurfer_surface/__init__.py
  2. 22 0
      tests/test_surface.py

+ 7 - 0
freesurfer_surface/__init__.py

@@ -477,3 +477,10 @@ class Surface:
                 available_chains = checked_chains
             assert all((segment in segments) for segment in chain.segments())
             yield chain
+
+    def _unused_vertices(self) -> typing.Set[int]:
+        vertex_indices = set(range(len(self.vertices)))
+        for triangle in self.triangles:
+            for vertex_index in triangle.vertex_indices:
+                vertex_indices.discard(vertex_index)
+        return vertex_indices

+ 22 - 0
tests/test_surface.py

@@ -408,3 +408,25 @@ def test_find_label_border_polygonal_chains():
     vertex_indices_normalized = vertex_indices[min_index:] + vertex_indices[:min_index]
     assert vertex_indices_normalized[:4] == [32065, 32072, 32073, 32080]
     assert vertex_indices_normalized[-4:] == [36281, 34870, 33454, 33450]
+
+
+def test__unused_vertices():
+    surface = Surface()
+    assert not surface._unused_vertices()
+    for i in range(4):
+        surface.add_vertex(Vertex(i, i, i))
+    assert surface._unused_vertices() == {0, 1, 2, 3}
+    surface.triangles.append(Triangle((0, 2, 3)))
+    assert surface._unused_vertices() == {1}
+    surface.triangles.append(Triangle((0, 3, 1)))
+    assert not surface._unused_vertices()
+    del surface.triangles[0]
+    assert surface._unused_vertices() == {2}
+
+
+def test__unused_vertices_real():
+    surface = Surface.read_triangular(SURFACE_FILE_PATH)
+    assert not surface._unused_vertices()
+    surface.triangles = list(filter(lambda t: 42 not in t.vertex_indices,
+                                    surface.triangles))
+    assert surface._unused_vertices() == {42}