Я хочу написать результат операции gnuplot в png файле, и это сработает, но мне нужно сгенерировать около 100 png файлов, и здесь я столкнулся с проблемой, так как получаю сообщение об ошибке "Максимальное количество временных файлов gnuplot равно 27". Когда я использую метод remove_tmpfiles(), все изображения генерируются должным образом, но около 20-30 из них не могут быть открыты. Эта ошибка не появляется, когда я сохраняю только рекомендованные 27 изображений.
Gnuplot::set_GNUPlotPath( GNUPLOT_PATH );
Gnuplot *main_plot = new Gnuplot;
main_plot->cmd("set terminal pngcairo\n");
for(int j=0; j<100;j++)
{
rysuj_wagi(j, main_plot);
if(j%25 == 0) main_plot->remove_tmpfiles();
}
void rysuj_wagi(int numer, Gnuplot * main_plot)
{
std::ostringstream oss;
oss <<"set output 'waga" << numer<<".png'";
string output = oss.str();
cout<<output;
main_plot->cmd(output);
main_plot->set_grid();
main_plot->set_xrange(-5,5);
main_plot->set_yrange(-5,5);
main_plot->set_style( "linespoints" );
main_plot->set_pointsize( 1.0 );
vector<double> x, y;
x.push_back(0);
y.push_back(0);
x.push_back(punktyWagX[numer]);
y.push_back(punktyWagY[numer]);
main_plot->reset_plot();
main_plot->plot_xy(x, y);
}
Вы случайно знаете выход?
Похоже, вы используете этот API: http://jfi.uchicago.edu/~tcaswell/track_doc/classgnuplot_1_1Gnuplot.html
Вы пробовали что-то вроде этого:
main_plot->cmd("set terminal pngcairo\n");
//some setting of YOUR_FILENAME
main_plot->cmd("set output 'YOUR_FILENAME'\n");
main_plot->cmd("replot\n");
Вы могли бы надеяться, что все файлы temp будут сохранены вместе.
main_plot->cmd("set output");
в конце вашей функцииrysuj_wagi
. Gnuplot завершает выходной файл только тогда, когда обнаружен новыйset output 'filename'
. Может быть, это мешаетremove_tmpfiles()
. Чтобы избежать этого, может помочь отправкаset output
(да, без имени файла).