IGT Module Development

CONTENTS

SLICER COMPONENTS

What is a module?
  • There are three types (for more information click here!):
    • CLI modules
      • Are written as an .xml document.
      • Used to wrap inputs and outputs to a pre-existing command line program.
    • Scripted modules
      • Are written in python.
      • Can be developed using a downloaded and installed 3D Slicer.
      • This is ideal for beginners and quick prototyping.
    • Loadable modules
      • Are written in C++.
      • Have to build your own 3D Slicer in order to develop, click here for build instructions.
        • i.e. compile 3D Slicer source code using CMake and operating specific build tools (Visual Studio, g++, XCode, etc...).
      • This is preferred by experienced developers and provides higher functionality.
What is an extension?
  • An extension in 3D Slicer is a collection of one or more modules that typically have some commonality between them.
  • The extensions that are available in the 3D Slicer extension manager have been approved by the 3D Slicer team.
What is the SlicerIGT extension?
  • The SlicerIGT extension contains many modules that provide functionality for performing various IGT tasks.
  • One main purpose is it allows users to interact with different real time data sources (eg. ultrasound stream or tracking data).
  • Real time data is currently captured and broadcasted to the PlusServer from the Plus library.
  • In 3D Slicer, this data is received through the OpenIGTLinkIF module within the IGT extension (Slicer version 4.8 and earlier) or SlicerOpenIGTLink extension (Slicer version 4.9 and later).
 

PLUSSERVER COMPONENTS

What is the PlusServer?
  • The Plus Server is a PlusLibrary application that captures data from connected hardware, and broadcasts it to clients that connect.
  • A server is a program that streams data from connected hardware such as an ultrasound system and/or tracking system.
    • This includes multiple transformations and only one image source per OpenIGTLink connection.
  • A client receives the data, which in this case is 3D Slicer.
  • The connection between the PlusServer and 3D Slicer is created through the OpenIGTLinkIF module.
  • The PlusServer can run on any computer that can access the data providing hardware. Some devices (ultrasounds, trackers, etc...) must be plugged in directly to the machine running Plus, and some devices are captured over a network.
What is the OpenIGTLinkIF module?
  • OpenIGTLinkIF is a module that provides communication between 3D Slicer and an OpenIGTLink server which can be running, for example, on a computer connected to an ultrasound scanner.
  • This module allows 3D Slicer to be a client and receive streaming data from external servers.
 

STREAMING IMAGES AND TRACKING DATA

To stream ultrasound images and tracking data, follow these steps
  • Create an XML configuration file that specifies all the connected hardware to capture data from. This configuration file will be used by the PlusServer in the following step. Click here to learn more!
  • Start PlusServerLauncher and connect to the configuration file you just created. Problems can be reported here!
  • Launch 3D Slicer
    • Make sure that the SlicerIGT and SlicerOpenIGTLink extensions are installed through the extension manager (steps shown in Examples and demonstrations).
  • Select the OpenIGTLinkIF module from the IGT category and follow the following steps:


Figure 1: (1) Load the OpenIGTLinkIF module (via the SlicerOpenIGTLink extension), (2) add an IGT connector by clicking on the +, (3) enter the IP address of the server (machine running PlusServer). Make sure the port number is the same as the port you specified in your configuration file, (4) select active to activate the connection and receive real-time data.


Figure 2: To view the ultrasound images in Slicer, go to the Volume Reslice Driver module (within the IGT category). Under "Driver" choose the name of the image as specified in the configuration file running on the PlusServer. "Mode:" controls how the image will be displayed in Slicer, which must be set to "Transverse".