Is there a way to quickly select segmentations and make them invisible in the 3D view.
Namely, problem I encounter is that my boss asks me to show him a certain structure and I have to often remove 1 or 2 other segmentations to see it clearly.
I end up hovering my mouse over the segmentation i want to remove while holding the shift.
Next I look at the red slices and then I hover in them as well.
Then it shows me the name of the segment and segmentation.
Then I have to go to search it with filter through data
After that I have to click right click and disable 3D view.
As you can see, it takes quite a lot of steps to remove just 1 structure.
Is there some plugin or something that can help me easily remove them?
There is no such built-in feature yet, but you can put together a Python script that does what you need. For example, you can set the crosshair in any views using Shift+MouseMove then run the following script to hide the segments at that position:
segmentationNode = getNode('Segmentation')
segmentationDisplayNode = segmentationNode.GetDisplayNode()
sliceViewWidget = slicer.app.layoutManager().sliceWidget('Red')
displayableManager2D = sliceViewWidget.sliceView().displayableManagerByClassName('vtkMRMLSegmentationsDisplayableManager2D')
crosshairNode=slicer.util.getNode('Crosshair')
crosshairNode.GetCrosshairRAS()
crosshairPosition = crosshairNode.GetCrosshairRAS()
# Look around crosshair position in all directions for a segment
# (necessary because picked position is at the segmentation boundary so it may be just outside the segment)
for attempts in range(16):
crosshairPositionAdjusted = [crosshairPosition[0]-0.5+1.0*(attempts%2), crosshairPosition[1]-0.5+1.0*((attempts/2)%2), crosshairPosition[2]-0.5+1.0*((attempts/4)%8)]
segmentIDs = vtk.vtkStringArray()
segmentValues = vtk.vtkDoubleArray()
displayableManager2D.GetVisibleSegmentsForPosition(crosshairPositionAdjusted, segmentationDisplayNode, segmentIDs, segmentValues)
if segmentIDs.GetNumberOfValues() == 0:
continue
for i in range(segmentIDs.GetNumberOfValues()):
segmentID = segmentIDs.GetValue(i)
segmentationDisplayNode.SetSegmentVisibility(segmentID, False)
break