<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.na-mic.org/w/index.php?action=history&amp;feed=atom&amp;title=Code_from_Jay_Jagadeesan_for_OgenIGTLink</id>
	<title>Code from Jay Jagadeesan for OgenIGTLink - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.na-mic.org/w/index.php?action=history&amp;feed=atom&amp;title=Code_from_Jay_Jagadeesan_for_OgenIGTLink"/>
	<link rel="alternate" type="text/html" href="https://www.na-mic.org/w/index.php?title=Code_from_Jay_Jagadeesan_for_OgenIGTLink&amp;action=history"/>
	<updated>2026-04-09T22:32:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.na-mic.org/w/index.php?title=Code_from_Jay_Jagadeesan_for_OgenIGTLink&amp;diff=93169&amp;oldid=prev</id>
		<title>Dblack at 14:48, 20 June 2016</title>
		<link rel="alternate" type="text/html" href="https://www.na-mic.org/w/index.php?title=Code_from_Jay_Jagadeesan_for_OgenIGTLink&amp;diff=93169&amp;oldid=prev"/>
		<updated>2016-06-20T14:48:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 14:48, 20 June 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/*=========================================================================&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/*=========================================================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l652&quot; &gt;Line 652:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 653:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#endif //OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#endif //OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dblack</name></author>
		
	</entry>
	<entry>
		<id>https://www.na-mic.org/w/index.php?title=Code_from_Jay_Jagadeesan_for_OgenIGTLink&amp;diff=93139&amp;oldid=prev</id>
		<title>Dblack: Created page with &quot;/*=========================================================================    Program:   Open IGT Link -- Example for Data Receiving Client Program   Module:    $RCSfile: $...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.na-mic.org/w/index.php?title=Code_from_Jay_Jagadeesan_for_OgenIGTLink&amp;diff=93139&amp;oldid=prev"/>
		<updated>2016-06-20T13:36:43Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;/*=========================================================================    Program:   Open IGT Link -- Example for Data Receiving Client Program   Module:    $RCSfile: $...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*=========================================================================&lt;br /&gt;
&lt;br /&gt;
  Program:   Open IGT Link -- Example for Data Receiving Client Program&lt;br /&gt;
  Module:    $RCSfile: $&lt;br /&gt;
  Language:  C++&lt;br /&gt;
  Date:      $Date: $&lt;br /&gt;
  Version:   $Revision: $&lt;br /&gt;
&lt;br /&gt;
  Copyright (c) Insight Software Consortium. All rights reserved.&lt;br /&gt;
&lt;br /&gt;
  This software is distributed WITHOUT ANY WARRANTY; without even&lt;br /&gt;
  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR&lt;br /&gt;
  PURPOSE.  See the above copyright notices for more information.&lt;br /&gt;
&lt;br /&gt;
=========================================================================*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;cstring&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Sound input files&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;lo/lo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;igtlOSUtil.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlMessageHeader.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlTransformMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlPositionMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlImageMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlClientSocket.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlStatusMessage.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#if OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;br /&gt;
#include &amp;quot;igtlPointMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlTrajectoryMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlStringMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlTrackingDataMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlQuaternionTrackingDataMessage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;igtlCapabilityMessage.h&amp;quot;&lt;br /&gt;
#endif // OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;br /&gt;
&lt;br /&gt;
int ReceiveTransform(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header, igtl::Matrix4x4 transformMatrix);&lt;br /&gt;
int ReceivePosition(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
int ReceiveImage(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
int ReceiveStatus(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
void ObtainPosOrFromTx(igtl::Matrix4x4 txMatrix, double pos[3], double orient[3]);&lt;br /&gt;
&lt;br /&gt;
#if OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;br /&gt;
  int ReceivePoint(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
  int ReceiveTrajectory(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
  int ReceiveString(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
  int ReceiveTrackingData(igtl::ClientSocket::Pointer&amp;amp; socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
  int ReceiveQuaternionTrackingData(igtl::ClientSocket::Pointer&amp;amp; socket, igtl::MessageHeader::Pointer&amp;amp; header);&lt;br /&gt;
  int ReceiveCapability(igtl::Socket * socket, igtl::MessageHeader * header);&lt;br /&gt;
#endif //OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Sound related stuff&lt;br /&gt;
const char testdata[6] = &amp;quot;ABCDE&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
  //------------------------------------------------------------  &lt;br /&gt;
  // Sound related stuff - initialization&lt;br /&gt;
  //------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
  /* build a blob object from some data */&lt;br /&gt;
  lo_blob btest = lo_blob_new(sizeof(testdata), testdata);&lt;br /&gt;
&lt;br /&gt;
  /* an address to send messages to. sometimes it is better to let the server&lt;br /&gt;
   * pick a port number for you by passing NULL as the last argument */&lt;br /&gt;
  //    lo_address t = lo_address_new_from_url( &amp;quot;osc.unix://localhost/tmp/mysocket&amp;quot; );&lt;br /&gt;
  lo_address t = lo_address_new(&amp;quot;169.123.1.5&amp;quot;, &amp;quot;7400&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
  /* send a message to /a/b/c/d with a mixtrure of float and string&lt;br /&gt;
   * arguments */&lt;br /&gt;
  //lo_send(t, &amp;quot;/a/b/c/d&amp;quot;, &amp;quot;sfsff&amp;quot;, &amp;quot;one&amp;quot;, 0.12345678f, &amp;quot;three&amp;quot;,&lt;br /&gt;
  //              -0.00000023001f, 1.0);&lt;br /&gt;
&lt;br /&gt;
  /* send a 'blob' object to /a/b/c/d */&lt;br /&gt;
  //lo_send(t, &amp;quot;/a/b/c/d&amp;quot;, &amp;quot;b&amp;quot;, btest);&lt;br /&gt;
&lt;br /&gt;
  /* send a jamin scene change instruction with a 32bit integer argument */&lt;br /&gt;
  //lo_send(t, &amp;quot;/jamin/scene&amp;quot;, &amp;quot;i&amp;quot;, 3);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
  //------------------------------------------------------------&lt;br /&gt;
  // Parse Arguments&lt;br /&gt;
&lt;br /&gt;
  if (argc != 3) // check number of arguments&lt;br /&gt;
    {&lt;br /&gt;
    // If not correct, print usage&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;    &amp;lt;hostname&amp;gt; : IP or host name&amp;quot;                    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;    &amp;lt;port&amp;gt;     : Port # (18944 in Slicer default)&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    exit(0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  char*  hostname = argv[1];&lt;br /&gt;
  int    port     = atoi(argv[2]);&lt;br /&gt;
&lt;br /&gt;
  //------------------------------------------------------------&lt;br /&gt;
  // Establish Connection&lt;br /&gt;
&lt;br /&gt;
  igtl::ClientSocket::Pointer socket;&lt;br /&gt;
  socket = igtl::ClientSocket::New();&lt;br /&gt;
  int r = socket-&amp;gt;ConnectToServer(hostname, port);&lt;br /&gt;
&lt;br /&gt;
  if (r != 0)&lt;br /&gt;
    {&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Cannot connect to the server.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    exit(0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  //------------------------------------------------------------&lt;br /&gt;
  // Create a message buffer to receive header&lt;br /&gt;
  igtl::MessageHeader::Pointer headerMsg;&lt;br /&gt;
  headerMsg = igtl::MessageHeader::New();&lt;br /&gt;
  &lt;br /&gt;
  //------------------------------------------------------------&lt;br /&gt;
  // Allocate a time stamp &lt;br /&gt;
  igtl::TimeStamp::Pointer ts;&lt;br /&gt;
  ts = igtl::TimeStamp::New();&lt;br /&gt;
    &lt;br /&gt;
  double pos[3], orient[3];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
    {&lt;br /&gt;
    //------------------------------------------------------------&lt;br /&gt;
    // loop&lt;br /&gt;
    //for (int i = 0; i &amp;lt; 100; i ++)&lt;br /&gt;
      {&lt;br /&gt;
      &lt;br /&gt;
      // Initialize receive buffer&lt;br /&gt;
      headerMsg-&amp;gt;InitPack();&lt;br /&gt;
      &lt;br /&gt;
      // Receive generic header from the socket&lt;br /&gt;
      int r = socket-&amp;gt;Receive(headerMsg-&amp;gt;GetPackPointer(), headerMsg-&amp;gt;GetPackSize());&lt;br /&gt;
      if (r == 0)&lt;br /&gt;
        {&lt;br /&gt;
        socket-&amp;gt;CloseSocket();&lt;br /&gt;
        exit(0);&lt;br /&gt;
        }&lt;br /&gt;
      if (r != headerMsg-&amp;gt;GetPackSize())&lt;br /&gt;
        {&lt;br /&gt;
        continue;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
      // Deserialize the header&lt;br /&gt;
      headerMsg-&amp;gt;Unpack();&lt;br /&gt;
&lt;br /&gt;
      // Get time stamp&lt;br /&gt;
      igtlUint32 sec;&lt;br /&gt;
      igtlUint32 nanosec;&lt;br /&gt;
&lt;br /&gt;
      headerMsg-&amp;gt;GetTimeStamp(ts);&lt;br /&gt;
      ts-&amp;gt;GetTimeStamp(&amp;amp;sec, &amp;amp;nanosec);&lt;br /&gt;
      igtl::Matrix4x4 transformMatrix;&lt;br /&gt;
&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;Time stamp: &amp;quot;&lt;br /&gt;
                &amp;lt;&amp;lt; sec &amp;lt;&amp;lt; &amp;quot;.&amp;quot; &amp;lt;&amp;lt; std::setw(9) &amp;lt;&amp;lt; std::setfill('0') &lt;br /&gt;
                &amp;lt;&amp;lt; nanosec &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      &lt;br /&gt;
      // Check data type and receive data body&lt;br /&gt;
      if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;TRANSFORM&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveTransform(socket, headerMsg, transformMatrix);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;POSITION&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
          ReceivePosition(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;IMAGE&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveImage(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;STATUS&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveStatus(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
#if OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;POINT&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceivePoint(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;TRAJ&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveTrajectory(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;STRING&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveString(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;TDATA&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveTrackingData(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;QTDATA&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveQuaternionTrackingData(socket, headerMsg);&lt;br /&gt;
        }&lt;br /&gt;
      else if (strcmp(headerMsg-&amp;gt;GetDeviceType(), &amp;quot;CAPABILITY&amp;quot;) == 0)&lt;br /&gt;
        {&lt;br /&gt;
        ReceiveCapability(socket, headerMsg);;&lt;br /&gt;
        }&lt;br /&gt;
#endif //OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;br /&gt;
      else&lt;br /&gt;
        {&lt;br /&gt;
        std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving : &amp;quot; &amp;lt;&amp;lt; headerMsg-&amp;gt;GetDeviceType() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
        socket-&amp;gt;Skip(headerMsg-&amp;gt;GetBodySizeToRead(), 0);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Obtaining the position and orientation information&lt;br /&gt;
        ObtainPosOrFromTx(transformMatrix, pos, orient);&lt;br /&gt;
          &lt;br /&gt;
        // Sending the information to the audiolink&lt;br /&gt;
        /* send a jamin scene change instruction with a 32bit integer argument */&lt;br /&gt;
        lo_send(t, &amp;quot;/dumpOSC/Distance&amp;quot;, &amp;quot;i&amp;quot;, int(pos[0]));&lt;br /&gt;
        //lo_send(t, &amp;quot;/jamin/scene&amp;quot;, &amp;quot;i&amp;quot;, int(pos[1]));&lt;br /&gt;
        //lo_send(t, &amp;quot;/jamin/scene&amp;quot;, &amp;quot;i&amp;quot;, int(pos[2]));&lt;br /&gt;
        &lt;br /&gt;
        lo_send(t, &amp;quot;/dumpOSC/Alpha&amp;quot;, &amp;quot;i&amp;quot;, int((pos[1]*180/3.1418)*100.0/90.0 )); //Elevation&lt;br /&gt;
        lo_send(t, &amp;quot;/dumpOSC/Beta&amp;quot;, &amp;quot;i&amp;quot;, int((pos[2]*180/3.1418)*100.0/90.0) ); // Azimuth&lt;br /&gt;
        //lo_send(t, &amp;quot;/jamin/scene&amp;quot;, &amp;quot;i&amp;quot;, int(orient[2]*180/3.1418));&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        //std::cout &amp;lt;&amp;lt; &amp;quot;Transform position = &amp;quot; &amp;lt;&amp;lt; pos[0] &amp;lt;&amp;lt; &amp;quot;  &amp;quot; &amp;lt;&amp;lt; pos[1] &amp;lt;&amp;lt; &amp;quot;  &amp;quot; &amp;lt;&amp;lt; pos[2] &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
          std::cout &amp;lt;&amp;lt; &amp;quot;Transform orientation = &amp;quot; &amp;lt;&amp;lt; orient[0] &amp;lt;&amp;lt; &amp;quot;  &amp;quot; &amp;lt;&amp;lt; orient[1] &amp;lt;&amp;lt; &amp;quot;  &amp;quot; &amp;lt;&amp;lt; orient[2] &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  //------------------------------------------------------------&lt;br /&gt;
  // Close connection (The example code never reaches this section ...)&lt;br /&gt;
  &lt;br /&gt;
  socket-&amp;gt;CloseSocket();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int ReceiveTransform(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header, igtl::Matrix4x4 transformMatrix)&lt;br /&gt;
{&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving TRANSFORM data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  &lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::TransformMessage::Pointer transMsg;&lt;br /&gt;
  transMsg = igtl::TransformMessage::New();&lt;br /&gt;
  transMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  transMsg-&amp;gt;AllocatePack();&lt;br /&gt;
  &lt;br /&gt;
  // Receive transform data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(transMsg-&amp;gt;GetPackBodyPointer(), transMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
  &lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = transMsg-&amp;gt;Unpack(1);&lt;br /&gt;
  &lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    // Retrive the transform data&lt;br /&gt;
    igtl::Matrix4x4 matrix;&lt;br /&gt;
    transMsg-&amp;gt;GetMatrix(matrix);&lt;br /&gt;
    igtl::PrintMatrix(matrix);&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++)&lt;br /&gt;
    {&lt;br /&gt;
        for (int j =0; j &amp;lt; 4; j++)&lt;br /&gt;
        {&lt;br /&gt;
            transformMatrix[i][j] = matrix[i][j];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ObtainPosOrFromTx(igtl::Matrix4x4 txMatrix, double pos[3], double orient[3])&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    pos[0] = txMatrix[0][3];&lt;br /&gt;
    pos[1] = txMatrix[1][3];&lt;br /&gt;
    pos[2] = txMatrix[2][3];&lt;br /&gt;
&lt;br /&gt;
    orient[1] = atan2(-txMatrix[2][0],pow(pow(txMatrix[0][0],2)+pow(txMatrix[1][0],2),0.5) ); //beta&lt;br /&gt;
    orient[2] = atan2(txMatrix[2][1]/cos(orient[1]),txMatrix[2][2]/cos(orient[1]) ); // gamma&lt;br /&gt;
    orient[0] = atan2(txMatrix[1][0]/cos(orient[1]),txMatrix[0][0]/cos(orient[1]) );  //alpha&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int ReceivePosition(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving POSITION data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  &lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::PositionMessage::Pointer positionMsg;&lt;br /&gt;
  positionMsg = igtl::PositionMessage::New();&lt;br /&gt;
  positionMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  positionMsg-&amp;gt;AllocatePack();&lt;br /&gt;
  &lt;br /&gt;
  // Receive position position data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(positionMsg-&amp;gt;GetPackBodyPointer(), positionMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
  &lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = positionMsg-&amp;gt;Unpack(1);&lt;br /&gt;
  &lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    // Retrive the transform data&lt;br /&gt;
    float position[3];&lt;br /&gt;
    float quaternion[4];&lt;br /&gt;
&lt;br /&gt;
    positionMsg-&amp;gt;GetPosition(position);&lt;br /&gt;
    positionMsg-&amp;gt;GetQuaternion(quaternion);&lt;br /&gt;
&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;position   = (&amp;quot; &amp;lt;&amp;lt; position[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; position[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; position[2] &amp;lt;&amp;lt; &amp;quot;)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;quaternion = (&amp;quot; &amp;lt;&amp;lt; quaternion[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; quaternion[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot;&lt;br /&gt;
              &amp;lt;&amp;lt; quaternion[2] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; quaternion[3] &amp;lt;&amp;lt; &amp;quot;)&amp;quot; &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int ReceiveImage(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving IMAGE data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::ImageMessage::Pointer imgMsg;&lt;br /&gt;
  imgMsg = igtl::ImageMessage::New();&lt;br /&gt;
  imgMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  imgMsg-&amp;gt;AllocatePack();&lt;br /&gt;
  &lt;br /&gt;
  // Receive transform data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(imgMsg-&amp;gt;GetPackBodyPointer(), imgMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
  &lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = imgMsg-&amp;gt;Unpack(1);&lt;br /&gt;
  &lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    // Retrive the image data&lt;br /&gt;
    int   size[3];          // image dimension&lt;br /&gt;
    float spacing[3];       // spacing (mm/pixel)&lt;br /&gt;
    int   svsize[3];        // sub-volume size&lt;br /&gt;
    int   svoffset[3];      // sub-volume offset&lt;br /&gt;
    int   scalarType;       // scalar type&lt;br /&gt;
&lt;br /&gt;
    scalarType = imgMsg-&amp;gt;GetScalarType();&lt;br /&gt;
    imgMsg-&amp;gt;GetDimensions(size);&lt;br /&gt;
    imgMsg-&amp;gt;GetSpacing(spacing);&lt;br /&gt;
    imgMsg-&amp;gt;GetSubVolume(svsize, svoffset);&lt;br /&gt;
&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Device Name           : &amp;quot; &amp;lt;&amp;lt; imgMsg-&amp;gt;GetDeviceName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Scalar Type           : &amp;quot; &amp;lt;&amp;lt; scalarType &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Dimensions            : (&amp;quot;&lt;br /&gt;
              &amp;lt;&amp;lt; size[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; size[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; size[2] &amp;lt;&amp;lt; &amp;quot;)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Spacing               : (&amp;quot;&lt;br /&gt;
              &amp;lt;&amp;lt; spacing[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; spacing[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; spacing[2] &amp;lt;&amp;lt; &amp;quot;)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Sub-Volume dimensions : (&amp;quot;&lt;br /&gt;
              &amp;lt;&amp;lt; svsize[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; svsize[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; svsize[2] &amp;lt;&amp;lt; &amp;quot;)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Sub-Volume offset     : (&amp;quot;&lt;br /&gt;
              &amp;lt;&amp;lt; svoffset[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; svoffset[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; svoffset[2] &amp;lt;&amp;lt; &amp;quot;)&amp;quot; &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int ReceiveStatus(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving STATUS data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::StatusMessage::Pointer statusMsg;&lt;br /&gt;
  statusMsg = igtl::StatusMessage::New();&lt;br /&gt;
  statusMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  statusMsg-&amp;gt;AllocatePack();&lt;br /&gt;
  &lt;br /&gt;
  // Receive transform data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(statusMsg-&amp;gt;GetPackBodyPointer(), statusMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
  &lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = statusMsg-&amp;gt;Unpack(1);&lt;br /&gt;
  &lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;========== STATUS ==========&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot; Code      : &amp;quot; &amp;lt;&amp;lt; statusMsg-&amp;gt;GetCode() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot; SubCode   : &amp;quot; &amp;lt;&amp;lt; statusMsg-&amp;gt;GetSubCode() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot; Error Name: &amp;quot; &amp;lt;&amp;lt; statusMsg-&amp;gt;GetErrorName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot; Status    : &amp;quot; &amp;lt;&amp;lt; statusMsg-&amp;gt;GetStatusString() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;============================&amp;quot; &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;br /&gt;
int ReceivePoint(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving POINT data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::PointMessage::Pointer pointMsg;&lt;br /&gt;
  pointMsg = igtl::PointMessage::New();&lt;br /&gt;
  pointMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  pointMsg-&amp;gt;AllocatePack();&lt;br /&gt;
&lt;br /&gt;
  // Receive transform data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(pointMsg-&amp;gt;GetPackBodyPointer(), pointMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
&lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = pointMsg-&amp;gt;Unpack(1);&lt;br /&gt;
&lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    int nElements = pointMsg-&amp;gt;GetNumberOfPointElement();&lt;br /&gt;
    for (int i = 0; i &amp;lt; nElements; i ++)&lt;br /&gt;
      {&lt;br /&gt;
      igtl::PointElement::Pointer pointElement;&lt;br /&gt;
      pointMsg-&amp;gt;GetPointElement(i, pointElement);&lt;br /&gt;
&lt;br /&gt;
      igtlUint8 rgba[4];&lt;br /&gt;
      pointElement-&amp;gt;GetRGBA(rgba);&lt;br /&gt;
&lt;br /&gt;
      igtlFloat32 pos[3];&lt;br /&gt;
      pointElement-&amp;gt;GetPosition(pos);&lt;br /&gt;
&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;========== Element #&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; ==========&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Name      : &amp;quot; &amp;lt;&amp;lt; pointElement-&amp;gt;GetName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; GroupName : &amp;quot; &amp;lt;&amp;lt; pointElement-&amp;gt;GetGroupName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; RGBA      : ( &amp;quot; &amp;lt;&amp;lt; (int)rgba[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; (int)rgba[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; (int)rgba[2] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; (int)rgba[3] &amp;lt;&amp;lt; &amp;quot; )&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Position  : ( &amp;quot; &amp;lt;&amp;lt; std::fixed &amp;lt;&amp;lt; pos[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; pos[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; pos[2] &amp;lt;&amp;lt; &amp;quot; )&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Radius    : &amp;quot; &amp;lt;&amp;lt; std::fixed &amp;lt;&amp;lt; pointElement-&amp;gt;GetRadius() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Owner     : &amp;quot; &amp;lt;&amp;lt; pointElement-&amp;gt;GetOwner() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;================================&amp;quot; &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int ReceiveTrajectory(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving TRAJECTORY data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::TrajectoryMessage::Pointer trajectoryMsg;&lt;br /&gt;
  trajectoryMsg = igtl::TrajectoryMessage::New();&lt;br /&gt;
  trajectoryMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  trajectoryMsg-&amp;gt;AllocatePack();&lt;br /&gt;
&lt;br /&gt;
  // Receive transform data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(trajectoryMsg-&amp;gt;GetPackBodyPointer(), trajectoryMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
&lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = trajectoryMsg-&amp;gt;Unpack(1);&lt;br /&gt;
&lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    int nElements = trajectoryMsg-&amp;gt;GetNumberOfTrajectoryElement();&lt;br /&gt;
    for (int i = 0; i &amp;lt; nElements; i ++)&lt;br /&gt;
      {&lt;br /&gt;
      igtl::TrajectoryElement::Pointer trajectoryElement;&lt;br /&gt;
      trajectoryMsg-&amp;gt;GetTrajectoryElement(i, trajectoryElement);&lt;br /&gt;
&lt;br /&gt;
      igtlUint8 rgba[4];&lt;br /&gt;
      trajectoryElement-&amp;gt;GetRGBA(rgba);&lt;br /&gt;
&lt;br /&gt;
      igtlFloat32 entry[3];&lt;br /&gt;
      igtlFloat32 target[3];&lt;br /&gt;
      trajectoryElement-&amp;gt;GetEntryPosition(entry);&lt;br /&gt;
      trajectoryElement-&amp;gt;GetTargetPosition(target);&lt;br /&gt;
&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;========== Element #&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; ==========&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Name      : &amp;quot; &amp;lt;&amp;lt; trajectoryElement-&amp;gt;GetName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; GroupName : &amp;quot; &amp;lt;&amp;lt; trajectoryElement-&amp;gt;GetGroupName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; RGBA      : ( &amp;quot; &amp;lt;&amp;lt; (int)rgba[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; (int)rgba[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; (int)rgba[2] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; (int)rgba[3] &amp;lt;&amp;lt; &amp;quot; )&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Entry Pt  : ( &amp;quot; &amp;lt;&amp;lt; std::fixed &amp;lt;&amp;lt; entry[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; entry[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; entry[2] &amp;lt;&amp;lt; &amp;quot; )&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Target Pt : ( &amp;quot; &amp;lt;&amp;lt; std::fixed &amp;lt;&amp;lt; target[0] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; target[1] &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; target[2] &amp;lt;&amp;lt; &amp;quot; )&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Radius    : &amp;quot; &amp;lt;&amp;lt; std::fixed &amp;lt;&amp;lt; trajectoryElement-&amp;gt;GetRadius() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Owner     : &amp;quot; &amp;lt;&amp;lt; trajectoryElement-&amp;gt;GetOwner() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;================================&amp;quot; &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int ReceiveString(igtl::Socket * socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving STRING data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::StringMessage::Pointer stringMsg;&lt;br /&gt;
  stringMsg = igtl::StringMessage::New();&lt;br /&gt;
  stringMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  stringMsg-&amp;gt;AllocatePack();&lt;br /&gt;
&lt;br /&gt;
  // Receive transform data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(stringMsg-&amp;gt;GetPackBodyPointer(), stringMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
&lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = stringMsg-&amp;gt;Unpack(1);&lt;br /&gt;
&lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; &amp;quot;Encoding: &amp;quot; &amp;lt;&amp;lt; stringMsg-&amp;gt;GetEncoding() &amp;lt;&amp;lt; &amp;quot;; &amp;quot;&lt;br /&gt;
              &amp;lt;&amp;lt; &amp;quot;String: &amp;quot; &amp;lt;&amp;lt; stringMsg-&amp;gt;GetString() &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int ReceiveTrackingData(igtl::ClientSocket::Pointer&amp;amp; socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving TDATA data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  &lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::TrackingDataMessage::Pointer trackingData;&lt;br /&gt;
  trackingData = igtl::TrackingDataMessage::New();&lt;br /&gt;
  trackingData-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  trackingData-&amp;gt;AllocatePack();&lt;br /&gt;
&lt;br /&gt;
  // Receive body from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(trackingData-&amp;gt;GetPackBodyPointer(), trackingData-&amp;gt;GetPackBodySize());&lt;br /&gt;
&lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = trackingData-&amp;gt;Unpack(1);&lt;br /&gt;
&lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    int nElements = trackingData-&amp;gt;GetNumberOfTrackingDataElements();&lt;br /&gt;
    for (int i = 0; i &amp;lt; nElements; i ++)&lt;br /&gt;
      {&lt;br /&gt;
      igtl::TrackingDataElement::Pointer trackingElement;&lt;br /&gt;
      trackingData-&amp;gt;GetTrackingDataElement(i, trackingElement);&lt;br /&gt;
&lt;br /&gt;
      igtl::Matrix4x4 matrix;&lt;br /&gt;
      trackingElement-&amp;gt;GetMatrix(matrix);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;========== Element #&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; ==========&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Name       : &amp;quot; &amp;lt;&amp;lt; trackingElement-&amp;gt;GetName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Type       : &amp;quot; &amp;lt;&amp;lt; (int) trackingElement-&amp;gt;GetType() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Matrix : &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      igtl::PrintMatrix(matrix);&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;================================&amp;quot; &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      }&lt;br /&gt;
    return 1;&lt;br /&gt;
    }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int ReceiveQuaternionTrackingData(igtl::ClientSocket::Pointer&amp;amp; socket, igtl::MessageHeader::Pointer&amp;amp; header)&lt;br /&gt;
{&lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving QTDATA data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  &lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::QuaternionTrackingDataMessage::Pointer quaternionTrackingData;&lt;br /&gt;
  quaternionTrackingData = igtl::QuaternionTrackingDataMessage::New();&lt;br /&gt;
  quaternionTrackingData-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  quaternionTrackingData-&amp;gt;AllocatePack();&lt;br /&gt;
&lt;br /&gt;
  // Receive body from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(quaternionTrackingData-&amp;gt;GetPackBodyPointer(), quaternionTrackingData-&amp;gt;GetPackBodySize());&lt;br /&gt;
&lt;br /&gt;
  // Deserialize position and quaternion (orientation) data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = quaternionTrackingData-&amp;gt;Unpack(1);&lt;br /&gt;
&lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    int nElements = quaternionTrackingData-&amp;gt;GetNumberOfQuaternionTrackingDataElements();&lt;br /&gt;
    for (int i = 0; i &amp;lt; nElements; i ++)&lt;br /&gt;
      {&lt;br /&gt;
      igtl::QuaternionTrackingDataElement::Pointer quaternionTrackingElement;&lt;br /&gt;
      quaternionTrackingData-&amp;gt;GetQuaternionTrackingDataElement(i, quaternionTrackingElement);&lt;br /&gt;
&lt;br /&gt;
      float position[3];&lt;br /&gt;
      float quaternion[4];&lt;br /&gt;
      quaternionTrackingElement-&amp;gt;GetPosition(position);&lt;br /&gt;
      quaternionTrackingElement-&amp;gt;GetQuaternion(quaternion);&lt;br /&gt;
&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;========== Element #&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; ==========&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Name       : &amp;quot; &amp;lt;&amp;lt; quaternionTrackingElement-&amp;gt;GetName() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Type       : &amp;quot; &amp;lt;&amp;lt; (int) quaternionTrackingElement-&amp;gt;GetType() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Position   : &amp;quot;; igtl::PrintVector3(position);&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot; Quaternion : &amp;quot;; igtl::PrintVector4(quaternion);&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;================================&amp;quot; &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      }&lt;br /&gt;
    return 1;&lt;br /&gt;
    }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int ReceiveCapability(igtl::Socket * socket, igtl::MessageHeader * header)&lt;br /&gt;
{&lt;br /&gt;
  &lt;br /&gt;
  std::cerr &amp;lt;&amp;lt; &amp;quot;Receiving CAPABILITY data type.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
  // Create a message buffer to receive transform data&lt;br /&gt;
  igtl::CapabilityMessage::Pointer capabilMsg;&lt;br /&gt;
  capabilMsg = igtl::CapabilityMessage::New();&lt;br /&gt;
  capabilMsg-&amp;gt;SetMessageHeader(header);&lt;br /&gt;
  capabilMsg-&amp;gt;AllocatePack();&lt;br /&gt;
&lt;br /&gt;
  // Receive transform data from the socket&lt;br /&gt;
  socket-&amp;gt;Receive(capabilMsg-&amp;gt;GetPackBodyPointer(), capabilMsg-&amp;gt;GetPackBodySize());&lt;br /&gt;
&lt;br /&gt;
  // Deserialize the transform data&lt;br /&gt;
  // If you want to skip CRC check, call Unpack() without argument.&lt;br /&gt;
  int c = capabilMsg-&amp;gt;Unpack(1);&lt;br /&gt;
  &lt;br /&gt;
  if (c &amp;amp; igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK&lt;br /&gt;
    {&lt;br /&gt;
    int nTypes = capabilMsg-&amp;gt;GetNumberOfTypes();&lt;br /&gt;
    for (int i = 0; i &amp;lt; nTypes; i ++)&lt;br /&gt;
      {&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; &amp;quot;Typename #&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot;: &amp;quot; &amp;lt;&amp;lt; capabilMsg-&amp;gt;GetType(i) &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  return 1;&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#endif //OpenIGTLink_PROTOCOL_VERSION &amp;gt;= 2&lt;/div&gt;</summary>
		<author><name>Dblack</name></author>
		
	</entry>
</feed>