2017-12-21 5 views
0

Ich habe die folgenden Funktionen, deren Ziel es ist, ein GLUT-Fenster anzuzeigen, das ein 3D-Objekt anzeigt, und ein Gnuplot-Fenster, um ein Diagramm anzuzeigen.GLUT- und gnuplot-Fenster werden nicht gleichzeitig angezeigt

Dafür verwende ich die Gnuplot-Iostream Interface. Der Zeichencode befindet sich innerhalb einer Funktion, da er aktualisiert wird, wenn der Benutzer auf der Tastatur tippt.

Der folgende Code wird nur die Gnuplot-Fenster angezeigt werden, nachdem ich die GLUT-Fenster zu schließen:

#include "gnuplot-iostream.h" 
#include <GL/gl.h> 
#include <GL/glu.h> 
#include <GL/glut.h> 

void displayGraph(); 
void displayGnuplot(); 
Gnuplot gp; 

int main(int argc, char** argv) { 

    displayGnuplot(); 

    glutInit(&argc,argv); 
    glutInitWindowSize(1024, 1024); 
    glutInitWindowPosition(1080,10); 
    glutCreateWindow("Continuum Data"); 
    glutDisplayFunc(displayGraph); 

    glutMainLoop(); 
} 

void displayGraph(){ 
    /* 
    Code to display in Glut window that will be updated 
    */ 
} 

void displayGnuplot(){ 

    bool displayGnuplot = true; 
    gp << "set xrange [-2:2]\nset yrange [-2:2]\n"; 
    gp << "plot '-' with vectors title 'pts_A', '-' with vectors title 'pts_B'\n"; 
} 

Was die Gnuplot Instanz innerhalb der displayGraph Funktion erklärt arbeitet wird. Leider funktioniert das nicht für meinen Fall, da jedes Mal, wenn die displayGraph-Funktion aufgerufen wird, ein neues Gnuplot-Fenster erstellt wird, während ich nur möchte, dass das Gnuplot-Fenster aktualisiert wird.

Ich habe auch versucht, einen Zustand, um die Schaffung des Gnuplot-Fensters ohne Erfolg setzen:

#include "gnuplot-iostream.h" 
#include <GL/gl.h> 
#include <GL/glu.h> 
#include <GL/glut.h> 

void displayGraph(); 
void displayGnuplot(); 
Gnuplot gp; 

int main(int argc, char** argv) { 

    displayGnuplot(); 

    glutInit(&argc,argv); 
    glutInitWindowSize(1024, 1024); 
    glutInitWindowPosition(1080,10); 
    glutCreateWindow("Continuum Data"); 
    glutDisplayFunc(displayGraph); 

    glutMainLoop(); 
} 

void displayGraph(){ 
    /* 
    Code to display in Glut window that will be updated 
    */ 
} 

void displayGnuplot(){ 

    if(!gnuplotExists){ 
     Gnuplot gp; 
     gnuplotExists = true; 
    } 
    gp << "set xrange [-2:2]\nset yrange [-2:2]\n"; 
    gp << "plot '-' with vectors title 'pts_A', '-' with vectors title 'pts_B'\n"; 
} 
+0

Warum glauben Sie, dass 'gnuplot' OpenGL verwenden kann? – Ripi2

+0

Ich kann sehen, wie mein Code ein wenig verwirrend war, ich habe es aktualisiert, um die Verwendung von GLUT und Gnuplot zu trennen. Ich möchte, dass die Fenster Gnuplot und GLUT beide gleichzeitig angezeigt werden. Sie interagieren nicht wirklich miteinander. –

Antwort

0

ich eine Lösung mit einem anderen C++ Schnittstelle zu Gnuplot, nämlich gnuplot-cpp

#include "gnuplot_i.hpp" //Gnuplot class handles POSIX-Pipe-communikation with Gnuplot 
#include <GL/glut.h> 

void displayGraph(); 
void displayGnuplot(); 
Gnuplot g1("lines"); 

int main(int argc, char** argv) { 

    displayGnuplot(); 

    glutInit(&argc,argv); 
    glutInitWindowSize(1024, 1024); 
    glutInitWindowPosition(1080,10); 
    glutCreateWindow("Continuum Data"); 
    glutDisplayFunc(displayGraph); 

    glutMainLoop(); 
} 

void displayGraph(){ 

} 

void displayGnuplot(){ 

    g1.set_title("Slopes\\nNew Line"); 
    g1.plot_slope(1.0,0.0,"y=x"); 
    g1.plot_slope(2.0,0.0,"y=2x"); 
    g1.plot_slope(-1.0,0.0,"y=-x"); 
    g1.unset_title(); 
    g1.showonscreen(); 
} 
gefunden habe

Diese Lösung funktioniert für mich, da sie gleichzeitig das GLUT- und gnuplot-Fenster anzeigt und beide aktualisiert werden können, wenn der Benutzer Befehle ausgibt.

Verwandte Themen