Commit 4209ef5f21f309aca08e6b272dc7ee10f8672b84
1 parent
ad467829
Exists in
master
and in
56 other branches
Interface to control mip
Showing
1 changed file
with
61 additions
and
15 deletions
Show diff stats
invesalius/data/viewer_slice.py
| ... | ... | @@ -58,23 +58,48 @@ ORIENTATIONS = { |
| 58 | 58 | |
| 59 | 59 | |
| 60 | 60 | class ContourMIPConfig(wx.Panel): |
| 61 | - def __init__(self, prnt): | |
| 61 | + def __init__(self, prnt, orientation): | |
| 62 | 62 | wx.Panel.__init__(self, prnt) |
| 63 | - self.mip_size_spin = wx.SpinCtrl(self, -1, min=1, max=120, initial=1) | |
| 63 | + self.mip_size_spin = wx.SpinCtrl(self, -1, min=1, max=240, initial=1) | |
| 64 | 64 | self.border_spin = FS.FloatSpin(self, -1, min_val=0, max_val=10, |
| 65 | 65 | increment=0.01, value=0.1, |
| 66 | 66 | agwStyle=FS.FS_LEFT) |
| 67 | + self.inverted = wx.CheckBox(self, -1, "inverted") | |
| 68 | + | |
| 69 | + txt_mip_size = wx.StaticText(self, -1, "MIP size", style=wx.ALIGN_CENTER_HORIZONTAL) | |
| 70 | + txt_mip_border = wx.StaticText(self, -1, "Border") | |
| 67 | 71 | |
| 68 | 72 | sizer = wx.BoxSizer(wx.HORIZONTAL) |
| 69 | - sizer.Add(self.mip_size_spin, 1, wx.EXPAND) | |
| 70 | - sizer.Add(self.border_spin, 1, wx.EXPAND) | |
| 73 | + sizer.Add(txt_mip_size, 0, wx.EXPAND | wx.ALL, 2) | |
| 74 | + sizer.Add(self.mip_size_spin, 0, wx.EXPAND) | |
| 75 | + sizer.Add(txt_mip_border, 0, wx.EXPAND) | |
| 76 | + sizer.Add(self.border_spin, 0, wx.EXPAND) | |
| 77 | + sizer.Add(self.inverted, 1, wx.EXPAND) | |
| 71 | 78 | self.SetSizer(sizer) |
| 72 | 79 | sizer.Fit(self) |
| 73 | 80 | |
| 74 | 81 | self.Layout() |
| 75 | 82 | self.Update() |
| 76 | 83 | self.SetAutoLayout(1) |
| 84 | + | |
| 85 | + self.orientation = orientation | |
| 86 | + | |
| 87 | + self.mip_size_spin.Bind(wx.EVT_SPINCTRL, self.OnSetMIPSize) | |
| 88 | + self.border_spin.Bind(wx.EVT_SPINCTRL, self.OnSetMIPBorder) | |
| 89 | + self.inverted.Bind(wx.EVT_CHECKBOX, self.OnCheckInverted) | |
| 77 | 90 | |
| 91 | + def OnSetMIPSize(self, evt): | |
| 92 | + val = self.mip_size_spin.GetValue() | |
| 93 | + Publisher.sendMessage('Set MIP size %s' % self.orientation, val) | |
| 94 | + | |
| 95 | + def OnSetMIPBorder(self, evt): | |
| 96 | + val = self.border_spin.GetValue() | |
| 97 | + Publisher.sendMessage('Set MIP border %s' % self.orientation, val) | |
| 98 | + | |
| 99 | + def OnCheckInverted(self, evt): | |
| 100 | + val = self.inverted.GetValue() | |
| 101 | + Publisher.sendMessage('Set MIP Invert %s' % self.orientation, val) | |
| 102 | + | |
| 78 | 103 | |
| 79 | 104 | class Viewer(wx.Panel): |
| 80 | 105 | |
| ... | ... | @@ -90,6 +115,7 @@ class Viewer(wx.Panel): |
| 90 | 115 | self.right_pressed = 0 |
| 91 | 116 | |
| 92 | 117 | self._number_slices = 10 |
| 118 | + self._mip_inverted = False | |
| 93 | 119 | |
| 94 | 120 | self.spined_image = False #Use to control to spin |
| 95 | 121 | self.paned_image = False |
| ... | ... | @@ -110,11 +136,11 @@ class Viewer(wx.Panel): |
| 110 | 136 | self.actors_by_slice_number = {} |
| 111 | 137 | self.renderers_by_slice_number = {} |
| 112 | 138 | |
| 113 | - self.__init_gui() | |
| 114 | - | |
| 115 | 139 | self.orientation = orientation |
| 116 | 140 | self.slice_number = 0 |
| 117 | 141 | |
| 142 | + self.__init_gui() | |
| 143 | + | |
| 118 | 144 | self._brush_cursor_op = const.DEFAULT_BRUSH_OP |
| 119 | 145 | self._brush_cursor_size = const.BRUSH_SIZE |
| 120 | 146 | self._brush_cursor_colour = const.BRUSH_COLOUR |
| ... | ... | @@ -139,7 +165,7 @@ class Viewer(wx.Panel): |
| 139 | 165 | scroll = wx.ScrollBar(self, -1, style=wx.SB_VERTICAL) |
| 140 | 166 | self.scroll = scroll |
| 141 | 167 | |
| 142 | - self.mip_ctrls = ContourMIPConfig(self) | |
| 168 | + self.mip_ctrls = ContourMIPConfig(self, self.orientation) | |
| 143 | 169 | |
| 144 | 170 | sizer = wx.BoxSizer(wx.HORIZONTAL) |
| 145 | 171 | sizer.Add(self.interactor, 1, wx.EXPAND|wx.GROW) |
| ... | ... | @@ -675,6 +701,12 @@ class Viewer(wx.Panel): |
| 675 | 701 | Publisher.subscribe(self.ReloadActualSlice, 'Reload actual slice') |
| 676 | 702 | Publisher.subscribe(self.OnUpdateScroll, 'Update scroll') |
| 677 | 703 | |
| 704 | + | |
| 705 | + # MIP | |
| 706 | + Publisher.subscribe(self.OnSetMIPSize, 'Set MIP size %s' % self.orientation) | |
| 707 | + Publisher.subscribe(self.OnSetMIPBorder, 'Set MIP border %s' % self.orientation) | |
| 708 | + Publisher.subscribe(self.OnSetMIPInvert, 'Set MIP Invert %s' % self.orientation) | |
| 709 | + | |
| 678 | 710 | def SetDefaultCursor(self, pusub_evt): |
| 679 | 711 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) |
| 680 | 712 | |
| ... | ... | @@ -771,9 +803,6 @@ class Viewer(wx.Panel): |
| 771 | 803 | self.interactor.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu) |
| 772 | 804 | self.interactor.Bind(wx.EVT_SIZE, self.OnSize) |
| 773 | 805 | |
| 774 | - self.mip_ctrls.mip_size_spin.Bind(wx.EVT_SPINCTRL, self.OnSetMIPSize) | |
| 775 | - self.mip_ctrls.border_spin.Bind(wx.EVT_SPINCTRL, self.OnSetMIPBorder) | |
| 776 | - | |
| 777 | 806 | def LoadImagedata(self, pubsub_evt): |
| 778 | 807 | imagedata, mask_dict = pubsub_evt.data |
| 779 | 808 | self.SetInput(imagedata, mask_dict) |
| ... | ... | @@ -1098,6 +1127,15 @@ class Viewer(wx.Panel): |
| 1098 | 1127 | |
| 1099 | 1128 | elif evt.GetKeyCode() in projections: |
| 1100 | 1129 | print "PROJECTION MANOLO!" |
| 1130 | + if evt.GetKeyCode() != wx.WXK_NUMPAD0 and self.slice_._type_projection == const.PROJECTION_NORMAL: | |
| 1131 | + self.mip_ctrls.Show() | |
| 1132 | + self.GetSizer().Add(self.mip_ctrls, 0, wx.EXPAND|wx.GROW|wx.ALL, 2) | |
| 1133 | + self.Layout() | |
| 1134 | + elif evt.GetKeyCode() == wx.WXK_NUMPAD0 and self.slice_._type_projection != const.PROJECTION_NORMAL: | |
| 1135 | + self.mip_ctrls.Hide() | |
| 1136 | + self.GetSizer().Remove(self.mip_ctrls) | |
| 1137 | + self.Layout() | |
| 1138 | + | |
| 1101 | 1139 | self.slice_.SetTypeProjection(projections[evt.GetKeyCode()]) |
| 1102 | 1140 | self.ReloadActualSlice() |
| 1103 | 1141 | |
| ... | ... | @@ -1137,21 +1175,29 @@ class Viewer(wx.Panel): |
| 1137 | 1175 | self.slice_data.SetSize((w, h)) |
| 1138 | 1176 | evt.Skip() |
| 1139 | 1177 | |
| 1140 | - def OnSetMIPSize(self, evt): | |
| 1141 | - val = self.mip_ctrls.mip_size_spin.GetValue() | |
| 1178 | + def OnSetMIPSize(self, pubsub_evt): | |
| 1179 | + val = pubsub_evt.data | |
| 1142 | 1180 | self.number_slices = val |
| 1143 | 1181 | self.ReloadActualSlice() |
| 1144 | 1182 | |
| 1145 | - def OnSetMIPBorder(self, evt): | |
| 1146 | - val = self.mip_ctrls.border_spin.GetValue() | |
| 1183 | + def OnSetMIPBorder(self, pubsub_evt): | |
| 1184 | + val = pubsub_evt.data | |
| 1147 | 1185 | self.slice_.n_border = val |
| 1148 | 1186 | buffer_ = self.slice_.buffer_slices[self.orientation] |
| 1149 | 1187 | buffer_.discard_buffer() |
| 1150 | 1188 | self.ReloadActualSlice() |
| 1151 | 1189 | |
| 1190 | + def OnSetMIPInvert(self, pubsub_evt): | |
| 1191 | + val = pubsub_evt.data | |
| 1192 | + self._mip_inverted = val | |
| 1193 | + buffer_ = self.slice_.buffer_slices[self.orientation] | |
| 1194 | + buffer_.discard_buffer() | |
| 1195 | + self.ReloadActualSlice() | |
| 1196 | + | |
| 1152 | 1197 | def set_slice_number(self, index): |
| 1198 | + inverted = self.mip_ctrls.inverted.GetValue() | |
| 1153 | 1199 | image = self.slice_.GetSlices(self.orientation, index, |
| 1154 | - self.number_slices) | |
| 1200 | + self.number_slices, inverted) | |
| 1155 | 1201 | self.slice_data.actor.SetInput(image) |
| 1156 | 1202 | for actor in self.actors_by_slice_number.get(self.slice_data.number, []): |
| 1157 | 1203 | self.slice_data.renderer.RemoveActor(actor) | ... | ... |