From cc3c0dc398da96c2a62c6fe994fc6d60433a44bb Mon Sep 17 00:00:00 2001 From: Paulo Henrique Junqueira Amorim Date: Tue, 16 Aug 2016 10:19:57 -0300 Subject: [PATCH] Micro ct shift delete (#46) --- invesalius/gui/bitmap_preview_panel.py | 341 +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- invesalius/gui/dialogs.py | 55 +++++++++++++++++++++++++++++++++---------------------- invesalius/gui/import_bitmap_panel.py | 156 ++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------- invesalius/reader/bitmap_reader.py | 32 +++++++------------------------- 4 files changed, 81 insertions(+), 503 deletions(-) diff --git a/invesalius/gui/bitmap_preview_panel.py b/invesalius/gui/bitmap_preview_panel.py index a0ccdf1..82f71ff 100644 --- a/invesalius/gui/bitmap_preview_panel.py +++ b/invesalius/gui/bitmap_preview_panel.py @@ -88,10 +88,8 @@ class BitmapInfo(object): self.title = data[6] self.data = data self.pos = data[8] - #self.subtitle = subtitle self._preview = None self.selected = False - #self.filename = "" self.thumbnail_path = data[1] @property @@ -187,50 +185,16 @@ class Preview(wx.Panel): def _bind_events(self): self.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick) - #self.interactor.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick) - #self.panel.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick) - #self.title.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick) - #self.subtitle.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick) - self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter) - #self.interactor.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter) - #self.panel.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter) - #self.title.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter) - #self.subtitle.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter) - self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave) - #self.interactor.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave) - #self.panel.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave) - #self.title.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave) - #self.subtitle.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave) self.Bind(wx.EVT_LEFT_DOWN, self.OnSelect) self.title.Bind(wx.EVT_LEFT_DOWN, self.OnSelect) self.subtitle.Bind(wx.EVT_LEFT_DOWN, self.OnSelect) self.image_viewer.Bind(wx.EVT_LEFT_DOWN, self.OnSelect) - #self.Bind(wx.EVT_SIZE, self.OnSize) def SetBitmapToPreview(self, bitmap_info): - """ - Set a dicom to preview. - """ - - """ - self.dicom_info = dicom_info - self.SetTitle(dicom_info.title) - self.SetSubtitle(dicom_info.subtitle) - self.ID = dicom_info.id - dicom_info.size = self.image_viewer.GetSize() - image = dicom_info.preview - self.image_viewer.SetImage(image) - self.data = dicom_info.id - self.select_on = dicom_info.selected - self.Select() - self.Update() - """ - - if self.bitmap_info: self.bitmap_info.release_thumbnail() @@ -239,12 +203,9 @@ class Preview(wx.Panel): self.SetTitle(self.bitmap_info.title[-10:]) self.SetSubtitle('') - ##self.ID = bitmap_info.id - ##bitmap_info.size = self.image_viewer.GetSize() image = self.bitmap_info.preview self.image_viewer.SetImage(image) - #self.data = bitmap_info.id self.select_on = bitmap_info.selected self.Select() self.Update() @@ -257,7 +218,6 @@ class Preview(wx.Panel): def OnEnter(self, evt): if not self.select_on: - #c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DHILIGHT) c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNFACE) self.SetBackgroundColour(c) @@ -286,8 +246,6 @@ class Preview(wx.Panel): my_evt.SetEventObject(self) self.GetEventHandler().ProcessEvent(my_evt) - print ">>>",self.bitmap_info.pos, self.bitmap_info.id, self.bitmap_info.data - Publisher.sendMessage('Set bitmap in preview panel', self.bitmap_info.pos) evt.Skip() @@ -320,8 +278,6 @@ class BitmapPreviewSeries(wx.Panel): super(BitmapPreviewSeries, self).__init__(parent) # TODO: 3 pixels between the previews is a good idea? # I have to test. - #self.sizer = wx.BoxSizer(wx.HORIZONTAL) - #self.SetSizer(self.sizer) self.displayed_position = 0 self.nhidden_last_display = 0 self.selected_dicom = None @@ -359,14 +315,10 @@ class BitmapPreviewSeries(wx.Panel): for j in xrange(NCOLS): p = Preview(self) p.Bind(EVT_PREVIEW_CLICK, self.OnSelect) - #if (i == j == 0): - #self._show_shadow(p) - #p.Hide() + self.previews.append(p) self.grid.Add(p, 1, flag=wx.EXPAND) - #def _show_shadow(self, preview): - # preview.ShowShadow() def _bind_events(self): # When the user scrolls the window @@ -375,7 +327,6 @@ class BitmapPreviewSeries(wx.Panel): def _bind_pub_sub_events(self): Publisher.subscribe(self.RemovePanel, 'Remove preview panel') - #Publisher.subscribe(self.GetBmpInfoIdByOrder, 'Set bitmap in thumbnail') def OnSelect(self, evt): my_evt = SerieEvent(myEVT_CLICK_SERIE, self.GetId()) @@ -393,7 +344,6 @@ class BitmapPreviewSeries(wx.Panel): evt.Skip() def SetBitmapFiles(self, data): - #self.files = data self.files = [] bitmap = bitmap_reader.BitmapData() @@ -431,65 +381,6 @@ class BitmapPreviewSeries(wx.Panel): if p.IsShown(): p.bitmap_info.pos = n - - #def GetBmpInfoIdByOrder(self, pub_sub): - # order = pub_sub.data - # - # for p in self.previews: - # if p.bitmap_info != None: - # if p.select_on: - # p.select_on = False - # p.selected = False - - # c = (PREVIEW_BACKGROUND) - # p.SetBackgroundColour(c) - - - # for p in self.previews: - # if p.bitmap_info != None: - # if p.bitmap_info.pos == order: - - # p.select_on = True - # p.selected = True - - # p.Select() - - # # Generating a EVT_PREVIEW_CLICK event - # my_evt = SerieEvent(myEVT_PREVIEW_CLICK, p.GetId()) - - # my_evt.SetSelectedID(p.bitmap_info.id) - # my_evt.SetItemData(p.bitmap_info.data) - - # my_evt.SetShiftStatus(False) - # my_evt.SetEventObject(p) - # self.GetEventHandler().ProcessEvent(my_evt) - - - # #c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNFACE) - # #p.SetBackgroundColour(c) - - #return p.id - - #def SetPatientGroups(self, patient): - # self.files = [] - # self.displayed_position = 0 - # self.nhidden_last_display = 0 - # group_list = patient.GetGroups() - # self.group_list = group_list - # n = 0 - # for group in group_list: - # info = BitmapInfo((group.dicom.patient.id, - # group.dicom.acquisition.serie_number), - # group.dicom, - # group.title, - # _("%d images") %(group.nslices)) - # self.files.append(info) - # n+=1 - # scroll_range = len(self.files)/NCOLS - # if scroll_range * NCOLS < len(self.files): - # scroll_range +=1 - # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS) - # self._display_previews() def _display_previews(self): @@ -767,233 +658,3 @@ class SingleImagePreview(wx.Panel): # Setting slider position self.slider.SetValue(index) - - -#class BitmapPreviewSlice(wx.Panel): -# def __init__(self, parent): -# super(BitmapPreviewSlice, self).__init__(parent) -# # TODO: 3 pixels between the previews is a good idea? -# # I have to test. -# self.displayed_position = 0 -# self.nhidden_last_display = 0 -# self.selected_dicom = None -# self.selected_panel = None -# self.first_selection = None -# self.last_selection = None -# self._init_ui() -# -# def _init_ui(self): -# scroll = wx.ScrollBar(self, -1, style=wx.SB_VERTICAL) -# self.scroll = scroll -# -# self.grid = wx.GridSizer(rows=NROWS, cols=NCOLS, vgap=3, hgap=3) -# -# sizer = wx.BoxSizer(wx.HORIZONTAL) -# sizer.AddSizer(self.grid, 1, wx.EXPAND|wx.GROW|wx.ALL, 2) -# -# background_sizer = wx.BoxSizer(wx.HORIZONTAL) -# background_sizer.AddSizer(sizer, 1, wx.EXPAND|wx.GROW|wx.ALL, 2) -# background_sizer.Add(scroll, 0, wx.EXPAND|wx.GROW) -# self.SetSizer(background_sizer) -# background_sizer.Fit(self) -# -# self.Layout() -# self.Update() -# self.SetAutoLayout(1) -# -# self.sizer = background_sizer -# -# self._Add_Panels_Preview() -# self._bind_events() -# -# def _Add_Panels_Preview(self): -# self.previews = [] -# for i in xrange(NROWS): -# for j in xrange(NCOLS): -# p = Preview(self) -# p.Bind(EVT_PREVIEW_CLICK, self.OnPreviewClick) -# #p.Hide() -# self.previews.append(p) -# self.grid.Add(p, 1, flag=wx.EXPAND) -# -# def _bind_events(self): -# # When the user scrolls the window -# self.Bind(wx.EVT_SCROLL, self.OnScroll) -# self.Bind(wx.EVT_MOUSEWHEEL, self.OnWheel) -# -# def SetDicomDirectory(self, directory): -# utils.debug("Setting Dicom Directory %s" % directory) -# self.directory = directory -# self.series = dicom_reader.GetSeries(directory)[0] -# -# def SetPatientGroups(self, patient): -# self.group_list = patient.GetGroups() -# -# -# #def SetDicomSerie(self, pos): -# # self.files = [] -# # self.displayed_position = 0 -# # self.nhidden_last_display = 0 -# # group = self.group_list[pos] -# # self.group = group -# # #dicom_files = group.GetList() -# # dicom_files = group.GetHandSortedList() -# # n = 0 -# # for dicom in dicom_files: -# # info = BitmapInfo(n, dicom, -# # _("Image %d") % (dicom.image.number), -# # "%.2f" % (dicom.image.position[2])) -# # self.files.append(info) -# # n+=1 -# -# # scroll_range = len(self.files)/NCOLS -# # if scroll_range * NCOLS < len(self.files): -# # scroll_range +=1 -# # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS) -# -# # self._display_previews() -# -# #def SetDicomGroup(self, group): -# # self.files = [] -# # self.displayed_position = 0 -# # self.nhidden_last_display = 0 -# # #dicom_files = group.GetList() -# # dicom_files = group.GetHandSortedList() -# # n = 0 -# # for dicom in dicom_files: -# # info = BitmapInfo(n, dicom, -# # _("Image %d") % (dicom.image.number), -# # "%.2f" % (dicom.image.position[2]), -# # ) -# # self.files.append(info) -# # n+=1 -# -# # scroll_range = len(self.files)/NCOLS -# # if scroll_range * NCOLS < len(self.files): -# # scroll_range +=1 -# # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS) -# -# # self._display_previews() -# -# #def SetDicomGroup(self, group): -# # self.files = [] -# # self.displayed_position = 0 -# # self.nhidden_last_display = 0 -# # #dicom_files = group.GetList() -# # dicom_files = group.GetHandSortedList() -# # n = 0 -# # for dicom in dicom_files: -# # info = BitmapInfo(n, dicom, -# # _("Image %d") % (dicom.image.number), -# # "%.2f" % (dicom.image.position[2]), -# # ) -# # self.files.append(info) -# # n+=1 -# -# # scroll_range = len(self.files)/NCOLS -# # if scroll_range * NCOLS < len(self.files): -# # scroll_range +=1 -# # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS) -# -# # self._display_previews() -# -# -# def _display_previews(self): -# initial = self.displayed_position * NCOLS -# final = initial + NUM_PREVIEWS -# if len(self.files) < final: -# for i in xrange(final-len(self.files)): -# try: -# self.previews[-i-1].Hide() -# except IndexError: -# utils.debug("doesn't exist!") -# self.nhidden_last_display = final-len(self.files) -# else: -# if self.nhidden_last_display: -# for i in xrange(self.nhidden_last_display): -# try: -# self.previews[-i-1].Show() -# except IndexError: -# utils.debug("doesn't exist!") -# self.nhidden_last_display = 0 -# -# for f, p in zip(self.files[initial:final], self.previews): -# p.SetBitmapToPreview(f) -# if f.selected: -# self.selected_panel = p -# #p.interactor.Render() -# -# for f, p in zip(self.files[initial:final], self.previews): -# p.Show() -# -# def OnPreviewClick(self, evt): -# -# dicom_id = evt.GetSelectID() -# -# if self.first_selection is None: -# self.first_selection = dicom_id -# -# if self.last_selection is None: -# self.last_selection = dicom_id -# -# -# if evt.GetPressedShift(): -# -# if dicom_id < self.first_selection and dicom_id < self.last_selection: -# self.first_selection = dicom_id -# else: -# self.last_selection = dicom_id -# else: -# self.first_selection = dicom_id -# self.last_selection = dicom_id -# -# for i in xrange(len(self.files)): -# -# if i == dicom_id: -# self.files[i].selected = True -# else: -# self.files[i].selected = False -# -# -# my_evt = SerieEvent(myEVT_CLICK_SLICE, self.GetId()) -# my_evt.SetSelectedID(evt.GetSelectID()) -# my_evt.SetItemData(evt.GetItemData()) -# -# if self.selected_dicom: -# self.selected_dicom.selected = self.selected_dicom is \ -# evt.GetEventObject().bitmap_info -# self.selected_panel.select_on = self.selected_panel is evt.GetEventObject() -# -# if self.first_selection != self.last_selection: -# for i in xrange(len(self.files)): -# if i >= self.first_selection and i <= self.last_selection: -# self.files[i].selected = True -# else: -# self.files[i].selected = False -# -# else: -# self.selected_panel.Select() -# -# self._display_previews() -# self.selected_panel = evt.GetEventObject() -# self.selected_dicom = self.selected_panel.bitmap_info -# self.GetEventHandler().ProcessEvent(my_evt) -# -# #Publisher.sendMessage("Selected Import Images", [self.first_selection, \ -# # self.last_selection]) -# -# def OnScroll(self, evt=None): -# if evt: -# if self.displayed_position != evt.GetPosition(): -# self.displayed_position = evt.GetPosition() -# else: -# if self.displayed_position != self.scroll.GetThumbPosition(): -# self.displayed_position = self.scroll.GetThumbPosition() -# self._display_previews() -# -# def OnWheel(self, evt): -# d = evt.GetWheelDelta() / evt.GetWheelRotation() -# self.scroll.SetThumbPosition(self.scroll.GetThumbPosition() - d) -# self.OnScroll() - - diff --git a/invesalius/gui/dialogs.py b/invesalius/gui/dialogs.py index d902420..083227a 100644 --- a/invesalius/gui/dialogs.py +++ b/invesalius/gui/dialogs.py @@ -1686,10 +1686,17 @@ class ReorientImageDialog(wx.Dialog): class ImportBitmapParameters(wx.Dialog): + from os import sys def __init__(self): pre = wx.PreDialog() - pre.Create(wx.GetApp().GetTopWindow(), -1, _(u"Parameters"),size=wx.Size(380,230),\ + + if sys.platform == 'win32': + size=wx.Size(380,180) + else: + size=wx.Size(380,210) + + pre.Create(wx.GetApp().GetTopWindow(), -1, _(u"Create project from bitmap"),size=wx.Size(380,220),\ style=wx.DEFAULT_DIALOG_STYLE|wx.FRAME_FLOAT_ON_PARENT|wx.STAY_ON_TOP) self.interval = 0 @@ -1710,27 +1717,31 @@ class ImportBitmapParameters(wx.Dialog): | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE) - gbs_principal = self.gbs = wx.GridBagSizer(3,1) + gbs_principal = self.gbs = wx.GridBagSizer(4,1) + + gbs = self.gbs = wx.GridBagSizer(5, 2) + + flag_labels = wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL - gbs = self.gbs = wx.GridBagSizer(4, 2) - stx_name = wx.StaticText(p, -1, _(u"Project name:")) tx_name = self.tx_name = wx.TextCtrl(p, -1, "InVesalius Bitmap", size=wx.Size(220,-1)) - stx_orientation = wx.StaticText(p, -1, _(u"Slices orientation:")) + stx_orientation = wx.StaticText(p, -1, _(u"Slices orientation:"),) cb_orientation_options = [_(u'Axial'), _(u'Coronal'), _(u'Sagital')] cb_orientation = self.cb_orientation = wx.ComboBox(p, value="Axial", choices=cb_orientation_options,\ size=wx.Size(160,-1), style=wx.CB_DROPDOWN|wx.CB_READONLY) stx_spacing = wx.StaticText(p, -1, _(u"Spacing (mm):")) - gbs.Add(stx_name, (0,0)) + gbs.Add(stx_name, (0,0), flag=flag_labels) gbs.Add(tx_name, (0,1)) + gbs.AddStretchSpacer((1,0)) - gbs.Add(stx_orientation, (1,0)) - gbs.Add(cb_orientation, (1,1)) + gbs.Add(stx_orientation, (2,0), flag=flag_labels) + gbs.Add(cb_orientation, (2,1)) - gbs.Add(stx_spacing, (2,0)) + gbs.Add(stx_spacing, (3,0)) + gbs.AddStretchSpacer((4,0)) #--- spacing -------------- gbs_spacing = wx.GridBagSizer(2, 6) @@ -1739,6 +1750,7 @@ class ImportBitmapParameters(wx.Dialog): fsp_spacing_x = self.fsp_spacing_x = FS.FloatSpin(p, -1, min_val=0,\ increment=0.25, value=1.0, digits=8) + stx_spacing_y = stx_spacing_y = wx.StaticText(p, -1, _(u"Y:")) fsp_spacing_y = self.fsp_spacing_y = FS.FloatSpin(p, -1, min_val=0,\ increment=0.25, value=1.0, digits=8) @@ -1762,33 +1774,34 @@ class ImportBitmapParameters(wx.Dialog): except(AttributeError): pass - gbs_spacing.Add(stx_spacing_x, (0,0)) + gbs_spacing.Add(stx_spacing_x, (0,0), flag=flag_labels) gbs_spacing.Add(fsp_spacing_x, (0,1)) - gbs_spacing.Add(stx_spacing_y, (0,2)) + gbs_spacing.Add(stx_spacing_y, (0,2), flag=flag_labels) gbs_spacing.Add(fsp_spacing_y, (0,3)) - gbs_spacing.Add(stx_spacing_z, (0,4)) + gbs_spacing.Add(stx_spacing_z, (0,4), flag=flag_labels) gbs_spacing.Add(fsp_spacing_z, (0,5)) #----- buttons ------------------------ - gbs_button = wx.GridBagSizer(1, 4) + gbs_button = wx.GridBagSizer(2, 4) btn_ok = self.btn_ok= wx.Button(p, wx.ID_OK) btn_ok.SetDefault() btn_cancel = wx.Button(p, wx.ID_CANCEL) + gbs_button.AddStretchSpacer((0,2)) gbs_button.Add(btn_cancel, (1,2)) gbs_button.Add(btn_ok, (1,3)) - - gbs_principal.Add(gbs, (0,0)) - gbs_principal.Add(gbs_spacing, (1,0)) - gbs_principal.Add(gbs_button, (2,0), flag = wx.ALIGN_RIGHT) + gbs_principal.AddSizer(gbs, (0,0), flag = wx.ALL|wx.EXPAND) + gbs_principal.AddSizer(gbs_spacing, (1,0), flag=wx.ALL|wx.EXPAND) + gbs_principal.AddStretchSpacer((2,0)) + gbs_principal.AddSizer(gbs_button, (3,0), flag = wx.ALIGN_RIGHT) box = wx.BoxSizer() - box.Add(gbs_principal, 1, wx.ALL|wx.EXPAND, 10) + box.AddSizer(gbs_principal, 1, wx.ALL|wx.EXPAND, 10) p.SetSizer(box) @@ -1820,10 +1833,8 @@ class ImportBitmapParameters(wx.Dialog): def BitmapNotSameSize(): - dlg = wx.MessageDialog(None,_("All bitmaps files must be the same width and height size"), 'Error',\ - wx.OK | wx.ICON_ERROR - #wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION - ) + dlg = wx.MessageDialog(None,_("All bitmaps files must be the same \n width and height size."), 'Error',\ + wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() diff --git a/invesalius/gui/import_bitmap_panel.py b/invesalius/gui/import_bitmap_panel.py index 99dd4e6..adfd733 100644 --- a/invesalius/gui/import_bitmap_panel.py +++ b/invesalius/gui/import_bitmap_panel.py @@ -58,8 +58,7 @@ class SelectEvent(wx.PyCommandEvent): class Panel(wx.Panel): def __init__(self, parent): - wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))#, - #size=wx.Size(280, 656)) + wx.Panel.__init__(self, parent, pos=wx.Point(5, 5)) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(InnerPanel(self), 1, wx.EXPAND|wx.GROW|wx.ALL, 5) @@ -75,8 +74,7 @@ class Panel(wx.Panel): # Inner fold panel class InnerPanel(wx.Panel): def __init__(self, parent): - wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))#, - #size=wx.Size(680, 656)) + wx.Panel.__init__(self, parent, pos=wx.Point(5, 5)) self.patients = [] self.first_image_selection = None @@ -140,26 +138,12 @@ class InnerPanel(wx.Panel): self.last_image_selection = pubsub_evt.data[1] def _bind_events(self): - self.Bind(EVT_SELECT_SERIE, self.OnSelectSerie) self.Bind(EVT_SELECT_SLICE, self.OnSelectSlice) self.Bind(EVT_SELECT_PATIENT, self.OnSelectPatient) self.btn_ok.Bind(wx.EVT_BUTTON, self.OnClickOk) self.btn_cancel.Bind(wx.EVT_BUTTON, self.OnClickCancel) self.text_panel.Bind(EVT_SELECT_SERIE_TEXT, self.OnDblClickTextPanel) - def OnSelectSerie(self, evt): - #patient_id, serie_number = evt.GetSelectID() - #self.text_panel.SelectSerie(evt.GetSelectID()) - #for patient in self.patients: - # if patient_id == patient.GetDicomSample().patient.id: - # for group in patient.GetGroups(): - # if serie_number == group.GetDicomSample().acquisition.serie_number: - # self.image_panel.SetSerie(group) - - pass - - - def OnSelectSlice(self, evt): pass @@ -175,33 +159,10 @@ class InnerPanel(wx.Panel): parm.SetInterval(self.combo_interval.GetSelection()) parm.ShowModal() - group = self.text_panel.GetSelection() - if group: - self.LoadDicom(group) def OnClickCancel(self, evt): Publisher.sendMessage("Cancel DICOM load") - def LoadDicom(self, group): - #interval = self.combo_interval.GetSelection() - #if not isinstance(group, dcm.DicomGroup): - # group = max(group.GetGroups(), key=lambda g: g.nslices) - - #slice_amont = group.nslices - #if (self.first_image_selection != None) and (self.first_image_selection != self.last_image_selection): - # slice_amont = (self.last_image_selection) - self.first_image_selection - # slice_amont += 1 - # if slice_amont == 0: - # slice_amont = group.nslices - - #nslices_result = slice_amont / (interval + 1) - #if (nslices_result > 1): - # Publisher.sendMessage('Open DICOM group', (group, interval, - # [self.first_image_selection, self.last_image_selection])) - #else: - # dlg.MissingFilesForReconstruction() - pass - class TextPanel(wx.Panel): def __init__(self, parent): @@ -213,7 +174,8 @@ class TextPanel(wx.Panel): self.idserie_treeitem = {} self.treeitem_idpatient = {} - self.selected_item = None + self.selected_items = None + self.shift_pressed = False self.__init_gui() self.__bind_events_wx() @@ -233,7 +195,7 @@ class TextPanel(wx.Panel): | wx.TR_ROW_LINES | wx.TR_COLUMN_LINES | wx.TR_FULL_ROW_HIGHLIGHT - | wx.TR_SINGLE + | wx.TR_MULTIPLE | wx.TR_HIDE_ROOT ) @@ -250,31 +212,38 @@ class TextPanel(wx.Panel): self.root = tree.AddRoot(_("InVesalius Database")) self.tree = tree + + def OnKeyPress(self, evt): key_code = evt.GetKeyCode() + if key_code == wx.WXK_DELETE or key_code == wx.WXK_NUMPAD_DELETE: - if self.selected_item != self.tree.GetRootItem(): - text_item = self.tree.GetItemText(self.selected_item) - - index = bpr.BitmapData().GetIndexByPath(text_item) - - bpr.BitmapData().RemoveFileByPath(text_item) - - data_size = len(bpr.BitmapData().GetData()) - - if index >= 0 and index < data_size: - Publisher.sendMessage('Set bitmap in preview panel', index) - elif index == data_size and data_size > 0: - Publisher.sendMessage('Set bitmap in preview panel', index - 1) - elif data_size == 1: - Publisher.sendMessage('Set bitmap in preview panel', 0) - else: - Publisher.sendMessage('Show black slice in single preview image') - - self.tree.Delete(self.selected_item) - self.tree.Update() - self.tree.Refresh() - Publisher.sendMessage('Remove preview panel', text_item) + + for selected_item in self.selected_items: + + if selected_item != self.tree.GetRootItem(): + text_item = self.tree.GetItemText(selected_item) + + index = bpr.BitmapData().GetIndexByPath(text_item) + + bpr.BitmapData().RemoveFileByPath(text_item) + + data_size = len(bpr.BitmapData().GetData()) + + if index >= 0 and index < data_size: + Publisher.sendMessage('Set bitmap in preview panel', index) + elif index == data_size and data_size > 0: + Publisher.sendMessage('Set bitmap in preview panel', index - 1) + elif data_size == 1: + Publisher.sendMessage('Set bitmap in preview panel', 0) + else: + Publisher.sendMessage('Show black slice in single preview image') + + self.tree.Delete(selected_item) + self.tree.Update() + self.tree.Refresh() + Publisher.sendMessage('Remove preview panel', text_item) + evt.Skip() def SelectSeries(self, pubsub_evt): @@ -288,18 +257,18 @@ class TextPanel(wx.Panel): self.tree.SetItemText(parent, value[5], 2) tree.Expand(self.root) - #tree.SelectItem(parent_select) tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivate) tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged) Publisher.sendMessage('Load bitmap into import panel', data) def OnSelChanged(self, evt): - item = self.tree.GetSelection() + self.selected_items = self.tree.GetSelections() + item = self.selected_items[-1] + if self._selected_by_user: - self.selected_item = item - - text_item = self.tree.GetItemText(self.selected_item) + + text_item = self.tree.GetItemText(item) index = bpr.BitmapData().GetIndexByPath(text_item) Publisher.sendMessage('Set bitmap in preview panel', index) @@ -360,12 +329,8 @@ class ImagePanel(wx.Panel): self.SetAutoLayout(1) def _bind_events(self): - self.text_panel.Bind(EVT_SELECT_SERIE, self.OnSelectSerie) self.text_panel.Bind(EVT_SELECT_SLICE, self.OnSelectSlice) - def OnSelectSerie(self, evt): - evt.Skip() - def OnSelectSlice(self, evt): self.image_panel.bitmap_preview.ShowSlice(evt.GetSelectID()) evt.Skip() @@ -377,16 +342,12 @@ class ImagePanel(wx.Panel): class SeriesPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, -1) - #self.SetBackgroundColour((0,0,0)) self.thumbnail_preview = bpp.BitmapPreviewSeries(self) - #self.bitmap_preview = bpp.BitmapPreviewSlice(self) - #self.bitmap_preview.Show(0) - + self.sizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(self.thumbnail_preview, 1, wx.EXPAND | wx.ALL, 5) - #self.sizer.Add(self.bitmap_preview, 1, wx.EXPAND | wx.ALL, 5) self.sizer.Fit(self) self.SetSizer(self.sizer) @@ -399,21 +360,11 @@ class SeriesPanel(wx.Panel): self._bind_gui_evt() def __bind_evt(self): - #Publisher.subscribe(self.ShowDicomSeries, 'Load bitmap preview') - #Publisher.subscribe(self.SetDicomSeries, 'Load group into import panel') Publisher.subscribe(self.SetBitmapFiles, 'Load bitmap into import panel') def _bind_gui_evt(self): self.thumbnail_preview.Bind(bpp.EVT_CLICK_SERIE, self.OnSelectSerie) - #self.bitmap_preview.Bind(bpp.EVT_CLICK_SLICE, self.OnSelectSlice) - #def SetDicomSeries(self, pubsub_evt): - # group = pubsub_evt.data - # self.bitmap_preview.SetDicomGroup(group) - # self.bitmap_preview.Show(1) - # self.thumbnail_preview.Show(0) - # self.sizer.Layout() - # self.Update() def GetSelectedImagesRange(self): return [self.bitmap_preview.first_selected, self.dicom_preview_last_selection] @@ -422,11 +373,9 @@ class SeriesPanel(wx.Panel): bitmap = pubsub_evt.data - #self.bitmap_preview.Show(0) self.thumbnail_preview.Show(1) self.thumbnail_preview.SetBitmapFiles(bitmap) - #self.bitmap_preview.SetPatientGroups(patient) self.Update() @@ -437,9 +386,6 @@ class SeriesPanel(wx.Panel): my_evt.SetItemData(evt.GetItemData()) self.GetEventHandler().ProcessEvent(my_evt) - #self.bitmap_preview.SetDicomGroup(data) - #self.bitmap_preview.Show(1) - #self.thumbnail_preview.Show(0) self.sizer.Layout() self.Show() self.Update() @@ -451,12 +397,6 @@ class SeriesPanel(wx.Panel): self.GetEventHandler().ProcessEvent(my_evt) - #def ShowDicomSeries(self, pubsub_evt): - # patient = pubsub_evt.data - # if isinstance(patient, dcm.PatientGroup): - # self.thumbnail_preview.SetPatientGroups(patient) - # self.bitmap_preview.SetPatientGroups(patient) - class SlicePanel(wx.Panel): def __init__(self, parent): @@ -465,8 +405,6 @@ class SlicePanel(wx.Panel): self.__bind_evt() def __bind_evt(self): - #Publisher.subscribe(self.ShowDicomSeries, 'Load bitmap preview') - #Publisher.subscribe(self.SetDicomSeries, 'Load group into import panel') Publisher.subscribe(self.SetBitmapFiles, 'Load bitmap into import panel') def __init_gui(self): @@ -487,17 +425,3 @@ class SlicePanel(wx.Panel): self.bitmap_preview.SetBitmapFiles(data) self.sizer.Layout() self.Update() - - #def SetDicomSeries(self, evt): - # group = evt.data - # self.bitmap_preview.SetDicomGroup(group) - # self.sizer.Layout() - # self.Update() - - #def ShowDicomSeries(self, pubsub_evt): - # patient = pubsub_evt.data - # group = patient.GetGroups()[0] - # self.bitmap_preview.SetDicomGroup(group) - # self.sizer.Layout() - # self.Update() - diff --git a/invesalius/reader/bitmap_reader.py b/invesalius/reader/bitmap_reader.py index af4a198..742d2d6 100644 --- a/invesalius/reader/bitmap_reader.py +++ b/invesalius/reader/bitmap_reader.py @@ -139,14 +139,10 @@ class LoadBitmap: global vtk_error #----- verify extension ------------------ - #ex = self.filepath.split('.')[-1] - extension = VerifyDataType(self.filepath) file_name = self.filepath.split(os.path.sep)[-1] - #if extension == 'bmp': - # reader = vtk.vtkBMPReader() n_array = ReadBitmap(self.filepath) if not(isinstance(n_array, numpy.ndarray)): @@ -156,9 +152,6 @@ class LoadBitmap: slice_number=1, orientation="AXIAL") - #reader.SetFileName(self.filepath) - #reader.Update() - dim = image.GetDimensions() x = dim[0] y = dim[1] @@ -229,7 +222,6 @@ def yGetBitmaps(directory, recursive=True, gui=True): counter += 1 if gui: yield (counter,nfiles) - #LoadDicom(grouper, filepath) LoadBitmap(bmp_file, filepath) else: dirpath, dirnames, filenames = os.walk(directory) @@ -238,16 +230,7 @@ def yGetBitmaps(directory, recursive=True, gui=True): counter += 1 if gui: yield (counter,nfiles) - #q.put(filepath) - - #for t in threads: - # q.put(0) - - #for t in threads: - # t.join() - #TODO: Is this commented update necessary? - #grouper.Update() yield bmp_file.GetValues() @@ -275,13 +258,6 @@ class ProgressBitmapReader: def GetBitmaps(self, path, recursive): - #if not const.VTK_WARNING: - # log_path = os.path.join(const.LOG_FOLDER, 'vtkoutput.txt') - # fow = vtk.vtkFileOutputWindow() - # fow.SetFileName(log_path) - # ow = vtk.vtkOutputWindow() - # ow.SetInstance(fow) - y = yGetBitmaps(path, recursive) for value_progress in y: if not self.running: @@ -318,7 +294,13 @@ def ScipyRead(filepath): return False def VtkRead(filepath, t): - + if not const.VTK_WARNING: + log_path = os.path.join(const.LOG_FOLDER, 'vtkoutput.txt') + fow = vtk.vtkFileOutputWindow() + fow.SetFileName(log_path) + ow = vtk.vtkOutputWindow() + ow.SetInstance(fow) + global no_error if t == "bmp": -- libgit2 0.21.2