Визуализация из C / C ++ через конвейерный интерфейс Gnuplot - PullRequest
9 голосов
/ 02 февраля 2010

Я пытаюсь использовать конвейерный интерфейс для gnuplot (стандартный gnuplot_i. {Cpp, hpp}), чтобы генерировать отображение в реальном времени значений, которые постоянно меняются в другой программе, написанной на C ++.Это работает нормально, но я хотел посмотреть, есть ли у кого-нибудь предложения по улучшению.

Эта реализация содержит удобный метод для построения одного вектора и 2-х векторов в виде 2D-графика.Это достигается путем записи во временный файл с помощью стандартного библиотечного вызова функции mktemp и последующего использования этого в качестве входных данных для вызова заговора gnuplot.Это генерировало слишком много временных файлов и, по-видимому, не работало хорошо, когда частота обновления на графике высока (возможно, IO ограничено в определенный момент).Я решил использовать псевдо-файл «-» в вызове plot и просто отправить векторы прямо в канал (заканчивающийся одной строкой с «е» на нем).Это работает лучше, но все еще не очень хорошо.

Есть ли способ , чтобы делать то, что я пытаюсь сделать, чем постоянно обновлять график, когда значения меняются?Как часто безопасно обновлять сюжет новой информацией?В качестве альтернативы, может быть, есть гораздо более простой способ добиться того, что я пытаюсь сделать?

@ Andy Ross

У меня нет "требований" как таковых.Под сликом я имел в виду, что, возможно, был более элегантный подход к выполнению того, что я пытался, все еще используя gnuplot.Хотя элегантность субъективна, я считаю, что подход, который я сейчас использую, особенно неэлегоненПод безопасным я имел в виду, знал ли кто-нибудь, с какой частотой обновления возникнут проблемы с вводом-выводом (например, задержка, блокировка дисплея и т. Д.) С указанным подходом.

Я бы хотел избежать использованияИнструментарий по следующим причинам (по крайней мере, мой короткий список).

  • Я обнаружил, что они, как правило, нетривиальны для правильной установки на разных архитектурах, особенно как некорневые (и когда им требуются зависимости, которые не требуются).Это не стандарт для всех операционных систем).
  • Они несут дополнительную зависимость от компиляции для других людей, использующих это программное обеспечение.
  • Похоже, что нет реального стандарта , который наиболеелюди используют для этого afiak (я сам, как и большинство людей, с которыми я работаю, обычно просто сохраняет файлы типа журнала и выполняет анализ после запуска в MATLAB).
  • Я знаю / изучаю синтаксис gnuplot.Я не знаю синтаксиса superPlottingApiXX.
  • Набор функций gnuplot почти идеально подходит для типов вещей, которые я хотел бы делать с этим программным обеспечением.

Однако,если у вас есть какие-либо конкретные предложения в отношении библиотек построения графиков C / C ++, которые кажутся подходящими с учетом приведенного выше списка, я всегда заинтересован в предложениях (предупреждение: я уже много раз искал их, чтобы найти).

Ответы [ 3 ]

3 голосов
/ 13 января 2013

gnuplot-cpp - это объектно-ориентированный интерфейс оболочки C ++ вокруг канала POSIX с Gnuplot.

Файл примера скомпилирован сразу, и код интерфейса выглядит прилично; Я попробую это в моем текущем проекте.

2 голосов
/ 03 февраля 2010

есть библиотека C2gnuplot , которую я написал несколько лет назад. Это очень просто, но может дать вам несколько советов. В основном он использует файлы FIFO для передачи данных в Gnuplot. Он способен генерировать анимацию из графиков. Здесь - это видео, созданное с помощью приложения. Я надеюсь, что это будет полезно для вас.

0 голосов
/ 02 февраля 2010

Slicker?Безопасный?Можете ли вы быть более точным в своих требованиях?

Похоже, вы пытаетесь сделать анимированную визуализацию с помощью инструмента, предназначенного для создания статических изображений.Если ваш дисплей так же прост, как вы говорите, почему бы не написать быстрое приложение с графическим интерфейсом (используя выбранный вами набор инструментов) для рисования вместо этого?

...