Commit 9e2fd40e4ed2d9a005d5241fbf039ce77bbbf35f

Authored by Thiago Franco de Moraes
1 parent 0673940c
Exists in master

Returning plugins

Showing 1 changed file with 56 additions and 4 deletions   Show diff stats
invesalius/control.py
... ... @@ -58,6 +58,7 @@ class Controller():
58 58 def __init__(self, frame):
59 59 self.surface_manager = srf.SurfaceManager()
60 60 self.volume = volume.Volume()
  61 + self.plugin_manager = plugins.PluginManager()
61 62 self.__bind_events()
62 63 self.frame = frame
63 64 self.progress_dialog = None
... ... @@ -76,9 +77,12 @@ class Controller():
76 77  
77 78 Publisher.sendMessage('Load Preferences')
78 79  
  80 + self.plugin_manager.find_plugins()
  81 +
79 82 def __bind_events(self):
80 83 Publisher.subscribe(self.OnImportMedicalImages, 'Import directory')
81 84 Publisher.subscribe(self.OnImportGroup, 'Import group')
  85 + Publisher.subscribe(self.OnImportFolder, 'Import folder')
82 86 Publisher.subscribe(self.OnShowDialogImportDirectory,
83 87 'Show import directory dialog')
84 88 Publisher.subscribe(self.OnShowDialogImportOtherFiles,
... ... @@ -120,6 +124,8 @@ class Controller():
120 124  
121 125 Publisher.subscribe(self.Send_affine, 'Get affine matrix')
122 126  
  127 + Publisher.subscribe(self.create_project_from_matrix, 'Create project from matrix')
  128 +
123 129 def SetBitmapSpacing(self, spacing):
124 130 proj = prj.Project()
125 131 proj.spacing = spacing
... ... @@ -503,6 +509,33 @@ class Controller():
503 509 self.LoadProject()
504 510 Publisher.sendMessage("Enable state project", state=True)
505 511  
  512 + def OnImportFolder(self, folder):
  513 + Publisher.sendMessage('Begin busy cursor')
  514 + folder = os.path.abspath(folder)
  515 +
  516 + proj = prj.Project()
  517 + proj.load_from_folder(folder)
  518 +
  519 + self.Slice = sl.Slice()
  520 + self.Slice._open_image_matrix(proj.matrix_filename,
  521 + tuple(proj.matrix_shape),
  522 + proj.matrix_dtype)
  523 +
  524 + self.Slice.window_level = proj.level
  525 + self.Slice.window_width = proj.window
  526 +
  527 + Publisher.sendMessage('Update threshold limits list',
  528 + threshold_range=proj.threshold_range)
  529 +
  530 + session = ses.Session()
  531 + filename = proj.name+".inv3"
  532 + filename = filename.replace("/", "") #Fix problem case other/Skull_DICOM
  533 + dirpath = session.CreateProject(filename)
  534 + self.LoadProject()
  535 + Publisher.sendMessage("Enable state project", state=True)
  536 +
  537 + Publisher.sendMessage('End busy cursor')
  538 +
506 539 #-------------------------------------------------------------------------------------
507 540  
508 541 def LoadProject(self):
... ... @@ -848,13 +881,11 @@ class Controller():
848 881 def OnOpenOtherFiles(self, filepath):
849 882 filepath = utils.decode(filepath, const.FS_ENCODE)
850 883 if not(filepath) == None:
851   - name = filepath.rpartition('\\')[-1].split('.')
852   -
  884 + name = os.path.basename(filepath).split(".")[0]
853 885 group = oth.ReadOthers(filepath)
854   -
855 886 if group:
856 887 matrix, matrix_filename = self.OpenOtherFiles(group)
857   - self.CreateOtherProject(str(name[0]), matrix, matrix_filename)
  888 + self.CreateOtherProject(name, matrix, matrix_filename)
858 889 self.LoadProject()
859 890 Publisher.sendMessage("Enable state project", state=True)
860 891 else:
... ... @@ -1056,3 +1087,24 @@ class Controller():
1056 1087  
1057 1088 def ApplyReorientation(self):
1058 1089 self.Slice.apply_reorientation()
  1090 +
  1091 + def start_new_inv_instance(self, image, name, spacing, modality, orientation, window_width, window_level):
  1092 + p = prj.Project()
  1093 + project_folder = tempfile.mkdtemp()
  1094 + p.create_project_file(name, spacing, modality, orientation, window_width, window_level, image, folder=project_folder)
  1095 + err_msg = ''
  1096 + try:
  1097 + sp = subprocess.Popen([sys.executable, sys.argv[0], '--import-folder', project_folder],
  1098 + stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=os.getcwd())
  1099 + except Exception as err:
  1100 + err_msg = str(err)
  1101 + else:
  1102 + try:
  1103 + if sp.wait(2):
  1104 + err_msg = sp.stderr.read().decode('utf8')
  1105 + sp.terminate()
  1106 + except subprocess.TimeoutExpired:
  1107 + pass
  1108 +
  1109 + if err_msg:
  1110 + dialog.MessageBox(None, "It was not possible to launch new instance of InVesalius3 dsfa dfdsfa sdfas fdsaf asdfasf dsaa", err_msg)
... ...