السلام عليكم
اود قبل كل شي ان اشكر زملائي في هذا المنتدى على ما يقدموه من جهد
في المساعده فجزاهم الله كل خير
لا اريد الأطاله عندي طلب لقد قرأت كود برنامج وانا اتصفح الأنترنت
وطبقته وكان تطبيق جميل بصراحه حاولت فهم الكود فلم استطع فهمه
بزبط
فأريد من اصحاب الخبره مساعدتي في فهم هذا الكود ولكم جزيل الشكر انا سأضع الكود كامل
لكن رجائي من اصحاب الخبره تجزئته وشرحه كل جزء على حدى
ليستفيد الجميع ولكم من جزيل الشكر
#include<windows.h>
#include<gl/glut.h>
#include<vector>
//***************
const int item = 0 ;
const int item_COLOR = 1 ;
const int item_LINE = 2 ;
const int item_POINT = 3 ;
const int item_COLOR_YELLOW = 4 ;
const int item_COLOR_RED = 5 ;
const int iteml_1 = 6;
const int iteml_2 = 7;
const int iteml_3 = 8;
const int itempoint_1 = 9;
const int itempoint_2 = 10;
const int itempoint_3 = 11;
int r=255,g=255,b=255;
int state = 0;
int x1,x2;
int y1,y2;
struct LinePosition
{
int x1;
int y1;
int x2;
int y2;
};
struct PointPosition
{
int x;
int y;
};
std::vector<LinePosition> lines;
std::vector<PointPosition> points;
//***************
void render()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslated(0,0,0);
glColor3f(r,g,b);
// ÑÓã ãÑÈÚ
for(int i=lines.size()-1;i>=0;i--)
{
glBegin(GL_LINES);
glVertex2i(lines.x2,lines.y2);
glVertex2i(lines.x1,lines.y1);
glEnd();
}
for(int j=points.size()-1;j>=0;j--)
{
glBegin(GL_POINTS);
glVertex2i(points[j].x,points[j].y);
glEnd();
}
glutSwapBuffers();//áÃäå ÇáÑÓã íÊã Úáì ÇáÓØÍ ÇáÎáÝí äÓÊÏÚí åÐÇ ÇáÃãÑ áÃäå ÈäÞá ÇáÕæÑå áÓØÍ ÇáÃãÇãí æÇäå ÇáåÏÝ ÇáÑÆíÓí ÊÓÑíÚ ÇáÚÑÖ ÚÔÇÔå
}
void menu(int i)
{
switch(i)
{
case item_LINE:
state=0;
break;
case item_POINT:
state=1;
break;
case item_COLOR_YELLOW:
r=255;g=255;b=0;
break;
case item_COLOR_RED:
r=255;g=b=0;
break;
case iteml_1:
glLineWidth(1);
break;
case iteml_2:
glLineWidth(2);
break;
case iteml_3:
glLineWidth(3);
break;
case itempoint_1:
glPointSize(1);
break;
case itempoint_2:
glPointSize(2);
break;
case itempoint_3:
glPointSize(3);
break;
}
glutPostRedisplay(); // update ( !! ãåã ÌÏÇ åÐÇ ÇáÃãÑ !! )
}
void resize(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,h,0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void statu(int a, int b , int c)
{
}
void mouse(int b,int s,int x,int y)
{
if(b == GLUT_LEFT_BUTTON)
{
if(s == GLUT_DOWN)
{
x1 = x;
y1 = y;
}
else
{
x2 = x ;
y2 = y ;
if(state == 0)
{
LinePosition line;
line.x1 = x1;
line.y1 = y1;
line.x2 = x2;
line.y2 = y2;
lines.push_back(line);
}
else if(state == 1)
{
PointPosition point;
point.x = x2;
point.y = y2;
points.push_back(point);
}
}
}
glutPostRedisplay();
}
int main(void)
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB );
glutCreateWindow("Test");
// ÇÖÇÝÉ ÞÇÆãÉ
int sub_1 = glutCreateMenu(menu);
glutAddMenuEntry("LINE",item_LINE);
glutAddMenuEntry("POINT",item_POINT);
int sub_2 = glutCreateMenu(menu);
glutAddMenuEntry("YELLOW",item_COLOR_YELLOW);
glutAddMenuEntry("RED",item_COLOR_RED);
int sub_3 = glutCreateMenu(menu);
glutAddMenuEntry("1",itempoint_1);
glutAddMenuEntry("2",itempoint_2);
glutAddMenuEntry("3",itempoint_3);
int sub_4 = glutCreateMenu(menu);
glutAddMenuEntry("1",iteml_1);
glutAddMenuEntry("2",iteml_2);
glutAddMenuEntry("3",iteml_3);
int main_menu = glutCreateMenu(menu);
glutAddSubMenu("Primative Shapes",sub_1);
glutAddSubMenu("Color",sub_2);
glutAddSubMenu("Point Size",sub_3);
glutAddSubMenu("Line Width",sub_4);
glutAttachMenu(GLUT_RIGHT_BUTTON );
glutMouseFunc(mouse);
//////////////////////////////////
glutDisplayFunc(render);
glutReshapeFunc(resize);
glutMenuStatusFunc(statu);
glutMainLoop();
return 0;
}