Exemplo n.º 1
0
 def test_domainmeshing_with_borders(self):
     surface = SVMTK.Surface()
     surface.make_cube(0.0,0.0,0.0,1.0,1.0,1.0,1)
     domain = SVMTK.Domain(surface)
     domain.add_sharp_border_edges(surface)
     domain.create_mesh(1.)
     self.assertTrue(domain.number_of_curves() > 0) 
Exemplo n.º 2
0
def create_gwv_mesh(pial_stl,
                    white_stl,
                    ventricles_stl,
                    output,
                    remove_ventricles=True):

    # Create SVMTk Surfaces from STL files
    pial = svmtk.Surface(pial_stl)
    white = svmtk.Surface(white_stl)
    ventricles = svmtk.Surface(ventricles_stl)
    surfaces = [pial, white, ventricles]

    # Define identifying tags for the different regions
    tags = {"pial": 1, "white": 2, "ventricle": 3}

    # Define the corresponding subdomain map
    smap = svmtk.SubdomainMap()
    smap.add("100", tags["pial"])
    smap.add("110", tags["white"])
    smap.add("111", tags["ventricle"])

    # Mesh and tag the domain from the surfaces and map
    domain = svmtk.Domain(surfaces, smap)
    resolution = 32
    domain.create_mesh(resolution)

    # Remove subdomain with right tag from the domain
    if remove_ventricles:
        domain.remove_subdomain(tags["ventricle"])

    # Save the mesh
    domain.save(output)
Exemplo n.º 3
0
 def test_shortest_surface_path(self):
     surface = SVMTK.Surface()
     surface.make_cube(-1., -1., -1., 1., 1., 1., 1)
     a = surface.shortest_surface_path(SVMTK.Point_3(-1, -1, 1),
                                       SVMTK.Point_3(1, -1, 1))
     self.assertTrue(a[1] == SVMTK.Point_3(-1, -1, 1)
                     and a[0] == SVMTK.Point_3(1, -1, 1))
Exemplo n.º 4
0
 def test_two_domains(self):
     surface_1 = SVMTK.Surface() 
     surface_1.make_cube(-1.,-1.,-1.,1.,1.,1.,1) 
     surface_2 = SVMTK.Surface() 
     surface_2.make_cube(-2.,-2.,-2.,2.,2.,2.,1) 
     domain = SVMTK.Domain([surface_1,surface_2])
     self.assertEqual(domain.number_of_surfaces(),2)
Exemplo n.º 5
0
    def test_seperate_close_surfaces(self):
        s1 = SVMTK.Surface()
        s2 = SVMTK.Surface()
        s3 = SVMTK.Surface()
        s1.make_cube(1., 0., 1., 2., 1., 2., 1)
        s2.make_cube(1., 1, 1., 2., 2., 2., 1)

        self.assertTrue(SVMTK.separate_close_surfaces(s1, s2))
Exemplo n.º 6
0
 def test_sperate_overlapping_surface_2(self):
     s1 = SVMTK.Surface()
     s2 = SVMTK.Surface()
     s3 = SVMTK.Surface()
     s1.make_cube(1., 0., 1., 2., 1., 2., 5)
     s2.make_cube(1., 1., 1., 2., 2., 2., 5)
     s3.make_cube(1.2, 0.5, 1.2, 1.8, 1.5, 1.8, 5)
     self.assertTrue(SVMTK.separate_overlapping_surfaces(s1, s2, s3))
Exemplo n.º 7
0
   def test_domain_with_polyline_meshing(self):
       surface = SVMTK.Surface();
       surface.make_sphere(0.0,0.0,0.0,3.0,1.0)
       domain = SVMTK.Domain(surface)
 
       line0 = [SVMTK.Point_3(0,0,0.0), SVMTK.Point_3(0,1.0,1.0)] 
       domain.add_feature( line0)
       domain.create_mesh(1.)
       self.assertTrue(domain.number_of_curves() >0) 
Exemplo n.º 8
0
 def test_simplify(self):
     slice1 = SVMTK.Slice()
     slice1.add_constraint(
         [SVMTK.Point_2(0, 0),
          SVMTK.Point_2(1, 1),
          SVMTK.Point_2(2, 1)])
     slice1.simplify(1.0)
     constraints = slice1.get_constraints()
     self.assertEqual(len(constraints[0]), 3)
Exemplo n.º 9
0
 def test_strictly_inside(self):
     surface1 = SVMTK.Surface()
     surface1.make_cube(0., 0., 0., 2., 2., 2., 10)
     surface2 = SVMTK.Surface()
     surface2.make_cube(-0.5, -0.5, -0.5, 2.5, 2.5, 2.5, 10)
     for i in range(5):
         surface2.strictly_inside(surface1, -.8)
         surface2.collapse_edges(0.3)
         surface2.smooth_laplacian(0.8, 1)
     self.assertEqual(surface2.strictly_inside(surface1, -0.1), 0)
Exemplo n.º 10
0
    def test_separate_enclosed_surface(self):
        surface1 = SVMTK.Surface()
        surface1.make_cube(0., 0., 0., 2., 2., 2., 4)
        surface2 = SVMTK.Surface()
        surface2.make_cube(0.05, 0.05, 0.05, 1.95, 1.95, 1.95, 4)

        for i in range(4):
            surface2.separate_enclosed_surface(surface1, -0.3)
            surface2.smooth_laplacian(0.3, 1)
        self.assertEqual(surface2.separate_enclosed_surface(surface1, -0.1), 0)
Exemplo n.º 11
0
 def test_mehsing_domains_with_map(self): 
     surface_1 = SVMTK.Surface() 
     surface_1.make_cube(-1.,-1.,-1.,1.,1.,1.,1) 
     surface_2 = SVMTK.Surface() 
     surface_2.make_cube(-2.,-2.,-2.,2.,2.,2.,1)
     sf= SVMTK.SubdomainMap()
     sf.add("01",3) 
     sf.add("11",2)        
     domain = SVMTK.Domain([surface_1,surface_2],sf)
     domain.create_mesh(1.) 
     self.assertTrue(domain.number_of_cells() >0) 
Exemplo n.º 12
0
 def test_seperate_overlapping_surfaces(self):
     s1 = SVMTK.Surface()
     s2 = SVMTK.Surface()
     s3 = SVMTK.Surface()
     s1.make_cube(1., 0., 1., 2., 1., 2., 1)
     s2.make_cube(1., 1, 1., 2., 2., 2., 1)
     s3.make_cube(1.2, 0.5, 1.2, 1.8, 1.5, 1.8, 1)
     s1.union(s3)
     s1.adjust_boundary(-0.01)
     s2.adjust_boundary(-0.01)
     self.assertTrue(SVMTK.separate_overlapping_surfaces(s1, s2))
Exemplo n.º 13
0
 def test_connected_components(self):
     surface1 = SVMTK.Surface()
     surface1.make_cube(0., 0., 0., 1., 1., 1., 10)
     surface2 = SVMTK.Surface()
     surface2.make_cube(1.5, 0, 0, 2., 1., 1., 10)
     slice_ = SVMTK.Slice(SVMTK.Plane_3(0, 0, 1, -0.5))
     slice_.slice_surfaces([surface1, surface2])
     slice_.create_mesh(1.)
     slice_.add_surface_domains([surface1, surface2])
     self.assertEqual(slice_.connected_components(), 2)
     slice_.keep_largest_connected_component()
     self.assertEqual(slice_.connected_components(), 1)
Exemplo n.º 14
0
 def test_surface_io(self):
     surface = SVMTK.Surface()
     surface.make_cube(0., 0., 0., 1., 1., 1., 1)
     surface.save("tests/Data/cube.off")
     surface.save("tests/Data/cube.stl")
     surface = SVMTK.Surface("tests/Data/cube.off")
     self.assertTrue(surface.num_vertices() == 8
                     and surface.num_faces() == 12
                     and surface.num_edges() == 18)
     surface = SVMTK.Surface("tests/Data/cube.stl")
     self.assertTrue(surface.num_vertices() == 8
                     and surface.num_faces() == 12
                     and surface.num_edges() == 18)
Exemplo n.º 15
0
 def test_surface_clip(self):
     surface = SVMTK.Surface()
     surface.make_cube(-1., -1., -1., 1., 1., 1., 1)
     surface.clip(0, 0, 1., 0, True)
     self.assertEqual(surface.span(0), (-1.0, 1.0))
     self.assertEqual(surface.span(1), (-1.0, 1.0))
     self.assertEqual(surface.span(2), (-1., 0.0))
Exemplo n.º 16
0
 def test_surfaces_shapes(self):
     surface = SVMTK.Surface()
     surface.make_cube(0., 0., 0., 1., 1., 1., 1)
     self.assertTrue(surface.num_vertices() == 8
                     and surface.num_faces() == 12
                     and surface.num_edges() == 18)
     surface.clear()
     self.assertEqual(surface.num_vertices(), 0)
     surface.make_cone(0., 0., 0., 0, 0., 2., 4.0, 2.0, 3)
     self.assertTrue(surface.num_vertices() == 8
                     and surface.num_faces() == 12
                     and surface.num_edges() == 18)
     surface.clear()
     self.assertEqual(surface.num_vertices(), 0)
     surface.make_cone(0., 0., 0., 0, 0., 2., 1.0, 0.0, 3)
     self.assertTrue(surface.num_vertices() == 20
                     and surface.num_faces() == 36
                     and surface.num_edges() == 54)
     surface.clear()
     self.assertEqual(surface.num_vertices(), 0)
     surface.make_cylinder(0., 0., 0., 1., 1.0, .1, 2.0, 4)
     self.assertTrue(surface.num_vertices() == 14
                     and surface.num_faces() == 24
                     and surface.num_edges() == 36)
     surface.clear()
     self.assertEqual(surface.num_vertices(), 0)
Exemplo n.º 17
0
 def test_reconstruction(self):
     surface = SVMTK.Surface()
     surface.make_cube(0., 0., 0., 10., 10., 10., 10)
     surface.reconstruct(20, 1.0, 1.0)
     surface.collapse_edges()
     self.assertTrue(surface.num_vertices() > 0 and surface.num_faces() > 0
                     and surface.num_edges() > 0)
Exemplo n.º 18
0
 def test_separate_narrow_gaps(self):
     s1 = SVMTK.Surface("tests/Data/narrow_gap.off")
     self.assertEqual(s1.separate_narrow_gaps(), 64)
     for i in range(5):
         s1.separate_narrow_gaps()
         s1.collapse_edges(0.3)
     self.assertEqual(s1.separate_narrow_gaps(), 0)
Exemplo n.º 19
0
 def test_adjust_boundary(self):
     surface = SVMTK.Surface()
     surface.make_cube(-1., -1., -1., 1., 1., 1., 1)
     surface.adjust_boundary(-0.1)
     self.assertTrue(surface.span(0)[1] - surface.span(0)[0] < 2.)
     surface.clear()
     surface.make_cube(-1., -1., -1., 1., 1., 1., 1)
     surface.adjust_boundary(0.1)
     self.assertTrue(surface.span(0)[1] - surface.span(0)[0] > 2.)
Exemplo n.º 20
0
 def test_surface_meshing(self):
     surface = SVMTK.Surface()
     surface.make_sphere(0.0, 0.0, 0.0, 1.0, 1.0)
     self.assertTrue(surface.num_vertices() > 0 and surface.num_faces() > 0
                     and surface.num_edges() > 0)
     surface.clear()
     surface.implicit_surface(ellipsoid_function, 1.0, 10, 1.0, 1.0)
     self.assertTrue(surface.num_vertices() > 0 and surface.num_faces() > 0
                     and surface.num_edges() > 0)
Exemplo n.º 21
0
 def test_slice_add_constrains(self):
     slice1 = SVMTK.Slice()
     slice1.add_constraint([SVMTK.Point_2(0, 0), SVMTK.Point_2(1, 1)])
     self.assertTrue(slice1.number_of_constraints(), 1)
     slice2 = SVMTK.Slice(SVMTK.Plane_3(0., 0., 1., 0.))
     slice2.add_constraint(
         [SVMTK.Point_2(0.5, 0.5),
          SVMTK.Point_2(0.5, -0.5)])
     slice3 = SVMTK.Slice(slice2)
     slice3.add_constraints(slice1)
     self.assertTrue(slice3.number_of_constraints(), 2)
Exemplo n.º 22
0
 def boolean_operations(self):
     surface1 = SVMTK.Surface()
     surface1.make_cube(0., 0., 0., 1., 1., 1., 1)
     surface2 = SVMTK.Surface()
     surface2.make_cube(0.5, 0.5, 0.5, 1.5, 1.5, 1.5, 1)
     surface1.union(surface2)
     self.assertTrue(surface.num_vertices() == 20
                     and surface.num_faces() == 36
                     and surface.num_edges() == 54)
     surface1.clear()
     surface1.make_cube(0., 0., 0., 1., 1., 1., 1)
     surface1.intersection(surface2)
     self.assertTrue(surface.num_vertices() == 8
                     and surface.num_faces() == 12
                     and surface.num_edges() == 18)
     surface2.difference(surface1)
     self.assertTrue(surface.num_vertices() == 14
                     and surface.num_faces() == 24
                     and surface.num_edges() == 36)
Exemplo n.º 23
0
 def test_surface_remeshing(self):
     surface = SVMTK.Surface()
     surface.make_cube(0., 0., 0., 1., 1., 1., 1)
     self.assertTrue(surface.num_vertices() == 8
                     and surface.num_faces() == 12
                     and surface.num_edges() == 18)
     surface.isotropic_remeshing(1.0, 1, 1)
     self.assertTrue(surface.num_vertices() == 14
                     and surface.num_faces() == 24
                     and surface.num_edges() == 36)
Exemplo n.º 24
0
 def test_get_boundary_and_patches(self): 
     surface_1 = SVMTK.Surface() 
     surface_1.make_cube(-1.,-1.,-1.,1.,1.,1.,1) 
     surface_2 = SVMTK.Surface() 
     surface_2.make_cube(-2.,-2.,-2.,2.,2.,2.,1)
     sf= SVMTK.SubdomainMap()
     sf.add("01",3) 
     sf.add("11",2)     
     domain = SVMTK.Domain([surface_1,surface_2],sf)
     domain.create_mesh(1.) 
     surface = domain.get_boundary(0) 
     self.assertTrue(surface.num_vertices()==77 and surface.num_faces()==137 and surface.num_edges()==219)
     surface = domain.get_boundary(1) 
     self.assertEqual(surface.num_vertices(), 0) 
     surface = domain.get_boundary(3) 
     self.assertTrue(surface.num_vertices()==128 and surface.num_faces()==235 and surface.num_edges()==366) 
     surfaces =  domain.get_boundaries()  
     print(len(surfaces))
     self.assertEqual(len(surfaces),2) 
Exemplo n.º 25
0
 def test_slice_meshing(self):
     surface = SVMTK.Surface()
     surface.make_cube(0., 0., 0., 1., 1., 1., 1)
     slice_ = surface.slice(1, 1, 1, -0.5)
     self.assertTrue(slice_.number_of_constraints() > 0)
     slice_.create_mesh(1.)
     self.assertTrue(slice_.number_of_faces() > 0)
     slice_.save("tests/Data/slice.vtu")
     slice_.save("tests/Data/slice.stl")
     slice_.save("tests/Data/slice.off")
     slice_.save("tests/Data/slice.mesh")
Exemplo n.º 26
0
def remesh_surface(stl_input, output, L, n,
                   do_not_move_boundary_edges=False):

    # Load input STL file
    surface = svmtk.Surface(stl_input)

    # Remesh surface
    surface.isotropic_remeshing(L, n,
                                do_not_move_boundary_edges)

    # Save remeshed STL surface 
    surface.save(output)                                      
Exemplo n.º 27
0
def create_gw_mesh(pial_stl, white_stl, output):
    # Load the surfaces into SVM-Tk and combine in list
    pial = svmtk.Surface(pial_stl)
    white = svmtk.Surface(white_stl)
    surfaces = [pial, white]

    # Create a map for the subdomains with tags
    # 1 for inside the first and outside the second ("10")
    # 2 for inside the first and inside the second ("11")
    smap = svmtk.SubdomainMap()
    smap.add("10", 1)
    smap.add("11", 2)

    # Create a tagged domain from the list of surfaces
    # and the map
    domain = svmtk.Domain(surfaces, smap)

    # Create and save the volume mesh
    resolution = 32
    domain.create_mesh(resolution)
    domain.save(output)
Exemplo n.º 28
0
 def test_collapse_and_split_edges(self):
     surface = SVMTK.Surface()
     surface.make_cube(0., 0., 0., 1., 1., 1., 1)
     self.assertTrue(surface.num_vertices() == 8
                     and surface.num_faces() == 12
                     and surface.num_edges() == 18)
     surface.split_edges(0.5)
     self.assertEqual(surface.num_edges(), 108)
     surface.collapse_edges(0.4)
     self.assertEqual(surface.num_edges(), 45)
     surface.split_edges(0.5)
     surface.collapse_edges()
     self.assertEqual(surface.num_edges(), 45)
Exemplo n.º 29
0
def create_brain_mesh(stls, output, resolution=32, remove_ventricles=True):

    # Load each of the Surfaces
    surfaces = [svmtk.Surface(stl) for stl in stls]

    # Take the union of the left (#3) and right (#4)
    # white surface and put the result into
    # the (former left) white surface
    surfaces[2].union(surfaces[3])

    # ... and drop the right white surface from the list
    surfaces.pop(3)

    # Define identifying tags for the different regions
    tags = {"pial": 1, "white": 2, "ventricle": 3}

    # Label the different regions
    smap = svmtk.SubdomainMap()
    smap.add("1000", tags["pial"])
    smap.add("0100", tags["pial"])
    smap.add("1010", tags["white"])
    smap.add("0110", tags["white"])
    smap.add("1110", tags["white"])
    smap.add("1011", tags["ventricle"])
    smap.add("0111", tags["ventricle"])
    smap.add("1111", tags["ventricle"])

    # Generate mesh at given resolution
    domain = svmtk.Domain(surfaces, smap)
    domain.create_mesh(resolution)

    # Remove ventricles perhaps
    if remove_ventricles:
        domain.remove_subdomain(tags["ventricle"])

    # Save mesh
    domain.save(output)
Exemplo n.º 30
0
    def test_simple_cgal_wrappers(self):
        p3 = SVMTK.Point_3(1., 0, 1.0)
        self.assertEqual(p3.x(), 1.0)
        self.assertEqual(p3.y(), 0.0)
        self.assertEqual(p3.z(), 1.0)
        p2 = SVMTK.Point_2(0, 1.)
        self.assertEqual(p2.x(), 0)
        self.assertEqual(p2.y(), 1.0)
        pl3 = SVMTK.Plane_3(1, 2, 3, 4)
        self.assertEqual(pl3.a(), 1.0)
        self.assertEqual(pl3.b(), 2.0)
        self.assertEqual(pl3.c(), 3.0)
        self.assertEqual(pl3.d(), 4.0)

        v3 = SVMTK.Vector_3(0, 1.0, 0.0)
        self.assertEqual(v3.x(), 0.0)
        self.assertEqual(v3.y(), 1.0)
        self.assertEqual(v3.z(), 0.0)

        pl3 = SVMTK.Plane_3(p3, v3)
        self.assertEqual(pl3.a(), 0.0)
        self.assertEqual(pl3.b(), 1.0)
        self.assertEqual(pl3.c(), 0.0)
        self.assertEqual(pl3.d(), 0.0)