//abstract tools and tracker std::vector 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::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 <