jdm 0 Junior Poster in Training

I'm working on a program that lets the user draw squares or circles in any size (as long as it fits the window) and in a selection of color. I want to limit the number of objects that the user can draw to 10 and be able to select, move, or delete an object. I'm having trouble with the array and counter aspect of the program. I would appreciate any help.

Sincerely yours;

jdm

using namespace std;

#include <iostream>
#include <GLUT/glut.h>
#include <cmath>

int minsquaresize = 10;
int maxsquaresize = 100;
int currentsize = 10;
int xA,yA,xB,yB;
int looprun = 0;

void myMouse(int,int, int, int);
void myDisplay();
void myReshape(int, int);
void myinit();

double PI = 3.14159;

bool square = true;
bool circle = false;
bool drawSquare = true;
bool drawCircle = false;


GLsizei winheight = 500, winwidth = 500; /* initial window size */

void myDisplay()
{
	glFlush();
}

void myReshape(int w, int h)
{       
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity(); 
	gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity(); 
	
	winheight = h;
	winwidth = w;
	
	glutPostRedisplay();
}

void myinit()
{       
	/* set clear color to grey */
	glClearColor(0.75, 0.75, 0.75, 1.0);
	glutSetCursor(GLUT_CURSOR_CROSSHAIR);
	
}
void drawbox(int x, int y, int x1, int y1)
{ 
	glBegin(GL_POLYGON);
	
	glVertex2f(x, y);
	glVertex2f(x, y1);
	glVertex2f(x1, y1);
	glVertex2f(x1, y);
	
	glEnd();
	glFlush();
}

void glCircle3i(GLint x, GLint y, GLint x1, GLint y1)
{ 
	int radius = sqrt(fabs(((x1-x)*(x1-x))+((y1-y)*(y1-y))));
	
	glPushMatrix(); 
	glLoadIdentity(); 
	glDisable(GL_TEXTURE_2D); 
	glLineWidth(1.0f); 
	glBegin(GL_POLYGON); 
	
	float xmod, ymod, step = PI / (4* radius); //don't compute much more than is necessary for a solid circle
	
	for(float theta = 0; theta <= PI/4; theta += step)
	{
		xmod = (cos(theta) * radius);
		ymod = (sin(theta) * radius);
		
		//create solids by vertices
		glVertex2f(x + xmod, y - ymod); 
		
		//and using glpolygon for filling
		glVertex2f(x + xmod, y + ymod); 
		glVertex2f(x - xmod, y - ymod);
		glVertex2f(x - xmod, y + ymod); 
		
		//reflect points through the center and over a 45 degree (PI/4) diagonal
		glVertex2f(x + ymod, y - xmod); 
		
		//for 1/2 loop time
		glVertex2f(x + ymod, y + xmod); 
		glVertex2f(x - ymod, y - xmod);
		glVertex2f(x - ymod, y + xmod); 
	}
	
	glEnd();
	glFlush();
	glEnable(GL_TEXTURE_2D); 
	glPopMatrix(); 
}

void myMouse(int btn, int state, int x, int y)
{   
	y = winheight - y;
    
	switch(btn)
    {
		case GLUT_LEFT_BUTTON:
			if (state == GLUT_DOWN)
			{
                if(looprun == 0)
                {
                    xA = x;
                    yA = y;
                    looprun++;
                }
                
				else if(looprun == 1)
                {
                    xB = x;
                    yB = y;
					
                    if(drawSquare)
                        drawbox(xA, yA, xB, yB);
                    
					else if(drawCircle)
                        glCircle3i(xA, yA, xB, yB);
                    
					looprun = 0;
                }
			}
			break;
    }
}	

void mainmenu(int id)
{
	switch (id)
	{
		case 1: 
			drawCircle = true;
			drawSquare = false;
			break;
		
		case 2:
			drawSquare = true;
			drawCircle = false;
			break;
		
		case 3: glClear(GL_COLOR_BUFFER_BIT); 
			glFlush();
			break;
		
		case 4: exit(0);
	}

}

void color_menu(int id)
{ switch(id)
	{
			//Violet
		case 1: glColor3ub(255, 62, 150); 
			break;   
			
			//Indigo
		case 2: glColor3ub( 75, 0, 130); 
			break;    
			
			//Blue
		case 3: glColor3ub(0,0,255); 
			break;       
			
			//Green
		case 4: glColor3ub(0,255,0); 
			break;       
			
			// Yellow
		case 5: glColor3ub(255, 255, 0); 
			break;    
			
			// Orange
		case 6: glColor3ub(255, 165, 0); 
			break;    
			
			// Red
		case 7: glColor3ub(255,0,0); 
			break;       
			
			// White
		case 8: glColor3ub(255,255,255); 
			break;   
			
			//Black
		case 9: glColor3ub(0,0,0); 
			break;    
	}

}

int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(winwidth, winheight);
    glutCreateWindow("Basic Menu and Mouse Functions");
    glutDisplayFunc(myDisplay);
    
	int cmenu = glutCreateMenu(color_menu);
    
	glutAddMenuEntry("Violet",1);
	glutAddMenuEntry("Indigo",2);
    glutAddMenuEntry("Blue",3);
	glutAddMenuEntry("Green",4);
	glutAddMenuEntry("Yellow",5);
	glutAddMenuEntry("Orange",6);
    glutAddMenuEntry("Red",7);
	glutAddMenuEntry("White",8);
	glutAddMenuEntry("Black",9);
    
	glutCreateMenu(mainmenu);
	
	glutAddMenuEntry("Make Circles", 1);
	glutAddMenuEntry("Make Squares", 2);
    
	glutAddSubMenu("Colors",cmenu);
    glutAddMenuEntry("Clear",3);
    glutAddMenuEntry("Quit",4);
    
	glutAttachMenu(GLUT_RIGHT_BUTTON);    
    
	myinit ();
    
	glutReshapeFunc(myReshape); 
    glutMouseFunc (myMouse);
    glClear(GL_COLOR_BUFFER_BIT);
    glutMainLoop();
}