Я работаю над проектом, который должен имитировать многие функции, видимые в Microsoft paint.Для этого я использовал glutMotionFunc для управления кистью, которая рисует заданную форму при перетаскивании мышью.Он меняет цвет, вращается и т. Д. Я хочу иметь возможность циклически менять форму мазка кисти каждый раз, когда я нажимаю «b», но я не смог выполнить итерацию в случае «b», чтобы отследить, сколько раз оно было нажато.
Я также не уверен, что даже если это работает, моя функция mouseMove распознает изменение как мазок кисти.
void keyboard ( unsigned char key, int x, int y )
{
Paint_begin newPaint;
int bPressed = 0;
switch ( key )
{
case 'b':
bPressed=bPressed+1;
newPaint.readyPaint(true);
printf("bPressed: %d\n", bPressed);
newPaint.setShape(bPressed);
break;
//... extra code unrelated to my problem
}
glutPostRedisplay ( );
}
И функция mouseMove (функция движения):
void mouseMove ( int x, int y )
{
Paint_begin paintNew;
if(paintNew.shape==0){
glRecti(x,y, x+paintNew.sizeDraw, y+paintNew.sizeDraw);
}
glFlush();
if(paintNew.shape==1){
glBegin(GL_TRIANGLES);
glVertex2f(x, y+paintNew.sizeDraw);
glVertex2f(x+paintNew.sizeDraw, y);
glVertex2f(x, y);
glEnd();
}
//glutPostRedisplay ( );
}
И класс Paint_begin
class Paint_begin{
public:
static int sizeDraw, readyP, shape;
void readyPaint(int paint){
sizeDraw = 1;
readyP = paint;
shape = 0;
}
void setShape(int shape){
shape = shape;
}
int getShape(){
return shape;
}
};
Прямоугольник работает правильно, но я боюсь, что это только потому, что переменная формы инициализирована равной 0. Отслеживание оператора printf для "bPressed" дает 1,1, 1, независимо от того, сколько раз оно действительно было нажато.