@@ -84,10 +84,12 @@ class vtkPlusAtracsysTracker::vtkInternal
8484 int MaxMissingFiducials = 0 ; // maximum number of missing fiducials
8585
8686 // matches plus tool id to .ini geometry file names/paths
87- std::map<std::string, std::string> PlusIdMappedToGeometryFilename ;
87+ std::map<std::string, std::string> ToolIdMappedToGeometryFilename ;
8888
89- // matches fusionTrack internal tool geometry ID to Plus tool ID for updating tools
90- std::map<int , std::string> FtkGeometryIdMappedToToolId;
89+ // matches Atracsys internal tool geometry ID to Plus tool ID for updating tools
90+ std::map<int , std::string> AtracGeomIdMappedToToolId;
91+ // reverse lookup, Plus tool ID to Atracsys internal tool geometry ID
92+ std::map<std::string, int > ToolIdMappedToAtracGeomId;
9193
9294 // Atracsys API wrapper class handle
9395 Atracsys::Tracker Tracker;
@@ -130,6 +132,14 @@ std::string vtkPlusAtracsysTracker::GetSdkVersion()
130132 return v;
131133}
132134
135+ // ----------------------------------------------------------------------------
136+ std::string vtkPlusAtracsysTracker::GetFirmwareSoftwareVersion ()
137+ {
138+ std::string d;
139+ this ->InternalObj ->Tracker .GetFirmwareSoftwareVersion (d);
140+ return d;
141+ }
142+
133143// ----------------------------------------------------------------------------
134144std::string vtkPlusAtracsysTracker::GetCalibrationDate ()
135145{
@@ -187,6 +197,32 @@ PlusStatus vtkPlusAtracsysTracker::GetLoadedGeometries(std::map<int, std::vector
187197 return PLUS_SUCCESS;
188198}
189199
200+ // ----------------------------------------------------------------------------
201+ PlusStatus vtkPlusAtracsysTracker::GetMarkerGeometry (std::string toolId, std::string& relPath,
202+ int & geomId, std::vector<std::array<float , 3 >>& fidCoords)
203+ {
204+ if (this ->InternalObj ->ToolIdMappedToGeometryFilename .find (toolId) == this ->InternalObj ->ToolIdMappedToGeometryFilename .cend ())
205+ {
206+ LOG_ERROR (" Could not get geometry filename for tool " << toolId);
207+ return PLUS_FAIL;
208+ }
209+ relPath = this ->InternalObj ->ToolIdMappedToGeometryFilename .at (toolId);
210+
211+ if (this ->InternalObj ->ToolIdMappedToAtracGeomId .find (toolId) == this ->InternalObj ->ToolIdMappedToAtracGeomId .cend ())
212+ {
213+ LOG_ERROR (" Could not get marker geometry for tool " << toolId);
214+ return PLUS_FAIL;
215+ }
216+ geomId = this ->InternalObj ->ToolIdMappedToAtracGeomId .at (toolId);
217+
218+ if (this ->InternalObj ->Tracker .GetFiducialCoordinates (geomId, fidCoords) != ATR_SUCCESS)
219+ {
220+ LOG_ERROR (" Could not get fiducial coordinates for geometry id " << geomId);
221+ return PLUS_FAIL;
222+ }
223+ return PLUS_SUCCESS;
224+ }
225+
190226// ----------------------------------------------------------------------------
191227bool vtkPlusAtracsysTracker::IsVirtual () const
192228{
@@ -238,13 +274,13 @@ PlusStatus vtkPlusAtracsysTracker::ReadConfiguration(vtkXMLDataElement* rootConf
238274 XML_READ_ENUM2_ATTRIBUTE_NONMEMBER_OPTIONAL (TrackingType, toolTrackingType, toolDataElement, " ACTIVE" , ACTIVE, " PASSIVE" , PASSIVE);
239275 if (toolTrackingType == ACTIVE)
240276 {
241- // active tool, can be loaded directly into FtkGeometryIdMappedToToolId
277+ // active tool, can be loaded directly into AtracGeomIdMappedToToolId
242278 int ftkGeometryId = -1 ;
243279 XML_READ_SCALAR_ATTRIBUTE_NONMEMBER_OPTIONAL (int , GeometryId, ftkGeometryId, toolDataElement);
244280 if (ftkGeometryId != -1 )
245281 {
246- std::pair< int , std::string> thisTool (ftkGeometryId, toolId);
247- this ->InternalObj ->FtkGeometryIdMappedToToolId .insert (thisTool );
282+ this -> InternalObj -> AtracGeomIdMappedToToolId . insert ( std::make_pair (ftkGeometryId, toolId) );
283+ this ->InternalObj ->ToolIdMappedToAtracGeomId .insert (std::make_pair (toolId, ftkGeometryId) );
248284 }
249285 else
250286 {
@@ -254,12 +290,11 @@ PlusStatus vtkPlusAtracsysTracker::ReadConfiguration(vtkXMLDataElement* rootConf
254290 }
255291 else if (toolTrackingType == PASSIVE)
256292 {
257- // passive tool, load into PlusIdMappedToGeometryFilename to have geometry loaded in InternalConnect
293+ // passive tool, load into ToolIdMappedToGeometryFilename to have geometry loaded in InternalConnect
258294 const char * geometryFile;
259295 if ((geometryFile = toolDataElement->GetAttribute (" GeometryFile" )) != NULL )
260296 {
261- std::pair<std::string, std::string> thisTool (toolId, geometryFile);
262- this ->InternalObj ->PlusIdMappedToGeometryFilename .insert (thisTool);
297+ this ->InternalObj ->ToolIdMappedToGeometryFilename .insert (std::make_pair (toolId, geometryFile));
263298 }
264299 else
265300 {
@@ -326,8 +361,17 @@ PlusStatus vtkPlusAtracsysTracker::InternalConnect()
326361{
327362 LOG_TRACE (" vtkPlusAtracsysTracker::InternalConnect" );
328363
364+ // Check if network configuration file is provided
365+ std::string networkConfigPath;
366+ if (this ->InternalObj ->DeviceOptions .find (" NetworkConfigFile" ) != this ->InternalObj ->DeviceOptions .end ())
367+ {
368+ networkConfigPath = vtkPlusConfig::GetInstance ()->GetDeviceSetConfigurationPath (
369+ this ->InternalObj ->DeviceOptions [" NetworkConfigFile" ]);
370+ }
371+
329372 // Connect to device
330- ATR_RESULT result = this ->InternalObj ->Tracker .Connect ();
373+ ATR_RESULT result = this ->InternalObj ->Tracker .Connect (networkConfigPath.empty () ? " " : networkConfigPath.c_str ());
374+
331375 if (result != ATR_SUCCESS && result != ATR_RESULT::WARNING_CONNECTED_IN_USB2)
332376 {
333377 LOG_ERROR (this ->InternalObj ->Tracker .ResultToString (result));
@@ -540,7 +584,8 @@ PlusStatus vtkPlusAtracsysTracker::InternalConnect()
540584 }
541585 }
542586 else if (itr->first != " AcquisitionRate" && itr->first != " Id" && itr->first != " Type"
543- && itr->first != " ToolReferenceFrame" && itr->first != " Enable_embedded_processing" )
587+ && itr->first != " ToolReferenceFrame" && itr->first != " Enable_embedded_processing"
588+ && itr->first != " NetworkConfigFile" )
544589 {
545590 LOG_WARNING (" Unknown option \" " << itr->first << " \" ." );
546591 itr = this ->InternalObj ->DeviceOptions .erase (itr);
@@ -564,7 +609,7 @@ PlusStatus vtkPlusAtracsysTracker::InternalConnect()
564609
565610 // load passive geometries onto Atracsys
566611 std::map<std::string, std::string>::iterator it;
567- for (it = begin (this ->InternalObj ->PlusIdMappedToGeometryFilename ); it != end (this ->InternalObj ->PlusIdMappedToGeometryFilename ); it++)
612+ for (it = begin (this ->InternalObj ->ToolIdMappedToGeometryFilename ); it != end (this ->InternalObj ->ToolIdMappedToGeometryFilename ); it++)
568613 {
569614 // load user defined geometry file
570615 // TODO: add check for conflicting marker IDs
@@ -575,8 +620,8 @@ PlusStatus vtkPlusAtracsysTracker::InternalConnect()
575620 LOG_ERROR (this ->InternalObj ->Tracker .ResultToString (result) << " This error occurred when trying to load geometry file at path: " << geomFilePath);
576621 return PLUS_FAIL;
577622 }
578- std::pair< int , std::string> newTool (geometryId, it->first );
579- this ->InternalObj ->FtkGeometryIdMappedToToolId .insert (newTool );
623+ this -> InternalObj -> AtracGeomIdMappedToToolId . insert ( std::make_pair (geometryId, it->first ) );
624+ this ->InternalObj ->ToolIdMappedToAtracGeomId .insert (std::make_pair (it-> first , geometryId) );
580625 }
581626
582627 // if active marker pairing is desired, then its time > 0 second
@@ -702,7 +747,7 @@ PlusStatus vtkPlusAtracsysTracker::InternalUpdate()
702747 }
703748
704749 std::map<int , std::string>::iterator it;
705- for (it = this ->InternalObj ->FtkGeometryIdMappedToToolId .begin (); it != this ->InternalObj ->FtkGeometryIdMappedToToolId .end (); it++)
750+ for (it = this ->InternalObj ->AtracGeomIdMappedToToolId .begin (); it != this ->InternalObj ->AtracGeomIdMappedToToolId .end (); it++)
706751 {
707752 if (std::find (this ->DisabledToolIds .begin (), this ->DisabledToolIds .end (), it->second ) != this ->DisabledToolIds .end ())
708753 {
@@ -834,7 +879,7 @@ PlusStatus vtkPlusAtracsysTracker::SetToolEnabled(std::string toolId, bool enabl
834879 // tool should be disabled, if it exists add to disabled list
835880 bool toolExists = false ;
836881 std::map<int , std::string>::iterator it;
837- for (it = this ->InternalObj ->FtkGeometryIdMappedToToolId .begin (); it != this ->InternalObj ->FtkGeometryIdMappedToToolId .end (); it++)
882+ for (it = this ->InternalObj ->AtracGeomIdMappedToToolId .begin (); it != this ->InternalObj ->AtracGeomIdMappedToToolId .end (); it++)
838883 {
839884 if (igsioCommon::IsEqualInsensitive (it->second , toolId))
840885 {
@@ -859,7 +904,7 @@ PlusStatus vtkPlusAtracsysTracker::AddToolGeometry(std::string toolId, std::stri
859904 // make sure geometry with toolId doesn't already exist
860905 bool toolExists = false ;
861906 std::map<int , std::string>::iterator it;
862- for (it = this ->InternalObj ->FtkGeometryIdMappedToToolId .begin (); it != this ->InternalObj ->FtkGeometryIdMappedToToolId .end (); it++)
907+ for (it = this ->InternalObj ->AtracGeomIdMappedToToolId .begin (); it != this ->InternalObj ->AtracGeomIdMappedToToolId .end (); it++)
863908 {
864909 if (igsioCommon::IsEqualInsensitive (it->second , toolId))
865910 {
@@ -889,7 +934,7 @@ PlusStatus vtkPlusAtracsysTracker::AddToolGeometry(std::string toolId, std::stri
889934 aToolSource->SetId (toolId);
890935 this ->AddTool (aToolSource);
891936
892- // TO DO : add fiducial data as separate sources ?
937+ // TODO : add fiducial data as separate sources ?
893938 // vtkSmartPointer<vtkPlusDataSource> aFids3dSource = vtkSmartPointer<vtkPlusDataSource>::New();
894939 // aFids3dSource->SetReferenceCoordinateFrameName(this->ToolReferenceFrameName);
895940 // aFids3dSource->SetType(DATA_SOURCE_TYPE_FIELDDATA);
@@ -925,7 +970,7 @@ PlusStatus vtkPlusAtracsysTracker::AddToolGeometry(std::string toolId, std::stri
925970
926971 // register this tool internally
927972 std::pair<int , std::string> newTool (geometryId, toolId);
928- this ->InternalObj ->FtkGeometryIdMappedToToolId .insert (newTool);
973+ this ->InternalObj ->AtracGeomIdMappedToToolId .insert (newTool);
929974
930975 return PLUS_SUCCESS;
931976}
0 commit comments