41 _log_window->restoreGeometry(settings.value(
"RosoutPublisher.geometry").toByteArray());
57 settings.setValue(
"RosoutPublisher.geometry",
_log_window->saveGeometry());
76 std::vector<const PlotDataAny*> logs_timeseries;
80 const std::string& topic_name = data_it.first;
85 if (!registered_shapeshifted_msg)
90 if (registered_shapeshifted_msg->
getMD5Sum() !=
96 logs_timeseries.push_back(&data_it.second);
99 return logs_timeseries;
106 std::vector<rosgraph_msgs::LogConstPtr> logs;
110 for (
const PlotDataAny* type_erased_logs : logs_timeseries)
112 const int first_index = type_erased_logs->getIndexFromX(threshold_time);
114 if (first_index != -1)
116 for (
int i = first_index; i < type_erased_logs->size(); i++)
118 const auto& any_msg = type_erased_logs->at(i);
119 const std::any& any_value = any_msg.y;
121 const bool isRawBuffer = any_value.type() ==
typeid(std::vector<uint8_t>);
123 std::vector<uint8_t> raw_buffer;
127 raw_buffer = std::any_cast<std::vector<uint8_t>>(any_value);
129 else if (isRosbagMessage)
132 raw_buffer.resize(msg_instance.
size());
134 msg_instance.
write(stream);
141 rosgraph_msgs::LogPtr p(boost::make_shared<rosgraph_msgs::Log>());
145 int64_t usec = p->header.stamp.toNSec() / 1000;
149 if (usec >= threshold_time)
156 std::sort(logs.begin(), logs.end(), [](
const rosgraph_msgs::LogConstPtr& a,
const rosgraph_msgs::LogConstPtr& b) {
157 return a->header.stamp < b->header.stamp;
171 using namespace std::chrono;