codice:
#define MAX_LINE 50
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <STRING.h>
#include <math.h>
#include <GL/glut.h>
typedef struct linea{
int x1,x2,y1,y2;
int color;
} linea;
linea linee[MAX_LINE];
GLfloat colors[6][3]={{1.0, 0.0, 0.0}, {1.0, 1.0, 0.0},{0.0, 1.0, 0.0},
{0.0, 0.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, 0.5, 0.0}};
int in_linee = -1;
GLsizei wh = 500, ww = 500; /* initial window size */
void mydisplay(){
glViewport(0, 0, wh, ww);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
int i;
for(i=0; i<in_linee+1; i++){
glColor3fv(colors[linee[i].color]);
glVertex2i(linee[i].x1 , linee[i].y1);
glVertex2i(linee[i].x2 , linee[i].y2);
}
glEnd();
glFlush();
glutSwapBuffers();
}
void myMotion(int x, int y){
y = wh-y;
linee[in_linee].x2 = x;
linee[in_linee].y2 = y;
glutPostRedisplay();
}
void mymouse(int button, int state, int x, int y){
y = wh-y;
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
in_linee +=1;
linee[in_linee].x1 = x;
linee[in_linee].y1 = y;
linee[in_linee].color = 0;
}
if(button == GLUT_LEFT_BUTTON && state == GLUT_UP){
linee[in_linee].x2 = x;
linee[in_linee].y2 = y;
if(linee[in_linee].x1 == linee[in_linee].x2 && linee[in_linee].y1 == linee[in_linee].y2){
in_linee -= 1;
}
glutPostRedisplay();
}
}
void mykey(unsigned char key, int x, int y){
switch(key){
case 26 :
in_linee = in_linee-1;
if(in_linee <0){
in_linee = -1;
}
break;
}
glutPostRedisplay();
}
void init(){
// colore nero come sfondo
glClearColor (0.0, 0.0, 0.0, 1.0);
// Disegna qualunque cosa di bianco
glColor3f(1.0, 1.0, 1.0);
// Imposta il volume della vista
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluOrtho2D(0, wh, 0, ww);
}
void demo_menu(int id)
{
switch (id) {
case 1:
exit(0);
break;
case 2:
linee[in_linee].color= glColor3fv(colors[linee[i].color]);
break;
case 3:
linee[in_linee].color= glColor3fv(colors[linee[i].color]);
break;
case 4:
linee[in_linee].color = glColor3fv(colors[linee[i].color]);
break;
case 5:
linee[in_linee].color = glColor3fv(colors[linee[i].color]);
break;
case 6:
linee[in_linee].color = glColor3fv(colors[linee[i].color]);
break;
default:
break;
}
glutPostRedisplay();
}
int main(int argc, char** argv){
glutInit(&argc,argv);
// Definiamo le proprietà della finestra
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(wh,ww);
glutInitWindowPosition(0,0);
glutCreateWindow("simple");
glutDisplayFunc(mydisplay);
//glutIdleFunc(myidle);
glutCreateMenu(demo_menu);
glutAddMenuEntry("quit",1);
glutAddMenuEntry("Colore Giallo",2);
glutAddMenuEntry("Colore Verde",3);
glutAddMenuEntry("Colore Blu",4);
glutAddMenuEntry("Colore Bianco",5);
glutAddMenuEntry("Colore Arancione",6);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMouseFunc(mymouse);
glutMotionFunc(myMotion);
glutKeyboardFunc(mykey);
// Inizializziamo le variabili di stato di OpenGL
init();
// Entriamo nel ciclo di rendering
glutMainLoop();
}