def test_invalid_because_directory_not_readable():

    if platform.system() == 'Windows' or not platform.system():
        six.print_('Not running test as Windows doesnt do permissions.')
        return

    output_name = 'tests/output/'
    if not os.path.exists(output_name):
        os.mkdir(output_name)
    dir_name = 'tests/output/unreadable'
    if not os.path.exists(dir_name):
        os.mkdir(dir_name)
    print_dir_permissions(dir_name)

    os.chmod(dir_name, 0o000)
    print_dir_permissions(dir_name)
    with pytest.raises(ValueError):
        VTKSurfaceModelDirectoryLoader(dir_name)
    os.chmod(dir_name, 0o100)
    print_dir_permissions(dir_name)
    with pytest.raises(ValueError):
        VTKSurfaceModelDirectoryLoader(dir_name)
    os.chmod(dir_name, 0o400)
    print_dir_permissions(dir_name)
    with pytest.raises(ValueError):
        VTKSurfaceModelDirectoryLoader(dir_name)
    os.chmod(dir_name, 0o500)
    print_dir_permissions(dir_name)
    VTKSurfaceModelDirectoryLoader(
        dir_name)  # should instantiate, but no data.
    os.rmdir(dir_name)
def test_valid_dir_with_defaults_from_json():
    dir_name = 'tests/data/models/Liver'
    loader_no_json = VTKSurfaceModelDirectoryLoader(dir_name)
    loader_with_json = VTKSurfaceModelDirectoryLoader(
        dir_name, "tests/data/models/Liver/patient_defaults.json")

    assert len(loader_no_json.models) == 9
    assert len(loader_with_json.models) == 9
 def add_vtk_models_from_dir(self, directory):
     """
     Add VTK models to the foreground.
     :param: directory, location of models
     """
     model_loader = VTKSurfaceModelDirectoryLoader(directory)
     self.vtk_overlay_window.add_vtk_models(model_loader.models)
def test_consistent_model_order_issue_89():
    dir_name = 'tests/data/models/Liver'
    loader = VTKSurfaceModelDirectoryLoader(dir_name)

    # The name attribute should be a basename without extension
    assert loader.models[0].get_name() == "arteries"
    assert loader.models[3].get_name() == "gastric_vein"
    assert loader.models[5].get_name() == "liver"
예제 #5
0
def populate_models(config):
    """
    Loads vtk models from a directory and returns
    a list of vtk actors and associated vtkPointLocators

    :param: configuration, should contain a target value
    :param: model_to_world: 4x4 matrix, of dtype float32

    :return: locators
    :return: actors

    :raises: KeyError if target not in config
    """
    models = []
    if "target" not in config:
        raise KeyError("Config must contain target key")

    path_name = config.get("target")

    loader = VTKSurfaceModelDirectoryLoader(path_name)
    models = loader.models

    locators = []

    model_to_world = _set_model_to_world(config)
    transform = vtk.vtkTransform()
    transform.SetMatrix(np2vtk(model_to_world))

    for model in models:
        print(model.source.GetCenter())
        transformer = vtk.vtkTransformPolyDataFilter()
        transformer.SetTransform(transform)
        transformer.SetInputData(model.source)
        target = vtk.vtkPolyData()
        transformer.SetOutput(target)
        transformer.Update()
        model.source = target

        transformer.SetInputConnection(model.normals.GetOutputPort())
        model.mapper = vtk.vtkPolyDataMapper()
        model.mapper.SetInputConnection(transformer.GetOutputPort())
        model.mapper.Update()
        model.actor.SetMapper(model.mapper)

        print("after trans", model.source.GetCenter())
        point_locator = vtk.vtkPointLocator()
        point_locator.SetDataSet(model.source)
        point_locator.Update()
        locators.append(point_locator)

    return models, locators
예제 #6
0
def add_map(config):
    """
    Loads vtk models from a directory and returns
    a list of vtk actors, with mesh visualisation

    :param: configuration, may contain a "map" key
    :param: model_to_world: 4x4 matrix, of dtype float32

    :return: actors, None if no "map" key
    """
    models = []
    if "map" not in config:
        return None

    path_name = config.get("map")

    loader = VTKSurfaceModelDirectoryLoader(path_name)
    models = loader.models

    model_to_world = _set_model_to_world(config)
    transform = vtk.vtkTransform()
    transform.SetMatrix(np2vtk(model_to_world))

    for model in models:
        transformer = vtk.vtkTransformPolyDataFilter()
        transformer.SetTransform(transform)
        transformer.SetInputData(model.source)
        target = vtk.vtkPolyData()
        transformer.SetOutput(target)
        transformer.Update()
        model.source = target

        transformer.SetInputConnection(model.normals.GetOutputPort())
        model.mapper = vtk.vtkPolyDataMapper()
        model.mapper.SetInputConnection(transformer.GetOutputPort())
        model.mapper.Update()
        model.actor.SetMapper(model.mapper)
        model.actor.GetProperty().SetRepresentationToWireframe()
        model.actor.GetProperty().SetColor(0.7, 0.7, 0.7)
        model.actor.GetProperty().SetOpacity(1.0)
        model.actor.GetProperty().SetBackfaceCulling(False)

    return models
def test_valid_dir_with_colours_from_file_from_issue_4():
    dir_name = 'tests/data/models/Liver'
    loader = VTKSurfaceModelDirectoryLoader(dir_name)
    assert len(loader.models) == 9
def test_valid_dir_with_default_colours():
    dir_name = 'tests/data/models/Kidney'
    loader = VTKSurfaceModelDirectoryLoader(dir_name)
    assert len(loader.models) == 2
    assert loader.models[0].get_colour() == loader.colours[str(0)]
    assert loader.models[1].get_colour() == loader.colours[str(1)]
def test_invalid_because_empty_directory_name():
    with pytest.raises(ValueError):
        VTKSurfaceModelDirectoryLoader("")
def test_valid_dir_with_colours_model_file_doesnt_exist():
    dir_name = 'tests/data/models/bad_colours'
    with pytest.raises(FileNotFoundError):
        loader = VTKSurfaceModelDirectoryLoader(dir_name)