NaviTrack Tutorial:Creating module:Module structure

From NAMIC Wiki
Jump to: navigation, search
Home < NaviTrack Tutorial:Creating module:Module structure

Three types of nodes

  • Sink nodes (XxxxSink.h, [XxxxSink.cxx])
    • Leaves in the graph and receive their data values from external sources, such as Polaris optraciking system, and send put the data into NaviTrack data flow graph.
  • Source nodes (XxxxSource.h, [XxxxSource.cxx])
    • Leaves to propagate their data values received from other nodes to external outputs.
  • Filter nodes (we don't use this in the tutorial)
    • Intermediate nodes and modify the values received from other nodes.


Classes for module "MyTutorialModule"

Module class (MyTutorialModule.h, MyTutorialModule.cxx)

This class is used to configure and manage source and sink nodes. The following example of module class contains only essensial functions for a NaviTrack module.

MyTutorialModule.h:

#ifndef __MY_TUTORIAL_MODULE_H__
#define __MY_TUTORIAL_MODULE_H__

#include <OpenTracker/OpenTracker.h>
#include <OpenTracker/dllinclude.h>
#include <OpenTracker/input/SPLModules.h>
#include <OpenTracker/input/MyTutorialSink.h>
#include <OpenTracker/input/MyTutorialSource.h>
#include <string>

namespace ot {

class OPENTRACKER_API MyTutorialModule : public Module, public NodeFactory
{   
 public:
 
  // Constructor and destructor
  MyTutorialModule();
  virtual ~MyTutorialModule();
  
  Node* createNode( const std::string& name,  ot::StringTable& attributes);
  void  pushEvent();
  void  pullEvent() {};
  void  init(StringTable&, ConfigNode *);
 
 private:
  MyTutorialSink*   sink;
  MyTutorialSource* source;
  
  friend class  MyTutorialSink;
  friend class  MyTutorialSource;
};

OT_MODULE(MyTutorialModule);

} // end of namespace ot
#endif // __MY_TUTORIAL_MODULE_H__

First of all, function init() is called when the NaviTrack detects MyTutorialConfig in configuration section of the XML file, during starting up. You can put codes to initialize the module into this function.

When the NaviTrack detects either MyTutorialSource or MyTutorialSink in the XML file, function createNode is called. The code for this function might be following:

ot::Node * MyTutorialModule::createNode( const std::string& name,  ot::StringTable& attributes)
{
  if( name.compare("MyTutorialSink") == 0 )
    {
      sink =  new MyTutorialSink();
      return sink;
    }
  if(name.compare("MyTutorialSource") == 0 )
    {
      std::string stationName=attributes.get("name");
      source = new MyTutorialSource(stationName);
      return source;
    }
  return NULL;
}

Sink class (MyTutorialSink.h, MyTutorialSink.cxx)

Source class (MyTutorialSource.h, MyTutorialSource.cxx)

Go back to Creating module.