26 #include <AffordanceKit/ColorMap.h>
27 #include <Inventor/nodes/SoDrawStyle.h>
32 const AffordanceKit::BimanualAffordancePtr& bimanualAffordance) :
33 visualizationNode(nullptr)
57 const std::string& layerName,
58 const std::string&
id,
59 float minExpectedProbability,
60 const AffordanceKit::PrimitivePtr& primitive)
69 if (primitive->getId() != entry.first.first->getId())
74 AffordanceKit::PrimitivePair pp = entry.first;
76 unsigned int size = primitive->getSamplingSize();
77 if (size == 0 ||
affordance->getThetaSize(pp) != size * size)
82 armarx::DebugDrawer24BitColoredPointCloud pointCloud;
83 pointCloud.pointSize = 7;
84 pointCloud.transparency = 0;
87 pointCloud.points.reserve((size / 4) * (size / 4));
89 std::map<std::pair<unsigned int, unsigned int>, AffordanceKit::Belief> maxBeliefMap;
91 const Eigen::MatrixXf&
T =
affordance->getTheta(pp);
92 for (
unsigned int i = 0; i <
T.cols(); i++)
94 unsigned int index1 = i / size;
95 unsigned int index2 = i % size;
98 index1 = index1 - (index1 % 4);
99 index2 = index2 - (index2 % 4);
102 std::pair<unsigned int, unsigned int>
indices =
103 (index1 <= index2) ? std::pair<unsigned int, unsigned int>(index1, index2)
104 : std::pair<unsigned int, unsigned int>(index2, index1);
106 AffordanceKit::Belief belief(
T.col(i));
107 if ((maxBeliefMap.find(
indices) == maxBeliefMap.end()) ||
108 (belief.expectedProbability() > maxBeliefMap.at(
indices).expectedProbability()))
110 maxBeliefMap[
indices] = belief;
114 std::cout <<
"maxBeliefMap size: " << maxBeliefMap.size() << std::endl;
116 for (
auto& entry : maxBeliefMap)
118 if (entry.second.expectedProbability() < minExpectedProbability)
124 const Eigen::Matrix4f& x2 = primitive->getSampling(entry.first.second);
125 Eigen::Vector3i
c = AffordanceKit::ColorMap::GetVisualizationColor(entry.second);
127 armarx::DebugDrawer24BitColoredPointCloudElement e1;
131 e1.color = armarx::DrawColor24Bit{
132 (
unsigned char)
c(0), (
unsigned char)
c(1), (
unsigned char)
c(2)};
133 pointCloud.points.push_back(e1);
135 armarx::DebugDrawer24BitColoredPointCloudElement e2;
139 e2.color = armarx::DrawColor24Bit{
140 (
unsigned char)
c(0), (
unsigned char)
c(1), (
unsigned char)
c(2)};
141 pointCloud.points.push_back(e2);
144 std::cout <<
"pointCloud size: " << pointCloud.points.size() << std::endl;
146 debugDrawer->set24BitColoredPointCloudVisu(layerName,
id +
"_sampling", pointCloud);