Sending fiducial points via OpenIGTLinkIF

(Chai Chun Lok) #1

Hi, I have some questions regarding “OpenIGTLinkIF”. I can see that it can used to send linear transforms in Slicer with an OpenIGTLink example (TrackerServer). However, I found that the I/O configuration can only choose linear transform only. When I try to run other examples from OpenIGTLink (PointServer and PointClient), but Slicer can’t receive any point in the form of PointMessage even the connector status is ‘ON’. Is there a way to send fiducial points into Slicer similar to the stated example(TrackerServer)?


(Andras Lasso) #2

I don’t think sending of markup points is currently supported (@Sunderlandkyl can you confirm)?

It should not be difficult to add (probably a few days of work), would you be interested to contribute? We can help you to get started.


(Chai Chun Lok) #3

It would be nice if I could add this support. I’m still a novice at programming. Is it OK?


(Andras Lasso) #4

We don’t have immediate plans to implement this, so if you want this to happen soon then you would need to contribute in some way. You can submit an issue to SlicerOpenIGTLink extension’s issue tracker to record this request and follow its status.


(Chai Chun Lok) #5

I will submit an issue about this. Thanks for the information!


(Andras Lasso) #6

For reference, here is the GitHub issue tracking this feature request:


(Ong Zhen Yu) #7

Hi Sir,

We had successfully send the transform files (.h5) via IGTLink and we are working on converting those transform nodes into fiducial nodes. I had successfully convert one transform node to fiducial node using coding below:

myNode = slicer.util.getNode('Point1')
transformMatrix = vtk.vtkMatrix4x4()
x = transformMatrix.GetElement(0,3)
y = transformMatrix.GetElement(1,3)
z = transformMatrix.GetElement(2,3)
slicer.modules.markups.logic().AddFiducial(x, y, z)

However, we have 8 transform nodes (Point 1, Point2, Point3, … , Point8) so i am trying to develop a looping coding to convert all transform nodes into fiducial nodes in one go. May I know how can we do this? I’ve tried using ‘for’ loop together with myNode = slicer.util.getNode(‘Point’,n) where n varies from 1 to 8. But this cannot work. Thank you very much


(Andras Lasso) #8

You can use 'Point'+str(n) or 'Point%d' % n to append a number to the end of a string and a number.


(Ong Zhen Yu) #9

This had worked well. Thank you very much!

1 Like