98 if (!
dsClient.IsConnected().Connected)
105 if (
dsClient.GetFrame().Result != ViconDataStreamSDK::CPP::Result::Success)
107 ARMARX_WARNING <<
"Failed to receive frame, will retry in one second! (Is VICON Nexus "
108 "currently running in online or playback mode?)";
113 DebugDrawerColoredPointCloud pointCloud;
114 pointCloud.pointSize = 10;
117 std::map<std::string, Vector3f> labeledMarkers;
118 int labeledMarkerCount = 0;
119 int subjectCount =
dsClient.GetSubjectCount().SubjectCount;
121 for (
int curSubj = 0; curSubj < subjectCount; ++curSubj)
123 std::string subjectName =
dsClient.GetSubjectName(curSubj).SubjectName;
125 int subjectMarkerCount =
dsClient.GetMarkerCount(subjectName).MarkerCount;
126 for (
int i = 0; i < subjectMarkerCount; ++i)
128 std::string markerName =
dsClient.GetMarkerName(subjectName, i).MarkerName;
129 double* translation =
130 dsClient.GetMarkerGlobalTranslation(subjectName, markerName).Translation;
133 v.e0 = translation[0];
134 v.e1 = translation[1];
135 v.e2 = translation[2];
136 labeledMarkers[subjectName +
":" + markerName] = v;
138 DebugDrawerColoredPointCloudElement p;
145 pointCloud.points.push_back(p);
147 ++labeledMarkerCount;
156 listener->reportLabeledViconMarkerFrame(labeledMarkers);
159 std::vector<Vector3f> unlabeledMarkers;
160 int unlabeledMarkerCount =
dsClient.GetUnlabeledMarkerCount().MarkerCount;
162 for (
int i = 0; i < unlabeledMarkerCount; ++i)
164 double* translation =
dsClient.GetUnlabeledMarkerGlobalTranslation(i).Translation;
167 v.e0 = translation[0];
168 v.e1 = translation[1];
169 v.e2 = translation[2];
170 unlabeledMarkers.push_back(v);
172 DebugDrawerColoredPointCloudElement p;
179 pointCloud.points.push_back(p);
182 listener->reportUnlabeledViconMarkerFrame(unlabeledMarkers);
184 ARMARX_DEBUG <<
"Frame processed: " << subjectCount <<
" subjects, " << labeledMarkerCount
185 <<
" labeled markers, " << unlabeledMarkers.size() <<
" unlabeled markers";
187 debugDrawer->setColoredPointCloudVisu(
"ViconMarkerProvider",
"MarkerCloud", pointCloud);