Commit e2c39d009468f5f6f5a2b036ebd8fa7a6959ca10
1 parent
34cd93f5
Exists in
command-line
Create option to open InVesalius without gui
Showing
5 changed files
with
62 additions
and
25 deletions
Show diff stats
app.py
@@ -198,7 +198,8 @@ class SplashScreen(wx.SplashScreen): | @@ -198,7 +198,8 @@ class SplashScreen(wx.SplashScreen): | ||
198 | self.control = Controller(self.main) | 198 | self.control = Controller(self.main) |
199 | 199 | ||
200 | self.fc = wx.FutureCall(1, self.ShowMain) | 200 | self.fc = wx.FutureCall(1, self.ShowMain) |
201 | - wx.FutureCall(1, parse_comand_line) | 201 | + options, args = parse_comand_line() |
202 | + wx.FutureCall(1, use_cmd_optargs, options, args) | ||
202 | 203 | ||
203 | # Check for updates | 204 | # Check for updates |
204 | from threading import Thread | 205 | from threading import Thread |
@@ -224,6 +225,24 @@ class SplashScreen(wx.SplashScreen): | @@ -224,6 +225,24 @@ class SplashScreen(wx.SplashScreen): | ||
224 | if self.fc.IsRunning(): | 225 | if self.fc.IsRunning(): |
225 | self.Raise() | 226 | self.Raise() |
226 | 227 | ||
228 | + | ||
229 | +def non_gui_startup(options, args): | ||
230 | + lang = 'en' | ||
231 | + _ = i18n.InstallLanguage(lang) | ||
232 | + | ||
233 | + from invesalius.control import Controller | ||
234 | + from invesalius.project import Project | ||
235 | + | ||
236 | + session = ses.Session() | ||
237 | + if not session.ReadSession(): | ||
238 | + session.CreateItens() | ||
239 | + session.SetLanguage(lang) | ||
240 | + session.WriteSessionFile() | ||
241 | + | ||
242 | + control = Controller(None) | ||
243 | + | ||
244 | + use_cmd_optargs(options, args) | ||
245 | + | ||
227 | # ------------------------------------------------------------------ | 246 | # ------------------------------------------------------------------ |
228 | 247 | ||
229 | 248 | ||
@@ -241,6 +260,10 @@ def parse_comand_line(): | @@ -241,6 +260,10 @@ def parse_comand_line(): | ||
241 | action="store_true", | 260 | action="store_true", |
242 | dest="debug") | 261 | dest="debug") |
243 | 262 | ||
263 | + parser.add_option('--no-gui', | ||
264 | + action='store_true', | ||
265 | + dest='no_gui') | ||
266 | + | ||
244 | # -i or --import: import DICOM directory | 267 | # -i or --import: import DICOM directory |
245 | # chooses largest series | 268 | # chooses largest series |
246 | parser.add_option("-i", "--import", | 269 | parser.add_option("-i", "--import", |
@@ -254,7 +277,10 @@ def parse_comand_line(): | @@ -254,7 +277,10 @@ def parse_comand_line(): | ||
254 | help="To open a project and export it to STL for all mask presets.") | 277 | help="To open a project and export it to STL for all mask presets.") |
255 | 278 | ||
256 | options, args = parser.parse_args() | 279 | options, args = parser.parse_args() |
280 | + return options, args | ||
281 | + | ||
257 | 282 | ||
283 | +def use_cmd_optargs(options, args): | ||
258 | # If debug argument... | 284 | # If debug argument... |
259 | if options.debug: | 285 | if options.debug: |
260 | Publisher.subscribe(print_events, Publisher.ALL_TOPICS) | 286 | Publisher.subscribe(print_events, Publisher.ALL_TOPICS) |
@@ -333,8 +359,13 @@ def main(): | @@ -333,8 +359,13 @@ def main(): | ||
333 | """ | 359 | """ |
334 | Initialize InVesalius GUI | 360 | Initialize InVesalius GUI |
335 | """ | 361 | """ |
336 | - application = InVesalius(0) | ||
337 | - application.MainLoop() | 362 | + options, args = parse_comand_line() |
363 | + | ||
364 | + if options.no_gui: | ||
365 | + non_gui_startup(options, args) | ||
366 | + else: | ||
367 | + application = InVesalius(0) | ||
368 | + application.MainLoop() | ||
338 | 369 | ||
339 | if __name__ == '__main__': | 370 | if __name__ == '__main__': |
340 | #Is needed because of pyinstaller | 371 | #Is needed because of pyinstaller |
invesalius/constants.py
@@ -686,19 +686,19 @@ BTNS_IMG_MKS = {IR1: {0: 'LEI'}, | @@ -686,19 +686,19 @@ BTNS_IMG_MKS = {IR1: {0: 'LEI'}, | ||
686 | IR2: {1: 'REI'}, | 686 | IR2: {1: 'REI'}, |
687 | IR3: {2: 'NAI'}} | 687 | IR3: {2: 'NAI'}} |
688 | 688 | ||
689 | -TIPS_IMG = [wx.ToolTip(_("Select left ear in image")), | ||
690 | - wx.ToolTip(_("Select right ear in image")), | ||
691 | - wx.ToolTip(_("Select nasion in image"))] | 689 | +TIPS_IMG = [_("Select left ear in image"), |
690 | + _("Select right ear in image"), | ||
691 | + _("Select nasion in image")] | ||
692 | 692 | ||
693 | BTNS_TRK = {TR1: {3: _('LET')}, | 693 | BTNS_TRK = {TR1: {3: _('LET')}, |
694 | TR2: {4: _('RET')}, | 694 | TR2: {4: _('RET')}, |
695 | TR3: {5: _('NAT')}, | 695 | TR3: {5: _('NAT')}, |
696 | SET: {6: _('SET')}} | 696 | SET: {6: _('SET')}} |
697 | 697 | ||
698 | -TIPS_TRK = [wx.ToolTip(_("Select left ear with spatial tracker")), | ||
699 | - wx.ToolTip(_("Select right ear with spatial tracker")), | ||
700 | - wx.ToolTip(_("Select nasion with spatial tracker")), | ||
701 | - wx.ToolTip(_("Show set coordinates in image"))] | 698 | +TIPS_TRK = [_("Select left ear with spatial tracker"), |
699 | + _("Select right ear with spatial tracker"), | ||
700 | + _("Select nasion with spatial tracker"), | ||
701 | + _("Show set coordinates in image")] | ||
702 | 702 | ||
703 | CAL_DIR = os.path.abspath(os.path.join(FILE_PATH, '..', 'navigation', 'mtc_files', 'CalibrationFiles')) | 703 | CAL_DIR = os.path.abspath(os.path.join(FILE_PATH, '..', 'navigation', 'mtc_files', 'CalibrationFiles')) |
704 | MAR_DIR = os.path.abspath(os.path.join(FILE_PATH, '..', 'navigation', 'mtc_files', 'Markers')) | 704 | MAR_DIR = os.path.abspath(os.path.join(FILE_PATH, '..', 'navigation', 'mtc_files', 'Markers')) |
invesalius/data/slice_.py
@@ -353,19 +353,22 @@ class Slice(object): | @@ -353,19 +353,22 @@ class Slice(object): | ||
353 | 353 | ||
354 | # TODO: merge this code with apply_slice_buffer_to_mask | 354 | # TODO: merge this code with apply_slice_buffer_to_mask |
355 | b_mask = self.buffer_slices["AXIAL"].mask | 355 | b_mask = self.buffer_slices["AXIAL"].mask |
356 | - n = self.buffer_slices["AXIAL"].index + 1 | ||
357 | - self.current_mask.matrix[n, 1:, 1:] = b_mask | ||
358 | - self.current_mask.matrix[n, 0, 0] = 1 | 356 | + if b_mask: |
357 | + n = self.buffer_slices["AXIAL"].index + 1 | ||
358 | + self.current_mask.matrix[n, 1:, 1:] = b_mask | ||
359 | + self.current_mask.matrix[n, 0, 0] = 1 | ||
359 | 360 | ||
360 | b_mask = self.buffer_slices["CORONAL"].mask | 361 | b_mask = self.buffer_slices["CORONAL"].mask |
361 | - n = self.buffer_slices["CORONAL"].index + 1 | ||
362 | - self.current_mask.matrix[1:, n, 1:] = b_mask | ||
363 | - self.current_mask.matrix[0, n, 0] = 1 | 362 | + if b_mask: |
363 | + n = self.buffer_slices["CORONAL"].index + 1 | ||
364 | + self.current_mask.matrix[1:, n, 1:] = b_mask | ||
365 | + self.current_mask.matrix[0, n, 0] = 1 | ||
364 | 366 | ||
365 | b_mask = self.buffer_slices["SAGITAL"].mask | 367 | b_mask = self.buffer_slices["SAGITAL"].mask |
366 | - n = self.buffer_slices["SAGITAL"].index + 1 | ||
367 | - self.current_mask.matrix[1:, 1:, n] = b_mask | ||
368 | - self.current_mask.matrix[0, 0, n] = 1 | 368 | + if b_mask: |
369 | + n = self.buffer_slices["SAGITAL"].index + 1 | ||
370 | + self.current_mask.matrix[1:, 1:, n] = b_mask | ||
371 | + self.current_mask.matrix[0, 0, n] = 1 | ||
369 | 372 | ||
370 | if to_reload: | 373 | if to_reload: |
371 | Publisher.sendMessage('Reload actual slice') | 374 | Publisher.sendMessage('Reload actual slice') |
@@ -882,8 +885,8 @@ class Slice(object): | @@ -882,8 +885,8 @@ class Slice(object): | ||
882 | self.current_mask.matrix[n+1, 1:, 1:] = m | 885 | self.current_mask.matrix[n+1, 1:, 1:] = m |
883 | else: | 886 | else: |
884 | slice_ = self.buffer_slices[orientation].image | 887 | slice_ = self.buffer_slices[orientation].image |
885 | - print ">>>", slice_, index | ||
886 | - self.buffer_slices[orientation].mask = (255 * ((slice_ >= thresh_min) & (slice_ <= thresh_max))).astype('uint8') | 888 | + if slice_: |
889 | + self.buffer_slices[orientation].mask = (255 * ((slice_ >= thresh_min) & (slice_ <= thresh_max))).astype('uint8') | ||
887 | 890 | ||
888 | # Update viewer | 891 | # Update viewer |
889 | #Publisher.sendMessage('Update slice viewer') | 892 | #Publisher.sendMessage('Update slice viewer') |
invesalius/data/vtk_utils.py
@@ -44,7 +44,10 @@ def ShowProgress(number_of_filters = 1, | @@ -44,7 +44,10 @@ def ShowProgress(number_of_filters = 1, | ||
44 | progress = [0] | 44 | progress = [0] |
45 | last_obj_progress = [0] | 45 | last_obj_progress = [0] |
46 | if (dialog_type == "ProgressDialog"): | 46 | if (dialog_type == "ProgressDialog"): |
47 | - dlg = ProgressDialog(100) | 47 | + try: |
48 | + dlg = ProgressDialog(100) | ||
49 | + except wx._core.PyNoAppError: | ||
50 | + return lambda obj, label: 0 | ||
48 | 51 | ||
49 | 52 | ||
50 | # when the pipeline is larger than 1, we have to consider this object | 53 | # when the pipeline is larger than 1, we have to consider this object |
invesalius/gui/task_navigator.py
@@ -247,7 +247,7 @@ class NeuronavigationPanel(wx.Panel): | @@ -247,7 +247,7 @@ class NeuronavigationPanel(wx.Panel): | ||
247 | n = btns_img[k].keys()[0] | 247 | n = btns_img[k].keys()[0] |
248 | lab = btns_img[k].values()[0] | 248 | lab = btns_img[k].values()[0] |
249 | self.btns_coord[n] = wx.ToggleButton(self, k, label=lab, size=wx.Size(45, 23)) | 249 | self.btns_coord[n] = wx.ToggleButton(self, k, label=lab, size=wx.Size(45, 23)) |
250 | - self.btns_coord[n].SetToolTip(tips_img[n]) | 250 | + self.btns_coord[n].SetToolTip(wx.ToolTip(tips_img[n])) |
251 | self.btns_coord[n].Bind(wx.EVT_TOGGLEBUTTON, self.OnImageFiducials) | 251 | self.btns_coord[n].Bind(wx.EVT_TOGGLEBUTTON, self.OnImageFiducials) |
252 | 252 | ||
253 | # Push buttons for tracker fiducials | 253 | # Push buttons for tracker fiducials |
@@ -258,7 +258,7 @@ class NeuronavigationPanel(wx.Panel): | @@ -258,7 +258,7 @@ class NeuronavigationPanel(wx.Panel): | ||
258 | n = btns_trk[k].keys()[0] | 258 | n = btns_trk[k].keys()[0] |
259 | lab = btns_trk[k].values()[0] | 259 | lab = btns_trk[k].values()[0] |
260 | self.btns_coord[n] = wx.Button(self, k, label=lab, size=wx.Size(45, 23)) | 260 | self.btns_coord[n] = wx.Button(self, k, label=lab, size=wx.Size(45, 23)) |
261 | - self.btns_coord[n].SetToolTip(tips_trk[n-3]) | 261 | + self.btns_coord[n].SetToolTip(wx.ToolTip(tips_trk[n-3])) |
262 | # Excepetion for event of button that set image coordinates | 262 | # Excepetion for event of button that set image coordinates |
263 | if n == 6: | 263 | if n == 6: |
264 | self.btns_coord[n].Bind(wx.EVT_BUTTON, self.OnSetImageCoordinates) | 264 | self.btns_coord[n].Bind(wx.EVT_BUTTON, self.OnSetImageCoordinates) |
@@ -796,4 +796,4 @@ class MarkersPanel(wx.Panel): | @@ -796,4 +796,4 @@ class MarkersPanel(wx.Panel): | ||
796 | while len(selection) != self.lc.GetSelectedItemCount(): | 796 | while len(selection) != self.lc.GetSelectedItemCount(): |
797 | index = self.lc.GetNextSelected(index) | 797 | index = self.lc.GetNextSelected(index) |
798 | selection.append(index) | 798 | selection.append(index) |
799 | - return selection | ||
800 | \ No newline at end of file | 799 | \ No newline at end of file |
800 | + return selection |