Skip to content

Commit

Permalink
Move getSummary implementation to cpp
Browse files Browse the repository at this point in the history
  • Loading branch information
Levi-Armstrong committed Dec 21, 2024
1 parent c22037f commit 3f1b95c
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 37 deletions.
40 changes: 3 additions & 37 deletions tesseract_collision/core/include/tesseract_collision/core/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,45 +290,11 @@ class ContactResultMap
bool operator==(const ContactResultMap& rhs) const;
bool operator!=(const ContactResultMap& rhs) const;

/** @brief Get a brief summary of the most frequently colliding link pair
/**
* @brief Get a brief summary of the most frequently colliding link pair
* @return A string containing the collision summary
*/
std::string getSummary() const
{
std::stringstream ss;
std::map<KeyType, std::size_t> collision_counts;
std::map<KeyType, double> closest_distances;

// Initialize distances map with max values
for (const auto& pair : data_)
{
if (!pair.second.empty())
{
collision_counts[pair.first] = pair.second.size();
closest_distances[pair.first] = std::numeric_limits<double>::max();

// Find closest distance for this pair
for (const auto& result : pair.second)
{
closest_distances[pair.first] = std::min(closest_distances[pair.first], result.distance);
}
}
}

if (collision_counts.empty())
{
return "No collisions detected";
}

auto max_element = std::max_element(collision_counts.begin(),
collision_counts.end(),
[](const auto& p1, const auto& p2) { return p1.second < p2.second; });

ss << max_element->first.first << " - " << max_element->first.second << ": " << max_element->second
<< " collisions, min dist: " << closest_distances[max_element->first];

return ss.str();
}
std::string getSummary() const;

private:
ContainerType data_;
Expand Down
37 changes: 37 additions & 0 deletions tesseract_collision/core/src/types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,43 @@ bool ContactResultMap::operator==(const ContactResultMap& rhs) const
}
bool ContactResultMap::operator!=(const ContactResultMap& rhs) const { return !operator==(rhs); }

std::string ContactResultMap::getSummary() const
{
std::stringstream ss;
std::map<KeyType, std::size_t> collision_counts;
std::map<KeyType, double> closest_distances;

// Initialize distances map with max values
for (const auto& pair : data_)
{
if (!pair.second.empty())
{
collision_counts[pair.first] = pair.second.size();
closest_distances[pair.first] = std::numeric_limits<double>::max();

// Find closest distance for this pair
for (const auto& result : pair.second)
{
closest_distances[pair.first] = std::min(closest_distances[pair.first], result.distance);
}
}
}

if (collision_counts.empty())
{
return "No collisions detected";
}

auto max_element = std::max_element(collision_counts.begin(),
collision_counts.end(),
[](const auto& p1, const auto& p2) { return p1.second < p2.second; });

ss << max_element->first.first << " - " << max_element->first.second << ": " << max_element->second
<< " collisions, min dist: " << closest_distances[max_element->first];

return ss.str();
}

ContactTestData::ContactTestData(const std::vector<std::string>& active,
CollisionMarginData collision_margin_data,
IsContactAllowedFn fn,
Expand Down

0 comments on commit 3f1b95c

Please sign in to comment.