[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