Commit e82c89cee51c88e21339c9f6b6b537b7a4d97263

Authored by Thiago Franco de Moraes
1 parent e7bc240b
Exists in command-line

No-gui doing less work when creating surface

@@ -361,7 +361,6 @@ def export(path_, threshold_range): @@ -361,7 +361,6 @@ def export(path_, threshold_range):
361 } 361 }
362 Publisher.sendMessage('Create surface from index', surface_options) 362 Publisher.sendMessage('Create surface from index', surface_options)
363 Publisher.sendMessage('Export surface to file', (path_, const.FILETYPE_STL)) 363 Publisher.sendMessage('Export surface to file', (path_, const.FILETYPE_STL))
364 - Publisher.sendMessage('Remove surfaces', [0])  
365 364
366 365
367 def print_events(data): 366 def print_events(data):
invesalius/data/slice_.py
@@ -353,19 +353,19 @@ class Slice(object): @@ -353,19 +353,19 @@ 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 - if b_mask: 356 + if b_mask is not None:
357 n = self.buffer_slices["AXIAL"].index + 1 357 n = self.buffer_slices["AXIAL"].index + 1
358 self.current_mask.matrix[n, 1:, 1:] = b_mask 358 self.current_mask.matrix[n, 1:, 1:] = b_mask
359 self.current_mask.matrix[n, 0, 0] = 1 359 self.current_mask.matrix[n, 0, 0] = 1
360 360
361 b_mask = self.buffer_slices["CORONAL"].mask 361 b_mask = self.buffer_slices["CORONAL"].mask
362 - if b_mask: 362 + if b_mask is not None:
363 n = self.buffer_slices["CORONAL"].index + 1 363 n = self.buffer_slices["CORONAL"].index + 1
364 self.current_mask.matrix[1:, n, 1:] = b_mask 364 self.current_mask.matrix[1:, n, 1:] = b_mask
365 self.current_mask.matrix[0, n, 0] = 1 365 self.current_mask.matrix[0, n, 0] = 1
366 366
367 b_mask = self.buffer_slices["SAGITAL"].mask 367 b_mask = self.buffer_slices["SAGITAL"].mask
368 - if b_mask: 368 + if b_mask is not None:
369 n = self.buffer_slices["SAGITAL"].index + 1 369 n = self.buffer_slices["SAGITAL"].index + 1
370 self.current_mask.matrix[1:, 1:, n] = b_mask 370 self.current_mask.matrix[1:, 1:, n] = b_mask
371 self.current_mask.matrix[0, 0, n] = 1 371 self.current_mask.matrix[0, 0, n] = 1
@@ -885,7 +885,7 @@ class Slice(object): @@ -885,7 +885,7 @@ class Slice(object):
885 self.current_mask.matrix[n+1, 1:, 1:] = m 885 self.current_mask.matrix[n+1, 1:, 1:] = m
886 else: 886 else:
887 slice_ = self.buffer_slices[orientation].image 887 slice_ = self.buffer_slices[orientation].image
888 - if slice_: 888 + if slice_ is not None:
889 self.buffer_slices[orientation].mask = (255 * ((slice_ >= thresh_min) & (slice_ <= thresh_max))).astype('uint8') 889 self.buffer_slices[orientation].mask = (255 * ((slice_ >= thresh_min) & (slice_ <= thresh_max))).astype('uint8')
890 890
891 # Update viewer 891 # Update viewer
invesalius/data/surface.py
@@ -661,7 +661,6 @@ class SurfaceManager(): @@ -661,7 +661,6 @@ class SurfaceManager():
661 # polydata.SetSource(None) 661 # polydata.SetSource(None)
662 del decimation 662 del decimation
663 663
664 - to_measure = polydata  
665 #to_measure.Register(None) 664 #to_measure.Register(None)
666 # to_measure.SetSource(None) 665 # to_measure.SetSource(None)
667 666
@@ -700,115 +699,133 @@ class SurfaceManager(): @@ -700,115 +699,133 @@ class SurfaceManager():
700 # polydata.DebugOn() 699 # polydata.DebugOn()
701 del filled_polydata 700 del filled_polydata
702 701
703 - normals = vtk.vtkPolyDataNormals()  
704 - # normals.ReleaseDataFlagOn()  
705 - normals_ref = weakref.ref(normals)  
706 - normals_ref().AddObserver("ProgressEvent", lambda obj,evt:  
707 - UpdateProgress(normals_ref(), _("Creating 3D surface...")))  
708 - normals.SetInputData(polydata)  
709 - normals.SetFeatureAngle(80)  
710 - normals.AutoOrientNormalsOn()  
711 - # normals.GetOutput().ReleaseDataFlagOn()  
712 - normals.Update()  
713 - del polydata  
714 - polydata = normals.GetOutput()  
715 - #polydata.Register(None)  
716 - # polydata.SetSource(None)  
717 - del normals  
718 -  
719 - # Improve performance  
720 - stripper = vtk.vtkStripper()  
721 - # stripper.ReleaseDataFlagOn()  
722 - stripper_ref = weakref.ref(stripper)  
723 - stripper_ref().AddObserver("ProgressEvent", lambda obj,evt:  
724 - UpdateProgress(stripper_ref(), _("Creating 3D surface...")))  
725 - stripper.SetInputData(polydata)  
726 - stripper.PassThroughCellIdsOn()  
727 - stripper.PassThroughPointIdsOn()  
728 - # stripper.GetOutput().ReleaseDataFlagOn()  
729 - stripper.Update()  
730 - del polydata  
731 - polydata = stripper.GetOutput()  
732 - #polydata.Register(None)  
733 - # polydata.SetSource(None)  
734 - del stripper 702 + to_measure = polydata
735 703
736 - # Map polygonal data (vtkPolyData) to graphics primitives.  
737 - mapper = vtk.vtkPolyDataMapper()  
738 - mapper.SetInputData(polydata)  
739 - mapper.ScalarVisibilityOff()  
740 - # mapper.ReleaseDataFlagOn()  
741 - mapper.ImmediateModeRenderingOn() # improve performance 704 + # If InVesalius is running without GUI
  705 + if wx.GetApp() is None:
  706 + proj = prj.Project()
  707 + #Create Surface instance
  708 + if overwrite:
  709 + surface = Surface(index = self.last_surface_index)
  710 + proj.ChangeSurface(surface)
  711 + else:
  712 + surface = Surface(name=surface_name)
  713 + index = proj.AddSurface(surface)
  714 + surface.index = index
  715 + self.last_surface_index = index
  716 + surface.colour = colour
  717 + surface.polydata = polydata
742 718
743 - # Represent an object (geometry & properties) in the rendered scene  
744 - actor = vtk.vtkActor()  
745 - actor.SetMapper(mapper)  
746 - del mapper  
747 - #Create Surface instance  
748 - if overwrite:  
749 - surface = Surface(index = self.last_surface_index) 719 + # With GUI
750 else: 720 else:
751 - surface = Surface(name=surface_name)  
752 - surface.colour = colour  
753 - surface.polydata = polydata  
754 - del polydata 721 + normals = vtk.vtkPolyDataNormals()
  722 + # normals.ReleaseDataFlagOn()
  723 + normals_ref = weakref.ref(normals)
  724 + normals_ref().AddObserver("ProgressEvent", lambda obj,evt:
  725 + UpdateProgress(normals_ref(), _("Creating 3D surface...")))
  726 + normals.SetInputData(polydata)
  727 + normals.SetFeatureAngle(80)
  728 + normals.AutoOrientNormalsOn()
  729 + # normals.GetOutput().ReleaseDataFlagOn()
  730 + normals.Update()
  731 + del polydata
  732 + polydata = normals.GetOutput()
  733 + #polydata.Register(None)
  734 + # polydata.SetSource(None)
  735 + del normals
755 736
756 - # Set actor colour and transparency  
757 - actor.GetProperty().SetColor(colour)  
758 - actor.GetProperty().SetOpacity(1-surface.transparency) 737 + # Improve performance
  738 + stripper = vtk.vtkStripper()
  739 + # stripper.ReleaseDataFlagOn()
  740 + stripper_ref = weakref.ref(stripper)
  741 + stripper_ref().AddObserver("ProgressEvent", lambda obj,evt:
  742 + UpdateProgress(stripper_ref(), _("Creating 3D surface...")))
  743 + stripper.SetInputData(polydata)
  744 + stripper.PassThroughCellIdsOn()
  745 + stripper.PassThroughPointIdsOn()
  746 + # stripper.GetOutput().ReleaseDataFlagOn()
  747 + stripper.Update()
  748 + del polydata
  749 + polydata = stripper.GetOutput()
  750 + #polydata.Register(None)
  751 + # polydata.SetSource(None)
  752 + del stripper
759 753
760 - prop = actor.GetProperty() 754 + # Map polygonal data (vtkPolyData) to graphics primitives.
  755 + mapper = vtk.vtkPolyDataMapper()
  756 + mapper.SetInputData(polydata)
  757 + mapper.ScalarVisibilityOff()
  758 + # mapper.ReleaseDataFlagOn()
  759 + mapper.ImmediateModeRenderingOn() # improve performance
761 760
762 - interpolation = int(ses.Session().surface_interpolation) 761 + # Represent an object (geometry & properties) in the rendered scene
  762 + actor = vtk.vtkActor()
  763 + actor.SetMapper(mapper)
  764 + del mapper
  765 + #Create Surface instance
  766 + if overwrite:
  767 + surface = Surface(index = self.last_surface_index)
  768 + else:
  769 + surface = Surface(name=surface_name)
  770 + surface.colour = colour
  771 + surface.polydata = polydata
  772 + del polydata
763 773
764 - prop.SetInterpolation(interpolation) 774 + # Set actor colour and transparency
  775 + actor.GetProperty().SetColor(colour)
  776 + actor.GetProperty().SetOpacity(1-surface.transparency)
765 777
766 - proj = prj.Project()  
767 - if overwrite:  
768 - proj.ChangeSurface(surface)  
769 - else:  
770 - index = proj.AddSurface(surface)  
771 - surface.index = index  
772 - self.last_surface_index = index 778 + prop = actor.GetProperty()
773 779
774 - session = ses.Session()  
775 - session.ChangeProject() 780 + interpolation = int(ses.Session().surface_interpolation)
776 781
777 - # The following lines have to be here, otherwise all volumes disappear  
778 - measured_polydata = vtk.vtkMassProperties()  
779 - # measured_polydata.ReleaseDataFlagOn()  
780 - measured_polydata.SetInputData(to_measure)  
781 - volume = float(measured_polydata.GetVolume())  
782 - area = float(measured_polydata.GetSurfaceArea())  
783 - surface.volume = volume  
784 - surface.area = area  
785 - self.last_surface_index = surface.index  
786 - del measured_polydata  
787 - del to_measure 782 + prop.SetInterpolation(interpolation)
788 783
789 - Publisher.sendMessage('Load surface actor into viewer', actor) 784 + proj = prj.Project()
  785 + if overwrite:
  786 + proj.ChangeSurface(surface)
  787 + else:
  788 + index = proj.AddSurface(surface)
  789 + surface.index = index
  790 + self.last_surface_index = index
790 791
791 - # Send actor by pubsub to viewer's render  
792 - if overwrite and self.actors_dict.keys():  
793 - old_actor = self.actors_dict[self.last_surface_index]  
794 - Publisher.sendMessage('Remove surface actor from viewer', old_actor) 792 + session = ses.Session()
  793 + session.ChangeProject()
795 794
796 - # Save actor for future management tasks  
797 - self.actors_dict[surface.index] = actor 795 + measured_polydata = vtk.vtkMassProperties()
  796 + # measured_polydata.ReleaseDataFlagOn()
  797 + measured_polydata.SetInputData(to_measure)
  798 + volume = float(measured_polydata.GetVolume())
  799 + area = float(measured_polydata.GetSurfaceArea())
  800 + surface.volume = volume
  801 + surface.area = area
  802 + self.last_surface_index = surface.index
  803 + del measured_polydata
  804 + del to_measure
798 805
799 - Publisher.sendMessage('Update surface info in GUI',  
800 - (surface.index, surface.name,  
801 - surface.colour, surface.volume,  
802 - surface.area,  
803 - surface.transparency))  
804 -  
805 - #When you finalize the progress. The bar is cleaned.  
806 - UpdateProgress = vu.ShowProgress(1)  
807 - UpdateProgress(0, _("Ready"))  
808 - Publisher.sendMessage('Update status text in GUI', _("Ready"))  
809 -  
810 - Publisher.sendMessage('End busy cursor')  
811 - del actor 806 + Publisher.sendMessage('Load surface actor into viewer', actor)
  807 +
  808 + # Send actor by pubsub to viewer's render
  809 + if overwrite and self.actors_dict.keys():
  810 + old_actor = self.actors_dict[self.last_surface_index]
  811 + Publisher.sendMessage('Remove surface actor from viewer', old_actor)
  812 +
  813 + # Save actor for future management tasks
  814 + self.actors_dict[surface.index] = actor
  815 +
  816 + Publisher.sendMessage('Update surface info in GUI',
  817 + (surface.index, surface.name,
  818 + surface.colour, surface.volume,
  819 + surface.area,
  820 + surface.transparency))
  821 +
  822 + #When you finalize the progress. The bar is cleaned.
  823 + UpdateProgress = vu.ShowProgress(1)
  824 + UpdateProgress(0, _("Ready"))
  825 + Publisher.sendMessage('Update status text in GUI', _("Ready"))
  826 +
  827 + Publisher.sendMessage('End busy cursor')
  828 + del actor
812 829
813 def UpdateSurfaceInterpolation(self, pub_evt): 830 def UpdateSurfaceInterpolation(self, pub_evt):
814 interpolation = int(ses.Session().surface_interpolation) 831 interpolation = int(ses.Session().surface_interpolation)