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"
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
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)