Commit 0158ec5bee055134c74258b561b601b5f489ca5c

Authored by tatiana
1 parent 1582c8e8

ADD: Surface connectivity tools

invesalius/data/polydata_utils.py
@@ -159,7 +159,7 @@ def SplitDisconectedParts(polydata): @@ -159,7 +159,7 @@ def SplitDisconectedParts(polydata):
159 159
160 polydata_collection = [] 160 polydata_collection = []
161 161
162 - for region in nregions: 162 + for region in xrange(nregions):
163 conn.InitializeSpecifiedRegionList() 163 conn.InitializeSpecifiedRegionList()
164 conn.AddSpecifiedRegion(region) 164 conn.AddSpecifiedRegion(region)
165 conn.Update() 165 conn.Update()
invesalius/data/surface.py
@@ -127,6 +127,7 @@ class SurfaceManager(): @@ -127,6 +127,7 @@ class SurfaceManager():
127 127
128 def OnSeedSurface(self, pubsub_evt): 128 def OnSeedSurface(self, pubsub_evt):
129 index, points_id_list = pubsub_evt.data 129 index, points_id_list = pubsub_evt.data
  130 + index = self.last_surface_index
130 proj = prj.Project() 131 proj = prj.Project()
131 surface = proj.surface_dict[index] 132 surface = proj.surface_dict[index]
132 133
@@ -136,6 +137,7 @@ class SurfaceManager(): @@ -136,6 +137,7 @@ class SurfaceManager():
136 137
137 def OnSplitSurface(self, pubsub_evt): 138 def OnSplitSurface(self, pubsub_evt):
138 index = pubsub_evt.data 139 index = pubsub_evt.data
  140 + index = self.last_surface_index
139 proj = prj.Project() 141 proj = prj.Project()
140 surface = proj.surface_dict[index] 142 surface = proj.surface_dict[index]
141 143
@@ -145,11 +147,13 @@ class SurfaceManager(): @@ -145,11 +147,13 @@ class SurfaceManager():
145 147
146 def OnLargestSurface(self, pubsub_evt): 148 def OnLargestSurface(self, pubsub_evt):
147 index = pubsub_evt.data 149 index = pubsub_evt.data
  150 + index = self.last_surface_index
148 proj = prj.Project() 151 proj = prj.Project()
149 surface = proj.surface_dict[index] 152 surface = proj.surface_dict[index]
150 153
151 new_polydata = pu.SelectLargestPart(surface.polydata) 154 new_polydata = pu.SelectLargestPart(surface.polydata)
152 self.CreateSurfaceFromPolydata(new_polydata) 155 self.CreateSurfaceFromPolydata(new_polydata)
  156 + #TODO: Hide previous
153 157
154 def CreateSurfaceFromPolydata(self, polydata, overwrite=False): 158 def CreateSurfaceFromPolydata(self, polydata, overwrite=False):
155 mapper = vtk.vtkPolyDataMapper() 159 mapper = vtk.vtkPolyDataMapper()
@@ -170,6 +174,7 @@ class SurfaceManager(): @@ -170,6 +174,7 @@ class SurfaceManager():
170 # Set actor colour and transparency 174 # Set actor colour and transparency
171 actor.GetProperty().SetColor(surface.colour) 175 actor.GetProperty().SetColor(surface.colour)
172 actor.GetProperty().SetOpacity(1-surface.transparency) 176 actor.GetProperty().SetOpacity(1-surface.transparency)
  177 + self.actors_dict[surface.index] = actor
173 178
174 # Append surface into Project.surface_dict 179 # Append surface into Project.surface_dict
175 proj = prj.Project() 180 proj = prj.Project()
@@ -185,8 +190,6 @@ class SurfaceManager(): @@ -185,8 +190,6 @@ class SurfaceManager():
185 190
186 # The following lines have to be here, otherwise all volumes disappear 191 # The following lines have to be here, otherwise all volumes disappear
187 measured_polydata = vtk.vtkMassProperties() 192 measured_polydata = vtk.vtkMassProperties()
188 - measured_polydata.AddObserver("ProgressEvent", lambda obj,evt:  
189 - UpdateProgress(obj, _("Generating 3D surface...")))  
190 measured_polydata.SetInput(polydata) 193 measured_polydata.SetInput(polydata)
191 volume = measured_polydata.GetVolume() 194 volume = measured_polydata.GetVolume()
192 surface.volume = volume 195 surface.volume = volume
@@ -194,6 +197,11 @@ class SurfaceManager(): @@ -194,6 +197,11 @@ class SurfaceManager():
194 197
195 ps.Publisher().sendMessage('Load surface actor into viewer', actor) 198 ps.Publisher().sendMessage('Load surface actor into viewer', actor)
196 199
  200 + ps.Publisher().sendMessage('Update surface info in GUI',
  201 + (surface.index, surface.name,
  202 + surface.colour, surface.volume,
  203 + surface.transparency))
  204 +
197 205
198 def OnCloseProject(self, pubsub_evt): 206 def OnCloseProject(self, pubsub_evt):
199 self.CloseProject() 207 self.CloseProject()
invesalius/gui/task_surface.py
@@ -327,6 +327,7 @@ class SurfaceTools(wx.Panel): @@ -327,6 +327,7 @@ class SurfaceTools(wx.Panel):
327 self.SelectSeed() 327 self.SelectSeed()
328 328
329 def OnButton(self, evt): 329 def OnButton(self, evt):
  330 + id = evt.GetId()
330 if id == BTN_LARGEST: 331 if id == BTN_LARGEST:
331 self.SelectLargest() 332 self.SelectLargest()
332 elif id == BTN_SPLIT: 333 elif id == BTN_SPLIT:
@@ -336,11 +337,12 @@ class SurfaceTools(wx.Panel): @@ -336,11 +337,12 @@ class SurfaceTools(wx.Panel):
336 337
337 def SelectLargest(self): 338 def SelectLargest(self):
338 index = self.combo_surface_name.GetSelection() 339 index = self.combo_surface_name.GetSelection()
339 - ps.Publisher().sendMessage('Split surface', index) 340 + ps.Publisher().sendMessage('Create surface from largest region', index)
340 341
341 def SplitSurface(self): 342 def SplitSurface(self):
342 index = self.combo_surface_name.GetSelection() 343 index = self.combo_surface_name.GetSelection()
343 - ps.Publisher().sendMessage('Create surface from largest region', index) 344 + ps.Publisher().sendMessage('Split surface', index)
  345 +
344 # surface_manager 346 # surface_manager
345 347
346 def SelectSeed(self): 348 def SelectSeed(self):