Окно GLUT и gnuplot не отображаются одновременно

У меня есть следующие функции, целью которых является отображение окна GLUT с трехмерным объектом и окна Gnuplot для отображения графика.

Для этого я использую Интерфейс Gnuplot-Iostream. Код графика находится внутри функции, так как он будет обновляться при вводе пользователем с клавиатуры.

Следующий код будет отображать окно Gnuplot только после того, как я закрою окно GLUT:

#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";
}

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

Я также попытался поставить условие создания окна Gnuplot безрезультатно:

#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

Решение

Я нашел решение, использующее другой интерфейс C ++ для Gnuplot, а именно Gnuplot-каст

#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();
}

Это решение работает для меня, так как оно отображает одновременно окна GLUT и gnuplot, и оба могут быть обновлены, когда пользователь выполняет команды.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]