X, Y, Z Coordinates and Updated 3-D MPR Capability

I read through the wiki pages, but I still had a few unanswered questions.
First, is there a way to indicate the x, y, z-axis coordinates when freely moving the cursor around the DICOM image. This feature is available in OsiriX.
Secondly, is there a feature that allows updated 3-D MPR ability similarly to Osirix? There is a curved MPR view in 3-D slicer, but when one orientation is adjusted, the other two are are stagnant

It is shown in the DataProbe widget, in the bottom-left when the mouse pointer is over the image.

There are many ways how to set up MPR slice orientation, one of them is using Reformat module. Let us know if you need different ways to set up your views.

Hello,

Sorry to bump up an old thread but I was trying to look up answers for some coordinate questions as well.
I have a 3D Mesh and when I click on a point on the Slice View (say Axial orientation for example), I’d like to pinpoint the exact point/cell in the mesh and get the point/cell data. In order to do so, I have tried using vtkDataSet::FindPoint(double x, doubly y, double z). My question is which values should I pass to these parameters? Or is there a better way of doing this that I have not known? I was using global xyz obtained from crosshair (GetCursorPositionXYZ) but it does not seem correct since the z-value for all Axial, Sagittal and Coronal are always 0.

Thanks!

Is there a way to enable adjustment of plane angles for MPR using crosshairs as in Radiant dicom viewer? It helps a lot with orienting myself within the image slices, but unfortunately I could not find such a feature on the Reformat module.

Thank you for your help.

@ghnguyen: You may want to also look at vtkCellLocator to find the cell id and points.

For the point, you can use something like this:

slicer.mrmlScene.GetNodesByClass('vtkMRMLCrosshairNode').GetItemAsObject(0).GetCrosshairRAS()

it will update as you hold down shift and move the mouse in the 2D/3D views.

Hi Steve,

I did try using an observer on the crosshair similar to your suggestion. For the vtkCellLocator, we would still need the xyz coordinates of the point right? So my original question would be do I use the CrosshairRAS or the CrosshairXYZ there? It does seem like the RAS would be the “global” coordinates here. Sorry I am confused by the wording of the documentation and need some confirmation.

Right, if you are looking for the closest cell/point in the vtkPolyData you get from a model node, then you want to use RAS (see https://www.slicer.org/wiki/Coordinate_systems).

The other thing to keep in mind is that models can be transformed, so you need to handle that case you would need to transform the crosshair position through the model’s transforms first (let us know if you need pointers on that).

1 Like

Huge thanks Steve. As for transforms, I do have my mesh transformed at module startup (I am making a custom module), so do I need to transform the crosshair node too? It seems the slice widget can still catch the mesh and shows the slice. Are you saying the coordinates might be wrong or what should I be careful about?

Yes, if you have a transform you should be sure to take that into account. The easiest would be to harden the model so that all the vertices of the polydata are in RAS space. The other, more general, option is to apply the inverse transform to the RAS coordinate of the crosshair so that it’s moved into the local space of the model. You can use TransformPointFromWorld for this.

1 Like