2011-11-11 3 views
3

Quelqu'un a-t-il des expériences d'utilisation de gnuplot avec iOS? Je veux développer une application de calcul scientifique sur les appareils iOS et je veux utiliser gnuplot comme moteur de traçage. Y a-t-il de bons tutoriels sur lesquels je peux commencer?gnuplot avec iOS

Répondre

3

J'ai la même question générale, une rapide recherche google m'a conduit à l'application suivante, qui semble utiliser gnuplot.

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

J'ai suivi la piste vers leur site web:

http://alsoftiphone.com/iCAS/

Je les ai contactés à ce sujet, et je le suivi si/quand je reçois une réponse.


La réponse:

Bonjour,

Comme vous l'avez bien souligné, il y a des complications lors de l'intégration gnuplot dans une application, en particulier si vous avez l'intention de créer dynamiquement et éliminer de cela. C'est-à-dire, gnuplot (à partir de v4.4.0 qui est ce que j'ai utilisé) ne libère pas explicitement de la mémoire qu'il alloue probablement parce qu'il suppose qu'il sera libéré quand il est quitté, ce qui serait le cas quand il est utilisé comme une application autonome. Cela entraînera bien sûr des fuites de mémoire. De même, gnuplot ne ferme pas explicitement son descripteur de fichier de sortie (qui est défini sur stdout pour autant que je sache). Et il n'écarte pas non plus le mode multiplot lorsque la fonction principale se termine ce qui est problématique car la prochaine fois que vous appelez gnuplot dans une situation embarquée, certaines variables globales refléteront le mode multiplot si elles sont appelées par la suite. Heureusement pour vous, je les ai déjà identifiés afin que vous n'ayez pas à les traquer comme je l'ai fait. Malheureusement, je n'ai pas créé de bibliothèque pour mes projets, mais voici les modifications que vous devrez apporter au code source de gnuplot.

ligne plot.C# 615, à la fin du bloc else pour le « if (interactive & & terme! = 0) » bloc conditionnel de la fonction principale() (que vous aussi changer à certains nom de la fonction d'entrée appropriée):

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

ligne plot.C# 680, avant "retour exit_status" à la fin de la fonction 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); 

l'autre problème est que gnuplot est écrit pour utiliser stdin et stdout donc pour mes applications, j'ai remplacé le m avec mes propres descripteurs de fichiers appropriés pour servir d'interface vers/depuis gnuplot. Ce sera spécifique à l'implémentation, donc je ne vais pas lister mes propres changements, mais vous aurez besoin de regarder la source de gnuplot pour les instances de stdin et stdout et de les remplacer selon vos besoins.

Vous devez également définir #define NO_GIH dans config.h. À part cela, vous aurez probablement besoin de coder en dur le type de terminal gnuplot approprié pour votre application (j'ai utilisé SVG dans mes applications).

J'espère que cela aide.

Cordialement,

Antonio Lagana