Гнуплот с iOS - PullRequest
       17

Гнуплот с iOS

3 голосов
/ 11 ноября 2011

У кого-нибудь здесь есть опыт использования gnuplot с iOS? Я хочу разработать приложение для научных вычислений на устройствах iOS и использовать gnuplot в качестве механизма построения графиков. Есть ли хорошие уроки, с которых я могу начать?

1 Ответ

3 голосов
/ 18 августа 2012

У меня тот же общий вопрос, быстрый поиск в Google привел меня к следующему приложению, которое, похоже, использует gnuplot.

http://itunes.apple.com/us/app/icas-workstation-class-scientific/id394637176?mt=8

Я пошел по следу к их сайту:

http://alsoftiphone.com/iCAS/

Я связался с ними по этому поводу, и я буду следить, если / когда получу ответ.


Ответ:

Здравствуйте,

Как вы точно указали, при внедрении gnuplot в приложение возникают некоторые сложности, особенно если вы намереваетесь динамически создавать и утилизировать его. То есть gnuplot (начиная с v4.4.0, который я и использовал) явно не освобождает некоторую память, которую он выделяет, предположительно, потому что предполагает, что она будет освобождена при выходе из программы, что будет в случае, когда она используется как отдельное приложение. Это, конечно, приведет к утечке памяти. Точно так же gnuplot явно не закрывает свой дескриптор выходного файла (насколько мне известно, для него задано значение stdout). Кроме того, он не очищает режим мультиплота при выходе из основной функции, что является проблематичным, поскольку при следующем вызове gnuplot во встроенной ситуации некоторые глобальные переменные будут отражать режим мультиплота при вызове после этого.

К счастью для вас, я уже идентифицировал их, поэтому вам не придется охотиться на них, как я. К сожалению, я не создал библиотеку для своих проектов, но вот соответствующие изменения, которые вам необходимо внести в исходный код gnuplot.

plot.c строка # 615, в конце блока else для условного блока if (interactive && term! = 0) функции main () (который вы также захотите изменить на некоторую подходящую запись имя функции):

    // Free replot_line
    if (replot_line != NULL)
    {
        free(replot_line);
        replot_line = NULL;
    }

строка plot.c # 680, перед "return exit_status" в конце функции main ():

// Free replot_line if it was allocated
if (replot_line != NULL)
    free(replot_line);

// Clear multiplot mode, if it was active
if (multiplot)
    term_end_multiplot();

// Close current file
if (gpoutfile)
    fclose(gpoutfile);

Другая проблема заключается в том, что gnuplot написан для использования stdin и stdout, поэтому для своих приложений я заменил их собственными соответствующими файловыми дескрипторами, которые будут служить интерфейсом для / из gnuplot. Это будет зависеть от реализации, поэтому я не буду перечислять свои собственные изменения, но вам, в основном, нужно будет просмотреть в исходном коде gnuplot экземпляры stdin и stdout и заменить их в соответствии с вашими потребностями.

Вы также захотите #define NO_GIH в config.h.

Кроме этого, вам, вероятно, придется жестко программировать соответствующий тип терминала gnuplot для вашего приложения (я использовал SVG в своих приложениях).

Надеюсь, это поможет.

С наилучшими пожеланиями,

Антонио Лагана

...