Volume rendering property lock

Here is a use case, which comes up often for us, where the current volume rendering interface is quite clunky. I am looking for suggestions on how to implement in data module that will streamline this use case.

Basically I have dozens of microCT scans of similar organisms. I simply want to visualize them in 3D to look at the anatomy, go back and forth between them easily. These are scanned in the same way (furthermore registered into the same space) and I have custom volume property that performs OK for all the samples.

I can of course drag’n’drop each volume one at a time into viewer, but then I have to manually adjust the volume property, which involves a lot of clicking (plus this only changes the content in one viewer). Is it possible to set a lock in the volume property tab of volume rendering module?

Another, possibility I set one volume as an example, and then there I right click on it and create an action that says “apply volume rendering to all sibling volumes” or something along those lines. And then use the visibility button in the data module to turn volumes on/off.

I am also open to other suggestions.

Can you put them all in a Sequence and then do volume rendering on the proxy?

Not sure, never used the sequence module before… Let me try…

It sort of works. And I can see it being valuable if I want to make an animation of all samples. but the main issue is usability.

I am not sure why the volume name displayed doesn’t change as I increment over. It hurts the usability, since I don’t what volume I am looking at.

Also how do I control the speed in contious play. I thought entering increment as 10 would give me 10 seconds for each volume, but it is about 1 second.

Probably it would be worth the effort to make a custom module that exposes the features you want. This would be like the Animator (but much simpler) and use the Sequences under the hood.

The playback speed is controlled by the frames per second set in the “Browsing” section rather than by the time stamp (many sequences will not have a time stamp or the time stamp will be unrelated to the rate at which it should be shown). If you set 0.1 fps that should show each frame for 10 seconds.

For the renaming, you need to check the “Rename” checkbox, then the proxy node will be renamed for each frame.

The other approach (right-click menu in subject hierarchy to apply same volume rendering settings to sibling nodes) is easy to do, too. You can create a custom subject hierarchy plugin that registers various context menu actions to make the feature conveniently accessible in the Data module.

The need for a custom module for browsing a large number of cases (for review, annotation, segmentation, etc.) comes up very often, so it could be nice to come up with a solution that was a bit easier than writing a script from scratch and provided more features (e.g., convenient GUI). You could add a feature request for it.

1 Like

0.1fps worked, thank you. But enabling rename had no effect on the volume label field. Still only displaying the name of the proxy node.

Sorry, I forgot that the part that gets renamed is the “frame” or other index equivalent, not the whole proxy node name. You can work around this by copying the name of the image volume over to the “frame” or “time” column in the Sequences module, Edit tab (the same place you manually entered the times earlier), and change the unit type from “numeric” to “text”. This may work OK for you, but it isn’t a perfect workaround for two reasons. First, the “index” is what is used to order the sequence items, so when you change from numeric to text indexing, the order of item display may change so that they are presented in alphabetical order rather than the order they were added to the sequence, which might be unexpected. Second, if the name is long, it will end up being truncated in the slice annotation and you won’t be able to see the whole name. You could address the first issue by prepending a string like ‘001_’ to your names to keep them in your original order, and you could partially address the second issue by keeping names short or making sure that the part you care about for distinguishing samples varies at the end of the name rather than the beginning.

Thanks. The moment you start modifying the objects names to make something to work, I think it is getting a little too hacky (and risky) for my taste.

It is good that I learned the sequences module, I can think of multiple ways it can be useful (without the need to display the object names). I think we will go down the route of syncing the rendering properties via subject hierarchy as I described above. That seems like a more robust solution.

1 Like

Using the index for labeling the the items is appropriate. The text mode is specifically implemented for this purpose.

I’ll modify the behavior so that when index is text then the input node’s name will be used as index.

If you want to display longer names then you can reduce the font size in slice view annotations.

1 Like

Bulk adding (and removing) of nodes to a sequence with automatic naming based on the original node name has been implemented. You can track its status in this pull request: