Model and Segment rendering issues with 4.10 (and 4.11)

I have been using the isodose module to make isodose models. It worked in 4.8 but with 4.10 the 2D isolines do not display correctly - they do not change properly as I scroll through the slices - the lines do not change shape the just start to disappear as on the red and yellow windows…

image

… If I change the size of the windows (e.g. by moving the program to a different monitor) they detatch from the images and do not align at all…

I have also had issues with the volume segment editor module. Even using a simple tool such as paint it does not render properly with all kinds of odd lines…

…and if I persevere the program freezes or crashes.

I have tried the latest nightly, I have tried unistalling and reinstalling without any additional modules etc - and I have also tried using the experimental rendering method. Nothing seems to make any difference.

Does anyone know what is going on?

So it seems it was not slicer that was at fault at all…

I downloaded and installed the latest graphics drivers for my card and now everything is working as expected.

Sorry for any inconvenience.

1 Like

Great news, thanks for reporting and also for following up!

So now both Segment Editor and Isodose work properly?

Yes the the isodoses and segmentations are now working perfectly. The only thing I’ve not managed to fix is a widget I made to render a surface volume at precise dose levels using a slider.

First, in set up I create a volume display node

  # Display node for 3D volumes
  volRenLogic = slicer.modules.volumerendering.logic()
  volumeDisplayNode = volRenLogic.CreateVolumeRenderingDisplayNode()
  slicer.mrmlScene.AddNode(volumeDisplayNode)
  volumeDisplayNode.UnRegister(volRenLogic)
  self.threeDVolumeDisplayNode = volumeDisplayNode

Later, after calculating my doses, I set the parameters for the 3D display updating the display node whenever the foreNode changed

  # and volume render the dose
  volRenLogic = slicer.modules.volumerendering.logic()
  volRenLogic.UpdateDisplayNodeFromVolumeNode(self.threeDVolumeDisplayNode, foreNode)
  # sets the window parameters for the 3D volume where the volume is rendered
  layoutManager = slicer.app.layoutManager()
  threeDWidget = layoutManager.threeDWidget(0)
  controller = threeDWidget.threeDController()
  threeDView = threeDWidget.threeDView()
  controller.set3DAxisVisible(False)
  controller.set3DAxisLabelVisible(False)
  controller.setOrientationMarkerType(2)
  controller.setOrthographicModeEnabled(True)
  controller.spinView(True)
  threeDView.lookFromViewAxis(ctk.ctkAxesWidget.Anterior)
  threeDView.resetCamera(False, True, True)
  threeDView.resetFocalPoint()

I then changed the threshold of the volume using a slider bar / dose selector…

def onChangeThresholdSliderWidget(self, value):
propNode = self.threeDVolumeDisplayNode.GetVolumePropertyNode()
volumeProp = propNode.GetVolumeProperty()
volRenLogic = slicer.modules.volumerendering.logic()
max = self.volumeThresholdSliderWidget.maximum
volRenLogic.SetThresholdToVolumeProp([0,max],[value,max], volumeProp, False, True)

this all worked beautifully in 4.8 but not in 4.10. I’m not really sure what’s going on – I can get a (I’m not sure if it’s the same) volume display node to appear if I go to volume rendering and choose the node it was created from, but my slider no longer affects it. If I play with it too much the whole thing crashes.
I’m sure this is to do with differences in how volume rendering is now handled and I suspect that I should be doing something simpler - but I’m struggling to figure exactly what it is I need to change. Perhaps there is some documentation that I’ve missed that someone could point me towards?

Volume rendering changed quite a bit internally after 4.8.1. There have been discussions about this, they will probably help. Such as this: