Commit be816908c9bb2c9136e834c9307e37f5894cf264
Exists in
master
and in
46 other branches
Merge pull request #26 from tfmoraes/clean
Clean - This pull request cleans some old and unused codes.
Showing
5 changed files
with
26 additions
and
306 deletions
Show diff stats
invesalius/control.py
@@ -373,8 +373,7 @@ class Controller(): | @@ -373,8 +373,7 @@ class Controller(): | ||
373 | self.Slice.spacing = proj.spacing | 373 | self.Slice.spacing = proj.spacing |
374 | 374 | ||
375 | Publisher.sendMessage('Load slice to viewer', | 375 | Publisher.sendMessage('Load slice to viewer', |
376 | - (proj.imagedata, | ||
377 | - proj.mask_dict)) | 376 | + (proj.mask_dict)) |
378 | 377 | ||
379 | 378 | ||
380 | Publisher.sendMessage('Load slice plane') | 379 | Publisher.sendMessage('Load slice plane') |
invesalius/data/slice_.py
@@ -16,7 +16,6 @@ | @@ -16,7 +16,6 @@ | ||
16 | # PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais | 16 | # PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais |
17 | # detalhes. | 17 | # detalhes. |
18 | #-------------------------------------------------------------------------- | 18 | #-------------------------------------------------------------------------- |
19 | -import math | ||
20 | import os | 19 | import os |
21 | import tempfile | 20 | import tempfile |
22 | 21 | ||
@@ -79,7 +78,6 @@ class Slice(object): | @@ -79,7 +78,6 @@ class Slice(object): | ||
79 | # Therefore, we use Singleton design pattern for implementing it. | 78 | # Therefore, we use Singleton design pattern for implementing it. |
80 | 79 | ||
81 | def __init__(self): | 80 | def __init__(self): |
82 | - self.imagedata = None | ||
83 | self.current_mask = None | 81 | self.current_mask = None |
84 | self.blend_filter = None | 82 | self.blend_filter = None |
85 | self.histogram = None | 83 | self.histogram = None |
@@ -159,9 +157,8 @@ class Slice(object): | @@ -159,9 +157,8 @@ class Slice(object): | ||
159 | 157 | ||
160 | Publisher.subscribe(self.UpdateColourTableBackgroundWidget,\ | 158 | Publisher.subscribe(self.UpdateColourTableBackgroundWidget,\ |
161 | 'Change colour table from background image from widget') | 159 | 'Change colour table from background image from widget') |
162 | - Publisher.subscribe(self._set_projection_type, 'Set projection type') | ||
163 | 160 | ||
164 | - Publisher.subscribe(self.InputImageWidget, 'Input Image in the widget') | 161 | + Publisher.subscribe(self._set_projection_type, 'Set projection type') |
165 | 162 | ||
166 | Publisher.subscribe(self.OnExportMask,'Export mask to file') | 163 | Publisher.subscribe(self.OnExportMask,'Export mask to file') |
167 | 164 | ||
@@ -249,7 +246,6 @@ class Slice(object): | @@ -249,7 +246,6 @@ class Slice(object): | ||
249 | self.CloseProject() | 246 | self.CloseProject() |
250 | 247 | ||
251 | def CloseProject(self): | 248 | def CloseProject(self): |
252 | - self.imagedata = None | ||
253 | f = self._matrix.filename | 249 | f = self._matrix.filename |
254 | self._matrix._mmap.close() | 250 | self._matrix._mmap.close() |
255 | self._matrix = None | 251 | self._matrix = None |
@@ -276,10 +272,6 @@ class Slice(object): | @@ -276,10 +272,6 @@ class Slice(object): | ||
276 | 272 | ||
277 | Publisher.sendMessage('Select first item from slice menu') | 273 | Publisher.sendMessage('Select first item from slice menu') |
278 | 274 | ||
279 | - #self.blend_filter = None | ||
280 | - #self.blend_filter = None | ||
281 | - #self.num_gradient = 0 | ||
282 | - | ||
283 | def __set_current_mask_threshold_limits(self, pubsub_evt): | 275 | def __set_current_mask_threshold_limits(self, pubsub_evt): |
284 | thresh_min = pubsub_evt.data[0] | 276 | thresh_min = pubsub_evt.data[0] |
285 | thresh_max = pubsub_evt.data[1] | 277 | thresh_max = pubsub_evt.data[1] |
@@ -287,10 +279,6 @@ class Slice(object): | @@ -287,10 +279,6 @@ class Slice(object): | ||
287 | index = self.current_mask.index | 279 | index = self.current_mask.index |
288 | self.SetMaskEditionThreshold(index, (thresh_min, thresh_max)) | 280 | self.SetMaskEditionThreshold(index, (thresh_min, thresh_max)) |
289 | 281 | ||
290 | - #--------------------------------------------------------------------------- | ||
291 | - # BEGIN PUBSUB_EVT METHODS | ||
292 | - #--------------------------------------------------------------------------- | ||
293 | - | ||
294 | def __add_mask(self, pubsub_evt): | 282 | def __add_mask(self, pubsub_evt): |
295 | mask_name = pubsub_evt.data | 283 | mask_name = pubsub_evt.data |
296 | self.CreateMask(name=mask_name) | 284 | self.CreateMask(name=mask_name) |
@@ -308,7 +296,7 @@ class Slice(object): | @@ -308,7 +296,7 @@ class Slice(object): | ||
308 | def __select_current_mask(self, pubsub_evt): | 296 | def __select_current_mask(self, pubsub_evt): |
309 | mask_index = pubsub_evt.data | 297 | mask_index = pubsub_evt.data |
310 | self.SelectCurrentMask(mask_index) | 298 | self.SelectCurrentMask(mask_index) |
311 | - #--------------------------------------------------------------------------- | 299 | + |
312 | def __set_current_mask_edition_threshold(self, evt_pubsub): | 300 | def __set_current_mask_edition_threshold(self, evt_pubsub): |
313 | if self.current_mask: | 301 | if self.current_mask: |
314 | threshold_range = evt_pubsub.data | 302 | threshold_range = evt_pubsub.data |
@@ -324,7 +312,6 @@ class Slice(object): | @@ -324,7 +312,6 @@ class Slice(object): | ||
324 | 312 | ||
325 | to_reload = False | 313 | to_reload = False |
326 | if threshold_range != self.current_mask.threshold_range: | 314 | if threshold_range != self.current_mask.threshold_range: |
327 | - print "<<<<<<<<<<<<<<<< DIFERENT >>>>>>>>>>>>>>>>>>>>>>>" | ||
328 | to_reload = True | 315 | to_reload = True |
329 | for orientation in self.buffer_slices: | 316 | for orientation in self.buffer_slices: |
330 | self.buffer_slices[orientation].discard_vtk_mask() | 317 | self.buffer_slices[orientation].discard_vtk_mask() |
@@ -836,19 +823,12 @@ class Slice(object): | @@ -836,19 +823,12 @@ class Slice(object): | ||
836 | 823 | ||
837 | def SelectCurrentMask(self, index): | 824 | def SelectCurrentMask(self, index): |
838 | "Insert mask data, based on given index, into pipeline." | 825 | "Insert mask data, based on given index, into pipeline." |
839 | - # This condition is not necessary in Linux, only under mac and windows | ||
840 | - # because combobox event is binded when the same item is selected again. | ||
841 | - #if index != self.current_mask.index: | ||
842 | - print "SelectCurrentMask" | ||
843 | - print "index:", index | ||
844 | proj = Project() | 826 | proj = Project() |
845 | future_mask = proj.GetMask(index) | 827 | future_mask = proj.GetMask(index) |
846 | future_mask.is_shown = True | 828 | future_mask.is_shown = True |
847 | self.current_mask = future_mask | 829 | self.current_mask = future_mask |
848 | 830 | ||
849 | colour = future_mask.colour | 831 | colour = future_mask.colour |
850 | - #index = future_mask.index | ||
851 | - print index | ||
852 | self.SetMaskColour(index, colour, update=False) | 832 | self.SetMaskColour(index, colour, update=False) |
853 | 833 | ||
854 | self.buffer_slices = {"AXIAL": SliceBuffer(), | 834 | self.buffer_slices = {"AXIAL": SliceBuffer(), |
@@ -871,18 +851,9 @@ class Slice(object): | @@ -871,18 +851,9 @@ class Slice(object): | ||
871 | proj = Project() | 851 | proj = Project() |
872 | mask = proj.mask_dict[surface_parameters['options']['index']] | 852 | mask = proj.mask_dict[surface_parameters['options']['index']] |
873 | 853 | ||
874 | - # This is very important. Do not use masks' imagedata. It would mess up | ||
875 | - # surface quality event when using contour | ||
876 | - #self.SetMaskThreshold(mask.index, threshold) | ||
877 | - for n in xrange(1, mask.matrix.shape[0]): | ||
878 | - if mask.matrix[n, 0, 0] == 0: | ||
879 | - m = mask.matrix[n, 1:, 1:] | ||
880 | - mask.matrix[n, 1:, 1:] = self.do_threshold_to_a_slice(self.matrix[n-1], m) | ||
881 | - | ||
882 | - mask.matrix.flush() | 854 | + self.do_threshold_to_all_slices(mask) |
855 | + Publisher.sendMessage('Create surface', (self, mask, surface_parameters)) | ||
883 | 856 | ||
884 | - Publisher.sendMessage('Create surface', (self, mask, | ||
885 | - surface_parameters)) | ||
886 | def GetOutput(self): | 857 | def GetOutput(self): |
887 | return self.blend_filter.GetOutput() | 858 | return self.blend_filter.GetOutput() |
888 | 859 | ||
@@ -906,59 +877,6 @@ class Slice(object): | @@ -906,59 +877,6 @@ class Slice(object): | ||
906 | 877 | ||
907 | Publisher.sendMessage('Check projection menu', tprojection) | 878 | Publisher.sendMessage('Check projection menu', tprojection) |
908 | 879 | ||
909 | - def SetInput(self, imagedata, mask_dict): | ||
910 | - print "SETINPUT!" | ||
911 | - self.imagedata = imagedata | ||
912 | - self.extent = imagedata.GetExtent() | ||
913 | - | ||
914 | - imagedata_bg = self.__create_background(imagedata) | ||
915 | - | ||
916 | - if not mask_dict: | ||
917 | - imagedata_mask = self.__build_mask(imagedata, create=True) | ||
918 | - else: | ||
919 | - self.__load_masks(imagedata, mask_dict) | ||
920 | - imagedata_mask = self.img_colours_mask.GetOutput() | ||
921 | - | ||
922 | - mask_opacity = self.current_mask.opacity | ||
923 | - | ||
924 | - # blend both imagedatas, so it can be inserted into viewer | ||
925 | - blend_filter = vtk.vtkImageBlend() | ||
926 | - blend_filter.SetBlendModeToNormal() | ||
927 | - blend_filter.SetOpacity(0, 1) | ||
928 | - if self.current_mask.is_shown: | ||
929 | - blend_filter.SetOpacity(1, mask_opacity) | ||
930 | - else: | ||
931 | - blend_filter.SetOpacity(1, 0) | ||
932 | - blend_filter.SetInput(0, imagedata_bg) | ||
933 | - blend_filter.SetInput(1, imagedata_mask) | ||
934 | - blend_filter.SetBlendModeToNormal() | ||
935 | - blend_filter.GetOutput().ReleaseDataFlagOn() | ||
936 | - self.blend_filter = blend_filter | ||
937 | - | ||
938 | - self.window_level = vtk.vtkImageMapToWindowLevelColors() | ||
939 | - self.window_level.SetInput(self.imagedata) | ||
940 | - | ||
941 | - def __create_background(self, imagedata): | ||
942 | - thresh_min, thresh_max = imagedata.GetScalarRange() | ||
943 | - Publisher.sendMessage('Update threshold limits list', (thresh_min, | ||
944 | - thresh_max)) | ||
945 | - | ||
946 | - # map scalar values into colors | ||
947 | - lut_bg = self.lut_bg = vtk.vtkLookupTable() | ||
948 | - lut_bg.SetTableRange(thresh_min, thresh_max) | ||
949 | - lut_bg.SetSaturationRange(0, 0) | ||
950 | - lut_bg.SetHueRange(0, 0) | ||
951 | - lut_bg.SetValueRange(0, 1) | ||
952 | - lut_bg.Build() | ||
953 | - | ||
954 | - # map the input image through a lookup table | ||
955 | - img_colours_bg = self.img_colours_bg = vtk.vtkImageMapToColors() | ||
956 | - img_colours_bg.SetOutputFormatToRGBA() | ||
957 | - img_colours_bg.SetLookupTable(lut_bg) | ||
958 | - img_colours_bg.SetInput(imagedata) | ||
959 | - | ||
960 | - return img_colours_bg.GetOutput() | ||
961 | - | ||
962 | def UpdateWindowLevelBackground(self, pubsub_evt): | 880 | def UpdateWindowLevelBackground(self, pubsub_evt): |
963 | window, level = pubsub_evt.data | 881 | window, level = pubsub_evt.data |
964 | self.window_width = window | 882 | self.window_width = window |
@@ -1017,29 +935,6 @@ class Slice(object): | @@ -1017,29 +935,6 @@ class Slice(object): | ||
1017 | 935 | ||
1018 | Publisher.sendMessage('Reload actual slice') | 936 | Publisher.sendMessage('Reload actual slice') |
1019 | 937 | ||
1020 | - def InputImageWidget(self, pubsub_evt): | ||
1021 | - widget, orientation = pubsub_evt.data | ||
1022 | - | ||
1023 | - original_orientation = Project().original_orientation | ||
1024 | - | ||
1025 | - img = self.buffer_slices[orientation].vtk_image | ||
1026 | - | ||
1027 | - cast = vtk.vtkImageCast() | ||
1028 | - cast.SetInput(img) | ||
1029 | - cast.SetOutputScalarTypeToDouble() | ||
1030 | - cast.ClampOverflowOn() | ||
1031 | - cast.Update() | ||
1032 | - | ||
1033 | - #if (original_orientation == const.AXIAL): | ||
1034 | - flip = vtk.vtkImageFlip() | ||
1035 | - flip.SetInput(cast.GetOutput()) | ||
1036 | - flip.SetFilteredAxis(1) | ||
1037 | - flip.FlipAboutOriginOn() | ||
1038 | - flip.Update() | ||
1039 | - widget.SetInput(flip.GetOutput()) | ||
1040 | - #else: | ||
1041 | - #widget.SetInput(cast.GetOutput()) | ||
1042 | - | ||
1043 | def UpdateSlice3D(self, pubsub_evt): | 938 | def UpdateSlice3D(self, pubsub_evt): |
1044 | widget, orientation = pubsub_evt.data | 939 | widget, orientation = pubsub_evt.data |
1045 | img = self.buffer_slices[orientation].vtk_image | 940 | img = self.buffer_slices[orientation].vtk_image |
@@ -1111,27 +1006,6 @@ class Slice(object): | @@ -1111,27 +1006,6 @@ class Slice(object): | ||
1111 | Publisher.sendMessage('Change mask selected', mask.index) | 1006 | Publisher.sendMessage('Change mask selected', mask.index) |
1112 | Publisher.sendMessage('Update slice viewer') | 1007 | Publisher.sendMessage('Update slice viewer') |
1113 | 1008 | ||
1114 | - def __load_masks(self, imagedata, mask_dict): | ||
1115 | - keys = mask_dict.keys() | ||
1116 | - keys.sort() | ||
1117 | - for key in keys: | ||
1118 | - mask = mask_dict[key] | ||
1119 | - | ||
1120 | - # update gui related to mask | ||
1121 | - utils.debug("__load_masks") | ||
1122 | - utils.debug('THRESHOLD_RANGE %s'% mask.threshold_range) | ||
1123 | - Publisher.sendMessage('Add mask', | ||
1124 | - (mask.index, | ||
1125 | - mask.name, | ||
1126 | - mask.threshold_range, | ||
1127 | - mask.colour)) | ||
1128 | - | ||
1129 | - self.current_mask = mask | ||
1130 | - self.__build_mask(imagedata, False) | ||
1131 | - | ||
1132 | - Publisher.sendMessage('Change mask selected', mask.index) | ||
1133 | - Publisher.sendMessage('Update slice viewer') | ||
1134 | - | ||
1135 | def do_ww_wl(self, image): | 1009 | def do_ww_wl(self, image): |
1136 | if self.from_ == PLIST: | 1010 | if self.from_ == PLIST: |
1137 | lut = vtk.vtkWindowLevelLookupTable() | 1011 | lut = vtk.vtkWindowLevelLookupTable() |
@@ -1212,12 +1086,16 @@ class Slice(object): | @@ -1212,12 +1086,16 @@ class Slice(object): | ||
1212 | m[mask == 254] = 254 | 1086 | m[mask == 254] = 254 |
1213 | return m.astype('uint8') | 1087 | return m.astype('uint8') |
1214 | 1088 | ||
1215 | - def do_threshold_to_all_slices(self): | ||
1216 | - mask = self.current_mask | 1089 | + def do_threshold_to_all_slices(self, mask=None): |
1090 | + """ | ||
1091 | + Apply threshold to all slices. | ||
1217 | 1092 | ||
1218 | - # This is very important. Do not use masks' imagedata. It would mess up | ||
1219 | - # surface quality event when using contour | ||
1220 | - #self.SetMaskThreshold(mask.index, threshold) | 1093 | + Params: |
1094 | + - mask: the mask where result of the threshold will be stored.If | ||
1095 | + None, it'll be the current mask. | ||
1096 | + """ | ||
1097 | + if mask is None: | ||
1098 | + mask = self.current_mask | ||
1221 | for n in xrange(1, mask.matrix.shape[0]): | 1099 | for n in xrange(1, mask.matrix.shape[0]): |
1222 | if mask.matrix[n, 0, 0] == 0: | 1100 | if mask.matrix[n, 0, 0] == 0: |
1223 | m = mask.matrix[n, 1:, 1:] | 1101 | m = mask.matrix[n, 1:, 1:] |
@@ -1390,76 +1268,9 @@ class Slice(object): | @@ -1390,76 +1268,9 @@ class Slice(object): | ||
1390 | self.buffer_slices[o].discard_vtk_mask() | 1268 | self.buffer_slices[o].discard_vtk_mask() |
1391 | Publisher.sendMessage('Reload actual slice') | 1269 | Publisher.sendMessage('Reload actual slice') |
1392 | 1270 | ||
1393 | - def __build_mask(self, imagedata, create=True): | ||
1394 | - # create new mask instance and insert it into project | ||
1395 | - if create: | ||
1396 | - self.CreateMask(imagedata=imagedata) | ||
1397 | - current_mask = self.current_mask | ||
1398 | - | ||
1399 | - # properties to be inserted into pipeline | ||
1400 | - scalar_range = int(imagedata.GetScalarRange()[1]) | ||
1401 | - r,g,b = current_mask.colour | ||
1402 | - | ||
1403 | - # map scalar values into colors | ||
1404 | - lut_mask = vtk.vtkLookupTable() | ||
1405 | - lut_mask.SetNumberOfTableValues(1) | ||
1406 | - lut_mask.SetNumberOfColors(1) | ||
1407 | - lut_mask.SetHueRange(const.THRESHOLD_HUE_RANGE) | ||
1408 | - lut_mask.SetSaturationRange(1, 1) | ||
1409 | - lut_mask.SetValueRange(1, 1) | ||
1410 | - lut_mask.SetNumberOfTableValues(scalar_range) | ||
1411 | - lut_mask.SetTableValue(1, r, g, b, 1.0) | ||
1412 | - lut_mask.SetTableValue(scalar_range - 1, r, g, b, 1.0) | ||
1413 | - lut_mask.SetRampToLinear() | ||
1414 | - lut_mask.Build() | ||
1415 | - self.lut_mask = lut_mask | ||
1416 | - | ||
1417 | - mask_thresh_imagedata = self.__create_mask_threshold(imagedata) | ||
1418 | - | ||
1419 | - if create: | ||
1420 | - # threshold pipeline | ||
1421 | - current_mask.imagedata.DeepCopy(mask_thresh_imagedata) | ||
1422 | - else: | ||
1423 | - mask_thresh_imagedata = self.current_mask.imagedata | ||
1424 | - | ||
1425 | - # map the input image through a lookup table | ||
1426 | - img_colours_mask = vtk.vtkImageMapToColors() | ||
1427 | - img_colours_mask.SetOutputFormatToRGBA() | ||
1428 | - img_colours_mask.SetLookupTable(lut_mask) | ||
1429 | - | ||
1430 | - img_colours_mask.SetInput(mask_thresh_imagedata) | ||
1431 | - | ||
1432 | - self.img_colours_mask = img_colours_mask | ||
1433 | - | ||
1434 | - return img_colours_mask.GetOutput() | ||
1435 | - | ||
1436 | - def __create_mask_threshold(self, imagedata, threshold_range=None): | ||
1437 | - if not threshold_range: | ||
1438 | - thresh_min, thresh_max = self.current_mask.threshold_range | ||
1439 | - else: | ||
1440 | - thresh_min, thresh_max = threshold_range | ||
1441 | - | ||
1442 | - # flexible threshold | ||
1443 | - img_thresh_mask = vtk.vtkImageThreshold() | ||
1444 | - img_thresh_mask.SetInValue(const.THRESHOLD_INVALUE) | ||
1445 | - img_thresh_mask.SetInput(imagedata) | ||
1446 | - img_thresh_mask.SetOutValue(const.THRESHOLD_OUTVALUE) | ||
1447 | - img_thresh_mask.ThresholdBetween(float(thresh_min), float(thresh_max)) | ||
1448 | - img_thresh_mask.Update() | ||
1449 | - self.img_thresh_mask = img_thresh_mask | ||
1450 | - | ||
1451 | - # copy of threshold output | ||
1452 | - imagedata_mask = vtk.vtkImageData() | ||
1453 | - imagedata_mask.DeepCopy(img_thresh_mask.GetOutput()) | ||
1454 | - imagedata_mask.Update() | ||
1455 | - | ||
1456 | - return imagedata_mask | ||
1457 | - | ||
1458 | def _open_image_matrix(self, filename, shape, dtype): | 1271 | def _open_image_matrix(self, filename, shape, dtype): |
1459 | self.matrix_filename = filename | 1272 | self.matrix_filename = filename |
1460 | - print ">>>", filename | ||
1461 | - self.matrix = numpy.memmap(filename, shape=shape, dtype=dtype, | ||
1462 | - mode='r+') | 1273 | + self.matrix = numpy.memmap(filename, shape=shape, dtype=dtype, mode='r+') |
1463 | 1274 | ||
1464 | def OnFlipVolume(self, pubsub_evt): | 1275 | def OnFlipVolume(self, pubsub_evt): |
1465 | axis = pubsub_evt.data | 1276 | axis = pubsub_evt.data |
@@ -1489,8 +1300,9 @@ class Slice(object): | @@ -1489,8 +1300,9 @@ class Slice(object): | ||
1489 | print type(self.matrix) | 1300 | print type(self.matrix) |
1490 | 1301 | ||
1491 | def OnExportMask(self, pubsub_evt): | 1302 | def OnExportMask(self, pubsub_evt): |
1492 | - #imagedata = self.current_mask.imagedata | ||
1493 | - imagedata = self.imagedata | ||
1494 | - filename, filetype = pubsub_evt.data | ||
1495 | - if (filetype == const.FILETYPE_IMAGEDATA): | ||
1496 | - iu.Export(imagedata, filename) | 1303 | + pass |
1304 | + ##imagedata = self.current_mask.imagedata | ||
1305 | + #imagedata = self.imagedata | ||
1306 | + #filename, filetype = pubsub_evt.data | ||
1307 | + #if (filetype == const.FILETYPE_IMAGEDATA): | ||
1308 | + #iu.Export(imagedata, filename) |
invesalius/data/styles.py
@@ -427,7 +427,6 @@ class SpinInteractorStyle(DefaultInteractorStyle): | @@ -427,7 +427,6 @@ class SpinInteractorStyle(DefaultInteractorStyle): | ||
427 | cam = ren.GetActiveCamera() | 427 | cam = ren.GetActiveCamera() |
428 | if (self.left_pressed): | 428 | if (self.left_pressed): |
429 | self.viewer.UpdateTextDirection(cam) | 429 | self.viewer.UpdateTextDirection(cam) |
430 | - self.spined_image = True | ||
431 | obj.Spin() | 430 | obj.Spin() |
432 | obj.OnRightButtonDown() | 431 | obj.OnRightButtonDown() |
433 | 432 |
invesalius/data/viewer_slice.py
@@ -152,16 +152,10 @@ class Viewer(wx.Panel): | @@ -152,16 +152,10 @@ class Viewer(wx.Panel): | ||
152 | #self.SetBackgroundColour(colour) | 152 | #self.SetBackgroundColour(colour) |
153 | 153 | ||
154 | # Interactor additional style | 154 | # Interactor additional style |
155 | - #self.modes = []#['DEFAULT'] | ||
156 | - self.left_pressed = 0 | ||
157 | - self.right_pressed = 0 | ||
158 | 155 | ||
159 | self._number_slices = const.PROJECTION_MIP_SIZE | 156 | self._number_slices = const.PROJECTION_MIP_SIZE |
160 | self._mip_inverted = False | 157 | self._mip_inverted = False |
161 | 158 | ||
162 | - self.spined_image = False #Use to control to spin | ||
163 | - self.paned_image = False | ||
164 | - | ||
165 | self.style = None | 159 | self.style = None |
166 | self.last_position_mouse_move = () | 160 | self.last_position_mouse_move = () |
167 | self.state = const.STATE_DEFAULT | 161 | self.state = const.STATE_DEFAULT |
@@ -200,7 +194,6 @@ class Viewer(wx.Panel): | @@ -200,7 +194,6 @@ class Viewer(wx.Panel): | ||
200 | self.__bind_events() | 194 | self.__bind_events() |
201 | self.__bind_events_wx() | 195 | self.__bind_events_wx() |
202 | 196 | ||
203 | - self._warped = False | ||
204 | self._flush_buffer = False | 197 | self._flush_buffer = False |
205 | 198 | ||
206 | def __init_gui(self): | 199 | def __init_gui(self): |
@@ -230,7 +223,6 @@ class Viewer(wx.Panel): | @@ -230,7 +223,6 @@ class Viewer(wx.Panel): | ||
230 | self.interactor.SetPicker(self.pick) | 223 | self.interactor.SetPicker(self.pick) |
231 | 224 | ||
232 | def OnContextMenu(self, evt): | 225 | def OnContextMenu(self, evt): |
233 | - self.right_pressed = 0 | ||
234 | if (self.last_position_mouse_move ==\ | 226 | if (self.last_position_mouse_move ==\ |
235 | self.interactor.GetLastEventPosition()): | 227 | self.interactor.GetLastEventPosition()): |
236 | self.menu.caller = self | 228 | self.menu.caller = self |
@@ -826,7 +818,6 @@ class Viewer(wx.Panel): | @@ -826,7 +818,6 @@ class Viewer(wx.Panel): | ||
826 | for slice_data in self.slice_data_list: | 818 | for slice_data in self.slice_data_list: |
827 | del slice_data | 819 | del slice_data |
828 | 820 | ||
829 | - self.modes = []#['DEFAULT'] | ||
830 | self.slice_data_list = [] | 821 | self.slice_data_list = [] |
831 | self.layout = (1, 1) | 822 | self.layout = (1, 1) |
832 | self.orientation_texts = [] | 823 | self.orientation_texts = [] |
@@ -854,8 +845,8 @@ class Viewer(wx.Panel): | @@ -854,8 +845,8 @@ class Viewer(wx.Panel): | ||
854 | self.interactor.Bind(wx.EVT_SIZE, self.OnSize) | 845 | self.interactor.Bind(wx.EVT_SIZE, self.OnSize) |
855 | 846 | ||
856 | def LoadImagedata(self, pubsub_evt): | 847 | def LoadImagedata(self, pubsub_evt): |
857 | - imagedata, mask_dict = pubsub_evt.data | ||
858 | - self.SetInput(imagedata, mask_dict) | 848 | + mask_dict = pubsub_evt.data |
849 | + self.SetInput(mask_dict) | ||
859 | 850 | ||
860 | def LoadRenderers(self, imagedata): | 851 | def LoadRenderers(self, imagedata): |
861 | number_renderers = self.layout[0] * self.layout[1] | 852 | number_renderers = self.layout[0] * self.layout[1] |
@@ -920,7 +911,7 @@ class Viewer(wx.Panel): | @@ -920,7 +911,7 @@ class Viewer(wx.Panel): | ||
920 | self.cursor_ = cursor | 911 | self.cursor_ = cursor |
921 | return cursor | 912 | return cursor |
922 | 913 | ||
923 | - def SetInput(self, imagedata, mask_dict): | 914 | + def SetInput(self, mask_dict): |
924 | self.slice_ = sl.Slice() | 915 | self.slice_ = sl.Slice() |
925 | 916 | ||
926 | max_slice_number = sl.Slice().GetNumberOfSlices(self.orientation) | 917 | max_slice_number = sl.Slice().GetNumberOfSlices(self.orientation) |
@@ -928,11 +919,9 @@ class Viewer(wx.Panel): | @@ -928,11 +919,9 @@ class Viewer(wx.Panel): | ||
928 | max_slice_number) | 919 | max_slice_number) |
929 | 920 | ||
930 | self.slice_data = self.create_slice_window() | 921 | self.slice_data = self.create_slice_window() |
931 | - #self.slice_data.actor.SetInput(imagedata) | ||
932 | self.slice_data.SetCursor(self.__create_cursor()) | 922 | self.slice_data.SetCursor(self.__create_cursor()) |
933 | self.cam = self.slice_data.renderer.GetActiveCamera() | 923 | self.cam = self.slice_data.renderer.GetActiveCamera() |
934 | - self.__build_cross_lines(imagedata) | ||
935 | - #self.set_slice_number(0) | 924 | + self.__build_cross_lines() |
936 | 925 | ||
937 | # Set the slice number to the last slice to ensure the camera if far | 926 | # Set the slice number to the last slice to ensure the camera if far |
938 | # enough to show all slices. | 927 | # enough to show all slices. |
@@ -940,30 +929,6 @@ class Viewer(wx.Panel): | @@ -940,30 +929,6 @@ class Viewer(wx.Panel): | ||
940 | self.__update_camera() | 929 | self.__update_camera() |
941 | self.slice_data.renderer.ResetCamera() | 930 | self.slice_data.renderer.ResetCamera() |
942 | self.interactor.GetRenderWindow().AddRenderer(self.slice_data.renderer) | 931 | self.interactor.GetRenderWindow().AddRenderer(self.slice_data.renderer) |
943 | - #if slice_.imagedata is None: | ||
944 | - #slice_.SetInput(imagedata, mask_dict) | ||
945 | - | ||
946 | - ##actor.SetInput(slice_.GetOutput()) | ||
947 | - #self.LoadRenderers(slice_.GetOutput()) | ||
948 | - #self.__configure_renderers() | ||
949 | - #ren = self.slice_data_list[0].renderer | ||
950 | - #actor = self.slice_data_list[0].actor | ||
951 | - #actor_bound = actor.GetBounds() | ||
952 | - #self.cam = ren.GetActiveCamera() | ||
953 | - | ||
954 | - #for slice_data in self.slice_data_list: | ||
955 | - #self.__update_camera(slice_data) | ||
956 | - #self.Reposition(slice_data) | ||
957 | - | ||
958 | - #number_of_slices = self.layout[0] * self.layout[1] | ||
959 | - #max_slice_number = actor.GetSliceNumberMax() + 1/ \ | ||
960 | - #number_of_slices | ||
961 | - | ||
962 | - #if actor.GetSliceNumberMax() % number_of_slices: | ||
963 | - #max_slice_number += 1 | ||
964 | - #self.set_scroll_position(0) | ||
965 | - | ||
966 | - #actor_bound = actor.GetBounds() | ||
967 | self.interactor.Render() | 932 | self.interactor.Render() |
968 | 933 | ||
969 | self.EnableText() | 934 | self.EnableText() |
@@ -971,7 +936,7 @@ class Viewer(wx.Panel): | @@ -971,7 +936,7 @@ class Viewer(wx.Panel): | ||
971 | ## Insert cursor | 936 | ## Insert cursor |
972 | self.SetInteractorStyle(const.STATE_DEFAULT) | 937 | self.SetInteractorStyle(const.STATE_DEFAULT) |
973 | 938 | ||
974 | - def __build_cross_lines(self, imagedata): | 939 | + def __build_cross_lines(self): |
975 | renderer = self.slice_data.overlay_renderer | 940 | renderer = self.slice_data.overlay_renderer |
976 | 941 | ||
977 | cross = vtk.vtkCursor3D() | 942 | cross = vtk.vtkCursor3D() |
@@ -1010,28 +975,6 @@ class Viewer(wx.Panel): | @@ -1010,28 +975,6 @@ class Viewer(wx.Panel): | ||
1010 | for slice_data in self.slice_data_list: | 975 | for slice_data in self.slice_data_list: |
1011 | slice_data.cursor.actor.SetVisibility(visibility) | 976 | slice_data.cursor.actor.SetVisibility(visibility) |
1012 | 977 | ||
1013 | - def __update_cursor_position(self, slice_data, position): | ||
1014 | - x, y, z = position | ||
1015 | - if (slice_data.cursor): | ||
1016 | - slice_number = slice_data.number | ||
1017 | - actor_bound = slice_data.actor.GetBounds() | ||
1018 | - | ||
1019 | - yz = [x + abs(x * 0.001), y, z] | ||
1020 | - xz = [x, y - abs(y * 0.001), z] | ||
1021 | - xy = [x, y, z + abs(z * 0.001)] | ||
1022 | - | ||
1023 | - proj = project.Project() | ||
1024 | - orig_orien = proj.original_orientation | ||
1025 | - | ||
1026 | - if (orig_orien == const.SAGITAL): | ||
1027 | - coordinates = {"SAGITAL": xy, "CORONAL": yz, "AXIAL": xz} | ||
1028 | - elif(orig_orien == const.CORONAL): | ||
1029 | - coordinates = {"SAGITAL": yz, "CORONAL": xy, "AXIAL": xz} | ||
1030 | - else: | ||
1031 | - coordinates = {"SAGITAL": yz, "CORONAL": xz, "AXIAL": xy} | ||
1032 | - | ||
1033 | - slice_data.cursor.SetPosition(coordinates[self.orientation]) | ||
1034 | - | ||
1035 | def SetOrientation(self, orientation): | 978 | def SetOrientation(self, orientation): |
1036 | self.orientation = orientation | 979 | self.orientation = orientation |
1037 | for slice_data in self.slice_data_list: | 980 | for slice_data in self.slice_data_list: |
@@ -1047,7 +990,6 @@ class Viewer(wx.Panel): | @@ -1047,7 +990,6 @@ class Viewer(wx.Panel): | ||
1047 | overlay_renderer.SetActiveCamera(cam) | 990 | overlay_renderer.SetActiveCamera(cam) |
1048 | overlay_renderer.SetInteractive(0) | 991 | overlay_renderer.SetInteractive(0) |
1049 | 992 | ||
1050 | - | ||
1051 | self.interactor.GetRenderWindow().SetNumberOfLayers(2) | 993 | self.interactor.GetRenderWindow().SetNumberOfLayers(2) |
1052 | self.interactor.GetRenderWindow().AddRenderer(overlay_renderer) | 994 | self.interactor.GetRenderWindow().AddRenderer(overlay_renderer) |
1053 | self.interactor.GetRenderWindow().AddRenderer(renderer) | 995 | self.interactor.GetRenderWindow().AddRenderer(renderer) |
@@ -1286,30 +1228,6 @@ class Viewer(wx.Panel): | @@ -1286,30 +1228,6 @@ class Viewer(wx.Panel): | ||
1286 | self.set_slice_number(pos) | 1228 | self.set_slice_number(pos) |
1287 | self.interactor.Render() | 1229 | self.interactor.Render() |
1288 | 1230 | ||
1289 | - def test_operation_position(self, coord): | ||
1290 | - """ | ||
1291 | - Test if coord is into the imagedata limits. | ||
1292 | - """ | ||
1293 | - x, y, z = coord | ||
1294 | - xi, yi, zi = 0, 0, 0 | ||
1295 | - xf, yf, zf = self.imagedata.GetDimensions() | ||
1296 | - if xi <= x <= xf \ | ||
1297 | - and yi <= y <= yf\ | ||
1298 | - and zi <= z <= zf: | ||
1299 | - return True | ||
1300 | - return False | ||
1301 | - | ||
1302 | - def _assert_coord_into_image(self, coord): | ||
1303 | - extent = self.imagedata.GetWholeExtent() | ||
1304 | - extent_min = extent[0], extent[2], extent[4] | ||
1305 | - extent_max = extent[1], extent[3], extent[5] | ||
1306 | - for index in xrange(3): | ||
1307 | - if coord[index] > extent_max[index]: | ||
1308 | - coord[index] = extent_max[index] | ||
1309 | - elif coord[index] < extent_min[index]: | ||
1310 | - coord[index] = extent_min[index] | ||
1311 | - return coord | ||
1312 | - | ||
1313 | def ReloadActualSlice(self, pubsub_evt=None): | 1231 | def ReloadActualSlice(self, pubsub_evt=None): |
1314 | pos = self.scroll.GetThumbPosition() | 1232 | pos = self.scroll.GetThumbPosition() |
1315 | self.set_slice_number(pos) | 1233 | self.set_slice_number(pos) |
invesalius/project.py
@@ -22,7 +22,6 @@ import glob | @@ -22,7 +22,6 @@ import glob | ||
22 | import os | 22 | import os |
23 | import plistlib | 23 | import plistlib |
24 | import shutil | 24 | import shutil |
25 | -import stat | ||
26 | import tarfile | 25 | import tarfile |
27 | import tempfile | 26 | import tempfile |
28 | 27 | ||
@@ -35,7 +34,6 @@ import data.mask as msk | @@ -35,7 +34,6 @@ import data.mask as msk | ||
35 | import data.polydata_utils as pu | 34 | import data.polydata_utils as pu |
36 | import data.surface as srf | 35 | import data.surface as srf |
37 | from presets import Presets | 36 | from presets import Presets |
38 | -from reader import dicom | ||
39 | from utils import Singleton, debug | 37 | from utils import Singleton, debug |
40 | import version | 38 | import version |
41 | 39 | ||
@@ -47,18 +45,13 @@ class Project(object): | @@ -47,18 +45,13 @@ class Project(object): | ||
47 | def __init__(self): | 45 | def __init__(self): |
48 | # Patient/ acquistion information | 46 | # Patient/ acquistion information |
49 | self.name = '' | 47 | self.name = '' |
50 | - self.dicom_sample = '' | ||
51 | self.modality = '' | 48 | self.modality = '' |
52 | self.original_orientation = '' | 49 | self.original_orientation = '' |
53 | self.window = '' | 50 | self.window = '' |
54 | self.level = '' | 51 | self.level = '' |
55 | 52 | ||
56 | - # Original imagedata (shouldn't be changed) | ||
57 | - self.imagedata = '' | ||
58 | - | ||
59 | # Masks (vtkImageData) | 53 | # Masks (vtkImageData) |
60 | self.mask_dict = {} | 54 | self.mask_dict = {} |
61 | - self.last_mask_index = 0 | ||
62 | 55 | ||
63 | # Surfaces are (vtkPolyData) | 56 | # Surfaces are (vtkPolyData) |
64 | self.surface_dict = {} | 57 | self.surface_dict = {} |
@@ -107,7 +100,6 @@ class Project(object): | @@ -107,7 +100,6 @@ class Project(object): | ||
107 | output | 100 | output |
108 | @ index: index of item that was inserted | 101 | @ index: index of item that was inserted |
109 | """ | 102 | """ |
110 | - #self.last_mask_index = mask.index | ||
111 | index = len(self.mask_dict) | 103 | index = len(self.mask_dict) |
112 | self.mask_dict[index] = mask | 104 | self.mask_dict[index] = mask |
113 | return index | 105 | return index |