Skip to content
Snippets Groups Projects

Fix aerodynamic_analysis gnuplot not terminating issue

Merged Maurice Zimmnau requested to merge fix/aerodynamic_analysis_terminate_plotting into main
1 file
+ 53
45
Compare changes
  • Side-by-side
  • Inline
@@ -166,34 +166,6 @@ auto parse_csv_file(const std::string& file_path, const std::string& column_x,
return {x_data, y_data};
}
fs::path generate_plot(
const std::map<std::string, std::pair<std::vector<double>, std::vector<double>>>& data,
const std::string& plot_dir, const std::string& html_dir,
const std::string& filename, const std::string& title,
const std::string& xlabel, const std::string& ylabel) {
if (data.empty()) {
myRuntimeInfo->warn << "No data provided for plotting." << std::endl;
}
auto plot_path_string = helpers::prepare_plot_path(plot_dir, filename);
auto f = matplot::figure(true);
f->size(800, 600);
auto ax = f->current_axes();
ax->hold(true);
helpers::plot_datasets(ax, data);
helpers::configure_axes(ax, title, xlabel, ylabel);
helpers::configure_legend(ax);
matplot::save(f, plot_path_string, "svg");
#ifdef __unix__
system("pkill gnuplot");
#endif
return fs::relative(fs::path(plot_path_string), fs::path(html_dir));
}
void tawCalculatePolar::set_html_body() {
const auto& data = myDefaultStrategy->get_default_data();
@@ -301,23 +273,59 @@ void tawCalculatePolar::set_html_body() {
lift_curve_data[label] = parse_csv_file(file_path.string(), "AoA", "C_L");
}
auto polar_clean_plot_path = generate_plot(
polar_data,
rtIO_->getPlotDir(),
rtIO_->getHtmlDir(),
"polar_clean.svg",
"Polar Curve (clean configuration)",
"C_D",
"C_L");
auto lift_curve_plot_path = generate_plot(
lift_curve_data,
rtIO_->getPlotDir(),
rtIO_->getHtmlDir(),
"lift_curve_clean.svg",
"Lift curve (clean configuration)",
"AoA",
"C_L");
std::map<std::string, std::pair<std::vector<double>, std::vector<double>>> data = polar_data;
std::string plot_dir = rtIO_->getPlotDir();
std::string html_dir = rtIO_->getHtmlDir();
std::string filename = "polar_clean.svg";
std::string title = "Polar Curve (clean configuration)";
std::string xlabel = "C_D";
std::string ylabel = "C_L";
if (data.empty()) {
myRuntimeInfo->warn << "No data provided for plotting." << std::endl;
}
auto plot_path_string = helpers::prepare_plot_path(plot_dir, filename);
auto f = matplot::figure(true);
f->size(800, 600);
auto ax = f->current_axes();
ax->hold(true);
helpers::plot_datasets(ax, data);
helpers::configure_axes(ax, title, xlabel, ylabel);
helpers::configure_legend(ax);
matplot::save(f, plot_path_string, "svg");
auto polar_clean_plot_path = fs::relative(fs::path(plot_path_string), fs::path(html_dir));
ax->clear();
matplot::cla();
data = lift_curve_data;
plot_dir = rtIO_->getPlotDir();
html_dir = rtIO_->getHtmlDir();
filename = "lift_curve_clean.svg";
title = "Lift curve (clean configuration)";
xlabel = "AoA";
ylabel = "C_L";
if (data.empty()) {
myRuntimeInfo->warn << "No data provided for plotting." << std::endl;
}
plot_path_string = helpers::prepare_plot_path(plot_dir, filename);
// f = matplot::figure(true);
f->size(800, 600);
ax = f->current_axes();
ax->hold(true);
helpers::plot_datasets(ax, data);
helpers::configure_axes(ax, title, xlabel, ylabel);
helpers::configure_legend(ax);
matplot::save(f, plot_path_string, "svg");
auto lift_curve_plot_path = fs::relative(fs::path(plot_path_string), fs::path(html_dir));
report_.htmlReportStream() << std::format("<img src=\"{}\" alt=\"Lift vs. Drag\"/><br>\n",
polar_clean_plot_path.string());
Loading