Консультация № 138607
30.05.2008, 01:13
0.00 руб.
0 1 1
Я вывел на экран окно с двумя маховичками для изменения параметров моей задачи и два поля для ввода двух других параметров. Как взять положение маховичка и передать его в качестве переменной в функцию,которая у меня считает точки графика? Аналогично, как взять то значение, которое я ввожу в поле и передать его в функцию?
На всякий случай приведу текст программы:
#include "TGraphPanel.h"
#include "fltkopt.h"
#include <FL/Fl.H>
#include <math.h>
#include <Fl/Fl_Box.h>
#include <Fl/Fl_Button.h>
#include <FL/Fl_Roller.H>
#include <FL/gl.h>
#include <FL/Fl_Slider.H>
#include <GL/gl.h>
#include <stdlib.h>
#include "MainWindow.h"
#include <FL/Fl_Input.H>

void Exit_Callback(Fl_Widget*, void*)
{
exit(0);
}
double Sinc (double x, double d, int L)
{
double E = 1;
double X[1000];
double Y[1000];
double xmax;
double xmin;

int i;
double* pX;
double* pY;

for (i=0; i<1000; i++)
{
X[i] = xmin+i*(xmax-xmin)/1000;

x = X[i];

if (x != 0)
{
Y[i] = Sinc(x, d, L);
}
else
{
Y[i] = E*E*d*d;
}
}
return Y[i];
pX = &X[i];
pY = &Y[i];
}
void TGraphPanel::draw()
{
static bool bIsFirstTime = true;
if(bIsFirstTime)
{
InitialiseGL();
bIsFirstTime = false;
}

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

for(i=0; i<1000; i++)
{
glBegin(GL_LINES);

glColor3d(0.00f, 0.00f, 1.00f);

glVertex2d(-1.0, -1.0);
glVertex2d(1.0, 1.0);
}
glEnd();
}
int main(int argc, char * argv[])
{
{
MainWindow MyMai

MainWindow MyMainWindow;

Fl_Window *window = MyMainWindow.make_window();

Fl::background(100, 100, 100);

window->begin();

TGraphPanel* pPanel = new TGraphPanel(10, 65, window->w() - 20, window->h() - 140);
Fl_Button* pExitButton = new Fl_Button(370, 570, 60, 30, "OK");
Fl_Roller* pRoller1 = new Fl_Roller(630, 525, 30, 60, "lambda");
Fl_Roller* pRoller2 = new Fl_Roller(170, 525, 30, 60, "L");
Fl_Input* pInput1 = new Fl_Input(170, 20, 60, 30, "Vvod Minimum x");
Fl_Input* pInput2 = new Fl_Input(630, 20, 60, 30, "Vvod Maksimum x");
pExitButton->callback(Exit_Callback);
window->end();
window->resizable(pPanel);
window->show(argc, argv);

return Fl::run();

}
}
Как видите, у меня есть два маховичка, задающиеся классом Fl_Roller. Нужно брать положение каждого из них и передавать в функцию Sinc в качестве параметров d и L, а потом вычисленные ею значения передать в функцию draw(). То же самое нужно сделать с двумя полями xmax и xmin.

Обсуждение

Неизвестный
30.05.2008, 16:30
общий
это ответ
Здравствуйте, Бородин Всеволод Олегович!

Чтобы получить значение маховичка, надо вызвать его метод value().
Например:

pRoller1->value()

Тип возвращаемого значения будет double.
Для полей ввода это будет так:

pInput1->value(char* str)

в str - указатель на текущее значение элемента
Форма ответа