Supose I see a volume in a 3D view. Once I have that view instance in hands, how can I know which volume is being shown there? (instance = qMRMLThreeDView or vtkMRMLViewNode)
Thank you very much!
Supose I see a volume in a 3D view. Once I have that view instance in hands, how can I know which volume is being shown there? (instance = qMRMLThreeDView or vtkMRMLViewNode)
Thank you very much!
I think you could use a function to send a ray in the camera direction and see with what volume it collides first.
I think it could be possible but I don’t know how
Thanks, Mauro. I believe your solution would give me some results, though I think it would not meet my needs well. I will try to make myself more clear:
If there is one or more volumes visible in the view, even if my camera is not pointing to them, I would like be able to list their IDs.
Ok. Then you just need to traverse all displayNodes of those volumes and
volumeDisplayNode = volumeNode.GetDisplayNode()
viewNodesIDs = volumeDisplayNode.GetViewNodeIDs()
visibility = False
for i in range(len(viewNodesIDs))
visibility = volumeDisplayNode.GetVisibility() and volumeDisplayNode.GetViewNodeIDs()[i] == 'myParticularViewID'
if visibility:
break
if visibility:
myListOfVisibleVolumesIDs.append(volumeNode.GetID())
to get ‘myParticularViewID’ just use GetID() on the viewNodeThatYouHave.
I think that should work.
I think you walk in a good way. The issue is that volumeDisplayNode.GetViewNodeIDs()
gives me an empty tuple (()
) (though in Slicer I definitely see the Red slice view showing my node). I saw in the documentation that it means “every view”. So I would advise people to list all 3D and slice views if they want to have control over the volume views of interest.
Also, thank you very much, @mau_igna_06 !