25 #include <SimoxUtility/color/interpolation.h>
26 #include <SimoxUtility/math/pose/pose.h>
34 #define FUNCTION_NOT_IMPLEMENTED_MESSAGE \
35 "Function DebugDrawerToArViz::" << __FUNCTION__ << "(): Not implemented."
37 #define LOG_FUNCTION_NOT_IMPLEMENTED_MESSAGE() ARMARX_VERBOSE << FUNCTION_NOT_IMPLEMENTED_MESSAGE
48 return {
v->x,
v->y,
v->z};
52 toEigen(DebugDrawerPointCloudElement e)
54 return {e.x, e.y, e.z};
68 return simox::math::pose(
toEigen(pose->position),
toEigen(pose->orientation));
94 std::scoped_lock lock(mutex);
100 std::vector<viz::Layer> cleared;
101 for (
const auto& [name, layer] : layers)
105 cleared.push_back(arviz.
layer(name));
108 if (!cleared.empty())
128 const std::string& name,
129 const PoseBasePtr& globalPose,
132 std::scoped_lock lock(mutex);
142 const std::string& name,
143 const PoseBasePtr& globalPose,
147 std::scoped_lock lock(mutex);
152 setAndCommit(layer,
viz::Pose(name).pose(
toEigen(globalPose)).scale(scale));
157 const std::string& name,
158 const Vector3BasePtr& globalPosition1,
159 const Vector3BasePtr& globalPosition2,
161 const DrawColor& color,
164 std::scoped_lock lock(mutex);
171 .addPoint(
toEigen(globalPosition1))
172 .addPoint(
toEigen(globalPosition2))
175 .color(simox::Color::black(0)));
180 const std::string& name,
181 const DebugDrawerLineSet& lineSet,
184 std::scoped_lock lock(mutex);
194 if (lineSet.useHeatMap)
196 ARMARX_VERBOSE <<
"DebugDrawerToArViz::" << __FUNCTION__ <<
"(): "
197 <<
"'useHeatMap' not supported.";
200 simox::Color color0 = toSimox(lineSet.colorNoIntensity);
201 simox::Color color1 = toSimox(lineSet.colorFullIntensity);
203 for (
size_t i = 0; i + 1 < lineSet.points.size(); i += 2)
205 const auto& p1 = lineSet.points[i];
206 const auto& p2 = lineSet.points[i + 1];
207 float intensity = lineSet.intensities[i / 2];
210 std::stringstream ss;
211 ss << name <<
"/" << i <<
"_" << i + 1;
212 setLayerElement(layer,
217 .lineWidth(lineSet.lineWidth)
218 .
color(simox::Color::black(0)));
225 const std::string& name,
226 const PoseBasePtr& globalPose,
227 const Vector3BasePtr& dimensions,
228 const DrawColor& color,
231 std::scoped_lock lock(mutex);
243 const std::string& name,
244 const std::string& text,
245 const Vector3BasePtr& globalPosition,
246 const DrawColor& color,
250 std::scoped_lock lock(mutex);
258 .position(
toEigen(globalPosition))
260 .color(toViz(color)));
265 const std::string& name,
266 const Vector3BasePtr& globalPosition,
267 const DrawColor& color,
271 std::scoped_lock lock(mutex);
278 viz::Sphere(name).position(
toEigen(globalPosition)).radius(radius).color(toViz(color)));
283 const std::string& name,
284 const DebugDrawerPointCloud& pointCloud,
287 std::scoped_lock lock(mutex);
294 for (
const auto& p : pointCloud.points)
303 const std::string& name,
304 const DebugDrawerColoredPointCloud& pointCloud,
307 std::scoped_lock lock(mutex);
314 for (
const auto& p : pointCloud.points)
316 viz::ColoredPoint cp;
320 cp.color = toViz(p.color);
328 const std::string& layer,
329 const std::string& name,
330 const DebugDrawer24BitColoredPointCloud& pointCloud,
333 std::scoped_lock lock(mutex);
340 for (
const auto& p : pointCloud.points)
342 viz::ColoredPoint cp;
354 const std::string& name,
355 const PolygonPointList& polygonPoints,
356 const DrawColor& colorInner,
357 const DrawColor& colorBorder,
361 std::scoped_lock lock(mutex);
368 for (
const auto& p : polygonPoints)
374 poly.
color(toViz(colorInner)).lineColor(toViz(colorBorder)).lineWidth(lineWidth));
379 const std::string& name,
380 const DebugDrawerTriMesh& triMesh,
383 std::scoped_lock lock(mutex);
389 std::vector<Eigen::Vector3f> vertices;
390 std::vector<viz::data::Color> colors;
391 std::vector<viz::data::Face> faces;
392 for (
const auto&
v : triMesh.vertices)
394 vertices.emplace_back(
v.x,
v.y,
v.z);
396 for (
const auto&
c : triMesh.colors)
398 colors.emplace_back(toViz(
c));
400 for (
const auto& f : triMesh.faces)
402 viz::data::Face& face = faces.emplace_back();
403 face.v0 = f.vertex1.vertexID;
404 face.v1 = f.vertex2.vertexID;
405 face.v2 = f.vertex3.vertexID;
406 face.c0 = f.vertex1.colorID;
407 face.c1 = f.vertex2.colorID;
408 face.c2 = f.vertex3.colorID;
410 setAndCommit(layer,
viz::Mesh(name).vertices(vertices).colors(colors).faces(faces));
415 const std::string& name,
416 const Vector3BasePtr& position,
417 const Vector3BasePtr& direction,
418 const DrawColor& color,
423 std::scoped_lock lock(mutex);
439 const std::string& name,
440 const Vector3BasePtr& globalPosition,
441 const Vector3BasePtr& direction,
444 const DrawColor& color,
447 std::scoped_lock lock(mutex);
454 .fromTo(
toEigen(globalPosition),
462 const std::string& name,
463 const Vector3BasePtr& globalPosition,
464 const Vector3BasePtr& directionVec,
468 const DrawColor& color,
471 std::scoped_lock lock(mutex);
478 .position(
toEigen(globalPosition))
481 .completion(circleCompletion)
488 const std::string& name,
489 const std::string& robotFile,
490 const std::string& armarxProject,
491 DrawStyle drawStyleType,
494 std::scoped_lock lock(mutex);
501 switch (drawStyleType)
503 case DrawStyle::CollisionModel:
506 case DrawStyle::FullModel:
511 robots.emplace(std::make_pair(layer, name), robot);
512 setAndCommit(layer, robot);
517 const std::string& name,
518 const PoseBasePtr& globalPose,
521 std::scoped_lock lock(mutex);
526 if (
auto it = robots.find(std::make_pair(layer, name)); it != robots.end())
531 arviz.
commit({getLayer(layer)});
536 const std::string& name,
540 std::scoped_lock lock(mutex);
545 if (
auto it = robots.find(std::make_pair(layer, name)); it != robots.end())
548 robot.
joints(configuration);
550 arviz.
commit({getLayer(layer)});
555 const std::string& name,
556 const DrawColor& color,
559 std::scoped_lock lock(mutex);
564 if (
auto it = robots.find(std::make_pair(layer, name)); it != robots.end())
569 arviz.
commit({getLayer(layer)});
574 const std::string& name,
575 const std::string& robotNodeName,
576 const DrawColor& color,
579 (void)layer, (
void)name, (void)robotNodeName, (
void)color;
585 const std::string& name,
588 std::scoped_lock lock(mutex);
593 robots.erase(std::make_pair(layer, name));
594 removeAndCommit(layer, name);
599 const PoseBasePtr& globalPose,
600 const Ice::Current&
c)
607 const PoseBasePtr& globalPose,
609 const Ice::Current&
c)
616 const Vector3BasePtr& globalPosition1,
617 const Vector3BasePtr& globalPosition2,
619 const DrawColor& color,
620 const Ice::Current&
c)
622 setLineVisu(DEBUG_LAYER_NAME, name, globalPosition1, globalPosition2, lineWidth, color,
c);
627 const DebugDrawerLineSet& lineSet,
628 const Ice::Current&
c)
635 const PoseBasePtr& globalPose,
636 const Vector3BasePtr& dimensions,
637 const DrawColor& color,
638 const Ice::Current&
c)
640 setBoxVisu(DEBUG_LAYER_NAME, name, globalPose, dimensions, color,
c);
645 const std::string& text,
646 const Vector3BasePtr& globalPosition,
647 const DrawColor& color,
649 const Ice::Current&
c)
651 setTextVisu(DEBUG_LAYER_NAME, name, text, globalPosition, color, size,
c);
656 const Vector3BasePtr& globalPosition,
657 const DrawColor& color,
659 const Ice::Current&
c)
661 setSphereVisu(DEBUG_LAYER_NAME, name, globalPosition, color, radius,
c);
666 const DebugDrawerPointCloud& pointCloud,
667 const Ice::Current&
c)
674 const std::string& name,
675 const DebugDrawer24BitColoredPointCloud& pointCloud,
676 const Ice::Current&
c)
683 const PolygonPointList& polygonPoints,
684 const DrawColor& colorInner,
685 const DrawColor& colorBorder,
687 const Ice::Current&
c)
690 DEBUG_LAYER_NAME, name, polygonPoints, colorInner, colorBorder, lineWidth,
c);
695 const DebugDrawerTriMesh& triMesh,
696 const Ice::Current&
c)
703 const Vector3BasePtr& position,
704 const Vector3BasePtr& direction,
705 const DrawColor& color,
708 const Ice::Current&
c)
710 setArrowVisu(DEBUG_LAYER_NAME, name, position, direction, color, length, width,
c);
715 const Vector3BasePtr& globalPosition,
716 const Vector3BasePtr& direction,
719 const DrawColor& color,
720 const Ice::Current&
c)
723 DEBUG_LAYER_NAME, name, globalPosition, direction, length, radius, color,
c);
728 const Vector3BasePtr& globalPosition,
729 const Vector3BasePtr& directionVec,
733 const DrawColor& color,
736 (void)name, (
void)globalPosition, (void)directionVec, (
void)radius, (void)circleCompletion,
737 (
void)width, (void)color;
743 const std::string& name,
746 std::scoped_lock lock(mutex);
749 removeAndCommit(layer, name);
755 const std::string& name,
758 std::scoped_lock lock(mutex);
761 removeAndCommit(layer, name);
767 const std::string& name,
770 std::scoped_lock lock(mutex);
773 removeAndCommit(layer, name);
779 const std::string& name,
782 std::scoped_lock lock(mutex);
785 removeAndCommit(layer, name);
791 const std::string& name,
794 std::scoped_lock lock(mutex);
797 removeAndCommit(layer, name);
803 const std::string& name,
806 std::scoped_lock lock(mutex);
809 removeAndCommit(layer, name);
815 const std::string& name,
818 std::scoped_lock lock(mutex);
821 removeAndCommit(layer, name);
827 const std::string& name,
830 std::scoped_lock lock(mutex);
833 removeAndCommit(layer, name);
839 const std::string& name,
842 std::scoped_lock lock(mutex);
845 removeAndCommit(layer, name);
851 const std::string& name,
854 std::scoped_lock lock(mutex);
857 removeAndCommit(layer, name);
863 const std::string& name,
866 std::scoped_lock lock(mutex);
869 removeAndCommit(layer, name);
875 const std::string& name,
878 std::scoped_lock lock(mutex);
881 removeAndCommit(layer, name);
887 const std::string& name,
890 std::scoped_lock lock(mutex);
893 removeAndCommit(layer, name);
899 const std::string& name,
902 std::scoped_lock lock(mutex);
905 removeAndCommit(layer, name);
998 std::scoped_lock lock(mutex);
1000 std::vector<viz::Layer> commit;
1001 commit.reserve(layers.size());
1002 for (
auto& [name, layer] : layers)
1005 commit.push_back(layer);
1013 std::scoped_lock lock(mutex);
1029 (void)layer, (
void)visible;
1046 LayerInformationSequence
1098 const std::string& elementName,
1099 const Ice::Current&)
1101 (void)layer, (
void)elementName;
1107 const std::string& elementName,
1108 const Ice::Current&)
1110 (void)layer, (
void)elementName;
1114 DebugDrawerSelectionList
1122 DebugDrawerToArViz::getLayer(
const std::string& layerName)
1124 if (
auto it = layers.find(layerName); it != layers.end())
1130 return layers.emplace(layerName, arviz.
layer(layerName)).first->second;
1134 viz::data::ElementSeq::iterator
1135 DebugDrawerToArViz::findLayerElement(
viz::Layer& layer,
const std::string& elementName)
1137 return std::find_if(layer.
data_.elements.begin(),
1138 layer.
data_.elements.end(),
1139 [&elementName](
const viz::data::ElementPtr& e)
1140 { return e->id == elementName; });
1144 DebugDrawerToArViz::removeLayerElement(
viz::Layer& layer,
const std::string& name)
1146 auto it = findLayerElement(layer, name);
1147 if (it != layer.
data_.elements.end())
1149 layer.
data_.elements.erase(it);
1154 DebugDrawerToArViz::removeAndCommit(
const std::string& layerName,
const std::string& name)
1157 removeLayerElement(layer, name);