Commit e82c89cee51c88e21339c9f6b6b537b7a4d97263

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

No-gui doing less work when creating surface

app.py
... ... @@ -361,7 +361,6 @@ def export(path_, threshold_range):
361 361 }
362 362 Publisher.sendMessage('Create surface from index', surface_options)
363 363 Publisher.sendMessage('Export surface to file', (path_, const.FILETYPE_STL))
364   - Publisher.sendMessage('Remove surfaces', [0])
365 364  
366 365  
367 366 def print_events(data):
... ...
invesalius/data/slice_.py
... ... @@ -353,19 +353,19 @@ class Slice(object):
353 353  
354 354 # TODO: merge this code with apply_slice_buffer_to_mask
355 355 b_mask = self.buffer_slices["AXIAL"].mask
356   - if b_mask:
  356 + if b_mask is not None:
357 357 n = self.buffer_slices["AXIAL"].index + 1
358 358 self.current_mask.matrix[n, 1:, 1:] = b_mask
359 359 self.current_mask.matrix[n, 0, 0] = 1
360 360  
361 361 b_mask = self.buffer_slices["CORONAL"].mask
362   - if b_mask:
  362 + if b_mask is not None:
363 363 n = self.buffer_slices["CORONAL"].index + 1
364 364 self.current_mask.matrix[1:, n, 1:] = b_mask
365 365 self.current_mask.matrix[0, n, 0] = 1
366 366  
367 367 b_mask = self.buffer_slices["SAGITAL"].mask
368   - if b_mask:
  368 + if b_mask is not None:
369 369 n = self.buffer_slices["SAGITAL"].index + 1
370 370 self.current_mask.matrix[1:, 1:, n] = b_mask
371 371 self.current_mask.matrix[0, 0, n] = 1
... ... @@ -885,7 +885,7 @@ class Slice(object):
885 885 self.current_mask.matrix[n+1, 1:, 1:] = m
886 886 else:
887 887 slice_ = self.buffer_slices[orientation].image
888   - if slice_:
  888 + if slice_ is not None:
889 889 self.buffer_slices[orientation].mask = (255 * ((slice_ >= thresh_min) & (slice_ <= thresh_max))).astype('uint8')
890 890  
891 891 # Update viewer
... ...
invesalius/data/surface.py
... ... @@ -661,7 +661,6 @@ class SurfaceManager():
661 661 # polydata.SetSource(None)
662 662 del decimation
663 663  
664   - to_measure = polydata
665 664 #to_measure.Register(None)
666 665 # to_measure.SetSource(None)
667 666  
... ... @@ -700,115 +699,133 @@ class SurfaceManager():
700 699 # polydata.DebugOn()
701 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 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 830 def UpdateSurfaceInterpolation(self, pub_evt):
814 831 interpolation = int(ses.Session().surface_interpolation)
... ...