# How to create dynamic StylusToReference transform from NDI tracker data?

**URL:** <https://discourse.slicer.org/t/how-to-create-dynamic-stylustoreference-transform-from-ndi-tracker-data/44254>\
**Category:** Support\
**Tags:** registration, surgical-navigation\
**Created:** [August 29, 2025, 2:37pm UTC](https://discourse.slicer.org/t/how-to-create-dynamic-stylustoreference-transform-from-ndi-tracker-data/44254 "2025-08-29T14:37:25Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jonh\_wick](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jonh_wick/32/80926_2.png) [@jonh\_wick](https://discourse.slicer.org/u/jonh_wick)\
**Post date:** [August 29, 2025, 2:37pm UTC](https://discourse.slicer.org/t/how-to-create-dynamic-stylustoreference-transform-from-ndi-tracker-data/44254/1 "2025-08-29T14:37:25Z")

</div>

Hi all,大家好

I am working with an NDI tracker in 3D Slicer and I have two transforms provided dynamically by the tracker:

- **StylusToTracker**

- **ReferenceToTracker**

What I would like to obtain in real time is the transform:

- **StylusToReference**

I have read through the _SlicerIGT Tutorial U04_ materials, and I understand the general idea of transform concatenation. However, I am still not clear how to properly set this up in Slicer so that StylusToReference is updated dynamically during tracking.

Questions:

1. Should I use the “Add derived transform” function in PLUS or set up a Transform node hierarchy directly in Slicer?

2. If using Slicer, should I simply parent Stylus under Reference and then harden transforms, or is there a way to keep StylusToReference continuously updated without hardening?

3. Is there an example in the SlicerIGT extension that specifically shows how to compute a live StylusToReference from tracker transforms?

Any clarification or example pipeline would be greatly appreciated!

Thanks a lot!

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/0/1/0111f4ef292c00dd31e1b9bde44ca911ef664892.png)

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/d/3/d35ed8d173eae5efa5e8c3b55375ce07dd7693fb.png)

---

<div class="post-metadata">

**Author:** ![mikebind](https://avatars.discourse-cdn.com/v4/letter/m/71e660/32.png) [@mikebind](https://discourse.slicer.org/u/mikebind)\
**Post date:** [August 29, 2025, 6:28pm UTC](https://discourse.slicer.org/t/how-to-create-dynamic-stylustoreference-transform-from-ndi-tracker-data/44254/2 "2025-08-29T18:28:30Z")

</div>

I have had to set up something very similar to this. The way I solved it was to change the PlusServerLauncher xml configuration file so that it was transmitting TrackerToReference rather than ReferenceToTracker. Then, I set up a transform hierarchy with TrackerToReference as the parent of StylusToTracker. These two transforms are updated continuously from the tracker-streamed data, and combined, they provide the StylusToReference transformation. Any object (e.g. a stylus surface model) with is then placed under StylusToTracker transform will move correctly relative to the reference.
