[IGSTK-Developers] tracker/tracker tool interfaces

Ziv Yaniv zivy at isis.imac.georgetown.edu
Thu Sep 20 11:47:16 EDT 2007


Hi all,

The TCON was too short for my taste ;), so here are some more thoughts on the need for a unique tracker tool identifier, or why I don't think we actually need an explicit mechanism, as inheritance/virtual methods should take care of this implicitly.

See attached pseudo-code.

                         Ziv
-------------- next part --------------

              //abstract tools and tracker
std::vector<igstk::TrackerTool::Pointer> tools;
igstk::Tracker::Pointer tracker;

igstk::PolarisTracker pTracker;
igstk::PolarisTrackerTool pTool1,pTool2;

        //observer class that deals with igstk events
IGSTKEventObserver::Pointer observer = IGSTKEventObserver::New();

tracker = pTracker = igstk::PolarisTracker::New();
    //do all the specific tracker setup here (serial com or firewire etc.)

             //it is important to observe both success and failure
             //because some cases can generate an InvalidRequestEvent()
pTracker->AddObserver(SetToolFailureEvent(), observer);
pTracker->AddObserver(SetToolSuccessEvent(), observer);
pTracker->AddObserver(OpenSuccessEvent(), observer);
pTracker->AddObserver(OpenFailureEvent(), observer);
//all other tracker related events

                //do tracker specific tool setup
pTool1.RequestSetPortAndChannel(0,0);
pTool1.RequestSetSerialNumber(123);
                  //give the tool to the tracker, tracker checks uniqueness
pTracker->RequestSetTool(pTool1);
tools.push_back(pTool1);

                  //same thing for second tool
pTool2.RequestSetPortAndChannel(1,0);
pTool2.RequestSetSerialNumber(111);
pTracker->RequestSetTool(pTool2);
tools.push_back(pTool2);

              //from here on work with abstract tracker and tracker tools
tracker->RequestOpen();
tracker->RequestInitialize();
tracker->RequestStartTracking();
tracker->RequestUpdateStatus();

std::vector<igstk::TrackerTool::Pointer>::iterator it, end = tools.end();

           //go over the tools get their transforms
for(it = tools.begin(); it != end ; it++)
{                      //method is virtual so tracker internally queries tool about port (polaris) or pattern id (micron) and does the work
    tracker->GetToolTransform((*it));
                 //observer has recorded failure or success
    if(observer->success())
    {
        observer->clear(); //clear for next event
        std::cout<<"Got transform: "<< (*it)->RequestGetTransform();
    }
    else
    {                                          //virtual method that returns tool info that the program operator can identify
        std::string toolDescription = (*it)->RequestToolDescriptin();
        std::cout<<"Tool <<toolDescripiton<< "couldn't get transform.\n";
    }
 }


More information about the IGSTK-Developers mailing list